diff --git a/src/Plugin/Field/FieldWidget/ParagraphsWidget.php b/src/Plugin/Field/FieldWidget/ParagraphsWidget.php index b4beec0..1104a79 100644 --- a/src/Plugin/Field/FieldWidget/ParagraphsWidget.php +++ b/src/Plugin/Field/FieldWidget/ParagraphsWidget.php @@ -1200,7 +1200,7 @@ class ParagraphsWidget extends WidgetBase { $user_input = $form_state->getUserInput(); $duplicate_input = $user_input[$field_name][$delta]; - array_splice($user_input[$field_name], $delta, 0, [$duplicate_input]); + array_splice($user_input[$field_name], $delta + 1, 0, [$duplicate_input]); $form_state->setUserInput($user_input); // Create the duplicated paragraph and insert it below the original. @@ -1210,7 +1210,7 @@ class ParagraphsWidget extends WidgetBase { 'mode' => 'edit' ]; - array_splice($widget_state['paragraphs'], $delta, 0, $paragraph); + array_splice($widget_state['paragraphs'], $delta +1 , 0, $paragraph); static::setWidgetState($parents, $field_name, $form_state, $widget_state); $form_state->setRebuild(); diff --git a/src/Tests/Experimental/ParagraphsExperimentalDuplicateFeatureTest.php b/src/Tests/Experimental/ParagraphsExperimentalDuplicateFeatureTest.php index a27922d..b3f59d0 100644 --- a/src/Tests/Experimental/ParagraphsExperimentalDuplicateFeatureTest.php +++ b/src/Tests/Experimental/ParagraphsExperimentalDuplicateFeatureTest.php @@ -34,10 +34,11 @@ class ParagraphsExperimentalDuplicateFeatureTest extends ParagraphsExperimentalT $this->drupalPostAjaxForm('node/add/paragraphed_test', [], 'field_paragraphs_text_paragraph_add_more'); // Create a node with a Paragraph. - $text = 'recognizable_text'; + $text_01 = 'recognizable_text_01'; + $text_02 = 'recognizable_text_02'; $edit = [ 'title[0][value]' => 'paragraphs_mode_test', - 'field_paragraphs[0][subform][field_text][0][value]' => $text, + 'field_paragraphs[0][subform][field_text][0][value]' => $text_01, ]; $this->drupalPostFormSave(NULL, $edit, t('Save and publish'), t('Save'), $edit + ['status[value]' => TRUE]); $node = $this->drupalGetNodeByTitle('paragraphs_mode_test'); @@ -49,12 +50,36 @@ class ParagraphsExperimentalDuplicateFeatureTest extends ParagraphsExperimentalT // Click "Duplicate" button. $this->drupalPostAjaxForm(NULL, [], 'field_paragraphs_0_duplicate'); $this->drupalPostAjaxForm(NULL, [], 'field_paragraphs_0_edit'); - $this->assertFieldByName('field_paragraphs[0][subform][field_text][0][value]', $text); - $this->assertFieldByName('field_paragraphs[1][subform][field_text][0][value]', $text); + $this->assertFieldByName('field_paragraphs[0][subform][field_text][0][value]', $text_01); + $this->assertFieldByName('field_paragraphs[1][subform][field_text][0][value]', $text_01); // Save and check if both paragraphs are present. - $this->drupalPostFormSave(NULL, $edit, t('Save and keep published'), t('Save')); - $this->assertNoUniqueText($text); + $this->drupalPostFormSave(NULL, [], t('Save and keep published'), t('Save')); + $this->assertNoUniqueText($text_01); + + // Try that again in open mode. + $this->setParagraphsWidgetMode('paragraphed_test', 'field_paragraphs', 'open'); + $node = $this->drupalGetNodeByTitle('paragraphs_mode_test'); + $this->drupalGet('node/' . $node->id() . '/edit'); + $edit = [ + 'field_paragraphs[0][subform][field_text][0][value]' => $text_01, + 'field_paragraphs[1][subform][field_text][0][value]' => $text_02, + ]; + $this->drupalPostFormSave(NULL, $edit, t('Save and publish'), t('Save'), $edit + ['status[value]' => TRUE]); + + $node = $this->drupalGetNodeByTitle('paragraphs_mode_test'); + $this->drupalGet('node/' . $node->id() . '/edit'); + + $this->drupalPostAjaxForm(NULL, [], 'field_paragraphs_0_duplicate'); + $this->assertFieldByName('field_paragraphs[0][subform][field_text][0][value]', $text_01); + $this->assertFieldByName('field_paragraphs[1][subform][field_text][0][value]', $text_01); + $this->assertFieldByName('field_paragraphs[2][subform][field_text][0][value]', $text_02); + + $this->drupalPostFormSave(NULL, [], t('Save and publish'), t('Save')); + $this->drupalGet('node/' . $node->id() . '/edit'); + $this->assertFieldByName('field_paragraphs[0][subform][field_text][0][value]', $text_01); + $this->assertFieldByName('field_paragraphs[1][subform][field_text][0][value]', $text_01); + $this->assertFieldByName('field_paragraphs[2][subform][field_text][0][value]', $text_02); } /**