You are here

function _multifield_create_stub_entity_with_subfield_data in Multifield 7

Same name and namespace in other branches
  1. 7.2 multifield.field.inc \_multifield_create_stub_entity_with_subfield_data()
5 calls to _multifield_create_stub_entity_with_subfield_data()
multifield_field_delete in ./multifield.field.inc
Implements hook_field_delete().
multifield_field_delete_revision in ./multifield.field.inc
Implements hook_field_delete_revision().
multifield_field_insert in ./multifield.field.inc
Implements hook_field_insert().
multifield_field_presave in ./multifield.field.inc
Implements hook_field_presave().
multifield_field_update in ./multifield.field.inc
Implements hook_field_update().

File

./multifield.field.inc, line 916
Field integration for the Multifield module.

Code

function _multifield_create_stub_entity_with_subfield_data($machine_name, array &$items, array $original_items, $parent_entity_type, $parent_entity, $langcode) {

  // Create a stub clone of the parent entity.
  $stub = entity_create_stub_entity($parent_entity_type, entity_extract_ids($parent_entity_type, $parent_entity));
  if (!empty($parent_entity->original)) {
    $stub->original = entity_create_stub_entity($parent_entity_type, entity_extract_ids($parent_entity_type, $parent_entity->original));
  }
  foreach (multifield_type_get_subfields($machine_name) as $subfield_name) {
    $stub->{$subfield_name} = array(
      $langcode => array(),
    );
    if (isset($stub->original)) {
      $stub->original->{$subfield_name} = array(
        $langcode => array(),
      );
    }
    foreach ($items as $delta => $item) {
      if (isset($item[$subfield_name][LANGUAGE_NONE][0])) {
        $stub->{$subfield_name}[$langcode][$delta] =& $item[$subfield_name][LANGUAGE_NONE][0];
      }
      if (isset($stub->original) && isset($original_items[$delta][$subfield_name][LANGUAGE_NONE][0])) {
        $stub->original->{$subfield_name}[$langcode][$delta] = $original_items[$delta][$subfield_name][LANGUAGE_NONE][0];
      }
    }
    $stub->{$subfield_name}[$langcode] = array_filter($stub->{$subfield_name}[$langcode]);
    if (isset($stub->original)) {
      $stub->original->{$subfield_name}[$langcode] = array_filter($stub->original->{$subfield_name}[$langcode]);
    }
  }

  // Ensure the revision flag is set.
  if (!empty($parent_entity->revision)) {
    $stub->revision = TRUE;
  }
  return $stub;
}