diff --git a/field_collection.module b/field_collection.module index e9290af..ddd2ec3 100644 --- a/field_collection.module +++ b/field_collection.module @@ -897,7 +897,7 @@ function field_collection_field_settings_form($field, $instance) { */ function field_collection_field_insert($host_entity_type, $host_entity, $field, $instance, $langcode, &$items) { foreach ($items as &$item) { - if ($entity = field_collection_field_get_entity($item)) { + if (isset($item['entity']) && $entity = field_collection_field_get_entity($item)) { if (!empty($host_entity->is_new) && empty($entity->is_new)) { // If the host entity is new but we have a field_collection that is not // new, it means that its host is being cloned. Thus we need to clone diff --git a/field_collection.test b/field_collection.test index 9a22e49..e8123bf 100644 --- a/field_collection.test +++ b/field_collection.test @@ -304,35 +304,37 @@ class FieldCollectionBasicTestCase extends DrupalWebTestCase { * Make sure that field_collection-entities are copied when host-entities do. */ public function testCopyingEntities() { - list($node, $entity) = $this->createNodeWithFieldCollection(); + list($node, $original_field_collection) = $this->createNodeWithFieldCollection(); // Create a copy of that node. - $node->nid = NULL; - $node->vid = NULL; - $node->is_new = TRUE; + $original_node = clone $node; + $original_node->nid = NULL; + $original_node->vid = NULL; + $original_node->is_new = TRUE; - node_save($node); - $item = $node->{$this->field_name}[LANGUAGE_NONE][0]; - $this->assertNotEqual($entity->item_id, $item['value']); + node_save($original_node); + $original_field_collection_id = $original_node->{$this->field_name}[LANGUAGE_NONE][0]; + $this->assertNotEqual($original_field_collection->item_id, $original_field_collection_id['value']); // Do a php clone to the $node object and save it. - $node2 = clone $node; - $node2->nid = NULL; - $node2->is_new = TRUE; - $node2->vid = NULL; - node_save($node2); + $duplicate_node = clone $original_node; + $duplicate_node->nid = NULL; + $duplicate_node->is_new = TRUE; + $duplicate_node->vid = NULL; + node_save($duplicate_node); - $item2 = $node2->{$this->field_name}[LANGUAGE_NONE][0]; - $this->assertNotEqual($item2['value'], $item['value']); + $duplicate_field_collection_id = $duplicate_node->{$this->field_name}[LANGUAGE_NONE][0]; + $this->assertNotEqual($original_field_collection->item_id, $duplicate_field_collection_id['value']); // Create another copy this time (needlessly) forcing a new revision. - $node->nid = NULL; - $node->vid = NULL; - $node->is_new = TRUE; - $node->revision = TRUE; - node_save($node); - $item3 = $node->{$this->field_name}[LANGUAGE_NONE][0]; - $this->assertNotEqual($item['value'], $item3['value']); + $tertiary_node = clone $original_node; + $tertiary_node->nid = NULL; + $tertiary_node->vid = NULL; + $tertiary_node->is_new = TRUE; + $tertiary_node->revision = TRUE; + node_save($tertiary_node); + $tertiary_field_collection_id = $node->{$this->field_name}[LANGUAGE_NONE][0]; + $this->assertNotEqual($original_field_collection->item_id, $tertiary_field_collection_id['value']); } }