Issue #2897576 by Lendude, Ismaels: Resaving a view display results in deletion of view display

8.5.x
Nathaniel Catchpole 2017-07-31 13:39:28 +09:00
parent 38fd4cebd1
commit 89bdb05cd1
2 changed files with 10 additions and 1 deletions

View File

@ -64,6 +64,12 @@ class ViewEditTest extends UITestBase {
$this->assertIdentical($displays['test_1']['id'], 'test_1', 'New display ID matches the display ID key.');
$this->assertFalse(array_key_exists('attachment_1', $displays), 'Old display ID not found.');
// Set to the same machine name and save the View.
$edit = ['display_id' => 'test_1'];
$this->drupalPostForm('admin/structure/views/nojs/display/test_view/test_1/display_id', $edit, 'Apply');
$this->drupalPostForm(NULL, [], 'Save');
$this->assertLink(t('test_1'));
// Test the form validation with invalid IDs.
$machine_name_edit_url = 'admin/structure/views/nojs/display/test_view/test_1/display_id';
$error_text = t('Display name must be letters, numbers, or underscores only.');

View File

@ -275,7 +275,7 @@ class ViewEditForm extends ViewFormBase {
// Rename display ids if needed.
foreach ($executable->displayHandlers as $id => $display) {
if (!empty($display->display['new_id']) && empty($display->display['deleted'])) {
if (!empty($display->display['new_id']) && $display->display['new_id'] !== $display->display['id'] && empty($display->display['deleted'])) {
$new_id = $display->display['new_id'];
$display->display['id'] = $new_id;
unset($display->display['new_id']);
@ -290,6 +290,9 @@ class ViewEditForm extends ViewFormBase {
'display_id' => $new_id,
]);
}
elseif (isset($display->display['new_id'])) {
unset($display->display['new_id']);
}
}
$view->set('display', $displays);