Skip to content
Snippets Groups Projects
Verified Commit 72e1a979 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

(cherry picked from commit 26e5ef20)
parent 81671bc5
No related branches found
No related tags found
2 merge requests!8376Drupal views: adding more granularity to the ‘use ajax’ functionality,!8300Issue #3443586 View area displays even when parent view has no results.
Pipeline #181803 passed with warnings
Pipeline: drupal

#181850

    Pipeline: drupal

    #181843

      Pipeline: drupal

      #181837

        +7
        ...@@ -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']);
        ......
        ...@@ -103,4 +103,35 @@ public function testRemoveAttachedDisplay() { ...@@ -103,4 +103,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