function _panopoly_magic_process_field_collection_fields in Panopoly 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 modules/
panopoly/ panopoly_magic/ panopoly_magic.module - Implements hook_form_alter()
File
- modules/
panopoly/ panopoly_magic/ 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;
}