You are here

function forum_update_7003 in Drupal 7

Rename field to 'taxonomy_forums'.

Related topics

File

modules/forum/forum.install, line 370
Install, update, and uninstall functions for the Forum module.

Code

function forum_update_7003() {
  $messages = array();
  $new_field_name = 'taxonomy_forums';

  // Test to see if the taxonomy_forums field exists.
  $fields = _update_7000_field_read_fields(array(
    'field_name' => $new_field_name,
  ));
  if ($fields) {

    // Since the field exists, we're done.
    return;
  }

  // Calculate the old field name.
  $vid = variable_get('forum_nav_vocabulary', 0);
  $vocabulary_machine_name = db_select('taxonomy_vocabulary', 'tv')
    ->fields('tv', array(
    'machine_name',
  ))
    ->condition('vid', $vid)
    ->execute()
    ->fetchField();
  $old_field_name = 'taxonomy_' . $vocabulary_machine_name;

  // Read the old fields.
  $old_fields = _update_7000_field_read_fields(array(
    'field_name' => $old_field_name,
  ));
  foreach ($old_fields as $old_field) {
    if ($old_field['storage']['type'] != 'field_sql_storage') {
      $messages[] = t('Cannot rename field %id (%old_field_name) to %new_field_name because it does not use the field_sql_storage storage type.', array(
        '%id' => $old_field['id'],
        '%old_field_name' => $old_field_name,
        '%new_field_name' => $new_field_name,
      ));
      continue;
    }

    // Update {field_config}.
    db_update('field_config')
      ->fields(array(
      'field_name' => $new_field_name,
    ))
      ->condition('id', $old_field['id'])
      ->execute();

    // Update {field_config_instance}.
    db_update('field_config_instance')
      ->fields(array(
      'field_name' => $new_field_name,
    ))
      ->condition('field_id', $old_field['id'])
      ->execute();

    // The tables that need updating in the form 'old_name' => 'new_name'.
    $tables = array(
      'field_data_' . $old_field_name => 'field_data_' . $new_field_name,
      'field_revision_' . $old_field_name => 'field_revision_' . $new_field_name,
    );
    foreach ($tables as $old_table => $new_table) {
      $old_column_name = $old_field_name . '_tid';
      $new_column_name = $new_field_name . '_tid';

      // Rename the column.
      db_drop_index($old_table, $old_column_name);
      db_change_field($old_table, $old_column_name, $new_column_name, array(
        'type' => 'int',
        'unsigned' => TRUE,
        'not null' => FALSE,
      ));
      db_drop_index($old_table, $new_column_name);
      db_add_index($old_table, $new_column_name, array(
        $new_column_name,
      ));

      // Rename the table.
      db_rename_table($old_table, $new_table);
    }
  }
  cache_clear_all('*', 'cache_field', TRUE);
  return $messages;
}