Skip to content
Snippets Groups Projects
Verified Commit 8367edf3 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 cc27b4df
No related branches found
No related tags found
16 merge requests!10602Issue #3438769 by vinmayiswamy, antonnavi, michelle, amateescu: Sub workspace does not clear,!10301Issue #3469309 by mstrelan, smustgrave, moshe weitzman: Use one-time login...,!10187Issue #3487488 by dakwamine: ExtensionMimeTypeGuesser::guessMimeType must support file names with "0" (zero) like foo.0.zip,!9929Issue #3445469 by pooja_sharma, smustgrave: Add additional test coverage for...,!9787Resolve issue 3479427 - bootstrap barrio issue under Windows,!9742Issue #3463908 by catch, quietone: Split OptionsFieldUiTest into two,!9526Issue #3458177 by mondrake, catch, quietone, godotislate, longwave, larowlan,...,!8949Backport .gitlabci.yml changes.,!8738Issue #3424162 by camilledavis, dineshkumarbollu, smustgrave: Claro...,!8704Make greek characters available in ckeditor5,!8533Issue #3446962 by kim.pepper: Remove incorrectly added...,!8517Issue #3443748 by NexusNovaz, smustgrave: Testcase creates false positive,!7445Issue #3440169: When using drupalGet(), provide an associative array for $headers,!6502Draft: Resolve #2938524 "Plach testing issue",!38582585169-10.1.x,!3226Issue #2987537: Custom menu link entity type should not declare "bundle" entity key
Pipeline #169824 passed with warnings
Pipeline: drupal

#169829

    ......@@ -300,6 +300,8 @@ public function save(array $form, FormStateInterface $form_state) {
    foreach ($executable->displayHandlers as $id => $display) {
    if (!empty($display->display['new_id']) && $display->display['new_id'] !== $display->display['id'] && empty($display->display['deleted'])) {
    $new_id = $display->display['new_id'];
    $attachments = $display->getAttachedDisplays();
    $old_id = $display->display['id'];
    $display->display['id'] = $new_id;
    unset($display->display['new_id']);
    $executable->displayHandlers->set($new_id, $display);
    ......@@ -312,6 +314,16 @@ public function save(array $form, FormStateInterface $form_state) {
    'view' => $view->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'])) {
    unset($display->display['new_id']);
    ......
    ......@@ -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