danielebarchiesi@0: 'Stores Wysiwyg profiles.', danielebarchiesi@0: 'fields' => array( danielebarchiesi@0: 'format' => array( danielebarchiesi@0: 'description' => 'The {filter_format}.format of the text format.', danielebarchiesi@0: 'type' => 'varchar', danielebarchiesi@0: 'length' => 255, danielebarchiesi@0: // Primary keys are implicitly not null. danielebarchiesi@0: 'not null' => TRUE, danielebarchiesi@0: ), danielebarchiesi@0: 'editor' => array( danielebarchiesi@0: 'description' => 'Internal name of the editor attached to the text format.', danielebarchiesi@0: 'type' => 'varchar', danielebarchiesi@0: 'length' => 128, danielebarchiesi@0: 'not null' => TRUE, danielebarchiesi@0: 'default' => '', danielebarchiesi@0: ), danielebarchiesi@0: 'settings' => array( danielebarchiesi@0: 'description' => 'Configuration settings for the editor.', danielebarchiesi@0: 'type' => 'text', danielebarchiesi@0: 'size' => 'normal', danielebarchiesi@0: 'serialize' => TRUE, danielebarchiesi@0: ), danielebarchiesi@0: ), danielebarchiesi@0: 'primary key' => array('format'), danielebarchiesi@0: 'foreign keys' => array( danielebarchiesi@0: 'format' => array( danielebarchiesi@0: 'table' => 'filter_format', danielebarchiesi@0: 'columns' => array('format' => 'format'), danielebarchiesi@0: ), danielebarchiesi@0: ), danielebarchiesi@0: ); danielebarchiesi@0: $schema['wysiwyg_user'] = array( danielebarchiesi@0: 'description' => 'Stores user preferences for wysiwyg profiles.', danielebarchiesi@0: 'fields' => array( danielebarchiesi@0: 'uid' => array( danielebarchiesi@0: 'description' => 'The {users}.uid of the user.', danielebarchiesi@0: 'type' => 'int', danielebarchiesi@0: 'unsigned' => TRUE, danielebarchiesi@0: 'not null' => TRUE, danielebarchiesi@0: 'default' => 0, danielebarchiesi@0: ), danielebarchiesi@0: 'format' => array( danielebarchiesi@0: 'description' => 'The {filter_format}.format of the text format.', danielebarchiesi@0: 'type' => 'varchar', danielebarchiesi@0: 'length' => 255, danielebarchiesi@0: 'not null' => FALSE, danielebarchiesi@0: ), danielebarchiesi@0: 'status' => array( danielebarchiesi@0: 'description' => 'Boolean indicating whether the format is enabled by default.', danielebarchiesi@0: 'type' => 'int', danielebarchiesi@0: 'unsigned' => TRUE, danielebarchiesi@0: 'not null' => TRUE, danielebarchiesi@0: 'default' => 0, danielebarchiesi@0: 'size' => 'tiny', danielebarchiesi@0: ), danielebarchiesi@0: ), danielebarchiesi@0: 'indexes' => array( danielebarchiesi@0: 'uid' => array('uid'), danielebarchiesi@0: 'format' => array('format'), danielebarchiesi@0: ), danielebarchiesi@0: 'foreign keys' => array( danielebarchiesi@0: 'uid' => array( danielebarchiesi@0: 'table' => 'users', danielebarchiesi@0: 'columns' => array('uid' => 'uid'), danielebarchiesi@0: ), danielebarchiesi@0: 'format' => array( danielebarchiesi@0: 'table' => 'filter_format', danielebarchiesi@0: 'columns' => array('format' => 'format'), danielebarchiesi@0: ), danielebarchiesi@0: ), danielebarchiesi@0: ); danielebarchiesi@0: return $schema; danielebarchiesi@0: } danielebarchiesi@0: danielebarchiesi@0: /** danielebarchiesi@0: * Implementation of hook_enable(). danielebarchiesi@0: */ danielebarchiesi@0: function wysiwyg_enable() { danielebarchiesi@0: // Disable conflicting, obsolete editor integration modules whenever this danielebarchiesi@0: // module is enabled. This is crude, but the only way to ensure no conflicts. danielebarchiesi@0: module_disable(array( danielebarchiesi@0: 'ckeditor', danielebarchiesi@0: 'editarea', danielebarchiesi@0: 'editonpro', danielebarchiesi@0: 'editor', danielebarchiesi@0: 'fckeditor', danielebarchiesi@0: 'freerte', danielebarchiesi@0: 'htmlarea', danielebarchiesi@0: 'htmlbox', danielebarchiesi@0: 'jwysiwyg', danielebarchiesi@0: 'markitup', danielebarchiesi@0: 'nicedit', danielebarchiesi@0: 'openwysiwyg', danielebarchiesi@0: 'pegoeditor', danielebarchiesi@0: 'quicktext', danielebarchiesi@0: 'tinymce', danielebarchiesi@0: 'tinymce_autoconf', danielebarchiesi@0: 'tinytinymce', danielebarchiesi@0: 'whizzywig', danielebarchiesi@0: 'widgeditor', danielebarchiesi@0: 'wymeditor', danielebarchiesi@0: 'xstandard', danielebarchiesi@0: 'yui_editor', danielebarchiesi@0: )); danielebarchiesi@0: } danielebarchiesi@0: danielebarchiesi@0: /** danielebarchiesi@0: * Implements hook_update_dependencies(). danielebarchiesi@0: */ danielebarchiesi@0: function wysiwyg_update_dependencies() { danielebarchiesi@0: // Ensure that format columns are only changed after Filter module has changed danielebarchiesi@0: // the primary records. danielebarchiesi@0: $dependencies['wysiwyg'][7000] = array( danielebarchiesi@0: 'filter' => 7010, danielebarchiesi@0: ); danielebarchiesi@0: danielebarchiesi@0: return $dependencies; danielebarchiesi@0: } danielebarchiesi@0: danielebarchiesi@0: /** danielebarchiesi@0: * Retrieve a list of input formats to associate profiles to. danielebarchiesi@0: */ danielebarchiesi@0: function _wysiwyg_install_get_formats() { danielebarchiesi@0: $formats = array(); danielebarchiesi@0: $result = db_query("SELECT format, name FROM {filter_formats}"); danielebarchiesi@0: while ($format = db_fetch_object($result)) { danielebarchiesi@0: // Build a list of all formats. danielebarchiesi@0: $formats[$format->format] = $format->name; danielebarchiesi@0: // Fetch filters. danielebarchiesi@0: $result2 = db_query("SELECT module, delta FROM {filters} WHERE format = %d", $format->format); danielebarchiesi@0: while ($filter = db_fetch_object($result2)) { danielebarchiesi@0: // If PHP filter is enabled, remove this format. danielebarchiesi@0: if ($filter->module == 'php') { danielebarchiesi@0: unset($formats[$format->format]); danielebarchiesi@0: break; danielebarchiesi@0: } danielebarchiesi@0: } danielebarchiesi@0: } danielebarchiesi@0: return $formats; danielebarchiesi@0: } danielebarchiesi@0: danielebarchiesi@0: /** danielebarchiesi@0: * Associate Wysiwyg profiles with input formats. danielebarchiesi@0: * danielebarchiesi@0: * Since there was no association yet, we can only assume that there is one danielebarchiesi@0: * profile only, and that profile must be duplicated and assigned to all input danielebarchiesi@0: * formats (except PHP code format). Also, input formats already have danielebarchiesi@0: * titles/names, so Wysiwyg profiles do not need an own. danielebarchiesi@0: * danielebarchiesi@0: * Because input formats are already granted to certain user roles only, we can danielebarchiesi@0: * remove our custom Wysiwyg profile permissions. A 1:1 relationship between danielebarchiesi@0: * input formats and permissions makes plugin_count obsolete, too. danielebarchiesi@0: * danielebarchiesi@0: * Since the resulting table is completely different, a new schema is installed. danielebarchiesi@0: */ danielebarchiesi@0: function wysiwyg_update_6001() { danielebarchiesi@0: $ret = array(); danielebarchiesi@0: if (db_table_exists('wysiwyg')) { danielebarchiesi@0: return $ret; danielebarchiesi@0: } danielebarchiesi@0: // Install new schema. danielebarchiesi@0: db_create_table($ret, 'wysiwyg', array( danielebarchiesi@0: 'fields' => array( danielebarchiesi@0: 'format' => array('type' => 'int', 'not null' => TRUE, 'default' => 0), danielebarchiesi@0: 'editor' => array('type' => 'varchar', 'length' => 128, 'not null' => TRUE, 'default' => ''), danielebarchiesi@0: 'settings' => array('type' => 'text', 'size' => 'normal'), danielebarchiesi@0: ), danielebarchiesi@0: 'primary key' => array('format'), danielebarchiesi@0: )); danielebarchiesi@0: danielebarchiesi@0: // Fetch all input formats. danielebarchiesi@0: $formats = _wysiwyg_install_get_formats(); danielebarchiesi@0: danielebarchiesi@0: // Fetch all profiles. danielebarchiesi@0: $result = db_query("SELECT name, settings FROM {wysiwyg_profile}"); danielebarchiesi@0: while ($profile = db_fetch_object($result)) { danielebarchiesi@0: $profile->settings = unserialize($profile->settings); danielebarchiesi@0: // Extract editor name from profile settings. danielebarchiesi@0: $profile->editor = $profile->settings['editor']; danielebarchiesi@0: // Clean-up. danielebarchiesi@0: unset($profile->settings['editor']); danielebarchiesi@0: unset($profile->settings['old_name']); danielebarchiesi@0: unset($profile->settings['name']); danielebarchiesi@0: unset($profile->settings['rids']); danielebarchiesi@0: // Sorry. There Can Be Only One. ;) danielebarchiesi@0: break; danielebarchiesi@0: } danielebarchiesi@0: danielebarchiesi@0: if ($profile) { danielebarchiesi@0: // Rebuild profiles and associate with input formats. danielebarchiesi@0: foreach ($formats as $format => $name) { danielebarchiesi@0: // Insert profiles. danielebarchiesi@0: // We can't use update_sql() here because of curly braces in serialized danielebarchiesi@0: // array. danielebarchiesi@0: db_query("INSERT INTO {wysiwyg} (format, editor, settings) VALUES (%d, '%s', '%s')", $format, $profile->editor, serialize($profile->settings)); danielebarchiesi@0: $ret[] = array( danielebarchiesi@0: 'success' => TRUE, danielebarchiesi@0: 'query' => strtr('Wysiwyg profile %profile converted and associated with input format %format.', array('%profile' => check_plain($profile->name), '%format' => check_plain($name))), danielebarchiesi@0: ); danielebarchiesi@0: } danielebarchiesi@0: } danielebarchiesi@0: danielebarchiesi@0: // Drop obsolete tables {wysiwyg_profile} and {wysiwyg_role}. danielebarchiesi@0: db_drop_table($ret, 'wysiwyg_profile'); danielebarchiesi@0: db_drop_table($ret, 'wysiwyg_role'); danielebarchiesi@0: danielebarchiesi@0: return $ret; danielebarchiesi@0: } danielebarchiesi@0: danielebarchiesi@0: /** danielebarchiesi@0: * Clear JS/CSS caches to ensure that clients load fresh copies. danielebarchiesi@0: */ danielebarchiesi@0: function wysiwyg_update_6200() { danielebarchiesi@0: $ret = array(); danielebarchiesi@0: // Change query-strings on css/js files to enforce reload for all users. danielebarchiesi@0: _drupal_flush_css_js(); danielebarchiesi@0: danielebarchiesi@0: drupal_clear_css_cache(); danielebarchiesi@0: drupal_clear_js_cache(); danielebarchiesi@0: danielebarchiesi@0: // Rebuild the menu to remove old admin/settings/wysiwyg/profile item. danielebarchiesi@0: menu_rebuild(); danielebarchiesi@0: danielebarchiesi@0: // Flush content caches. danielebarchiesi@0: cache_clear_all(); danielebarchiesi@0: danielebarchiesi@0: $ret[] = array( danielebarchiesi@0: 'success' => TRUE, danielebarchiesi@0: 'query' => 'Caches have been flushed.', danielebarchiesi@0: ); danielebarchiesi@0: return $ret; danielebarchiesi@0: } danielebarchiesi@0: danielebarchiesi@0: /** danielebarchiesi@0: * Change {wysiwyg}.format into a string. danielebarchiesi@0: */ danielebarchiesi@0: function wysiwyg_update_7000() { danielebarchiesi@0: db_drop_primary_key('wysiwyg'); danielebarchiesi@0: db_change_field('wysiwyg', 'format', 'format', array( danielebarchiesi@0: 'type' => 'varchar', danielebarchiesi@0: 'length' => 255, danielebarchiesi@0: 'not null' => TRUE, danielebarchiesi@0: )); danielebarchiesi@0: db_add_primary_key('wysiwyg', array('format')); danielebarchiesi@0: } danielebarchiesi@0: danielebarchiesi@0: /** danielebarchiesi@0: * Create the {wysiwyg_user} table. danielebarchiesi@0: */ danielebarchiesi@0: function wysiwyg_update_7200() { danielebarchiesi@0: if (!db_table_exists('wysiwyg_user')) { danielebarchiesi@0: db_create_table('wysiwyg_user', array( danielebarchiesi@0: 'description' => 'Stores user preferences for wysiwyg profiles.', danielebarchiesi@0: 'fields' => array( danielebarchiesi@0: 'uid' => array( danielebarchiesi@0: 'description' => 'The {users}.uid of the user.', danielebarchiesi@0: 'type' => 'int', danielebarchiesi@0: 'unsigned' => TRUE, danielebarchiesi@0: 'not null' => TRUE, danielebarchiesi@0: 'default' => 0, danielebarchiesi@0: ), danielebarchiesi@0: 'format' => array( danielebarchiesi@0: 'description' => 'The {filter_format}.format of the text format.', danielebarchiesi@0: 'type' => 'varchar', danielebarchiesi@0: 'length' => 255, danielebarchiesi@0: 'not null' => FALSE, danielebarchiesi@0: ), danielebarchiesi@0: 'status' => array( danielebarchiesi@0: 'description' => 'Boolean indicating whether the format is enabled by default.', danielebarchiesi@0: 'type' => 'int', danielebarchiesi@0: 'unsigned' => TRUE, danielebarchiesi@0: 'not null' => TRUE, danielebarchiesi@0: 'default' => 0, danielebarchiesi@0: 'size' => 'tiny', danielebarchiesi@0: ), danielebarchiesi@0: ), danielebarchiesi@0: 'indexes' => array( danielebarchiesi@0: 'uid' => array('uid'), danielebarchiesi@0: 'format' => array('format'), danielebarchiesi@0: ), danielebarchiesi@0: 'foreign keys' => array( danielebarchiesi@0: 'uid' => array( danielebarchiesi@0: 'table' => 'users', danielebarchiesi@0: 'columns' => array('uid' => 'uid'), danielebarchiesi@0: ), danielebarchiesi@0: 'format' => array( danielebarchiesi@0: 'table' => 'filter_format', danielebarchiesi@0: 'columns' => array('format' => 'format'), danielebarchiesi@0: ), danielebarchiesi@0: ), danielebarchiesi@0: )); danielebarchiesi@0: } danielebarchiesi@0: else { danielebarchiesi@0: db_change_field('wysiwyg_user', 'format', 'format', array( danielebarchiesi@0: 'description' => 'The {filter_format}.format of the text format.', danielebarchiesi@0: 'type' => 'varchar', danielebarchiesi@0: 'length' => 255, danielebarchiesi@0: 'not null' => FALSE, danielebarchiesi@0: )); danielebarchiesi@0: } danielebarchiesi@0: }