diff --git a/core/modules/menu_link_content/menu_link_content.install b/core/modules/menu_link_content/menu_link_content.install new file mode 100644 index 0000000..c31536b --- /dev/null +++ b/core/modules/menu_link_content/menu_link_content.install @@ -0,0 +1,15 @@ +getStorage('menu_link_content') - ->loadByProperties(['link__uri' => 'user-path:' . $path_alias]); + ->loadByProperties(['link__uri' => 'user-path:' . $path]); foreach ($entities as $menu_link) { $menu_link_manager->updateDefinition($menu_link->getPluginId(), $menu_link->getPluginDefinition(), FALSE); } @@ -73,6 +73,12 @@ function menu_link_content_path_update($path) { _menu_link_content_update_path_alias($path['alias']); _menu_link_content_update_path_alias($path['original']['alias']); } + + if ($path['source'] != $path['original']['source']) { + _menu_link_content_update_path_alias($path['alias']); + _menu_link_content_update_path_alias($path['source']); + _menu_link_content_update_path_alias($path['original']['source']); + } } /** diff --git a/core/modules/menu_link_content/src/Tests/PathAliasMenuLinkContentTest.php b/core/modules/menu_link_content/src/Tests/PathAliasMenuLinkContentTest.php new file mode 100644 index 0000000..4e04ec6 --- /dev/null +++ b/core/modules/menu_link_content/src/Tests/PathAliasMenuLinkContentTest.php @@ -0,0 +1,89 @@ +installEntitySchema('menu_link_content'); + $this->installSchema('system', ['url_alias', 'router']); + + // Ensure that the weight of module_link_content is higher than system. + // @see menu_link_content_install() + module_set_weight('menu_link_content', 1); + } + + /** + * {@inheritdoc} + */ + public function containerBuild(ContainerBuilder $container) { + parent::containerBuild($container); + + $definition = $container->getDefinition('path_processor_alias'); + $definition + ->addTag('path_processor_inbound', ['priority' => 100]); + } + + + /** + * Tests the path aliasing changing. + */ + public function testPathAliasChange() { + \Drupal::service('router.builder')->rebuild(); + + /** @var \Drupal\Core\Path\AliasStorageInterface $path_alias_storage */ + $path_alias_storage = \Drupal::service('path.alias_storage'); + $alias = $path_alias_storage->save('test-page', 'destination'); + $pid = $alias['pid']; + + $menu_link_content = MenuLinkContent::create([ + 'title' => 'Menu title', + 'link' => ['uri' => 'user-path:destination'], + 'menu_name' => 'tools', + ]); + $menu_link_content->save(); + + $tree = \Drupal::menuTree()->load('tools', new MenuTreeParameters()); + $this->assertEqual('test_page_test.test_page', $tree[$menu_link_content->getPluginId()]->link->getPluginDefinition()['route_name']); + + // Saving an alias should clear the alias manager cache. + $path_alias_storage->save('test-render-title', 'destination', LanguageInterface::LANGCODE_NOT_SPECIFIED, $pid); + + $tree = \Drupal::menuTree()->load('tools', new MenuTreeParameters()); + $this->assertEqual('test_page_test.render_title', $tree[$menu_link_content->getPluginId()]->link->getPluginDefinition()['route_name']); + + // Delete the alias. + $path_alias_storage->delete(['pid' => $pid]); + $tree = \Drupal::menuTree()->load('tools', new MenuTreeParameters()); + $this->assertTrue(isset($tree[$menu_link_content->getPluginId()])); + $this->assertEqual('', $tree[$menu_link_content->getPluginId()]->link->getRouteName()); + $this->assertEqual('base:destination', $tree[$menu_link_content->getPluginId()]->link->getUrlObject()->getUri()); + } + +}