You are here

function comment_update_7006 in Drupal 7

Migrate data from the comment field to field storage.

Related topics

File

modules/comment/comment.install, line 289
Install, update and uninstall functions for the comment module.

Code

function comment_update_7006(&$sandbox) {

  // This is a multipass update. First set up some comment variables.
  if (empty($sandbox['total'])) {
    $comments = (bool) db_query_range('SELECT 1 FROM {comment}', 0, 1)
      ->fetchField();
    $sandbox['types'] = array();
    if ($comments) {
      $sandbox['types'] = array_keys(_update_7000_node_get_types());
    }
    $sandbox['total'] = count($sandbox['types']);
  }
  if (!empty($sandbox['types'])) {
    $type = array_shift($sandbox['types']);
    $query = db_select('comment', 'c');
    $query
      ->innerJoin('node', 'n', 'c.nid = n.nid AND n.type = :type', array(
      ':type' => $type,
    ));
    $query
      ->addField('c', 'cid', 'entity_id');
    $query
      ->addExpression("'comment_node_{$type}'", 'bundle');
    $query
      ->addExpression("'comment'", 'entity_type');
    $query
      ->addExpression('0', 'deleted');
    $query
      ->addExpression("'" . LANGUAGE_NONE . "'", 'language');
    $query
      ->addExpression('0', 'delta');
    $query
      ->addField('c', 'comment', 'comment_body_value');
    $query
      ->addField('c', 'format', 'comment_body_format');
    db_insert('field_data_comment_body')
      ->from($query)
      ->execute();
    $sandbox['#finished'] = 1 - count($sandbox['types']) / $sandbox['total'];
  }

  // On the last pass of the update, $sandbox['types'] will be empty.
  if (empty($sandbox['types'])) {

    // Update the comment body text formats. For an explanation of these
    // updates, see the code comments in user_update_7010().
    db_update('field_data_comment_body')
      ->fields(array(
      'comment_body_format' => NULL,
    ))
      ->condition('comment_body_value', '')
      ->condition('comment_body_format', 0)
      ->execute();
    $existing_formats = db_query("SELECT format FROM {filter_format}")
      ->fetchCol();
    $default_format = variable_get('filter_default_format', 1);
    db_update('field_data_comment_body')
      ->fields(array(
      'comment_body_format' => $default_format,
    ))
      ->isNotNull('comment_body_format')
      ->condition('comment_body_format', $existing_formats, 'NOT IN')
      ->execute();

    // Finally, remove the old comment data.
    db_drop_field('comment', 'comment');
    db_drop_field('comment', 'format');
  }
}