Skip to content
Snippets Groups Projects
Verified Commit 26e5ef20 authored by Dave Long's avatar Dave Long
Browse files

Issue #3091003 by sukr_s, smustgrave, RaphaelBriskie, FeyP, borisson_:...

Issue #3091003 by sukr_s, smustgrave, RaphaelBriskie, FeyP, borisson_: Changing a display's machine name while an attachment exist breaks Views
parent 7ac4979e
No related branches found
No related tags found
30 merge requests!11131[10.4.x-only-DO-NOT-MERGE]: Issue ##2842525 Ajax attached to Views exposed filter form does not trigger callbacks,!9470[10.3.x-only-DO-NOT-MERGE]: #3331771 Fix file_get_contents(): Passing null to parameter,!8736Update the Documention As per the Function uses.,!8540Issue #3457061: Bootstrap Modal dialog Not closing after 10.3.0 Update,!8528Issue #3456871 by Tim Bozeman: Support NULL services,!8513Issue #3453786: DefaultSelection should document why values for target_bundles NULL and [] behave as they do,!8373Issue #3427374 by danflanagan8, Vighneshh: taxonomy_tid ViewsArgumentDefault...,!8256Issue #3445896 by mstrelan, mondrake: PHPUnit\Runner\ErrorHandler::__construct...,!8126Added escape fucntionality on admintoolbar close icon,!8012Expand RecipeDiscovery to return a list of recipes from recipe directories - Issue # 3446354,!7927Issue #3445425: \Drupal\Core\Template\Attribute should implement Countable interface,!3878Removed unused condition head title for views,!3818Issue #2140179: $entity->original gets stale between updates,!3742Issue #3328429: Create item list field formatter for displaying ordered and unordered lists,!3731Claro: role=button on status report items,!3651Issue #3347736: Create new SDC component for Olivero (header-search),!3531Issue #3336994: StringFormatter always displays links to entity even if the user in context does not have access,!3355Issue #3209129: Scrolling problems when adding a block via layout builder,!3154Fixes #2987987 - CSRF token validation broken on routes with optional parameters.,!3133core/modules/system/css/components/hidden.module.css,!2812Issue #3312049: [Followup] Fix Drupal.Commenting.FunctionComment.MissingReturnType returns for NULL,!2378Issue #2875033: Optimize joins and table selection in SQL entity query implementation,!2062Issue #3246454: Add weekly granularity to views date sort,!1105Issue #3025039: New non translatable field on translatable content throws error,!10223132456: Fix issue where views instances are emptied before an ajax request is complete,!877Issue #2708101: Default value for link text is not saved,!617Issue #3043725: Provide a Entity Handler for user cancelation,!579Issue #2230909: Simple decimals fail to pass validation,!560Move callback classRemove outside of the loop,!555Issue #3202493
...@@ -300,6 +300,8 @@ public function save(array $form, FormStateInterface $form_state) { ...@@ -300,6 +300,8 @@ public function save(array $form, FormStateInterface $form_state) {
foreach ($executable->displayHandlers as $id => $display) { foreach ($executable->displayHandlers as $id => $display) {
if (!empty($display->display['new_id']) && $display->display['new_id'] !== $display->display['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']; $new_id = $display->display['new_id'];
$attachments = $display->getAttachedDisplays();
$old_id = $display->display['id'];
$display->display['id'] = $new_id; $display->display['id'] = $new_id;
unset($display->display['new_id']); unset($display->display['new_id']);
$executable->displayHandlers->set($new_id, $display); $executable->displayHandlers->set($new_id, $display);
...@@ -312,6 +314,16 @@ public function save(array $form, FormStateInterface $form_state) { ...@@ -312,6 +314,16 @@ public function save(array $form, FormStateInterface $form_state) {
'view' => $view->id(), 'view' => $view->id(),
'display_id' => $new_id, 'display_id' => $new_id,
]); ]);
// Find attachments attached to old display id and attach them with new id.
if ($attachments) {
foreach ($attachments as $attachment) {
$attached_options = $executable->displayHandlers->get($attachment)->getOption('displays');
unset($attached_options[$old_id]);
$attached_options[$new_id] = $new_id;
$executable->displayHandlers->get($attachment)->setOption('displays', $attached_options);
}
}
} }
elseif (isset($display->display['new_id'])) { elseif (isset($display->display['new_id'])) {
unset($display->display['new_id']); unset($display->display['new_id']);
......
...@@ -105,4 +105,35 @@ public function testRemoveAttachedDisplay() { ...@@ -105,4 +105,35 @@ public function testRemoveAttachedDisplay() {
} }
/**
* Tests the attachment after changing machine name.
*/
public function testAttachmentOnAttachedMachineNameChange(): void {
$view = $this->randomView();
$path_prefix = 'admin/structure/views/view/' . $view['id'] . '/edit';
$attachment_display_url = 'admin/structure/views/nojs/display/' . $view['id'] . '/attachment_1/displays';
// Open the Page display and create the attachment display.
$this->drupalGet($path_prefix . '/page_1');
$this->submitForm([], 'Add Attachment');
$this->assertSession()->pageTextContains('Not defined');
// Attach the Attachment to the Default and Page display.
$this->drupalGet($attachment_display_url);
$this->submitForm(['displays[default]' => 1, 'displays[page_1]' => 1], 'Apply');
$this->submitForm([], 'Save');
// Change the machine name of the page.
$this->drupalGet('admin/structure/views/nojs/display/' . $view['id'] . '/page_1/display_id');
$this->submitForm(['display_id' => 'page_new_id'], 'Apply');
$this->submitForm([], 'Save');
// Check that the attachment is still attached to the page.
$this->drupalGet($attachment_display_url);
$this->assertSession()->checkboxChecked("edit-displays-default");
$this->assertSession()->checkboxChecked("edit-displays-page-new-id");
}
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment