diff --git a/core/includes/menu.inc b/core/includes/menu.inc index 826ca09..9dbbc20 100644 --- a/core/includes/menu.inc +++ b/core/includes/menu.inc @@ -111,27 +111,31 @@ function menu_list_system_menus() { function menu_local_tasks($level = 0) { /** @var \Drupal\Core\Menu\LocalTaskManagerInterface $manager */ $manager = \Drupal::service('plugin.manager.menu.local_task'); - return $manager->getLocalTasks($level); + return $manager->getLocalTasks(\Drupal::routeMatch()->getRouteName(), $level); } /** * Returns the rendered local tasks at the top level. + * + * @deprecated in Drupal 8.0.0, will be removed before Drupal 9.0.0. */ function menu_primary_local_tasks() { /** @var \Drupal\Core\Menu\LocalTaskManagerInterface $manager */ $manager = \Drupal::service('plugin.manager.menu.local_task'); - $links = $manager->getLocalTasks(0); + $links = $manager->getLocalTasks(\Drupal::routeMatch()->getRouteName(), 0); // Do not display single tabs. return count(Element::getVisibleChildren($links['tabs'])) > 1 ? $links['tabs'] : ''; } /** * Returns the rendered local tasks at the second level. + * + * @deprecated in Drupal 8.0.0, will be removed before Drupal 9.0.0. */ function menu_secondary_local_tasks() { /** @var \Drupal\Core\Menu\LocalTaskManagerInterface $manager */ $manager = \Drupal::service('plugin.manager.menu.local_task'); - $links = $manager->getLocalTasks(1); + $links = $manager->getLocalTasks(\Drupal::routeMatch()->getRouteName(), 1); // Do not display single tabs. return count(Element::getVisibleChildren($links['tabs'])) > 1 ? $links['tabs'] : ''; } diff --git a/core/lib/Drupal/Core/Menu/LocalTaskManager.php b/core/lib/Drupal/Core/Menu/LocalTaskManager.php index 52c83f7..7055628 100644 --- a/core/lib/Drupal/Core/Menu/LocalTaskManager.php +++ b/core/lib/Drupal/Core/Menu/LocalTaskManager.php @@ -339,8 +339,7 @@ public function getTasksBuild($current_route_name) { /** * {@inheritdoc} */ - public function getLocalTasks($level = 0) { - $route_name = $this->routeMatch->getRouteName(); + public function getLocalTasks($route_name, $level = 0) { if (!isset($this->taskData[$route_name])) { // Look for route-based tabs. $this->taskData[$route_name] = [ diff --git a/core/lib/Drupal/Core/Menu/LocalTaskManagerInterface.php b/core/lib/Drupal/Core/Menu/LocalTaskManagerInterface.php index e7ec7b1..1f8d3d2 100644 --- a/core/lib/Drupal/Core/Menu/LocalTaskManagerInterface.php +++ b/core/lib/Drupal/Core/Menu/LocalTaskManagerInterface.php @@ -56,6 +56,8 @@ public function getTasksBuild($current_route_name); /** * Collects the local tasks (tabs) for the current route. * + * @param string $route_name + * The route for which to make renderable local tasks. * @param int $level * The level of tasks you ask for. Primary tasks are 0, secondary are 1. * @@ -67,6 +69,6 @@ public function getTasksBuild($current_route_name); * * @see hook_menu_local_tasks_alter() */ - public function getLocalTasks($level = 0); + public function getLocalTasks($route_name, $level = 0); } diff --git a/core/lib/Drupal/Core/Menu/Plugin/Block/LocalActionsBlock.php b/core/lib/Drupal/Core/Menu/Plugin/Block/LocalActionsBlock.php index a0e62c2..c8348e0 100644 --- a/core/lib/Drupal/Core/Menu/Plugin/Block/LocalActionsBlock.php +++ b/core/lib/Drupal/Core/Menu/Plugin/Block/LocalActionsBlock.php @@ -88,7 +88,7 @@ public function build() { return []; } - return ['local_actions' => $local_actions]; + return $local_actions; } /** diff --git a/core/lib/Drupal/Core/Menu/Plugin/Block/LocalTasksBlock.php b/core/lib/Drupal/Core/Menu/Plugin/Block/LocalTasksBlock.php index 1cb5828..6edfc6b 100644 --- a/core/lib/Drupal/Core/Menu/Plugin/Block/LocalTasksBlock.php +++ b/core/lib/Drupal/Core/Menu/Plugin/Block/LocalTasksBlock.php @@ -12,6 +12,7 @@ use Drupal\Core\Menu\LocalTaskManagerInterface; use Drupal\Core\Plugin\ContainerFactoryPluginInterface; use Drupal\Core\Render\Element; +use Drupal\Core\Routing\RouteMatchInterface; use Symfony\Component\DependencyInjection\ContainerInterface; /** @@ -32,6 +33,13 @@ class LocalTasksBlock extends BlockBase implements ContainerFactoryPluginInterfa protected $localTaskManager; /** + * The route match. + * + * @var \Drupal\Core\Routing\RouteMatchInterface + */ + protected $routeMatch; + + /** * Creates a LocalTasksBlock instance. * * @param array $configuration @@ -42,10 +50,13 @@ class LocalTasksBlock extends BlockBase implements ContainerFactoryPluginInterfa * The plugin implementation definition. * @param \Drupal\Core\Menu\LocalTaskManagerInterface $local_task_manager * The local task manager. + * @param \Drupal\Core\Routing\RouteMatchInterface $route_match + * The route match. */ - public function __construct(array $configuration, $plugin_id, $plugin_definition, LocalTaskManagerInterface $local_task_manager) { + public function __construct(array $configuration, $plugin_id, $plugin_definition, LocalTaskManagerInterface $local_task_manager, RouteMatchInterface $route_match) { parent::__construct($configuration, $plugin_id, $plugin_definition); $this->localTaskManager = $local_task_manager; + $this->routeMatch = $route_match; } /** @@ -56,7 +67,8 @@ public static function create(ContainerInterface $container, array $configuratio $configuration, $plugin_id, $plugin_definition, - $container->get('plugin.manager.menu.local_task') + $container->get('plugin.manager.menu.local_task'), + $container->get('current_route_match') ); } @@ -83,14 +95,14 @@ public function build() { // Add only selected levels for the printed output. if ($config['primary']) { - $links = $this->localTaskManager->getLocalTasks(0); + $links = $this->localTaskManager->getLocalTasks($this->routeMatch->getRouteName(), 0); // Do not display single tabs. $tabs += [ '#primary' => count(Element::getVisibleChildren($links['tabs'])) > 1 ? $links['tabs'] : [], ]; } if ($config['secondary']) { - $links = $this->localTaskManager->getLocalTasks(1); + $links = $this->localTaskManager->getLocalTasks($this->routeMatch->getRouteName(), 1); // Do not display single tabs. $tabs += [ '#secondary' => count(Element::getVisibleChildren($links['tabs'])) > 1 ? $links['tabs'] : [], @@ -101,7 +113,7 @@ public function build() { return []; } - return ['tabs' => $tabs]; + return $tabs; } /**