You are here

function _content_migrate_batch_process_create_fields in Content Construction Kit (CCK) 7.3

Batch operation callback to create fields.

1 call to _content_migrate_batch_process_create_fields()
drush_content_migrate_field_structure in modules/content_migrate/includes/content_migrate.drush.inc
1 string reference to '_content_migrate_batch_process_create_fields'
_content_migrate_batch in modules/content_migrate/includes/content_migrate.admin.inc
Helper function to create a batch.

File

modules/content_migrate/includes/content_migrate.admin.inc, line 222
content_migrate.admin.inc Code to process field data migration, moved into a separate file for efficiency.

Code

function _content_migrate_batch_process_create_fields($field_name, &$context) {
  $messages = array();
  $errors = array();
  $type_names = node_type_get_names();
  $allowed_fields = field_info_field_types();
  $allowed_widgets = field_info_widget_types();
  $allowed_formatters = field_info_formatter_types();
  $context['message'] = t('"Creating field: %field', array(
    '%field' => $field_name,
  ));
  $field_value = content_migrate_get_field_values($field_name);
  if (isset($field_value['messages'])) {
    $messages = $field_value['messages'];
    unset($field_value['messages']);
  }
  $instance_info = field_info_instances('node');

  // Create the field and store the new field
  // definition in $context so we can retrieve it later.
  try {

    // A shared field may already have been created, check first.
    $field = field_info_field($field_value['field_name']);
    if (empty($field)) {
      unset($field_value['columns']);
      unset($field_value['db_storage']);
      $field = field_create_field($field_value);
      $context['fields'][$field_name] = $field;
      $messages[] = t("Created field @field_name", array(
        '@field_name' => $field_name,
      ));
    }

    // Create each of the new instances and store
    // the new instance definitions in $context.
    $instance_values = content_migrate_get_instance_values(NULL, $field_name);
    foreach ($instance_values as $bundle => $instance_value) {
      try {
        if (isset($instance_value['messages'])) {
          $messages = array_merge($messages, $instance_value['messages']);
          unset($instance_value['messages']);
        }
        if (!isset($instance_info[$bundle][$field_name])) {
          $instance = field_create_instance($instance_value);
          $context['instances'][$field_name][$bundle] = $instance;
          $messages[] = t("Created instance of @field_name in bundle @bundle.", array(
            '@field_name' => $field_name,
            '@bundle' => $type_names[$bundle],
          ));
        }
      } catch (Exception $e) {
        $errors[] = t('Error creating instance of @field_name in bundle @bundle.', array(
          '@field_name' => $field_name,
          '@bundle' => $type_names[$bundle],
        ));
        $errors[] = $e;
      }
    }
  } catch (Exception $e) {
    $errors[] = t("Error creating field @field_name", array(
      '@field_name' => $field_name,
    ));
    $errors[] = $e;
  }
  field_info_cache_clear();
  foreach ($messages as $message) {
    drupal_set_message($message, 'warning');
  }
  foreach ($errors as $error) {
    drupal_set_message($error, 'error');
  }
  $context['finished'] = TRUE;
}