You are here

function image_field_caption_update_7201 in Image Field Caption 7.2

Migrate data to new format

File

./image_field_caption.install, line 307
Image field caption defines a new database schema for adding a caption to images.

Code

function image_field_caption_update_7201() {

  // Only node was handled previously by the module
  $bundle_type = 'node';
  $query = db_select('image_field_caption', 't')
    ->fields('t');
  $results = $query
    ->execute();
  foreach ($results as $row) {
    $instances = field_info_instances('node');
    foreach ($instances as $bundle => $fields) {
      foreach ($fields as $field_name => $field) {

        // Skip any deleted and non image widget fields.
        if ($field['deleted'] == 1) {
          continue;
        }
        if ($field['widget']['type'] != 'image_image') {
          continue;
        }
        $field = field_info_field($field_name);
        $query = new EntityFieldQuery();
        $entity_data = $query
          ->entityCondition('entity_type', $bundle_type)
          ->entityCondition('bundle', $bundle)
          ->fieldCondition($field, 'fid', $row->fid)
          ->addTag('DANGEROUS_ACCESS_CHECK_OPT_OUT')
          ->execute();
        if (isset($entity_data[$bundle_type])) {

          // Enable setting
          $instance = field_info_instance($bundle_type, $field_name, $bundle);
          $instance['settings']['image_field_caption'] = 1;
          field_update_instance($instance);
          foreach ($entity_data[$bundle_type] as $entity_id => $entity) {
            $entities_load = array(
              $entity_id => $entity,
            );
            field_attach_load($bundle_type, $entities_load);
            foreach ($entity->{$field_name} as $langcode => $items) {
              foreach ($items as $delta => $item) {
                if ($item['fid'] == $row->fid) {
                  $columns = array(
                    'field_name',
                    'entity_type',
                    'entity_id',
                    'revision_id',
                    'bundle',
                    'delta',
                    'language',
                    'caption',
                    'caption_format',
                  );
                  list($id, $vid, $bundle) = entity_extract_ids($bundle_type, $entity);
                  $record = array(
                    'field_name' => $field_name,
                    'entity_type' => $bundle_type,
                    'entity_id' => $id,
                    'revision_id' => $vid,
                    'bundle' => $bundle,
                    'delta' => $delta,
                    'language' => $langcode,
                    'caption' => $row->caption,
                    'caption_format' => filter_default_format(),
                  );
                  $query = db_insert('field_image_field_caption')
                    ->fields($columns);
                  $query
                    ->values($record);
                  $query
                    ->execute();
                  $revision_query = db_insert('field_image_field_caption_revision')
                    ->fields($columns);
                  $revision_query
                    ->values($record);
                  $revision_query
                    ->execute();
                }
              }
            }
          }
        }
      }
    }
  }
  drupal_flush_all_caches();
}