Newer
Older
<?php
// $Id$
/**
* @file
* Installation functions for Wysiwyg module.
*/
/**
* Implementation of hook_schema().
*/
function wysiwyg_schema() {
Daniel Kudwien
committed
$schema['wysiwyg'] = array(
Daniel Kudwien
committed
'description' => 'Stores Wysiwyg profiles.',
'fields' => array(
'description' => 'The {filter_format}.format of the text format.',
'type' => 'varchar',
'length' => 255,
Daniel Kudwien
committed
// Primary keys are implicitly not null.
'not null' => TRUE,
),
'editor' => array(
'description' => 'Internal name of the editor attached to the text format.',
'type' => 'varchar',
'length' => 128,
'not null' => TRUE,
'default' => '',
),
'settings' => array(
'description' => 'Configuration settings for the editor.',
'type' => 'text',
'size' => 'normal',
),
Daniel Kudwien
committed
'primary key' => array('format'),
'foreign keys' => array(
'format' => array(
Daniel Kudwien
committed
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
'table' => 'filter_format',
'columns' => array('format' => 'format'),
),
),
);
$schema['wysiwyg_user'] = array(
'description' => 'Stores user preferences for wysiwyg profiles.',
'fields' => array(
'uid' => array(
'description' => 'The {users}.uid of the user.',
'type' => 'int',
'unsigned' => TRUE,
'not null' => TRUE,
'default' => 0,
),
'format' => array(
'description' => 'The {filter_format}.format of the text format.',
'type' => 'varchar',
'length' => 255,
'not null' => FALSE,
),
'status' => array(
'description' => 'Boolean indicating whether the format is enabled by default.',
'type' => 'int',
'unsigned' => TRUE,
'not null' => TRUE,
'default' => 0,
'size' => 'tiny',
),
),
'indexes' => array(
'uid' => array('uid'),
'format' => array('format'),
),
'foreign keys' => array(
'uid' => array(
'table' => 'users',
'columns' => array('uid' => 'uid'),
),
'format' => array(
'table' => 'filter_format',
'columns' => array('format' => 'format'),
),
),
);
return $schema;
}
/**
Daniel Kudwien
committed
* Implementation of hook_enable().
Daniel Kudwien
committed
function wysiwyg_enable() {
// Disable conflicting, obsolete editor integration modules whenever this
// module is enabled. This is crude, but the only way to ensure no conflicts.
module_disable(array(
Daniel Kudwien
committed
'editarea',
'editonpro',
'editor',
'fckeditor',
'freerte',
'htmlarea',
'htmlbox',
'jwysiwyg',
'markitup',
'nicedit',
'openwysiwyg',
'pegoeditor',
'quicktext',
'tinymce',
'tinymce_autoconf',
'tinytinymce',
'whizzywig',
'widgeditor',
'wymeditor',
'xstandard',
'yui_editor',
));
}
/**
* Implements hook_update_dependencies().
*/
function wysiwyg_update_dependencies() {
// Ensure that format columns are only changed after Filter module has changed
// the primary records.
$dependencies['wysiwyg'][7000] = array(
'filter' => 7010,
);
return $dependencies;
}
Daniel Kudwien
committed
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
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
/**
* 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 == 'php') {
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_6001() {
$ret = array();
if (db_table_exists('wysiwyg')) {
return $ret;
}
// Install new schema.
db_create_table($ret, 'wysiwyg', array(
'fields' => array(
'format' => array('type' => 'int', 'not null' => TRUE, 'default' => 0),
'editor' => array('type' => 'varchar', 'length' => 128, 'not null' => TRUE, 'default' => ''),
'settings' => array('type' => 'text', 'size' => 'normal'),
),
'primary key' => array('format'),
));
// 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}.
db_drop_table($ret, 'wysiwyg_profile');
db_drop_table($ret, 'wysiwyg_role');
return $ret;
}
Daniel Kudwien
committed
/**
* Clear JS/CSS caches to ensure that clients load fresh copies.
*/
function wysiwyg_update_6200() {
$ret = array();
// Change query-strings on css/js files to enforce reload for all users.
_drupal_flush_css_js();
drupal_clear_css_cache();
drupal_clear_js_cache();
// Rebuild the menu to remove old admin/settings/wysiwyg/profile item.
menu_rebuild();
// Flush content caches.
cache_clear_all();
$ret[] = array(
'success' => TRUE,
'query' => 'Caches have been flushed.',
);
return $ret;
}
/**
* Change {wysiwyg}.format into a string.
*/
function wysiwyg_update_7000() {
db_drop_primary_key('wysiwyg');
db_change_field('wysiwyg', 'format', 'format', array(
'type' => 'varchar',
'length' => 255,
'not null' => TRUE,
));
db_add_primary_key('wysiwyg', array('format'));
}
Daniel Kudwien
committed
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
/**
* Create the {wysiwyg_user} table.
*/
function wysiwyg_update_7200() {
if (!db_table_exists('wysiwyg_user')) {
db_create_table('wysiwyg_user', array(
'description' => 'Stores user preferences for wysiwyg profiles.',
'fields' => array(
'uid' => array(
'description' => 'The {users}.uid of the user.',
'type' => 'int',
'unsigned' => TRUE,
'not null' => TRUE,
'default' => 0,
),
'format' => array(
'description' => 'The {filter_format}.format of the text format.',
'type' => 'varchar',
'length' => 255,
'not null' => FALSE,
),
'status' => array(
'description' => 'Boolean indicating whether the format is enabled by default.',
'type' => 'int',
'unsigned' => TRUE,
'not null' => TRUE,
'default' => 0,
'size' => 'tiny',
),
),
'indexes' => array(
'uid' => array('uid'),
'format' => array('format'),
),
'foreign keys' => array(
'uid' => array(
'table' => 'users',
'columns' => array('uid' => 'uid'),
),
'format' => array(
'table' => 'filter_format',
'columns' => array('format' => 'format'),
),
),
));
}
else {
db_change_field('wysiwyg_user', 'format', 'format', array(
'description' => 'The {filter_format}.format of the text format.',
'type' => 'varchar',
'length' => 255,
'not null' => FALSE,
));
}
}