Issue #2951548 by finne, idebr: Restore Menu Link parent references when deleting nested links
parent
5d5af494fb
commit
2cdab9c011
|
@ -235,6 +235,14 @@ class MenuLinkContent extends ContentEntityBase implements MenuLinkContentInterf
|
|||
foreach ($entities as $menu_link) {
|
||||
/** @var \Drupal\menu_link_content\Entity\MenuLinkContent $menu_link */
|
||||
$menu_link_manager->removeDefinition($menu_link->getPluginId(), FALSE);
|
||||
|
||||
// Children get re-attached to the menu link's parent.
|
||||
$parent_plugin_id = $menu_link->getParentId();
|
||||
$children = $storage->loadByProperties(['parent' => $menu_link->getPluginId()]);
|
||||
foreach ($children as $child) {
|
||||
/** @var \Drupal\menu_link_content\Entity\MenuLinkContent $child */
|
||||
$child->set('parent', $parent_plugin_id)->save();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -0,0 +1,62 @@
|
|||
<?php
|
||||
|
||||
namespace Drupal\Tests\menu_link_content\Kernel;
|
||||
|
||||
use Drupal\menu_link_content\Entity\MenuLinkContent;
|
||||
use Drupal\KernelTests\KernelTestBase;
|
||||
|
||||
/**
|
||||
* Tests the menu link content delete function.
|
||||
*
|
||||
* @group menu_link_content
|
||||
*/
|
||||
class MenuLinkContentDeleteTest extends KernelTestBase {
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public static $modules = ['menu_link_content', 'link', 'system'];
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
protected function setUp() {
|
||||
parent::setUp();
|
||||
$this->installEntitySchema('menu_link_content');
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests the MenuLinkContent::preDelete function.
|
||||
*/
|
||||
public function testMenuLinkContentDelete() {
|
||||
// Add new menu items in a hierarchy.
|
||||
$parent = MenuLinkContent::create([
|
||||
'title' => $this->randomMachineName(8),
|
||||
'link' => [['uri' => 'internal:/']],
|
||||
'menu_name' => 'main',
|
||||
]);
|
||||
$parent->save();
|
||||
$child1 = MenuLinkContent::create([
|
||||
'title' => $this->randomMachineName(8),
|
||||
'link' => [['uri' => 'internal:/']],
|
||||
'menu_name' => 'main',
|
||||
'parent' => 'menu_link_content:' . $parent->uuid(),
|
||||
]);
|
||||
$child1->save();
|
||||
$child2 = MenuLinkContent::create([
|
||||
'title' => $this->randomMachineName(8),
|
||||
'link' => [['uri' => 'internal:/']],
|
||||
'menu_name' => 'main',
|
||||
'parent' => 'menu_link_content:' . $child1->uuid(),
|
||||
]);
|
||||
$child2->save();
|
||||
|
||||
// Delete the middle child.
|
||||
$child1->delete();
|
||||
// Refresh $child2.
|
||||
$child2 = MenuLinkContent::load($child2->id());
|
||||
// Test the reference in the child.
|
||||
$this->assertSame('menu_link_content:' . $parent->uuid(), $child2->getParentId());
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in New Issue