Issue #2939692 by Leksat, blazey, larowlan: menu_link_content_entity_predelete deletes "collection", "add-form", etc. links
parent
7e343df734
commit
6029e8a9f8
|
@ -89,10 +89,17 @@ function menu_link_content_path_delete($path) {
|
|||
function menu_link_content_entity_predelete(EntityInterface $entity) {
|
||||
/** @var \Drupal\Core\Menu\MenuLinkManagerInterface $menu_link_manager */
|
||||
$menu_link_manager = \Drupal::service('plugin.manager.menu.link');
|
||||
$entity_type_id = $entity->getEntityTypeId();
|
||||
foreach ($entity->uriRelationships() as $rel) {
|
||||
$url = $entity->toUrl($rel);
|
||||
$route_parameters = $url->getRouteParameters();
|
||||
if (!isset($route_parameters[$entity_type_id])) {
|
||||
// Do not delete links which do not relate to this exact entity. For
|
||||
// example, "collection", "add-form", etc.
|
||||
continue;
|
||||
}
|
||||
// Delete all MenuLinkContent links that point to this entity route.
|
||||
$result = $menu_link_manager->loadLinksByRoute($url->getRouteName(), $url->getRouteParameters());
|
||||
$result = $menu_link_manager->loadLinksByRoute($url->getRouteName(), $route_parameters);
|
||||
|
||||
if ($result) {
|
||||
foreach ($result as $id => $instance) {
|
||||
|
|
|
@ -147,8 +147,12 @@ class LinksTest extends BrowserTestBase {
|
|||
* Tests that menu link pointing to entities get removed on entity remove.
|
||||
*/
|
||||
public function testMenuLinkOnEntityDelete() {
|
||||
|
||||
// Create user.
|
||||
$user = User::create(['name' => 'username']);
|
||||
$user->save();
|
||||
|
||||
// Create "canonical" menu link pointing to the user.
|
||||
$menu_link_content = MenuLinkContent::create([
|
||||
'title' => 'username profile',
|
||||
'menu_name' => 'menu_test',
|
||||
|
@ -156,11 +160,30 @@ class LinksTest extends BrowserTestBase {
|
|||
'bundle' => 'menu_test',
|
||||
]);
|
||||
$menu_link_content->save();
|
||||
|
||||
// Create "collection" menu link pointing to the user listing page.
|
||||
$menu_link_content_collection = MenuLinkContent::create([
|
||||
'title' => 'users listing',
|
||||
'menu_name' => 'menu_test',
|
||||
'link' => [['uri' => 'internal:/' . $user->toUrl('collection')->getInternalPath()]],
|
||||
'bundle' => 'menu_test',
|
||||
]);
|
||||
$menu_link_content_collection->save();
|
||||
|
||||
// Check is menu links present in the menu.
|
||||
$menu_tree_condition = (new MenuTreeParameters())->addCondition('route_name', 'entity.user.canonical');
|
||||
$this->assertCount(1, \Drupal::menuTree()->load('menu_test', $menu_tree_condition));
|
||||
$menu_tree_condition_collection = (new MenuTreeParameters())->addCondition('route_name', 'entity.user.collection');
|
||||
$this->assertCount(1, \Drupal::menuTree()->load('menu_test', $menu_tree_condition_collection));
|
||||
|
||||
// Delete the user.
|
||||
$user->delete();
|
||||
|
||||
// The "canonical" menu item has to be deleted.
|
||||
$this->assertCount(0, \Drupal::menuTree()->load('menu_test', $menu_tree_condition));
|
||||
|
||||
// The "collection" menu item should still present in the menu.
|
||||
$this->assertCount(1, \Drupal::menuTree()->load('menu_test', $menu_tree_condition_collection));
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
Loading…
Reference in New Issue