You are here

function synonyms_update_7102 in Synonyms 7

Multiple adjustments in the internal structures of the module.

Unlock the 'synonyms_synonyms' field, because Synonyms module no longer uses it. Create 'synonyms_settings' table. Enable 'synonyms_search' module if the core Search module is enabled. Enable all available behaviors on all "source of synonyms" fields with the default settings.

File

./synonyms.install, line 134
Install, update, and uninstall functions for the Synonyms module.

Code

function synonyms_update_7102() {
  $field = field_info_field('synonyms_synonyms');
  if ($field !== NULL) {
    $field['locked'] = FALSE;
    field_update_field($field);
  }
  db_create_table('synonyms_settings', array(
    'description' => 'Stores synonyms settings for all the entities and fields. Only enabled synonyms behaviors are included in this table.',
    'fields' => array(
      'instance_id' => array(
        'description' => 'Reference to {field_config_instance}.id of the instance, whose synonyms settings are stored in this row.',
        'type' => 'int',
        'not null' => TRUE,
        'unsigned' => TRUE,
      ),
      'behavior' => array(
        'description' => 'Name of the synonyms behavior (ctools plugin), whose settings are stored in this row.',
        'type' => 'varchar',
        'length' => 255,
        'not null' => TRUE,
      ),
      'settings_serialized' => array(
        'description' => 'Settings of the specified synonyms behavior for the specified field instance.',
        'type' => 'text',
        'serialize' => TRUE,
        'not null' => TRUE,
      ),
    ),
    'unique keys' => array(
      'instance_behavior' => array(
        'instance_id',
        'behavior',
      ),
    ),
    'foreign keys' => array(
      'field_config_instance' => array(
        'table' => 'field_config_instance',
        'columns' => array(
          'instance_id' => 'id',
        ),
      ),
    ),
    'indexes' => array(
      'behavior' => array(
        'behavior',
      ),
    ),
  ));
  if (module_exists('search')) {
    module_enable(array(
      'synonyms_search',
    ));
  }
  $vars = db_select('variable', 'v')
    ->fields('v', array(
    'name',
  ))
    ->condition('name', db_like('synonyms_settings_') . '%', 'LIKE')
    ->execute();
  foreach ($vars as $row) {
    $var = variable_get($row->name);
    $vid = substr($row->name, drupal_strlen('synonyms_settings_'));
    $vocabulary = taxonomy_vocabulary_load($vid);
    if ($vocabulary) {
      $bundle = $vocabulary->machine_name;
      foreach ($var['synonyms'] as $field) {
        $instance = field_info_instance('taxonomy_term', $field, $bundle);
        foreach (synonyms_behaviors() as $behavior) {
          switch ($behavior['name']) {
            case 'synonyms':
            case 'search':
            default:
              $settings = array();
              break;
            case 'select':
              $settings = array(
                'wording' => '@synonym',
              );
              break;
            case 'autocomplete':
              $settings = array(
                'wording' => '@synonym, synonym of @term',
              );
              break;
          }
          $settings = array(
            'instance_id' => $instance['id'],
            'behavior' => $behavior['name'],
            'settings' => $settings,
          );
          synonyms_behavior_settings_save($settings);
        }
      }
    }
    variable_del($row->name);
  }
}