You are here

function wysiwyg_update_6001 in Wysiwyg 6

Same name and namespace in other branches
  1. 6.2 wysiwyg.install \wysiwyg_update_6001()

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.

File

./wysiwyg.install, line 108

Code

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),
        )),
      );
    }
  }

  // Drop obsolete tables {wysiwyg_profile} and {wysiwyg_role}.
  db_drop_table($ret, 'wysiwyg_profile');
  db_drop_table($ret, 'wysiwyg_role');
  return $ret;
}