You are here

function _panopoly_magic_process_field_collection_fields in Panopoly Magic 7

Process any field collection fields, returning psuedo values for them.

1 call to _panopoly_magic_process_field_collection_fields()
panopoly_magic_form_alter in ./panopoly_magic.module
Implements hook_form_alter()

File

./panopoly_magic.module, line 635

Code

function _panopoly_magic_process_field_collection_fields($entity_type, $bundle, $entity, $form, &$form_state) {
  $field_collection_fields = array();
  $instances = field_info_instances($entity_type, $bundle);
  foreach ($instances as $instance) {
    $field_name = $instance['field_name'];
    $field = field_info_field($field_name);
    if ($field['type'] == 'field_collection') {
      $langcode = entity_language($entity_type, $entity);
      if (!$langcode) {
        $langcode = LANGUAGE_NONE;
      }
      foreach (element_children($form[$field_name][$langcode]) as $index) {

        // Only address the numeric children.
        if (!is_numeric($index)) {
          continue;
        }
        $element = $form[$field_name][$langcode][$index];

        // Create a new field collection entity with the values.
        $field_collection_item = entity_create('field_collection_item', array(
          'field_name' => $field_name,
        ));
        $field_collection_item
          ->setHostEntity($entity_type, $entity, $langcode, FALSE);
        field_attach_form_validate('field_collection_item', $field_collection_item, $element, $form_state);
        field_attach_submit('field_collection_item', $field_collection_item, $element, $form_state);
        _field_invoke_multiple('load', 'field_collection_item', array(
          $field_collection_item->item_id => $field_collection_item,
        ));

        // Stash it for later use.
        $field_collection_fields[$field_name][$langcode][] = array(
          // Use 'field_collection' for field_collection 7.x-1.0 or later.
          // @see https://www.drupal.org/project/field_collection/issues/3111102
          'field_collection' => $field_collection_item,
          // Use 'entity' for all earlier versions.
          'entity' => $field_collection_item,
        );
      }

      // Clear out the field so the values don't get submitted.
      $entity->{$field_name}[$langcode] = array();
    }
  }
  return $field_collection_fields;
}