diff --git a/paragraphs.node_clone.inc b/paragraphs.node_clone.inc index 673955c..cfa44fd 100644 --- a/paragraphs.node_clone.inc +++ b/paragraphs.node_clone.inc @@ -11,9 +11,9 @@ function paragraphs_clone_node_alter(&$node, $context) { foreach (field_info_fields() as $field_name => $field) { if ($field['type'] == 'paragraphs' && isset($node->$field_name)) { - $language = $node->language; - foreach ($node->$field_name as $key => $values) { - paragraphs_clone_items('node', $node, $field_name, $language); + $node_language = $node->language; + foreach ($node->$field_name as $field_language => $values) { + paragraphs_clone_items('node', $node, $field_name, $node_language, $field_language); } } } @@ -48,23 +48,25 @@ function paragraphs_form_node_form_alter(&$form, &$form_state, $form_id) { /** * Clone a Paragraphs item. Helper function for hook_clone_node_alter(). */ -function paragraphs_clone_items($entity_type, &$entity, $field_name, $language = LANGUAGE_NONE) { - $old_items = $entity->{$field_name}[$language]; - if (empty($old_items) && !is_array($old_items)) { - $old_items = array(); - } +function paragraphs_clone_items($entity_type, &$entity, $field_name, $entity_language = LANGUAGE_NONE, $field_language = NULL) { + $field_language = field_language($entity_type, $entity, $field_name, $field_language); + if (empty($entity->{$field_name}[$field_language]) || !is_array($entity->{$field_name}[$field_language])) { + return; + } + + $old_items = $entity->{$field_name}[$field_language]; $old_items = array_map(function($item) { return paragraphs_item_load($item['value']); }, $old_items); - unset($entity->{$field_name}[$language]); + unset($entity->{$field_name}[$field_language]); foreach ($old_items as $old_item) { list( , , $bundle) = entity_extract_ids('paragraphs_item', $old_item); /* @var $new_item ParagraphsItemEntity */ $new_item = entity_create('paragraphs_item', array('bundle' => $bundle, 'field_name' => $field_name)); - $new_item->setHostEntity($entity_type, $entity, $language); + $new_item->setHostEntity($entity_type, $entity, $entity_language); // Check if any of the fields in the newly cloned fc item is a paragraph. foreach (field_info_instances('paragraphs_item', $bundle) as $new_field_name => $new_field_instance) { @@ -72,9 +74,9 @@ function paragraphs_clone_items($entity_type, &$entity, $field_name, $language = $new_item->{$new_field_name} = $old_item->{$new_field_name}; $field_info = field_info_field($new_field_name); if ($field_info['type'] == 'paragraphs') { - paragraphs_clone_items('paragraphs_item', $new_item, $new_field_name, $language); + paragraphs_clone_items('paragraphs_item', $new_item, $new_field_name, $entity_language); } } } } -} \ No newline at end of file +}