Newer
Older
<?php
// $Id$
/**
* Implementation of hook_install().
*/
function wysiwyg_install() {
switch ($GLOBALS['db_type']) {
case 'mysql':
case 'mysqli':
Daniel Kudwien
committed
db_query("CREATE TABLE {wysiwyg} (
format int NOT NULL default '0',
editor varchar(128) NOT NULL default '',
settings text,
Daniel Kudwien
committed
PRIMARY KEY (format)
) /*!40100 DEFAULT CHARACTER SET utf8 */");
break;
case 'pgsql':
Daniel Kudwien
committed
db_query("CREATE TABLE {wysiwyg} (
format int NOT NULL default '0',
editor varchar(128) NOT NULL default '',
settings text,
Daniel Kudwien
committed
PRIMARY KEY (format)
)");
break;
}
Daniel Kudwien
committed
// Import settings from old editor modules.
wysiwyg_migrate_tinymce();
}
/**
* Implementation of hook_uninstall()
*/
function wysiwyg_uninstall() {
Daniel Kudwien
committed
db_query('DROP TABLE {wysiwyg}');
}
/**
* Migrate from TinyMCE.
*/
function wysiwyg_migrate_tinymce() {
if (db_table_exists('tinymce_settings')) {
$schema = db_result(db_query("SELECT schema_version FROM {system} WHERE name = 'tinymce'"));
if ($schema >= 1) {
// Migrate profile configurations.
Daniel Kudwien
committed
$profiles = db_query("SELECT settings FROM {tinymce_settings}");
while ($profile = db_fetch_array($profiles)) {
$settings = unserialize($profile['settings']);
Daniel Kudwien
committed
// Convert buttons/plugins into an associative array.
$old_buttons = (isset($settings['buttons']) ? $settings['buttons'] : array());
$settings['buttons'] = array();
foreach ($old_buttons as $old_button => $enabled) {
list($plugin, $button) = explode('-', $old_button, 2);
$settings['buttons'][$plugin][$button] = 1;
}
foreach (_wysiwyg_install_get_formats() as $format => $name) {
// We can't use update_sql() here because of curly braces in serialized
// array.
Daniel Kudwien
committed
db_query("INSERT INTO {wysiwyg} (format, editor, settings) VALUES (%d, 'tinymce', '%s')", $format, serialize($settings));
Daniel Kudwien
committed
// We can only migrate one profile.
break;
}
// Disable TinyMCE module.
module_disable(array('tinymce'));
drupal_set_message('TinyMCE module can be safely uninstalled now.');
}
else {
drupal_set_message('To migrate your existing TinyMCE settings to Wysiwyg Editor, please update TinyMCE module to the latest official release, and re-install Wysiwyg Editor module.');
}
}
}
Daniel Kudwien
committed
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
/**
* Retrieve a list of input formats to associate profiles to.
*/
function _wysiwyg_install_get_formats() {
$formats = array();
$result = db_query("SELECT format, name FROM {filter_formats}");
while ($format = db_fetch_object($result)) {
// Build a list of all formats.
$formats[$format->format] = $format->name;
// Fetch filters.
$result2 = db_query("SELECT module, delta FROM {filters} WHERE format = %d", $format->format);
while ($filter = db_fetch_object($result2)) {
// If PHP filter is enabled, remove this format.
if ($filter->module == 'filter' && $filter->delta == 1) {
unset($formats[$format->format]);
break;
}
}
}
return $formats;
}
/**
* Associate Wysiwyg profiles with input formats.
*
* Since there was no association yet, we can only assume that there is one
* profile only, and that profile must be duplicated and assigned to all input
* formats (except PHP code format). Also, input formats already have
* titles/names, so Wysiwyg profiles do not need an own.
*
* Because input formats are already granted to certain user roles only, we can
* remove our custom Wysiwyg profile permissions. A 1:1 relationship between
* input formats and permissions makes plugin_count obsolete, too.
*
* Since the resulting table is completely different, a new schema is installed.
*/
function wysiwyg_update_5001() {
$ret = array();
if (db_table_exists('wysiwyg')) {
return $ret;
}
// Install new schema.
switch ($GLOBALS['db_type']) {
case 'mysql':
case 'mysqli':
$ret[] = update_sql("CREATE TABLE {wysiwyg} (
format int NOT NULL default '0',
editor varchar(128) NOT NULL default '',
settings text,
PRIMARY KEY (format)
) /*!40100 DEFAULT CHARACTER SET utf8 */");
break;
case 'pgsql':
$ret[] = update_sql("CREATE TABLE {wysiwyg} (
format int NOT NULL default '0',
editor varchar(128) NOT NULL default '',
settings text,
PRIMARY KEY (format)
)");
break;
}
// Fetch all input formats.
$formats = _wysiwyg_install_get_formats();
// Fetch all profiles.
$result = db_query("SELECT name, settings FROM {wysiwyg_profile}");
while ($profile = db_fetch_object($result)) {
$profile->settings = unserialize($profile->settings);
// Extract editor name from profile settings.
$profile->editor = $profile->settings['editor'];
// Clean-up.
unset($profile->settings['editor']);
unset($profile->settings['old_name']);
unset($profile->settings['name']);
unset($profile->settings['rids']);
// Sorry. There Can Be Only One. ;)
break;
}
if ($profile) {
// Rebuild profiles and associate with input formats.
foreach ($formats as $format => $name) {
// Insert profiles.
// We can't use update_sql() here because of curly braces in serialized
// array.
db_query("INSERT INTO {wysiwyg} (format, editor, settings) VALUES (%d, '%s', '%s')", $format, $profile->editor, serialize($profile->settings));
$ret[] = array(
'success' => TRUE,
'query' => strtr('Wysiwyg profile %profile converted and associated with input format %format.', array('%profile' => check_plain($profile->name), '%format' => check_plain($name))),
Daniel Kudwien
committed
);
}
}
// Drop obsolete tables {wysiwyg_profile} and {wysiwyg_role}.
$ret[] = update_sql("DROP TABLE {wysiwyg_profile}");
$ret[] = update_sql("DROP TABLE {wysiwyg_role}");
return $ret;
}