diff --git a/core/modules/views/src/Entity/View.php b/core/modules/views/src/Entity/View.php index 4e1595e58de60577f76468b85eb0e6328115763d..44007eb7fc60b4cc12470c93ceba11fcd4f0fed8 100644 --- a/core/modules/views/src/Entity/View.php +++ b/core/modules/views/src/Entity/View.php @@ -245,6 +245,7 @@ public function duplicateDisplayAsType($old_display_id, $new_display_type) { $display_duplicate = $displays[$old_display_id]; unset($display_duplicate['display_title']); unset($display_duplicate['display_plugin']); + unset($display_duplicate['new_id']); $displays[$new_display_id] = NestedArray::mergeDeep($displays[$new_display_id], $display_duplicate); $displays[$new_display_id]['id'] = $new_display_id; diff --git a/core/modules/views_ui/tests/src/Functional/DisplayCRUDTest.php b/core/modules/views_ui/tests/src/Functional/DisplayCRUDTest.php index 1e53c71108733517cab911d868e6556d3c1f5229..c1c7cef441cad70ff4df2f9183876a1dfdcd5813 100644 --- a/core/modules/views_ui/tests/src/Functional/DisplayCRUDTest.php +++ b/core/modules/views_ui/tests/src/Functional/DisplayCRUDTest.php @@ -143,6 +143,16 @@ public function testDuplicateDisplay() { $this->assertFalse(isset($block_1->display['display_options']['path'])); $this->assertEqual($block_1->getOption('title'), $random_title, 'The overridden title option from the display got copied into the duplicate'); $this->assertEqual($block_1->getOption('css_class'), $random_css, 'The overridden css_class option from the display got copied into the duplicate'); + + // Test duplicating a display after changing the machine name. + $view_id = $view->id(); + $this->drupalPostForm("admin/structure/views/nojs/display/$view_id/page_2/display_id", ['display_id' => 'page_new'], 'Apply'); + $this->drupalPostForm(NULL, [], 'Duplicate as Block'); + $this->drupalPostForm(NULL, [], t('Save')); + $view = Views::getView($view_id); + $view->initDisplay(); + $this->assertNotNull($view->displayHandlers->get('page_new'), 'The original display is saved with a changed id'); + $this->assertNotNull($view->displayHandlers->get('block_2'), 'The duplicate display is saved with new id'); } }