function image_field_caption_field_attach_update in Image Field Caption 7.2
Implements hook_field_attach_update().
1 call to image_field_caption_field_attach_update()
File
- ./
image_field_caption.module, line 235 - Provides a caption textarea for image fields.
Code
function image_field_caption_field_attach_update($entity_type, $entity) {
list($id, $vid, $bundle) = entity_extract_ids($entity_type, $entity);
if (!isset($vid)) {
$vid = $id;
}
$image_fields = image_field_caption_get_image_fields($entity_type, $bundle);
foreach ($image_fields as $field_name => $image_field) {
// Skip the caption when it isn't present, or if it is disabled.
if (!isset($image_field['settings']['image_field_caption']) || !$image_field['settings']['image_field_caption']['enabled']) {
continue;
}
$field = field_info_field($field_name);
$table_name = 'field_image_field_caption';
$revision_name = 'field_image_field_caption_revision';
$all_languages = field_available_languages($entity_type, $field);
if (!isset($entity->{$field_name})) {
continue;
}
$field_languages = array_intersect($all_languages, array_keys((array) $entity->{$field_name}));
// Delete and insert, rather than update, in case a value was added.
// Delete languages present in the incoming $entity->$field_name.
// Delete all languages if $entity->$field_name is empty.
$languages = !empty($entity->{$field_name}) ? $field_languages : $all_languages;
if ($languages) {
db_delete($table_name)
->condition('field_name', $field_name)
->condition('entity_type', $entity_type)
->condition('entity_id', $id)
->condition('language', $languages, 'IN')
->execute();
db_delete($revision_name)
->condition('field_name', $field_name)
->condition('entity_type', $entity_type)
->condition('entity_id', $id)
->condition('revision_id', $vid)
->condition('language', $languages, 'IN')
->execute();
}
// Prepare the multi-insert query.
$do_insert = FALSE;
$columns = array(
'field_name',
'entity_type',
'entity_id',
'revision_id',
'bundle',
'delta',
'language',
'caption',
'caption_format',
);
$query = db_insert($table_name)
->fields($columns);
$revision_query = db_insert($revision_name)
->fields($columns);
foreach ($field_languages as $langcode) {
$items = (array) $entity->{$field_name}[$langcode];
$delta_count = 0;
foreach ($items as $delta => $item) {
if (empty($item['image_field_caption']['value'])) {
continue;
}
// We now know we have someting to insert.
$do_insert = TRUE;
$record = array(
'field_name' => $field_name,
'entity_type' => $entity_type,
'entity_id' => $id,
'revision_id' => $vid,
'bundle' => $bundle,
'delta' => $delta,
'language' => $langcode,
'caption' => $item['image_field_caption']['value'],
'caption_format' => $item['image_field_caption']['format'],
);
$query
->values($record);
if (isset($vid)) {
$revision_query
->values($record);
}
if ($field['cardinality'] != FIELD_CARDINALITY_UNLIMITED && ++$delta_count == $field['cardinality']) {
break;
}
}
}
// Execute the query if we have values to insert.
if ($do_insert) {
$query
->execute();
$revision_query
->execute();
}
}
}