diff --git a/core/lib/Drupal/Core/Menu/DefaultMenuLinkTreeManipulators.php b/core/lib/Drupal/Core/Menu/DefaultMenuLinkTreeManipulators.php index 000d50c..266ee8e 100644 --- a/core/lib/Drupal/Core/Menu/DefaultMenuLinkTreeManipulators.php +++ b/core/lib/Drupal/Core/Menu/DefaultMenuLinkTreeManipulators.php @@ -47,10 +47,10 @@ public function __construct(AccessManager $access_manager, AccountInterface $acc * Makes the resulting menu tree impossible to render cache, unless render * caching per user is acceptable. * - * @param \Drupal\Core\Menu\MenuTreeElement[] $tree + * @param \Drupal\Core\Menu\MenuLinkTreeElement[] $tree * The menu link tree to manipulate. * - * @return \Drupal\Core\Menu\MenuTreeElement[] + * @return \Drupal\Core\Menu\MenuLinkTreeElement[] * The manipulated menu link tree. */ public function checkAccess(array $tree) { @@ -98,10 +98,10 @@ protected function menuLinkCheckAccess(MenuLinkInterface $instance) { /** * Menu link tree manipulator that generates a unique index, and sorts by it. * - * @param \Drupal\Core\Menu\MenuTreeElement[] $tree + * @param \Drupal\Core\Menu\MenuLinkTreeElement[] $tree * The menu link tree to manipulate. * - * @return \Drupal\Core\Menu\MenuTreeElement[] + * @return \Drupal\Core\Menu\MenuLinkTreeElement[] * The manipulated menu link tree. */ public function generateIndexAndSort(array $tree) { @@ -125,10 +125,10 @@ public function generateIndexAndSort(array $tree) { /** * Menu link tree manipulator that flattens the tree to a single level. * - * @param \Drupal\Core\Menu\MenuTreeElement[] $tree + * @param \Drupal\Core\Menu\MenuLinkTreeElement[] $tree * The menu link tree to manipulate. * - * @return \Drupal\Core\Menu\MenuTreeElement[] + * @return \Drupal\Core\Menu\MenuLinkTreeElement[] * The manipulated menu link tree. */ public function flatten(array $tree) { @@ -144,12 +144,12 @@ public function flatten(array $tree) { /** * Menu link tree manipulator that extracts a subtree of the active trail. * - * @param \Drupal\Core\Menu\MenuTreeElement[] $tree + * @param \Drupal\Core\Menu\MenuLinkTreeElement[] $tree * The menu link tree to manipulate. * @param int $level * The level in the active trail to extract. * - * @return \Drupal\Core\Menu\MenuTreeElement[] + * @return \Drupal\Core\Menu\MenuLinkTreeElement[] * The manipulated menu link tree. */ public function extractSubtreeOfActiveTrail(array $tree, $level) { diff --git a/core/lib/Drupal/Core/Menu/MenuLinkTree.php b/core/lib/Drupal/Core/Menu/MenuLinkTree.php index d8461fd..7f1bed4 100644 --- a/core/lib/Drupal/Core/Menu/MenuLinkTree.php +++ b/core/lib/Drupal/Core/Menu/MenuLinkTree.php @@ -79,7 +79,7 @@ public function __construct(MenuTreeStorageInterface $tree_storage, MenuLinkMana public function getDefaultRenderedMenuTreeLinkParameters($menu_name) { $active_trail = $this->menuActiveTrail->getActiveTrailIds($menu_name); - $parameters = new MenuLinkTreeParameters(); + $parameters = new MenuTreeParameters(); $parameters->setActiveTrail($active_trail) // We want links in the active trail to be expanded. ->addExpanded($active_trail) @@ -94,30 +94,34 @@ public function getDefaultRenderedMenuTreeLinkParameters($menu_name) { /** * {@inheritdoc} */ - public function load($menu_name, MenuLinkTreeParameters $parameters) { + public function load($menu_name, MenuTreeParameters $parameters) { $data = $this->treeStorage->loadTreeData($menu_name, $parameters); - // Pre-load all the route objects in the subtree for access checks. + // Pre-load all the route objects in the tree for access checks. if ($data['route_names']) { $this->routeProvider->getRoutesByNames($data['route_names']); } - $tree = $data['tree']; - $this->createInstances($tree); - return $tree; + return $this->createInstances($data['tree']); } /** * Helper function that recursively instantiates the plugins. */ - protected function createInstances(&$tree) { - foreach (array_keys($tree) as $id) { - // Upcast the MenuTreeElement's "link" property from a definition to - // an instance. - $tree[$id]->link = $this->menuLinkManager->createInstance($tree[$id]->link['id']); - - if (!empty($tree[$id]->subtree)) { - $this->createInstances($tree[$id]->subtree); - } + protected function createInstances($data_tree) { + $tree = array(); + foreach ($data_tree as $key => $element) { + $subtree = $this->createInstances($element['subtree']); + // Build a MenuLinkTreeElement out of the menu tree link definition: + // transform the tree link definition into a link definition and store + // tree metadata. + $tree[$key] = new MenuLinkTreeElement( + $this->menuLinkManager->createInstance($element['definition']['id']), + (bool) $element['has_children'], + (int) $element['depth'], + (bool) $element['in_active_trail'], + $subtree + ); } + return $tree; } /** diff --git a/core/lib/Drupal/Core/Menu/MenuTreeElement.php b/core/lib/Drupal/Core/Menu/MenuLinkTreeElement.php similarity index 85% rename from core/lib/Drupal/Core/Menu/MenuTreeElement.php rename to core/lib/Drupal/Core/Menu/MenuLinkTreeElement.php index a285406..beb6446 100644 --- a/core/lib/Drupal/Core/Menu/MenuTreeElement.php +++ b/core/lib/Drupal/Core/Menu/MenuLinkTreeElement.php @@ -2,7 +2,7 @@ /** * @file - * Contains \Drupal\Core\Menu\MenuTreeElement. + * Contains \Drupal\Core\Menu\MenuLinkTreeElement. */ namespace Drupal\Core\Menu; @@ -27,7 +27,7 @@ * * @see \Drupal\Core\Menu\MenuTreeStorage::loadTreeData() */ -class MenuTreeElement { +class MenuLinkTreeElement { /** * The menu link for this element in a menu link tree. @@ -42,7 +42,7 @@ class MenuTreeElement { * (Children of a link are only loaded if a link is marked as "expanded" by * the query.) * - * @var \Drupal\Core\Menu\MenuTreeElement[] + * @var \Drupal\Core\Menu\MenuLinkTreeElement[] */ public $subtree; @@ -81,17 +81,17 @@ class MenuTreeElement { * \Drupal\Core\Menu\MenuLinkInterface::getOptions(), to allow menu link tree * manipulators to add or override link options. */ - public $options; + public $options = array(); /** - * Constructs a new MenuTreeElement. + * Constructs a new MenuLinkTreeElement. * - * @param \Drupal\Core\Menu\MenuLinkInterface|array $link + * @param \Drupal\Core\Menu\MenuLinkInterface $link * The menu link for this element in the menu link tree. * @param bool $has_children * @param int $depth * @param bool $in_active_trail - * @param \Drupal\Core\Menu\MenuTreeElement[] $subtree + * @param \Drupal\Core\Menu\MenuLinkTreeElement[] $subtree * The children of this element in the menu link tree. */ public function __construct($link, $has_children, $depth, $in_active_trail, array $subtree) { @@ -101,21 +101,17 @@ public function __construct($link, $has_children, $depth, $in_active_trail, arra $this->depth = $depth; $this->subtree = $subtree; $this->inActiveTrail = $in_active_trail; - - // Properties that will be updated by menu link tree manipulators. - $this->access = NULL; - $this->options = array(); } /** * Counts all menu links in the current subtree. * * @return int - * The number of menu links in this subtree (one plus the number of elements - * in all descendants). + * The number of menu links in this subtree (one plus the number of menu + * links in all descendants). */ public function count() { - $sum = function ($carry, MenuTreeElement $element) { + $sum = function ($carry, MenuLinkTreeElement $element) { return $carry + $element->count(); }; return 1 + array_reduce($this->subtree, $sum); diff --git a/core/lib/Drupal/Core/Menu/MenuLinkTreeInterface.php b/core/lib/Drupal/Core/Menu/MenuLinkTreeInterface.php index 97958e0..f2e8be3 100644 --- a/core/lib/Drupal/Core/Menu/MenuLinkTreeInterface.php +++ b/core/lib/Drupal/Core/Menu/MenuLinkTreeInterface.php @@ -56,7 +56,7 @@ * The menu name, needed for retrieving the active trail and links with the * 'expanded' flag enabled. * - * @return \Drupal\Core\Menu\MenuLinkTreeParameters $parameters + * @return \Drupal\Core\Menu\MenuTreeParameters $parameters * The parameters to determine which menu links to be loaded into a tree. */ public function getDefaultRenderedMenuTreeLinkParameters($menu_name); @@ -66,18 +66,18 @@ public function getDefaultRenderedMenuTreeLinkParameters($menu_name); * * @param string $menu_name * The name of the menu. - * @param \Drupal\Core\Menu\MenuLinkTreeParameters $parameters + * @param \Drupal\Core\Menu\MenuTreeParameters $parameters * The parameters to determine which menu links to be loaded into a tree. * - * @return \Drupal\Core\Menu\MenuTreeElement[] + * @return array * A menu link tree. */ - public function load($menu_name, MenuLinkTreeParameters $parameters); + public function load($menu_name, MenuTreeParameters $parameters); /** * Applies menu link tree manipulators to transform the given tree. * - * @param \Drupal\Core\Menu\MenuTreeElement[] $tree + * @param \Drupal\Core\Menu\MenuLinkTreeElement[] $tree * The menu tree to manipulate. * @param array $manipulators * The menu link tree manipulators to apply. Each is an array with keys: @@ -85,7 +85,7 @@ public function load($menu_name, MenuLinkTreeParameters $parameters); * by ControllerResolverInterface::getControllerFromDefinition() * - args: optional array of arguments to pass to the callable after $tree. * - * @return \Drupal\Core\Menu\MenuTreeElement[] + * @return \Drupal\Core\Menu\MenuLinkTreeElement[] * The manipulated menu link tree. */ public function transform(array $tree, array $manipulators); diff --git a/core/lib/Drupal/Core/Menu/MenuParentFormSelector.php b/core/lib/Drupal/Core/Menu/MenuParentFormSelector.php index 823f3f9..6732a1a 100644 --- a/core/lib/Drupal/Core/Menu/MenuParentFormSelector.php +++ b/core/lib/Drupal/Core/Menu/MenuParentFormSelector.php @@ -45,7 +45,7 @@ public function getParentSelectOptions($id = '', array $menus = NULL) { foreach ($menus as $menu_name => $menu_title) { $options[$menu_name . ':'] = '<' . $menu_title . '>'; - $parameters = new MenuLinkTreeParameters(); + $parameters = new MenuTreeParameters(); $parameters->setMaxDepth($depth_limit); $tree = $this->menuLinkTree->load($menu_name, $parameters); $manipulators = array( diff --git a/core/lib/Drupal/Core/Menu/MenuLinkTreeParameters.php b/core/lib/Drupal/Core/Menu/MenuTreeParameters.php similarity index 91% rename from core/lib/Drupal/Core/Menu/MenuLinkTreeParameters.php rename to core/lib/Drupal/Core/Menu/MenuTreeParameters.php index 50caa9f..4976598 100644 --- a/core/lib/Drupal/Core/Menu/MenuLinkTreeParameters.php +++ b/core/lib/Drupal/Core/Menu/MenuTreeParameters.php @@ -2,25 +2,25 @@ /** * @file - * Contains \Drupal\Core\Menu\MenuLinkTreeParameters. + * Contains \Drupal\Core\Menu\MenuTreeParameters. */ namespace Drupal\Core\Menu; /** - * Provides a value object to model menu link tree parameters. + * Provides a value object to model menu tree parameters. * - * Menu link tree parameters are used to determine the set of menu links to be - * loaded from \Drupal\Core\Menu\MenuTreeStorageInterface. Hence they indirectly - * affect the shape of the menu link tree: + * Menu tree parameters are used to determine the set of definitions to be + * loaded from \Drupal\Core\Menu\MenuTreeStorageInterface. Hence they determine + * the shape and content of the tree: * - which links should be expanded, i.e. subtrees will get loaded that may not * be loaded otherwise * - which menu links are omitted, i.e. minimum and maximum depth * - * All of the methods on this value object class can be considered aliases to - * help improve DX. None of them are necessary, since all properties are public. + * @todo - add getter methods and make all properties protected. + * @todo - define an interface instead of using the concrete class to type hint. */ -class MenuLinkTreeParameters { +class MenuTreeParameters { /** * A menu link plugin ID that should be used as the root. @@ -92,7 +92,7 @@ class MenuLinkTreeParameters { * @codeCoverageIgnore */ public function setRoot($root) { - $this->root = $root; + $this->root = (string) $root; return $this; } diff --git a/core/lib/Drupal/Core/Menu/MenuTreeStorage.php b/core/lib/Drupal/Core/Menu/MenuTreeStorage.php index 2027fe5..1b6d0d8 100644 --- a/core/lib/Drupal/Core/Menu/MenuTreeStorage.php +++ b/core/lib/Drupal/Core/Menu/MenuTreeStorage.php @@ -749,7 +749,7 @@ protected function saveRecursive($id, &$children, &$links) { /** * {@inheritdoc} */ - public function loadTreeData($menu_name, MenuLinkTreeParameters $parameters) { + public function loadTreeData($menu_name, MenuTreeParameters $parameters) { // Build the cache id; sort 'expanded' and 'conditions' to prevent duplicate // cache items. sort($parameters->expanded); @@ -781,17 +781,17 @@ public function loadTreeData($menu_name, MenuLinkTreeParameters $parameters) { * * @param string $menu_name * A menu name. - * @param MenuLinkTreeParameters &$parameters + * @param MenuTreeParameters $parameters * The parameters to determine which menu links to be loaded into a tree. - * Passed by reference, so that ::loadLinks() can set the absolute minimum - * depth, which is used by ::doBuildTreeData(). + * ::loadLinks() will set the absolute minimum depth, which is used + * ::doBuildTreeData(). * @return array * A flat array of menu links that are part of the menu. Each array element * is an associative array of information about the menu link, containing * the fields from the {menu_tree} table. This array must be ordered * depth-first. */ - protected function loadLinks($menu_name, MenuLinkTreeParameters &$parameters) { + protected function loadLinks($menu_name, MenuTreeParameters $parameters) { $query = $this->connection->select($this->table, $this->options); $query->fields($this->table); @@ -906,13 +906,12 @@ protected function collectRoutesAndDefinitions(array $tree, array &$definitions) protected function doCollectRoutesAndDefinitions(array $tree, array &$definitions) { $route_names = array(); foreach (array_keys($tree) as $id) { - $definition = $this->definitions[$id]; - $definitions[$id] = $definition; + $definitions[$id] = $this->definitions[$id]; if (!empty($definition['route_name'])) { $route_names[$definition['route_name']] = $definition['route_name']; } - if (!empty($tree[$id]->subtree)) { - $route_names += $this->doCollectRoutesAndDefinitions($tree[$id]->subtree, $definitions); + if ($tree[$id]['subtree']) { + $route_names += $this->doCollectRoutesAndDefinitions($tree[$id]['subtree'], $definitions); } } return $route_names; @@ -927,7 +926,7 @@ public function loadSubtreeData($id, $max_relative_depth = NULL) { if (!$root) { return $tree; } - $parameters = new MenuLinkTreeParameters(); + $parameters = new MenuTreeParameters(); $parameters->setRoot($id)->excludeHiddenLinks(); return $this->loadTreeData($root['menu_name'], $parameters); } @@ -986,8 +985,8 @@ public function getAllChildIds($id) { /** * {@inheritdoc} */ - public function loadAllChildLinks($id, $max_relative_depth = NULL) { - $parameters = new MenuLinkTreeParameters(); + public function loadAllChildren($id, $max_relative_depth = NULL) { + $parameters = new MenuTreeParameters(); $parameters->setRoot($id)->excludeRoot()->setMaxDepth($max_relative_depth)->excludeHiddenLinks(); $links = $this->loadLinks(NULL, $parameters); foreach ($links as $id => $link) { @@ -1029,19 +1028,15 @@ protected function doBuildTreeData(array $links, array $parents = array(), $dept protected function treeDataRecursive(array &$links, array $parents, $depth) { $tree = array(); while ($tree_link_definition = array_pop($links)) { - // Build a MenuTreeElement out of the menu link tree definition: - // transform the menu link tree definition into a menu link definition and - // store tree metadata in MenuTreeElement. - $tree[$tree_link_definition['id']] = new MenuTreeElement( - $this->prepareLink($tree_link_definition, TRUE), - (bool) $tree_link_definition['has_children'], - (int) $tree_link_definition['depth'], + $tree[$tree_link_definition['id']] = array( + 'definition' => $this->prepareLink($tree_link_definition, TRUE), + 'has_children' => $tree_link_definition['has_children'], // We need to determine if we're on the path to root so we can later build // the correct active trail. - in_array($tree_link_definition['id'], $parents), - array() + 'in_active_trail' => in_array($tree_link_definition['id'], $parents), + 'subtree' => array(), + 'depth' => $tree_link_definition['depth'], ); - // Look ahead to the next link, but leave it on the array so it's // available to other recursive function calls if we return or build a // sub-tree. @@ -1049,7 +1044,7 @@ protected function treeDataRecursive(array &$links, array $parents, $depth) { // Check whether the next link is the first in a new sub-tree. if ($next && $next['depth'] > $depth) { // Recursively call doBuildTreeData to build the sub-tree. - $tree[$tree_link_definition['id']]->subtree = $this->treeDataRecursive($links, $parents, $next['depth']); + $tree[$tree_link_definition['id']]['subtree'] = $this->treeDataRecursive($links, $parents, $next['depth']); // Fetch next link after filling the sub-tree. $next = end($links); } diff --git a/core/lib/Drupal/Core/Menu/MenuTreeStorageInterface.php b/core/lib/Drupal/Core/Menu/MenuTreeStorageInterface.php index 78042d5..06fff26 100644 --- a/core/lib/Drupal/Core/Menu/MenuTreeStorageInterface.php +++ b/core/lib/Drupal/Core/Menu/MenuTreeStorageInterface.php @@ -121,7 +121,7 @@ public function delete($id); * * @param string $menu_name * The name of the menu. - * @param \Drupal\Core\Menu\MenuLinkTreeParameters $parameters + * @param \Drupal\Core\Menu\MenuTreeParameters $parameters * The parameters to determine which menu links to be loaded into a tree. * * @return array @@ -129,7 +129,7 @@ public function delete($id); * - tree: A fully built menu tree. * - route_names: An array of all route names used in the tree. */ - public function loadTreeData($menu_name, MenuLinkTreeParameters $parameters); + public function loadTreeData($menu_name, MenuTreeParameters $parameters); /** * Loads all the visible menu links that are below the given ID. @@ -146,7 +146,7 @@ public function loadTreeData($menu_name, MenuLinkTreeParameters $parameters); * @return array * An array of visible (not hidden) link definitions, keyed by ID. */ - public function loadAllChildLinks($id, $max_relative_depth = NULL); + public function loadAllChildren($id, $max_relative_depth = NULL); /** * Loads all the IDs for menu links that are below the given ID. @@ -160,7 +160,7 @@ public function loadAllChildLinks($id, $max_relative_depth = NULL); public function getAllChildIds($id); /** - * Loads a subtree rooted by the given menu link plugin ID. + * Loads a subtree rooted by the given ID. * * The returned links are structured like those from loadTreeData(). * diff --git a/core/modules/menu_ui/src/MenuForm.php b/core/modules/menu_ui/src/MenuForm.php index 14e92b1..183c992 100644 --- a/core/modules/menu_ui/src/MenuForm.php +++ b/core/modules/menu_ui/src/MenuForm.php @@ -11,10 +11,10 @@ use Drupal\Core\Entity\EntityForm; use Drupal\Core\Entity\Query\QueryFactory; use Drupal\Core\Language\LanguageInterface; -use Drupal\Core\Menu\MenuTreeElement; +use Drupal\Core\Menu\MenuLinkTreeElement; use Drupal\Core\Menu\MenuLinkTreeInterface; use Drupal\Core\Menu\MenuLinkManagerInterface; -use Drupal\Core\Menu\MenuLinkTreeParameters; +use Drupal\Core\Menu\MenuTreeParameters; use Drupal\Core\Render\Element; use Symfony\Component\DependencyInjection\ContainerInterface; @@ -204,7 +204,7 @@ protected function buildOverviewForm(array &$form, array &$form_state) { $form['#attached']['css'] = array(drupal_get_path('module', 'menu') . '/css/menu.admin.css'); - $tree = $this->menuTree->load($this->entity->id(), new MenuLinkTreeParameters()); + $tree = $this->menuTree->load($this->entity->id(), new MenuTreeParameters()); // We indicate that a menu administrator is running the menu access check. $manipulators = array( @@ -217,7 +217,7 @@ protected function buildOverviewForm(array &$form, array &$form_state) { // Determine the delta; the number of weights to be made available. $count = function(array $tree) { - $sum = function ($carry, MenuTreeElement $item) { + $sum = function ($carry, MenuLinkTreeElement $item) { return $carry + $item->count(); }; return array_reduce($tree, $sum); diff --git a/core/modules/system/src/Controller/SystemController.php b/core/modules/system/src/Controller/SystemController.php index e7db8a7..459f1e6 100644 --- a/core/modules/system/src/Controller/SystemController.php +++ b/core/modules/system/src/Controller/SystemController.php @@ -13,7 +13,7 @@ use Drupal\Core\Extension\ThemeHandlerInterface; use Drupal\Core\Form\FormBuilderInterface; use Drupal\Core\Menu\MenuLinkTreeInterface; -use Drupal\Core\Menu\MenuLinkTreeParameters; +use Drupal\Core\Menu\MenuTreeParameters; use Drupal\Core\Theme\ThemeAccessCheck; use Drupal\system\SystemManager; use Symfony\Component\DependencyInjection\ContainerInterface; @@ -118,7 +118,7 @@ public function overview($link_id) { if ($this->systemManager->checkRequirements() && $this->currentUser()->hasPermission('administer site configuration')) { drupal_set_message($this->t('One or more problems were detected with your Drupal installation. Check the status report for more information.', array('@status' => url('admin/reports/status'))), 'error'); } - $parameters = new MenuLinkTreeParameters(); + $parameters = new MenuTreeParameters(); $parameters->setRoot($link_id)->excludeRoot()->topLevelOnly()->excludeHiddenLinks(); $tree = $this->menuLinkTree->load(NULL, $parameters); $manipulators = array( diff --git a/core/modules/system/src/SystemManager.php b/core/modules/system/src/SystemManager.php index af80b61..7b4b59d 100644 --- a/core/modules/system/src/SystemManager.php +++ b/core/modules/system/src/SystemManager.php @@ -10,7 +10,7 @@ use Drupal\Core\Menu\MenuLinkInterface; use Drupal\Core\Menu\MenuActiveTrailInterface; use Drupal\Core\Entity\EntityManagerInterface; -use Drupal\Core\Menu\MenuLinkTreeParameters; +use Drupal\Core\Menu\MenuTreeParameters; use Symfony\Cmf\Component\Routing\RouteObjectInterface; use Drupal\Core\Database\Connection; use Drupal\Core\Extension\ModuleHandlerInterface; @@ -214,7 +214,7 @@ public function getAdminBlock(MenuLinkInterface $instance) { $content = array(); // Only find the children of this link. $link_id = $instance->getPluginId(); - $parameters = new MenuLinkTreeParameters(); + $parameters = new MenuTreeParameters(); $parameters->setRoot($link_id)->excludeRoot()->topLevelOnly()->excludeHiddenLinks(); $tree = $this->menuTree->load(NULL, $parameters); $manipulators = array( diff --git a/core/modules/system/src/Tests/Menu/MenuLinkTreeTest.php b/core/modules/system/src/Tests/Menu/MenuLinkTreeTest.php index 1e6b0bd..4b2af79 100644 --- a/core/modules/system/src/Tests/Menu/MenuLinkTreeTest.php +++ b/core/modules/system/src/Tests/Menu/MenuLinkTreeTest.php @@ -7,8 +7,8 @@ namespace Drupal\system\Tests\Menu; -use Drupal\Core\Menu\MenuTreeElement; -use Drupal\Core\Menu\MenuLinkTreeParameters; +use Drupal\Core\Menu\MenuLinkTreeElement; +use Drupal\Core\Menu\MenuTreeParameters; use Drupal\simpletest\KernelTestBase; use Drupal\Tests\Core\Menu\MenuLinkMock; @@ -76,17 +76,17 @@ public function testDeleteLinksInMenu() { \Drupal::entityManager()->getStorage('menu_link_content')->create(array('route_name' => 'menu_test.menu_name_test', 'menu_name' => 'menu1', 'bundle' => 'menu_link_content'))->save(); \Drupal::entityManager()->getStorage('menu_link_content')->create(array('route_name' => 'menu_test.menu_name_test', 'menu_name' => 'menu2', 'bundle' => 'menu_link_content'))->save(); - $output = $this->linkTree->load('menu1', new MenuLinkTreeParameters()); + $output = $this->linkTree->load('menu1', new MenuTreeParameters()); $this->assertEqual(count($output), 2); - $output = $this->linkTree->load('menu2', new MenuLinkTreeParameters()); + $output = $this->linkTree->load('menu2', new MenuTreeParameters()); $this->assertEqual(count($output), 1); $this->menuLinkManager->deleteLinksInMenu('menu1'); - $output = $this->linkTree->load('menu1', new MenuLinkTreeParameters()); + $output = $this->linkTree->load('menu1', new MenuTreeParameters()); $this->assertEqual(count($output), 0); - $output = $this->linkTree->load('menu2', new MenuLinkTreeParameters()); + $output = $this->linkTree->load('menu2', new MenuTreeParameters()); $this->assertEqual(count($output), 1); } @@ -117,18 +117,18 @@ public function testCreateLinksInMenu() { foreach ($links as $instance) { $this->menuLinkManager->createLink($instance->getPluginId(), $instance->getPluginDefinition()); } - $parameters = new MenuLinkTreeParameters(); + $parameters = new MenuTreeParameters(); $tree = $this->linkTree->load('mock', $parameters); $count = function(array $tree) { - $sum = function ($carry, MenuTreeElement $item) { + $sum = function ($carry, MenuLinkTreeElement $item) { return $carry + $item->count(); }; return array_reduce($tree, $sum); }; $this->assertEqual($count($tree), 8); - $parameters = new MenuLinkTreeParameters(); + $parameters = new MenuTreeParameters(); $parameters->setRoot('test.example2'); $tree = $this->linkTree->load($instance->getMenuName(), $parameters); $top_link = reset($tree); diff --git a/core/modules/system/src/Tests/Menu/MenuTreeStorageTest.php b/core/modules/system/src/Tests/Menu/MenuTreeStorageTest.php index f09e71e..0df4c1e 100644 --- a/core/modules/system/src/Tests/Menu/MenuTreeStorageTest.php +++ b/core/modules/system/src/Tests/Menu/MenuTreeStorageTest.php @@ -8,7 +8,7 @@ namespace Drupal\system\Tests\Menu; use Drupal\Component\Plugin\Exception\PluginException; -use Drupal\Core\Menu\MenuLinkTreeParameters; +use Drupal\Core\Menu\MenuTreeParameters; use Drupal\Core\Menu\MenuTreeStorage; use Drupal\simpletest\KernelTestBase; @@ -254,28 +254,28 @@ public function testLoadTree() { $this->addMenuLink('test4'); $this->addMenuLink('test5', 'test4'); - $data = $this->treeStorage->loadTreeData('tools', new MenuLinkTreeParameters()); + $data = $this->treeStorage->loadTreeData('tools', new MenuTreeParameters()); $tree = $data['tree']; - $this->assertEqual(count($tree['test1']->subtree), 1); - $this->assertEqual(count($tree['test1']->subtree['test2']->subtree), 1); - $this->assertEqual(count($tree['test1']->subtree['test2']->subtree['test3']->subtree), 0); - $this->assertEqual(count($tree['test4']->subtree), 1); - $this->assertEqual(count($tree['test4']->subtree['test5']->subtree), 0); + $this->assertEqual(count($tree['test1']['subtree']), 1); + $this->assertEqual(count($tree['test1']['subtree']['test2']['subtree']), 1); + $this->assertEqual(count($tree['test1']['subtree']['test2']['subtree']['test3']['subtree']), 0); + $this->assertEqual(count($tree['test4']['subtree']), 1); + $this->assertEqual(count($tree['test4']['subtree']['test5']['subtree']), 0); - $parameters = new MenuLinkTreeParameters(); + $parameters = new MenuTreeParameters(); $parameters->setActiveTrail(array('test4', 'test5')); $data = $this->treeStorage->loadTreeData('tools', $parameters); $tree = $data['tree']; - $this->assertEqual(count($tree['test1']->subtree), 1); - $this->assertFalse($tree['test1']->inActiveTrail); - $this->assertEqual(count($tree['test1']->subtree['test2']->subtree), 1); - $this->assertFalse($tree['test1']->subtree['test2']->inActiveTrail); - $this->assertEqual(count($tree['test1']->subtree['test2']->subtree['test3']->subtree), 0); - $this->assertFalse($tree['test1']->subtree['test2']->subtree['test3']->inActiveTrail); - $this->assertEqual(count($tree['test4']->subtree), 1); - $this->assertTrue($tree['test4']->inActiveTrail); - $this->assertEqual(count($tree['test4']->subtree['test5']->subtree), 0); - $this->assertTrue($tree['test4']->subtree['test5']->inActiveTrail); + $this->assertEqual(count($tree['test1']['subtree']), 1); + $this->assertFalse($tree['test1']['in_active_trail']); + $this->assertEqual(count($tree['test1']['subtree']['test2']['subtree']), 1); + $this->assertFalse($tree['test1']['subtree']['test2']['in_active_trail']); + $this->assertEqual(count($tree['test1']['subtree']['test2']['subtree']['test3']['subtree']), 0); + $this->assertFalse($tree['test1']['subtree']['test2']['subtree']['test3']['in_active_trail']); + $this->assertEqual(count($tree['test4']['subtree']), 1); + $this->assertTrue($tree['test4']['in_active_trail']); + $this->assertEqual(count($tree['test4']['subtree']['test5']['subtree']), 0); + $this->assertTrue($tree['test4']['subtree']['test5']['in_active_trail']); } /** @@ -388,7 +388,7 @@ protected function assertMenuLink($id, array $expected_properties, array $parent if ($parents) { $this->assertEqual($raw['parent'], end($parents), 'Ensure that the parent field is set properly'); } - $found_children = array_keys($this->treeStorage->loadAllChildLinks($id)); + $found_children = array_keys($this->treeStorage->loadAllChildren($id)); // We need both these checks since the 2nd will pass if there are extra // IDs loaded in $found_children. $this->assertEqual(count($children), count($found_children)); //, "Found expected number of children for $id"); diff --git a/core/modules/system/src/Tests/System/AdminTest.php b/core/modules/system/src/Tests/System/AdminTest.php index 58a8889..0c842eb 100644 --- a/core/modules/system/src/Tests/System/AdminTest.php +++ b/core/modules/system/src/Tests/System/AdminTest.php @@ -7,7 +7,7 @@ namespace Drupal\system\Tests\System; -use Drupal\Core\Menu\MenuLinkTreeParameters; +use Drupal\Core\Menu\MenuTreeParameters; use Drupal\simpletest\WebTestBase; /** @@ -134,7 +134,7 @@ protected function getTopLevelMenuLinks() { $menu_tree = $this->container->get('menu.link_tree'); // The system.admin link is normally the parent of all top-level admin links. - $parameters = new MenuLinkTreeParameters(); + $parameters = new MenuTreeParameters(); $parameters->setRoot('system.admin')->excludeRoot()->topLevelOnly()->excludeHiddenLinks(); $tree = $menu_tree->load(NULL, $parameters); $manipulators = array( diff --git a/core/modules/system/system.module b/core/modules/system/system.module index 57904c0..b9cea5d 100644 --- a/core/modules/system/system.module +++ b/core/modules/system/system.module @@ -11,7 +11,7 @@ use Drupal\Core\Routing\RouteMatchInterface; use Drupal\Core\StringTranslation\TranslationWrapper; use Drupal\Core\Language\LanguageInterface; -use Drupal\Core\Menu\MenuLinkTreeParameters; +use Drupal\Core\Menu\MenuTreeParameters; use Drupal\block\BlockPluginInterface; use Drupal\user\UserInterface; use Symfony\Component\HttpFoundation\RedirectResponse; @@ -1462,7 +1462,7 @@ function system_get_module_admin_tasks($module, array $info) { $menu_tree = \Drupal::service('menu.link_tree'); if (!isset($tree)) { - $parameters = new MenuLinkTreeParameters(); + $parameters = new MenuTreeParameters(); $parameters->setRoot('system.admin')->excludeRoot()->excludeHiddenLinks(); $tree = $menu_tree->load('system.admin', $parameters); $manipulators = array( diff --git a/core/modules/toolbar/toolbar.module b/core/modules/toolbar/toolbar.module index 9534718..b77b40b 100644 --- a/core/modules/toolbar/toolbar.module +++ b/core/modules/toolbar/toolbar.module @@ -7,7 +7,7 @@ use Drupal\Component\Utility\String; use Drupal\Core\Cache\Cache; -use Drupal\Core\Menu\MenuLinkTreeParameters; +use Drupal\Core\Menu\MenuTreeParameters; use Drupal\Core\Render\Element; use Drupal\Core\Routing\RouteMatchInterface; use Drupal\Core\Template\Attribute; @@ -413,7 +413,7 @@ function toolbar_toolbar() { function toolbar_prerender_toolbar_administration_tray(array $element) { $menu_tree = \Drupal::menuTree(); // Render the top-level administration menu links. - $parameters = new MenuLinkTreeParameters(); + $parameters = new MenuTreeParameters(); $parameters->setRoot('system.admin')->excludeRoot()->topLevelOnly()->excludeHiddenLinks(); $tree = $menu_tree->load(NULL, $parameters); $manipulators = array( @@ -429,10 +429,10 @@ function toolbar_prerender_toolbar_administration_tray(array $element) { /** * Menu link tree manipulator that adds toolbar-specific attributes. * - * @param \Drupal\Core\Menu\MenuTreeElement[] $tree + * @param \Drupal\Core\Menu\MenuLinkTreeElement[] $tree * The menu link tree to manipulate. * - * @return \Drupal\Core\Menu\MenuTreeElement[] + * @return \Drupal\Core\Menu\MenuLinkTreeElement[] * The manipulated menu link tree. */ function toolbar_menu_navigation_links(array $tree) { @@ -470,7 +470,7 @@ function toolbar_menu_navigation_links(array $tree) { function toolbar_get_rendered_subtrees() { /** @var \Drupal\Core\Menu\MenuLinkTreeInterface $menu_tree */ $menu_tree = \Drupal::service('menu.link_tree'); - $parameters = new MenuLinkTreeParameters(); + $parameters = new MenuTreeParameters(); $parameters->setRoot('system.admin')->excludeRoot()->setMaxDepth(3)->excludeHiddenLinks(); $tree = $menu_tree->load(NULL, $parameters); $manipulators = array( diff --git a/core/modules/user/src/Tests/UserAccountLinksTests.php b/core/modules/user/src/Tests/UserAccountLinksTests.php index 97033fe..976b2d2 100644 --- a/core/modules/user/src/Tests/UserAccountLinksTests.php +++ b/core/modules/user/src/Tests/UserAccountLinksTests.php @@ -7,7 +7,7 @@ namespace Drupal\user\Tests; -use Drupal\Core\Menu\MenuLinkTreeParameters; +use Drupal\Core\Menu\MenuTreeParameters; use Drupal\simpletest\WebTestBase; /** @@ -70,7 +70,7 @@ function testSecondaryMenu() { // For a logged-out user, expect no secondary links. /** @var \Drupal\Core\Menu\MenuLinkTreeInterface $menu_tree */ $menu_tree = \Drupal::service('menu.link_tree'); - $tree = $menu_tree->load('account', new MenuLinkTreeParameters()); + $tree = $menu_tree->load('account', new MenuTreeParameters()); $manipulators = array( array('callable' => 'menu.default_tree_manipulators:checkAccess'), ); diff --git a/core/tests/Drupal/Tests/Core/Menu/DefaultMenuLinkTreeManipulatorsTest.php b/core/tests/Drupal/Tests/Core/Menu/DefaultMenuLinkTreeManipulatorsTest.php index c4118fe..8962271 100644 --- a/core/tests/Drupal/Tests/Core/Menu/DefaultMenuLinkTreeManipulatorsTest.php +++ b/core/tests/Drupal/Tests/Core/Menu/DefaultMenuLinkTreeManipulatorsTest.php @@ -8,7 +8,7 @@ namespace Drupal\Tests\Core\Menu; use Drupal\Core\Menu\DefaultMenuLinkTreeManipulators; -use Drupal\Core\Menu\MenuTreeElement; +use Drupal\Core\Menu\MenuLinkTreeElement; use Drupal\Tests\UnitTestCase; /** @@ -103,17 +103,17 @@ protected function mockTree() { 8 => MenuLinkMock::create(array('id' => 'test.example8', 'route_name' => 'example8', 'title' => 'quxqux', 'parent' => '')), ); $this->originalTree = array(); - $this->originalTree[1] = new MenuTreeElement($this->links[1], FALSE, 1, FALSE, array()); - $this->originalTree[2] = new MenuTreeElement($this->links[2], TRUE, 1, FALSE, array( - 3 => new MenuTreeElement($this->links[3], TRUE, 2, FALSE, array( - 4 => new MenuTreeElement($this->links[4], FALSE, 3, FALSE, array()), + $this->originalTree[1] = new MenuLinkTreeElement($this->links[1], FALSE, 1, FALSE, array()); + $this->originalTree[2] = new MenuLinkTreeElement($this->links[2], TRUE, 1, FALSE, array( + 3 => new MenuLinkTreeElement($this->links[3], TRUE, 2, FALSE, array( + 4 => new MenuLinkTreeElement($this->links[4], FALSE, 3, FALSE, array()), )), )); - $this->originalTree[5] = new MenuTreeElement($this->links[5], TRUE, 1, FALSE, array( - 7 => new MenuTreeElement($this->links[7], FALSE, 2, FALSE, array()), + $this->originalTree[5] = new MenuLinkTreeElement($this->links[5], TRUE, 1, FALSE, array( + 7 => new MenuLinkTreeElement($this->links[7], FALSE, 2, FALSE, array()), )); - $this->originalTree[6] = new MenuTreeElement($this->links[6], FALSE, 1, FALSE, array()); - $this->originalTree[8] = new MenuTreeElement($this->links[8], FALSE, 1, FALSE, array()); + $this->originalTree[6] = new MenuLinkTreeElement($this->links[6], FALSE, 1, FALSE, array()); + $this->originalTree[8] = new MenuLinkTreeElement($this->links[8], FALSE, 1, FALSE, array()); } /** diff --git a/core/tests/Drupal/Tests/Core/Menu/MenuLinkTreeElementTest.php b/core/tests/Drupal/Tests/Core/Menu/MenuLinkTreeElementTest.php index 705d2b7..39cda99 100644 --- a/core/tests/Drupal/Tests/Core/Menu/MenuLinkTreeElementTest.php +++ b/core/tests/Drupal/Tests/Core/Menu/MenuLinkTreeElementTest.php @@ -7,7 +7,7 @@ namespace Drupal\Tests\Core\Menu; -use Drupal\Core\Menu\MenuTreeElement; +use Drupal\Core\Menu\MenuLinkTreeElement; use Drupal\Tests\UnitTestCase; /** @@ -16,7 +16,7 @@ * @group Drupal * @group Menu * - * @coversDefaultClass \Drupal\Core\Menu\MenuTreeElement + * @coversDefaultClass \Drupal\Core\Menu\MenuLinkTreeElement */ class MenuLinkTreeElementTest extends UnitTestCase { @@ -38,7 +38,7 @@ public static function getInfo() { */ public function testConstruction() { $link = array(); - $item = new MenuTreeElement($link, FALSE, 3, FALSE, array()); + $item = new MenuLinkTreeElement($link, FALSE, 3, FALSE, array()); $this->assertSame($link, $item->link); $this->assertSame(FALSE, $item->hasChildren); $this->assertSame(3, $item->depth); @@ -54,8 +54,8 @@ public function testConstruction() { public function testCount() { $link_1 = array(); $link_2 = array(); - $child_item = new MenuTreeElement($link_2, FALSE, 2, FALSE, array()); - $parent_item = new MenuTreeElement($link_1, FALSE, 2, FALSE, array($child_item)); + $child_item = new MenuLinkTreeElement($link_2, FALSE, 2, FALSE, array()); + $parent_item = new MenuLinkTreeElement($link_1, FALSE, 2, FALSE, array($child_item)); $this->assertSame(1, $child_item->count()); $this->assertSame(2, $parent_item->count()); } diff --git a/core/tests/Drupal/Tests/Core/Menu/MenuLinkTreeParametersTest.php b/core/tests/Drupal/Tests/Core/Menu/MenuLinkTreeParametersTest.php index 9110eec..e4da62d 100644 --- a/core/tests/Drupal/Tests/Core/Menu/MenuLinkTreeParametersTest.php +++ b/core/tests/Drupal/Tests/Core/Menu/MenuLinkTreeParametersTest.php @@ -7,7 +7,7 @@ namespace Drupal\Tests\Core\Menu; -use Drupal\Core\Menu\MenuLinkTreeParameters; +use Drupal\Core\Menu\MenuTreeParameters; use Drupal\Tests\UnitTestCase; /** @@ -16,7 +16,7 @@ * @group Drupal * @group Menu * - * @coversDefaultClass \Drupal\Core\Menu\MenuLinkTreeParameters + * @coversDefaultClass \Drupal\Core\Menu\MenuTreeParameters */ class MenuLinkTreeParametersTest extends UnitTestCase { @@ -46,7 +46,7 @@ public function providerTestSetMinDepth() { $data[] = array(-10000, 1); $data[] = array(0, 1); // … except for those invalid values that reach beyond the maximum depth, - // because MenuLinkTreeParameters is a value object and hence cannot depend + // because MenuTreeParameters is a value object and hence cannot depend // on anything; to know the actual maximum depth, it'd have to depend on the // MenuTreeStorage service. $data[] = array(10, 10); @@ -62,7 +62,7 @@ public function providerTestSetMinDepth() { * @dataProvider providerTestSetMinDepth */ public function testSetMinDepth($min_depth, $expected) { - $parameters = new MenuLinkTreeParameters(); + $parameters = new MenuTreeParameters(); $parameters->setMinDepth($min_depth); $this->assertEquals($expected, $parameters->minDepth); } @@ -73,7 +73,7 @@ public function testSetMinDepth($min_depth, $expected) { * @covers ::addExpanded */ public function testAddExpanded() { - $parameters = new MenuLinkTreeParameters(); + $parameters = new MenuTreeParameters(); // Verify default value. $this->assertEquals(array(), $parameters->expanded); @@ -99,7 +99,7 @@ public function testAddExpanded() { * @covers ::addCondition */ public function testAddCondition() { - $parameters = new MenuLinkTreeParameters(); + $parameters = new MenuTreeParameters(); // Verify default value. $this->assertEquals(array(), $parameters->conditions); @@ -132,7 +132,7 @@ public function testAddCondition() { * @covers ::excludeHiddenLinks */ public function testExcludeHiddenLinks() { - $parameters = new MenuLinkTreeParameters(); + $parameters = new MenuTreeParameters(); $parameters->excludeHiddenLinks(); $this->assertEquals(0, $parameters->conditions['hidden']); } @@ -143,7 +143,7 @@ public function testExcludeHiddenLinks() { * @covers ::topLevelOnly */ public function testTopLevelOnly() { - $parameters = new MenuLinkTreeParameters(); + $parameters = new MenuTreeParameters(); $parameters->topLevelOnly(); $this->assertEquals(1, $parameters->maxDepth); } @@ -154,7 +154,7 @@ public function testTopLevelOnly() { * @covers ::excludeRoot */ public function testExcludeRoot() { - $parameters = new MenuLinkTreeParameters(); + $parameters = new MenuTreeParameters(); $parameters->excludeRoot(); $this->assertEquals(1, $parameters->minDepth); }