You are here

function field_instance_features_rebuild in Features 7.2

Implements of hook_features_rebuild(). Rebuilds field instances from code defaults.

1 call to field_instance_features_rebuild()
field_instance_features_revert in includes/features.field.inc
Implements hook_features_revert().

File

includes/features.field.inc, line 327
Features integration on behalf of 'field' module.

Code

function field_instance_features_rebuild($module) {
  if ($instances = features_get_default('field_instance', $module)) {
    field_info_cache_clear();

    // Load all the existing instances up-front so that we don't
    // have to rebuild the cache all the time.
    $existing_instances = field_info_instances();
    foreach ($instances as $field_instance) {

      // If the field base information does not exist yet, cancel out.
      if (!field_info_field($field_instance['field_name'])) {
        continue;
      }

      // Create or update field instance.
      if (isset($existing_instances[$field_instance['entity_type']][$field_instance['bundle']][$field_instance['field_name']])) {
        $existing_instance = $existing_instances[$field_instance['entity_type']][$field_instance['bundle']][$field_instance['field_name']];
        if ($field_instance + $existing_instance != $existing_instance) {
          try {
            field_update_instance($field_instance);
          } catch (FieldException $e) {
            watchdog('features', 'Attempt to update field instance %label (in %entity entity type %bundle bundle) failed: %message', array(
              '%label' => $field_instance['field_name'],
              '%entity' => $field_instance['entity_type'],
              '%bundle' => $field_instance['bundle'],
              '%message' => $e
                ->getMessage(),
            ), WATCHDOG_ERROR);
          }
        }
      }
      else {
        try {
          field_create_instance($field_instance);
        } catch (FieldException $e) {
          watchdog('features', 'Attempt to create field instance %label (in %entity entity type %bundle bundle) failed: %message', array(
            '%label' => $field_instance['field_name'],
            '%entity' => $field_instance['entity_type'],
            '%bundle' => $field_instance['bundle'],
            '%message' => $e
              ->getMessage(),
          ), WATCHDOG_ERROR);
        }
        $existing_instances[$field_instance['entity_type']][$field_instance['bundle']][$field_instance['field_name']] = $field_instance;
      }
    }
    if ($instances) {
      variable_set('menu_rebuild_needed', TRUE);
    }
  }
}