diff --git a/field_collection.module b/field_collection.module index c932a21..2455913 100644 --- a/field_collection.module +++ b/field_collection.module @@ -1059,6 +1059,14 @@ function field_collection_field_widget_form(&$form, &$form_state, $field, $insta if (field_collection_item_is_translatable()) { $element['#host_entity_type'] = $element['#entity_type']; $element['#host_entity'] = $element['#entity']; + // Give each field collection item a unique entity translation handler + // ID, otherwise an infinite loop occurs when adding values to nested + // field collection items. + if (!isset($field_collection_item->entity_translation_handler_id)) { + list($id, $revision_id) = entity_extract_ids('field_collection_item', $field_collection_item); + $revision_id = isset($revision_id) ? $revision_id : 0; + $field_collection_item->entity_translation_handler_id = 'field_collection_item' . '-' . (!empty($id) ? 'eid-' . $id . '-' . $revision_id : 'new-' . rand()); + } $element['#field_collection_item'] = $field_collection_item; field_collection_add_child_translation_handler($element); // Ensure this is executed even with cached forms. This is mainly useful