diff --git a/core/core.services.yml b/core/core.services.yml index d10db5b..c819ffd 100644 --- a/core/core.services.yml +++ b/core/core.services.yml @@ -297,6 +297,11 @@ services: calls: - [setContext, ['@router.request_context']] - [add, ['@router.dynamic']] + router.path_roots_subscriber: + class: Drupal\Core\EventSubscriber\PathRootsSubscriber + arguments: ['@state'] + tags: + - { name: event_subscriber } entity.query: class: Drupal\Core\Entity\Query\QueryFactory arguments: ['@entity.manager'] diff --git a/core/includes/menu.inc b/core/includes/menu.inc index 767555e..2dd6ca1 100644 --- a/core/includes/menu.inc +++ b/core/includes/menu.inc @@ -2705,7 +2705,7 @@ function menu_link_rebuild_defaults() { if ($all_links) { $query = \Drupal::entityQuery('menu_link') ->condition('machine_name', array_keys($all_links), 'NOT IN') - ->condition('machine_name', NULL, '<>') + ->exists('machine_name') ->condition('external', 0) ->condition('updated', 0) ->condition('customized', 0) diff --git a/core/includes/theme.inc b/core/includes/theme.inc index f98aaddd..0a04480 100644 --- a/core/includes/theme.inc +++ b/core/includes/theme.inc @@ -2241,7 +2241,7 @@ function template_preprocess_page(&$variables) { ); } - if ($node = menu_get_object()) { + if ($node = \Drupal::request()->attributes->get('node')) { $variables['node'] = $node; } diff --git a/core/lib/Drupal/Core/EventSubscriber/PathRootsSubscriber.php b/core/lib/Drupal/Core/EventSubscriber/PathRootsSubscriber.php new file mode 100644 index 0000000..0b64bfc --- /dev/null +++ b/core/lib/Drupal/Core/EventSubscriber/PathRootsSubscriber.php @@ -0,0 +1,81 @@ +state = $state; + } + + /** + * Collects all path roots. + * + * @param \Drupal\Core\Routing\RouteBuildEvent $event + * The route build event. + */ + public function onRouteAlter(RouteBuildEvent $event) { + $collection = $event->getRouteCollection(); + foreach ($collection->all() as $route) { + $bits = explode('/', ltrim($route->getPath(), '/')); + $this->pathRoots[$bits[0]] = $bits[0]; + } + } + + /** + * {@inheritdoc} + */ + public function onRouteFinished() { + $this->state->set('router.path_roots', array_keys($this->pathRoots)); + unset($this->pathRoots); + } + + + + + /** + * {@inheritdoc} + */ + public static function getSubscribedEvents() { + $events = array(); + $events[RoutingEvents::ALTER][] = array('onRouteAlter', -1024); + $events[RoutingEvents::FINISHED][] = array('onRouteFinished'); + return $events; + } + +} diff --git a/core/lib/Drupal/Core/Path/AliasWhitelist.php b/core/lib/Drupal/Core/Path/AliasWhitelist.php index e748315..b990c3b 100644 --- a/core/lib/Drupal/Core/Path/AliasWhitelist.php +++ b/core/lib/Drupal/Core/Path/AliasWhitelist.php @@ -60,7 +60,7 @@ protected function lazyLoadCache() { // On a cold start $this->storage will be empty and the whitelist will // need to be rebuilt from scratch. The whitelist is initialized from the - // list of all valid path roots stored in the 'menu_path_roots' state, + // list of all valid path roots stored in the 'router.path_roots' state, // with values initialized to NULL. During the request, each path requested // that matches one of these keys will be looked up and the array value set // to either TRUE or FALSE. This ensures that paths which do not exist in @@ -75,7 +75,7 @@ protected function lazyLoadCache() { * Loads menu path roots to prepopulate cache. */ protected function loadMenuPathRoots() { - if ($roots = $this->state->get('menu_path_roots')) { + if ($roots = $this->state->get('router.path_roots')) { foreach ($roots as $root) { $this->storage[$root] = NULL; $this->persist($root); diff --git a/core/modules/action/action.module b/core/modules/action/action.module index cc6821b..c2ffd81 100644 --- a/core/modules/action/action.module +++ b/core/modules/action/action.module @@ -45,18 +45,6 @@ function action_permission() { } /** - * Implements hook_menu(). - */ -function action_menu() { - $items['admin/config/system/actions'] = array( - 'title' => 'Actions', - 'description' => 'Manage the actions defined for your site.', - 'route_name' => 'action.admin', - ); - return $items; -} - -/** * Implements hook_menu_link_defaults(). */ function action_menu_link_defaults() { diff --git a/core/modules/aggregator/aggregator.module b/core/modules/aggregator/aggregator.module index 0ce31c2..d493a6c 100644 --- a/core/modules/aggregator/aggregator.module +++ b/core/modules/aggregator/aggregator.module @@ -87,48 +87,6 @@ function aggregator_theme() { } /** - * Implements hook_menu(). - */ -function aggregator_menu() { - $items['admin/config/services/aggregator'] = array( - 'title' => 'Feed aggregator', - 'description' => "Configure which content your site aggregates from other sites, and how often it polls them.", - 'route_name' => 'aggregator.admin_overview', - 'weight' => 10, - ); - $items['admin/config/services/aggregator/remove/%aggregator_feed'] = array( - 'title' => 'Remove items', - 'route_name' => 'aggregator.feed_items_delete', - ); - $items['admin/config/services/aggregator/update/%aggregator_feed'] = array( - 'title' => 'Update items', - 'route_name' => 'aggregator.feed_refresh', - ); - $items['aggregator'] = array( - 'title' => 'Feed aggregator', - 'weight' => 5, - 'route_name' => 'aggregator.page_last', - ); - $items['aggregator/sources'] = array( - 'title' => 'Sources', - 'route_name' => 'aggregator.sources', - ); - $items['aggregator/sources/%aggregator_feed'] = array( - 'route_name' => 'aggregator.feed_view', - ); - $items['admin/config/services/aggregator/edit/feed/%aggregator_feed'] = array( - 'title' => 'Edit feed', - 'route_name' => 'aggregator.feed_edit', - ); - $items['admin/config/services/aggregator/delete/feed/%aggregator_feed'] = array( - 'title' => 'Delete feed', - 'route_name' => 'aggregator.feed_delete', - ); - - return $items; -} - -/** * Implements hook_menu_link_defaults(). */ function aggregator_menu_link_defaults() { diff --git a/core/modules/ban/ban.module b/core/modules/ban/ban.module index 7d09e7c..e45ed13 100644 --- a/core/modules/ban/ban.module +++ b/core/modules/ban/ban.module @@ -38,23 +38,6 @@ function ban_permission() { } /** - * Implements hook_menu(). - */ -function ban_menu() { - $items['admin/config/people/ban'] = array( - 'title' => 'IP address bans', - 'description' => 'Manage banned IP addresses.', - 'route_name' => 'ban.admin_page', - 'weight' => 10, - ); - $items['admin/config/people/ban/delete/%'] = array( - 'title' => 'Delete IP address', - 'route_name' => 'ban.delete', - ); - return $items; -} - -/** * Implements hook_menu_link_defaults(). */ function ban_menu_link_defaults() { diff --git a/core/modules/block/block.module b/core/modules/block/block.module index daea82c..39a281c 100644 --- a/core/modules/block/block.module +++ b/core/modules/block/block.module @@ -93,29 +93,6 @@ function block_permission() { } /** - * Implements hook_menu(). - * - * @todo Clarify the documentation for the per-plugin block admin links. - */ -function block_menu() { - $items['admin/structure/block'] = array( - 'title' => 'Block layout', - 'description' => 'Configure what block content appears in your site\'s sidebars and other regions.', - 'route_name' => 'block.admin_display', - ); - $items['admin/structure/block/manage/%block'] = array( - 'title' => 'Configure block', - 'route_name' => 'block.admin_edit', - ); - $items['admin/structure/block/add/%/%'] = array( - 'title' => 'Place block', - 'type' => MENU_VISIBLE_IN_BREADCRUMB, - 'route_name' => 'block.admin_add', - ); - return $items; -} - -/** * Implements hook_menu_link_defaults(). */ function block_menu_link_defaults() { diff --git a/core/modules/block/custom_block/custom_block.local_actions.yml b/core/modules/block/custom_block/custom_block.local_actions.yml index b12329c..e3b57c6 100644 --- a/core/modules/block/custom_block/custom_block.local_actions.yml +++ b/core/modules/block/custom_block/custom_block.local_actions.yml @@ -10,5 +10,5 @@ custom_block_add_action: appears_on: - block.admin_display - block.admin_display_theme + - custom_block.list class: \Drupal\custom_block\Plugin\Menu\LocalAction\CustomBlockAddLocalAction - diff --git a/core/modules/block/custom_block/custom_block.module b/core/modules/block/custom_block/custom_block.module index cdf90c7..81bac9c 100644 --- a/core/modules/block/custom_block/custom_block.module +++ b/core/modules/block/custom_block/custom_block.module @@ -38,52 +38,6 @@ function custom_block_help($path, $arg) { } /** - * Implements hook_menu_local_tasks(). - */ -function custom_block_menu_local_tasks(&$data, $route_name) { - if ($route_name == 'custom_block.list') { - // @todo Move to a LocalAction plugin when https://drupal.org/node/2045267 - // allows local actions to work with query strings. - $item = menu_get_item('block/add'); - if ($item['access']) { - // Add a destination parameter. - $item['localized_options']['query']['destination'] = 'admin/structure/block/custom-blocks'; - $data['actions']['block/add'] = array( - '#theme' => 'menu_local_action', - '#link' => $item, - ); - } - } -} - -/** - * Implements hook_menu(). - */ -function custom_block_menu() { - $items['admin/structure/block/custom-blocks'] = array( - 'title' => 'Custom block library', - 'description' => 'Manage custom blocks.', - 'route_name' => 'custom_block.list', - 'type' => MENU_NORMAL_ITEM, - ); - - $items['admin/structure/block/custom-blocks/manage/%custom_block_type'] = array( - 'title' => 'Edit custom block type', - 'title callback' => 'entity_page_label', - 'title arguments' => array(5), - 'route_name' => 'custom_block.type_edit', - ); - - $items['block/add'] = array( - 'title' => 'Add custom block', - 'description' => 'Add custom block', - 'route_name' => 'custom_block.add_page', - ); - - return $items; -} - -/** * Implements hook_menu_link_defaults(). */ function custom_block_menu_link_defaults() { @@ -92,6 +46,11 @@ function custom_block_menu_link_defaults() { 'description' => 'Add custom block', 'route_name' => 'custom_block.add_page', ); + $items['custom_block.list'] = array( + 'link_title' => 'Custom block library', + 'parent' => 'block.admin.structure', + 'description' => 'Manage custom blocks.', + ); return $links; } diff --git a/core/modules/block/custom_block/lib/Drupal/custom_block/Plugin/Menu/LocalAction/CustomBlockAddLocalAction.php b/core/modules/block/custom_block/lib/Drupal/custom_block/Plugin/Menu/LocalAction/CustomBlockAddLocalAction.php index c2b773a..1f4d86f 100644 --- a/core/modules/block/custom_block/lib/Drupal/custom_block/Plugin/Menu/LocalAction/CustomBlockAddLocalAction.php +++ b/core/modules/block/custom_block/lib/Drupal/custom_block/Plugin/Menu/LocalAction/CustomBlockAddLocalAction.php @@ -8,6 +8,7 @@ namespace Drupal\custom_block\Plugin\Menu\LocalAction; use Drupal\Core\Menu\LocalActionDefault; +use Symfony\Cmf\Component\Routing\RouteObjectInterface; use Symfony\Component\HttpFoundation\Request; /** @@ -24,6 +25,10 @@ public function getOptions(Request $request) { if ($request->attributes->has('theme')) { $options['query']['theme'] = $request->attributes->get('theme'); } + // Adds a destination on custom block listing. + if ($request->attributes->get(RouteObjectInterface::ROUTE_NAME) == 'custom_block.list') { + $options['query']['destination'] = 'admin/structure/block/custom-blocks'; + } return $options; } diff --git a/core/modules/block/custom_block/tests/modules/custom_block_test/custom_block_test.module b/core/modules/block/custom_block/tests/modules/custom_block_test/custom_block_test.module index 7186098..8c53053 100644 --- a/core/modules/block/custom_block/tests/modules/custom_block_test/custom_block_test.module +++ b/core/modules/block/custom_block/tests/modules/custom_block_test/custom_block_test.module @@ -66,17 +66,3 @@ function custom_block_test_custom_block_insert(CustomBlock $custom_block) { throw new Exception('Test exception for rollback.'); } } - -/** - * Implements hook_menu(). - */ -function custom_block_test_menu() { - $items = array(); - // Add a block-view callback. - $items['custom-block/%custom_block'] = array( - 'title callback' => 'entity_page_label', - 'title arguments' => array(1), - 'route_name' => 'custom_block_test.custom_block_view', - ); - return $items; -} diff --git a/core/modules/book/book.module b/core/modules/book/book.module index 8fe9e41..0ed910b 100644 --- a/core/modules/book/book.module +++ b/core/modules/book/book.module @@ -162,28 +162,6 @@ function book_node_links_alter(array &$node_links, NodeInterface $node, array &$ } /** - * Implements hook_menu(). - */ -function book_menu() { - $items['admin/structure/book'] = array( - 'title' => 'Books', - 'description' => "Manage your site's book outlines.", - 'route_name' => 'book.admin', - ); - $items['book'] = array( - 'title' => 'Books', - 'route_name' => 'book.render', - 'type' => MENU_SUGGESTED_ITEM, - ); - $items['node/%node/outline/remove'] = array( - 'title' => 'Remove from outline', - 'route_name' => 'book.remove', - ); - - return $items; -} - -/** * Implements hook_menu_link_defaults(). */ function book_menu_link_defaults() { diff --git a/core/modules/book/lib/Drupal/book/Plugin/Block/BookNavigationBlock.php b/core/modules/book/lib/Drupal/book/Plugin/Block/BookNavigationBlock.php index 3fd3f64..456a993 100644 --- a/core/modules/book/lib/Drupal/book/Plugin/Block/BookNavigationBlock.php +++ b/core/modules/book/lib/Drupal/book/Plugin/Block/BookNavigationBlock.php @@ -8,6 +8,9 @@ namespace Drupal\book\Plugin\Block; use Drupal\block\BlockBase; +use Drupal\Core\Plugin\ContainerFactoryPluginInterface; +use Symfony\Component\DependencyInjection\ContainerInterface; +use Symfony\Component\HttpFoundation\Request; /** * Provides a 'Book navigation' block. @@ -18,7 +21,44 @@ * category = @Translation("Menus") * ) */ -class BookNavigationBlock extends BlockBase { +class BookNavigationBlock extends BlockBase implements ContainerFactoryPluginInterface { + + /** + * The request object. + * + * @var \Symfony\Component\HttpFoundation\Request + */ + protected $request; + + /** + * Constructs a new BookNavigationBlock instance. + * + * @param array $configuration + * A configuration array containing information about the plugin instance. + * @param string $plugin_id + * The plugin_id for the plugin instance. + * @param array $plugin_definition + * The plugin implementation definition. + * @param \Symfony\Component\HttpFoundation\Request $request + * The request object. + */ + public function __construct(array $configuration, $plugin_id, array $plugin_definition, Request $request) { + parent::__construct($configuration, $plugin_id, $plugin_definition); + + $this->request = $request; + } + + /** + * {@inheritdoc} + */ + public static function create(ContainerInterface $container, array $configuration, $plugin_id, array $plugin_definition) { + return new static( + $configuration, + $plugin_id, + $plugin_definition, + $container->get('request') + ); + } /** * {@inheritdoc} @@ -61,7 +101,7 @@ public function blockSubmit($form, &$form_state) { */ public function build() { $current_bid = 0; - if ($node = menu_get_object()) { + if ($node = $this->request->get('node')) { $current_bid = empty($node->book['bid']) ? 0 : $node->book['bid']; } if ($this->configuration['block_mode'] == 'all pages') { diff --git a/core/modules/comment/comment.module b/core/modules/comment/comment.module index 1ee4ebc..3c1c74a 100644 --- a/core/modules/comment/comment.module +++ b/core/modules/comment/comment.module @@ -178,35 +178,18 @@ function comment_theme() { } /** - * Implements hook_menu(). - */ -function comment_menu() { - $items['admin/structure/comments'] = array( - 'title' => 'Comment forms', - 'description' => 'Manage fields and displays settings for comment forms.', - 'route_name' => 'comment.bundle_list', - ); - $items['admin/structure/comments/manage/%'] = array( - 'title' => 'Comment form', - 'route_name' => 'comment.bundle', - ); - $items['admin/content/comment'] = array( - 'title' => 'Comments', - 'description' => 'List and edit site comments and the comment approval queue.', - 'route_name' => 'comment.admin', - ); - - return $items; -} - -/** * Implements hook_menu_link_defaults(). */ function comment_menu_link_defaults() { - $links['comment.admin.content'] = array( + $links['comment.admin.structure.comments'] = array( 'link_title' => 'Comment forms', - 'route_name' => 'comment.admin', + 'route_name' => 'comment.bundle_list', 'parent' => 'system.admin.structure', + ); + $links['comment.admin.content'] = array( + 'link_title' => 'Comments', + 'route_name' => 'comment.admin', + 'parent' => 'node.admin.content', 'description' => 'List and edit site comments and the comment approval queue.', ); @@ -214,12 +197,12 @@ function comment_menu_link_defaults() { } /** - * Implements hook_menu_alter(). + * Implements hook_menu_link_defaults_alter() */ -function comment_menu_alter(&$items) { - if (isset($items['admin/content'])) { +function comment_menu_links_defaults_alter(&$links) { + if (isset($links['node.admin.content'])) { // Add comments to the description for admin/content if any. - $items['admin/content']['description'] = 'Administer content and comments.'; + $links['node.admin.content']['description'] = 'Administer content and comments.'; } } diff --git a/core/modules/config/config.module b/core/modules/config/config.module index 3cb71e6..776a9fc 100644 --- a/core/modules/config/config.module +++ b/core/modules/config/config.module @@ -58,19 +58,6 @@ function config_file_download($uri) { } /** - * Implements hook_menu(). - */ -function config_menu() { - $items['admin/config/development/configuration'] = array( - 'title' => 'Configuration management', - 'description' => 'Import, export, or synchronize your site configuration.', - 'route_name' => 'config.sync', - ); - - return $items; -} - -/** * Implements hook_menu_link_defaults(). */ function config_menu_link_defaults() { diff --git a/core/modules/config/tests/config_test/config_test.module b/core/modules/config/tests/config_test/config_test.module index 4fb13e3..a147526 100644 --- a/core/modules/config/tests/config_test/config_test.module +++ b/core/modules/config/tests/config_test/config_test.module @@ -11,32 +11,6 @@ require_once dirname(__FILE__) . '/config_test.hooks.inc'; /** - * Implements hook_menu(). - */ -function config_test_menu() { - $items['admin/structure/config_test'] = array( - 'title' => 'Test configuration', - 'route_name' => 'config_test.list_page', - ); - $items['admin/structure/config_test/manage/%config_test'] = array( - 'route_name' => 'config_test.entity', - ); - $items['admin/structure/config_test/manage/%config_test/delete'] = array( - 'title' => 'Delete', - 'route_name' => 'config_test.entity_delete', - ); - $items['admin/structure/config_test/manage/%config_test/enable'] = array( - 'title' => 'Enable', - 'route_name' => 'config_test.entity_enable', - ); - $items['admin/structure/config_test/manage/%config_test/disable'] = array( - 'title' => 'Disable', - 'route_name' => 'config_test.entity_disable', - ); - return $items; -} - -/** * Loads a ConfigTest object. * * @param string $id diff --git a/core/modules/config_translation/config_translation.module b/core/modules/config_translation/config_translation.module index e3f1ac9..beacd33 100644 --- a/core/modules/config_translation/config_translation.module +++ b/core/modules/config_translation/config_translation.module @@ -32,20 +32,6 @@ function config_translation_help($path) { } /** - * Implements hook_menu(). - */ -function config_translation_menu() { - $items = array(); - $items['admin/config/regional/config-translation'] = array( - 'title' => 'Configuration translation', - 'description' => 'Translate the configuration.', - 'route_name' => 'config_translation.mapper_list', - 'weight' => 30, - ); - return $items; -} - -/** * Implements hook_menu_link_defaults(). */ function config_translation_menu_link_defaults() { diff --git a/core/modules/contact/contact.module b/core/modules/contact/contact.module index a3246a3..576e3b6 100644 --- a/core/modules/contact/contact.module +++ b/core/modules/contact/contact.module @@ -52,34 +52,6 @@ function contact_permission() { } /** - * Implements hook_menu(). - */ -function contact_menu() { - $items['admin/structure/contact'] = array( - 'title' => 'Contact form categories', - 'description' => 'Create a system contact form and set up categories for the form to use.', - 'route_name' => 'contact.category_list', - ); - $items['admin/structure/contact/manage/%contact_category'] = array( - 'title' => 'Edit contact category', - 'route_name' => 'contact.category_edit', - ); - - $items['contact'] = array( - 'title' => 'Contact', - 'route_name' => 'contact.site_page', - 'menu_name' => 'footer', - 'type' => MENU_SUGGESTED_ITEM, - ); - $items['contact/%contact_category'] = array( - 'title' => 'Contact category form', - 'route_name' => 'contact.site_page_category', - 'type' => MENU_VISIBLE_IN_BREADCRUMB, - ); - return $items; -} - -/** * Implements hook_menu_link_defaults(). */ function contact_menu_link_defaults() { diff --git a/core/modules/content_translation/content_translation.module b/core/modules/content_translation/content_translation.module index d981d39..ecba9a7 100644 --- a/core/modules/content_translation/content_translation.module +++ b/core/modules/content_translation/content_translation.module @@ -244,10 +244,6 @@ function content_translation_menu() { * https://drupal.org/node/1987882 and https://drupal.org/node/2047633. */ function content_translation_menu_alter(array &$items) { - // Clarify where translation settings are located. - $items['admin/config/regional/content-language']['title'] = 'Content language and translation'; - $items['admin/config/regional/content-language']['description'] = 'Configure language and translation support for content.'; - // Check that the declared menu base paths are actually valid. foreach (\Drupal::entityManager()->getDefinitions() as $entity_type => $info) { if (content_translation_enabled($entity_type)) { diff --git a/core/modules/dblog/dblog.module b/core/modules/dblog/dblog.module index 4060d63..cd8e2c0 100644 --- a/core/modules/dblog/dblog.module +++ b/core/modules/dblog/dblog.module @@ -37,42 +37,6 @@ function dblog_help($path, $arg) { } /** - * Implements hook_menu(). - */ -function dblog_menu() { - $items['admin/reports/dblog'] = array( - 'title' => 'Recent log messages', - 'description' => 'View events that have recently been logged.', - 'route_name' => 'dblog.overview', - 'weight' => -1, - ); - $items['admin/reports/page-not-found'] = array( - 'title' => "Top 'page not found' errors", - 'description' => "View 'page not found' errors (404s).", - 'route_name' => 'dblog.page_not_found', - ); - $items['admin/reports/access-denied'] = array( - 'title' => "Top 'access denied' errors", - 'description' => "View 'access denied' errors (403s).", - 'route_name' => 'dblog.access_denied', - ); - $items['admin/reports/event/%'] = array( - 'title' => 'Details', - 'route_name' => 'dblog.event', - ); - - if (\Drupal::moduleHandler()->moduleExists('search')) { - $items['admin/reports/search'] = array( - 'title' => 'Top search phrases', - 'description' => 'View most popular search phrases.', - 'route_name' => 'dblog.search', - ); - } - - return $items; -} - -/** * Implements hook_menu_link_defaults(). */ function dblog_menu_link_defaults() { diff --git a/core/modules/editor/editor.module b/core/modules/editor/editor.module index f638282..0df20ab 100644 --- a/core/modules/editor/editor.module +++ b/core/modules/editor/editor.module @@ -36,19 +36,11 @@ function editor_help($path, $arg) { } /** - * Implements hook_menu_alter(). + * Implements hook_menu_link_defaults_alter(). * * Rewrites the menu entries for filter module that relate to the configuration * of text editors. */ -function editor_menu_alter(&$items) { - $items['admin/config/content/formats']['title'] = 'Text formats and editors'; - $items['admin/config/content/formats']['description'] = 'Configure how user-contributed content is filtered and formatted, as well as the text editor user interface (WYSIWYGs or toolbars).'; -} - -/** - * Implements hook_menu_link_defaults_alter(). - */ function editor_menu_link_defaults_alter(array &$links) { $links['filter.admin.formats']['link_title'] = 'Text formats and editors'; $links['filter.admin.formats']['description'] = 'Configure how user-contributed content is filtered and formatted, as well as the text editor user interface (WYSIWYGs or toolbars).'; diff --git a/core/modules/entity/entity.module b/core/modules/entity/entity.module index 5b3f414..cd2a62d 100644 --- a/core/modules/entity/entity.module +++ b/core/modules/entity/entity.module @@ -45,57 +45,6 @@ function entity_permission() { } /** - * Implements hook_menu(). - */ -function entity_menu() { - $items = array(); - - $items['admin/structure/display-modes'] = array( - 'title' => 'Display modes', - 'description' => 'Configure what displays are available for your content and forms.', - 'route_name' => 'entity.display_mode', - ); - - // View modes. - $items['admin/structure/display-modes/view'] = array( - 'title' => 'View modes', - 'description' => 'Manage custom view modes.', - 'route_name' => 'entity.view_mode_list', - ); - $items['admin/structure/display-modes/view/add'] = array( - 'title' => 'Add view mode', - 'route_name' => 'entity.view_mode_add', - 'type' => MENU_SIBLING_LOCAL_TASK, - ); - $items['admin/structure/display-modes/view/add/%'] = array( - 'route_name' => 'entity.view_mode_add_type', - ); - $items['admin/structure/display-modes/view/manage/%/delete'] = array( - 'route_name' => 'entity.view_mode_delete', - ); - - // Form modes. - $items['admin/structure/display-modes/form'] = array( - 'title' => 'Form modes', - 'description' => 'Manage custom form modes.', - 'route_name' => 'entity.form_mode_list', - ); - $items['admin/structure/display-modes/form/add'] = array( - 'title' => 'Add form mode', - 'route_name' => 'entity.form_mode_add', - 'type' => MENU_SIBLING_LOCAL_TASK, - ); - $items['admin/structure/display-modes/form/add/%'] = array( - 'route_name' => 'entity.form_mode_add_type', - ); - $items['admin/structure/display-modes/form/manage/%/delete'] = array( - 'route_name' => 'entity.form_mode_delete', - ); - - return $items; -} - -/** * Implements hook_menu_link_defaults(). */ function entity_menu_link_defaults() { diff --git a/core/modules/field/tests/modules/field_test/field_test.module b/core/modules/field/tests/modules/field_test/field_test.module index 8215416..5b072ae 100644 --- a/core/modules/field/tests/modules/field_test/field_test.module +++ b/core/modules/field/tests/modules/field_test/field_test.module @@ -37,19 +37,6 @@ function field_test_permission() { } /** - * Implements hook_menu(). - */ -function field_test_menu() { - $items = array(); - $items['test-entity/nested/%entity_test/%entity_test'] = array( - 'title' => 'Nested entity form', - 'route_name' => 'field_test.entity_nested_form', - ); - - return $items; -} - -/** * Store and retrieve keyed data for later verification by unit tests. * * This function is a simple in-memory key-value store with the diff --git a/core/modules/field_ui/field_ui.module b/core/modules/field_ui/field_ui.module index bb8ec0b..46b8dfc 100644 --- a/core/modules/field_ui/field_ui.module +++ b/core/modules/field_ui/field_ui.module @@ -53,20 +53,6 @@ function field_ui_help($path, $arg) { } /** - * Implements hook_menu(). - */ -function field_ui_menu() { - $items['admin/reports/fields'] = array( - 'title' => 'Field list', - 'description' => 'Overview of fields on all entity types.', - 'route_name' => 'field_ui.list', - 'type' => MENU_NORMAL_ITEM, - ); - - return $items; -} - -/** * Implements hook_menu_link_defaults(). */ function field_ui_menu_link_defaults() { diff --git a/core/modules/filter/filter.module b/core/modules/filter/filter.module index 710c59f..68005c3 100644 --- a/core/modules/filter/filter.module +++ b/core/modules/filter/filter.module @@ -118,36 +118,6 @@ function filter_element_info() { } /** - * Implements hook_menu(). - */ -function filter_menu() { - $items['filter/tips'] = array( - 'title' => 'Compose tips', - 'type' => MENU_SUGGESTED_ITEM, - 'route_name' => 'filter.tips_all', - ); - $items['filter/tips/%'] = array( - 'title' => 'Compose tips', - 'route_name' => 'filter.tips', - ); - $items['admin/config/content/formats'] = array( - 'title' => 'Text formats', - 'description' => 'Configure how content input by users is filtered, including allowed HTML tags. Also allows enabling of module-provided filters.', - 'route_name' => 'filter.admin_overview', - ); - $items['admin/config/content/formats/manage/%'] = array( - 'title callback' => 'entity_page_label', - 'title arguments' => array(5), - 'route_name' => 'filter.format_edit', - ); - $items['admin/config/content/formats/manage/%/disable'] = array( - 'title' => 'Disable text format', - 'route_name' => 'filter.admin_disable', - ); - return $items; -} - -/** * Implements hook_menu_link_defaults(). */ function filter_menu_link_defaults() { diff --git a/core/modules/forum/forum.module b/core/modules/forum/forum.module index a7e4b9e..bed78f8 100644 --- a/core/modules/forum/forum.module +++ b/core/modules/forum/forum.module @@ -94,40 +94,6 @@ function forum_theme() { } /** - * Implements hook_menu(). - */ -function forum_menu() { - $items['forum'] = array( - 'title' => 'Forums', - 'route_name' => 'forum.index', - ); - $items['forum/%forum'] = array( - 'title' => 'Forums', - 'title callback' => 'entity_page_label', - 'title arguments' => array(1), - 'route_name' => 'forum.page', - ); - $items['admin/structure/forum'] = array( - 'title' => 'Forums', - 'description' => 'Control forum hierarchy settings.', - 'route_name' => 'forum.overview', - ); - $items['admin/structure/forum/edit/container/%taxonomy_term'] = array( - 'title' => 'Edit container', - 'route_name' => 'forum.edit_container', - ); - $items['admin/structure/forum/edit/forum/%taxonomy_term'] = array( - 'title' => 'Edit forum', - 'route_name' => 'forum.edit_forum', - ); - $items['admin/structure/forum/delete/forum/%taxonomy_term'] = array( - 'title' => 'Delete forum', - 'route_name' => 'forum.delete', - ); - return $items; -} - -/** * Implements hook_menu_link_defaults(). */ function forum_menu_link_defaults() { diff --git a/core/modules/help/help.module b/core/modules/help/help.module index 6d07405..89e0f31 100644 --- a/core/modules/help/help.module +++ b/core/modules/help/help.module @@ -6,25 +6,6 @@ */ /** - * Implements hook_menu(). - */ -function help_menu() { - $items['admin/help'] = array( - 'title' => 'Help', - 'description' => 'Reference for usage, configuration, and modules.', - 'route_name' => 'help.main', - 'weight' => 9, - ); - - $items['admin/help/%'] = array( - 'route_name' => 'help.page', - 'type' => MENU_VISIBLE_IN_BREADCRUMB, - ); - - return $items; -} - -/** * Implements hook_menu_link_defaults(). */ function help_menu_link_defaults() { diff --git a/core/modules/image/image.module b/core/modules/image/image.module index 1f5d8a5..811a661 100644 --- a/core/modules/image/image.module +++ b/core/modules/image/image.module @@ -85,41 +85,6 @@ function image_help($path, $arg) { } /** - * Implements hook_menu(). - */ -function image_menu() { - $items = array(); - - $items['admin/config/media/image-styles'] = array( - 'title' => 'Image styles', - 'description' => 'Configure styles that can be used for resizing or adjusting images on display.', - 'route_name' => 'image.style_list', - ); - $items['admin/config/media/image-styles/manage/%image_style'] = array( - 'title' => 'Edit style', - 'description' => 'Configure an image style.', - 'route_name' => 'image.style_edit', - ); - $items['admin/config/media/image-styles/manage/%/effects/%'] = array( - 'title' => 'Edit image effect', - 'description' => 'Edit an existing effect within a style.', - 'route_name' => 'image.effect_edit_form', - ); - $items['admin/config/media/image-styles/manage/%image_style/effects/%/delete'] = array( - 'title' => 'Delete image effect', - 'description' => 'Delete an existing effect from a style.', - 'route_name' => 'image.effect_delete', - ); - $items['admin/config/media/image-styles/manage/%/add/%'] = array( - 'title' => 'Add image effect', - 'description' => 'Add a new effect to a style.', - 'route_name' => 'image.effect_add_form', - ); - - return $items; -} - -/** * Implements hook_menu_link_defaults(). */ function image_menu_link_defaults() { diff --git a/core/modules/language/language.module b/core/modules/language/language.module index 8d0faab..7262894 100644 --- a/core/modules/language/language.module +++ b/core/modules/language/language.module @@ -69,29 +69,6 @@ function language_help($path, $arg) { } /** - * Implements hook_menu(). - */ -function language_menu() { - // Base language management and configuration. - $items['admin/config/regional/language'] = array( - 'title' => 'Languages', - 'description' => 'Configure languages for content and the user interface.', - 'route_name' => 'language.admin_overview', - 'weight' => 0, - ); - - // Content language settings. - $items['admin/config/regional/content-language'] = array( - 'title' => 'Content language', - 'description' => 'Configure language support for content.', - 'route_name' => 'language.content_settings_page', - 'weight' => 10, - ); - - return $items; -} - -/** * Implements hook_menu_link_defaults(). */ function language_menu_link_defaults() { diff --git a/core/modules/language/lib/Drupal/language/Tests/LanguageUILanguageNegotiationTest.php b/core/modules/language/lib/Drupal/language/Tests/LanguageUILanguageNegotiationTest.php index 6dc144c..2756b21 100644 --- a/core/modules/language/lib/Drupal/language/Tests/LanguageUILanguageNegotiationTest.php +++ b/core/modules/language/lib/Drupal/language/Tests/LanguageUILanguageNegotiationTest.php @@ -111,7 +111,7 @@ function testUILanguageNegotiation() { // We will look for this string in the admin/config screen to see if the // corresponding translated string is shown. - $default_string = 'Configure languages for content and the user interface'; + $default_string = 'Hide descriptions'; // First visit this page to make sure our target string is searchable. $this->drupalGet('admin/config'); diff --git a/core/modules/locale/locale.module b/core/modules/locale/locale.module index 8386be5..bdd9b77 100644 --- a/core/modules/locale/locale.module +++ b/core/modules/locale/locale.module @@ -168,27 +168,6 @@ function locale_help($path, $arg) { } /** - * Implements hook_menu(). - */ -function locale_menu() { - // Translation functionality. - $items['admin/config/regional/translate'] = array( - 'title' => 'User interface translation', - 'description' => 'Translate the built-in user interface.', - 'route_name' => 'locale.translate_page', - 'weight' => 15, - ); - - $items['admin/reports/translations'] = array( - 'title' => 'Available translation updates', - 'route_name' => 'locale.translate_status', - 'description' => 'Get a status report about available interface translations for your installed modules and themes.', - ); - - return $items; -} - -/** * Implements hook_menu_link_defaults(). */ function locale_menu_link_defaults() { diff --git a/core/modules/menu/menu.module b/core/modules/menu/menu.module index e849a3a..79c4c38 100644 --- a/core/modules/menu/menu.module +++ b/core/modules/menu/menu.module @@ -63,36 +63,6 @@ function menu_permission() { } /** - * Implements hook_menu(). - */ -function menu_menu() { - $items['admin/structure/menu'] = array( - 'title' => 'Menus', - 'description' => 'Add new menus to your site, edit existing menus, and rename and reorganize menu links.', - 'route_name' => 'menu.overview_page', - ); - $items['admin/structure/menu/manage/%menu'] = array( - 'title' => 'Edit menu', - 'route_name' => 'menu.menu_edit', - 'title callback' => 'entity_page_label', - 'title arguments' => array(4), - ); - $items['admin/structure/menu/item/%menu_link/edit'] = array( - 'title' => 'Edit menu link', - 'route_name' => 'menu.link_edit', - ); - $items['admin/structure/menu/item/%menu_link/reset'] = array( - 'title' => 'Reset menu link', - 'route_name' => 'menu.link_reset', - ); - $items['admin/structure/menu/item/%menu_link/delete'] = array( - 'title' => 'Delete menu link', - 'route_name' => 'menu.link_delete', - ); - return $items; -} - -/** * Implements hook_menu_link_defaults(). */ function menu_menu_link_defaults() { diff --git a/core/modules/menu_link/lib/Drupal/menu_link/MenuLinkStorageController.php b/core/modules/menu_link/lib/Drupal/menu_link/MenuLinkStorageController.php index 9bd34ae..d80c270 100644 --- a/core/modules/menu_link/lib/Drupal/menu_link/MenuLinkStorageController.php +++ b/core/modules/menu_link/lib/Drupal/menu_link/MenuLinkStorageController.php @@ -218,8 +218,7 @@ public function loadModuleAdminTasks() { ->condition('base.link_path', 'admin/%', 'LIKE') ->condition('base.hidden', 0, '>=') ->condition('base.module', 'system') - ->condition('m.number_parts', 1, '>') - ->condition('m.page_callback', 'system_admin_menu_block_page', '<>'); + ->condition('base.route_name', 'system.admin', '<>'); $ids = $query->execute()->fetchCol(1); return $this->loadMultiple($ids); diff --git a/core/modules/node/lib/Drupal/node/Plugin/views/argument_default/Node.php b/core/modules/node/lib/Drupal/node/Plugin/views/argument_default/Node.php index 9845450..edcbcac 100644 --- a/core/modules/node/lib/Drupal/node/Plugin/views/argument_default/Node.php +++ b/core/modules/node/lib/Drupal/node/Plugin/views/argument_default/Node.php @@ -8,9 +8,12 @@ namespace Drupal\node\Plugin\views\argument_default; use Drupal\views\Plugin\views\argument_default\ArgumentDefaultPluginBase; +use Drupal\node\NodeInterface; +use Symfony\Component\DependencyInjection\ContainerInterface; +use Symfony\Component\HttpFoundation\Request; /** - * Default argument plugin to extract a node via menu_get_object + * Default argument plugin to extract a node. * * This plugin actually has no options so it odes not need to do a great deal. * @@ -21,17 +24,49 @@ */ class Node extends ArgumentDefaultPluginBase { + /** + * The request object. + * + * @var \Symfony\Component\HttpFoundation\Request + */ + protected $request; + + /** + * Constructs a new Node instance. + * + * @param array $configuration + * A configuration array containing information about the plugin instance. + * @param string $plugin_id + * The plugin_id for the plugin instance. + * @param array $plugin_definition + * The plugin implementation definition. + * @param \Symfony\Component\HttpFoundation\Request $request + * The request object. + */ + public function __construct(array $configuration, $plugin_id, array $plugin_definition, Request $request) { + parent::__construct($configuration, $plugin_id, $plugin_definition); + + $this->request = $request; + } + + /** + * {@inheritdoc} + */ + public static function create(ContainerInterface $container, array $configuration, $plugin_id, array $plugin_definition) { + return new static( + $configuration, + $plugin_id, + $plugin_definition, + $container->get('request') + ); + } + + /** + * {@inheritdoc} + */ public function getArgument() { - foreach (range(1, 3) as $i) { - $node = menu_get_object('node', $i); - if (!empty($node)) { - return $node->id(); - } - } - - if (arg(0) == 'node' && is_numeric(arg(1))) { - return arg(1); + if (($node = $this->request->attributes->get('node')) && $node instanceof NodeInterface) { + return $node->id(); } } - } diff --git a/core/modules/node/lib/Drupal/node/Tests/NodeBlockFunctionalTest.php b/core/modules/node/lib/Drupal/node/Tests/NodeBlockFunctionalTest.php index 7bcde78..49fb5d9 100644 --- a/core/modules/node/lib/Drupal/node/Tests/NodeBlockFunctionalTest.php +++ b/core/modules/node/lib/Drupal/node/Tests/NodeBlockFunctionalTest.php @@ -138,6 +138,9 @@ public function testRecentNodeBlock() { // Create a page node. $node5 = $this->drupalCreateNode(array('uid' => $this->adminUser->id(), 'type' => 'page')); + $this->drupalLogout(); + $this->drupalLogin($this->webUser); + // Verify visibility rules. $this->drupalGet(''); $label = $block->label(); diff --git a/core/modules/node/node.module b/core/modules/node/node.module index 2a9504b..abb57aa 100644 --- a/core/modules/node/node.module +++ b/core/modules/node/node.module @@ -21,6 +21,7 @@ use Drupal\Core\Entity\Display\EntityFormDisplayInterface; use Drupal\Core\Template\Attribute; use Drupal\file\Entity\File; +use Symfony\Cmf\Component\Routing\RouteObjectInterface; /** * Denotes that the node is not published. @@ -582,6 +583,10 @@ function node_revision_delete($revision_id) { */ function node_is_page(NodeInterface $node) { $page_node = menu_get_object(); + $request = \Drupal::request(); + if ($request->attributes->get(RouteObjectInterface::ROUTE_NAME) == 'node.view') { + $page_node = $request->attributes->get('node'); + } return (!empty($page_node) ? $page_node->id() == $node->id() : FALSE); } @@ -590,7 +595,7 @@ function node_is_page(NodeInterface $node) { */ function node_preprocess_html(&$variables) { // If on an individual node page, add the node type to body classes. - if ($node = menu_get_object()) { + if (($node = \Drupal::request()->attributes->get('node')) && $node instanceof NodeInterface) { $variables['attributes']['class'][] = drupal_html_class('node-type-' . $node->getType()); } } @@ -931,53 +936,6 @@ function _node_revision_access(NodeInterface $node, $op = 'view', $account = NUL } /** - * Implements hook_menu(). - */ -function node_menu() { - $items['admin/content'] = array( - 'title' => 'Content', - 'description' => 'Find and manage content.', - 'route_name' => 'node.content_overview', - 'weight' => -10, - ); - - $items['admin/structure/types'] = array( - 'title' => 'Content types', - 'description' => 'Manage content types, including default status, front page promotion, comment settings, etc.', - 'route_name' => 'node.overview_types', - ); - $items['node/add'] = array( - 'title' => 'Add content', - 'route_name' => 'node.add_page', - ); - $items['node/add/%node_type'] = array( - 'description callback' => 'node_type_get_description', - 'description arguments' => array(2), - 'route_name' => 'node.add', - ); - $items['node/%node'] = array( - 'title callback' => 'node_page_title', - 'title arguments' => array(1), - // The controller also sets the #title in case the routes' title is - // overridden by a menu link. - 'route_name' => 'node.view', - ); - $items['node/%node/revisions/%node_revision/view'] = array( - 'title' => 'Revisions', - 'route_name' => 'node.revision_show', - ); - $items['node/%node/revisions/%node_revision/revert'] = array( - 'title' => 'Revert to earlier revision', - 'route_name' => 'node.revision_revert_confirm', - ); - $items['node/%node/revisions/%node_revision/delete'] = array( - 'title' => 'Delete earlier revision', - 'route_name' => 'node.revision_delete_confirm', - ); - return $items; -} - -/** * Implements hook_menu_link_defaults(). */ function node_menu_link_defaults() { @@ -1159,26 +1117,23 @@ function node_block_access($block) { // @see node_form_block_form_alter() return; } - $node = menu_get_object(); - $node_types = node_type_get_types(); - if (arg(0) == 'node' && arg(1) == 'add' && arg(2)) { - $node_add_arg = strtr(arg(2), '-', '_'); - } // For blocks with node types associated, if the node type does not match // the settings from this block, deny access to it. - if (!empty($node)) { - // This is a node or node edit page. + $request = \Drupal::request(); + if ($node = $request->attributes->get('node')) { + // Page has node. return in_array($node->bundle(), $allowed_types); } - elseif (isset($node_add_arg) && isset($node_types[$node_add_arg])) { - // This is a node creation page - return in_array($node_add_arg, $allowed_types); - } - else { - // This page does not match the $allowed_types so deny access. - return FALSE; + // This is a node creation page. + // $request->attributes->has('node_type') would also match administration + // configuration pages, which the previous URI path options did not. + if ($request->attributes->get(RouteObjectInterface::ROUTE_NAME) == 'node.add') { + $node_type = $request->attributes->get('node_type'); + return in_array($node_type->id(), $allowed_types); } + + return FALSE; } } diff --git a/core/modules/path/path.module b/core/modules/path/path.module index bd8969f..0c472cd 100644 --- a/core/modules/path/path.module +++ b/core/modules/path/path.module @@ -54,28 +54,6 @@ function path_permission() { } /** - * Implements hook_menu(). - */ -function path_menu() { - $items['admin/config/search/path'] = array( - 'title' => 'URL aliases', - 'description' => "Change your site's URL paths by aliasing them.", - 'route_name' => 'path.admin_overview', - 'weight' => -5, - ); - $items['admin/config/search/path/edit/%path'] = array( - 'title' => 'Edit alias', - 'route_name' => 'path.admin_edit', - ); - $items['admin/config/search/path/delete/%path'] = array( - 'title' => 'Delete alias', - 'route_name' => 'path.delete', - ); - - return $items; -} - -/** * Implements hook_menu_link_defaults(). */ function path_menu_link_defaults() { diff --git a/core/modules/picture/picture.module b/core/modules/picture/picture.module index 60d1c48..5113359 100644 --- a/core/modules/picture/picture.module +++ b/core/modules/picture/picture.module @@ -48,30 +48,6 @@ function picture_permission() { } /** - * Implements hook_menu(). - */ -function picture_menu() { - $items = array(); - - $items['admin/config/media/picturemapping'] = array( - 'title' => 'Picture Mappings', - 'description' => 'Manage picture mappings', - 'weight' => 10, - 'route_name' => 'picture.mapping_page', - ); - $items['admin/config/media/picturemapping/%picture_mapping'] = array( - 'title' => 'Edit picture mapping', - 'route_name' => 'picture.mapping_page_edit', - ); - $items['admin/config/media/picturemapping/%picture_mapping/duplicate'] = array( - 'title' => 'Duplicate picture mapping', - 'route_name' => 'picture.mapping_page_duplicate', - ); - - return $items; -} - -/** * Implements hook_menu_link_defaults(). */ function picture_menu_link_defaults() { diff --git a/core/modules/search/search.module b/core/modules/search/search.module index 11a5e00..2a4aa70 100644 --- a/core/modules/search/search.module +++ b/core/modules/search/search.module @@ -144,30 +144,6 @@ function search_preprocess_block(&$variables) { } /** - * Implements hook_menu(). - */ -function search_menu() { - $items['search'] = array( - 'title' => 'Search', - 'type' => MENU_SUGGESTED_ITEM, - 'route_name' => 'search.view', - ); - $items['admin/config/search/settings'] = array( - 'title' => 'Search settings', - 'description' => 'Configure relevance settings for search and other indexing options.', - 'route_name' => 'search.settings', - 'weight' => -10, - ); - $items['admin/config/search/settings/reindex'] = array( - 'title' => 'Clear index', - 'route_name' => 'search.reindex_confirm', - 'type' => MENU_VISIBLE_IN_BREADCRUMB, - ); - - return $items; -} - -/** * Implements hook_menu_link_defaults(). */ function search_menu_link_defaults() { diff --git a/core/modules/shortcut/shortcut.module b/core/modules/shortcut/shortcut.module index a988cf4..1bf0ce9 100644 --- a/core/modules/shortcut/shortcut.module +++ b/core/modules/shortcut/shortcut.module @@ -7,6 +7,7 @@ use Drupal\Core\Routing\UrlMatcher; use Drupal\shortcut\ShortcutSetInterface; +use Symfony\Cmf\Component\Routing\RouteObjectInterface; use Symfony\Component\HttpFoundation\Request; /** @@ -60,33 +61,6 @@ function shortcut_permission() { } /** - * Implements hook_menu(). - */ -function shortcut_menu() { - $items['admin/config/user-interface/shortcut'] = array( - 'title' => 'Shortcuts', - 'description' => 'Add and modify shortcut sets.', - 'route_name' => 'shortcut.set_admin', - ); - $items['admin/config/user-interface/shortcut/manage/%shortcut_set'] = array( - 'title' => 'Edit shortcuts', - 'route_name' => 'shortcut.set_customize', - 'title callback' => 'entity_page_label', - 'title arguments' => array(5), - ); - $items['admin/config/user-interface/shortcut/link/%shortcut'] = array( - 'title' => 'Edit shortcut', - 'route_name' => 'shortcut.link_edit', - ); - $items['admin/config/user-interface/shortcut/link/%shortcut/delete'] = array( - 'title' => 'Delete shortcut', - 'route_name' => 'shortcut.link_delete', - ); - - return $items; -} - -/** * Implements hook_menu_link_defaults(). */ function shortcut_menu_link_defaults() { @@ -387,7 +361,15 @@ function shortcut_preprocess_page(&$variables) { // shortcuts and if the page's actual content is being shown (for example, // we do not want to display it on "access denied" or "page not found" // pages). - if (shortcut_set_edit_access() && ($item = menu_get_item()) && $item['access']) { + // Load the router item corresponding to the current page. + $request = \Drupal::request(); + $item = array(); + if ($route = $request->attributes->get(RouteObjectInterface::ROUTE_NAME)) { + $item['href'] = $request->attributes->get('_system_path'); + // @todo What should be done on a 404/403 page? + $item['access'] = TRUE; + } + if (shortcut_set_edit_access() && $item && $item['access']) { $link = current_path(); if (!($route_info = \Drupal::service('router.matcher.final_matcher')->findRouteNameParameters($link))) { // Bail out early if we couldn't find a matching route. diff --git a/core/modules/simpletest/simpletest.module b/core/modules/simpletest/simpletest.module index c6b53bf..c7f549b 100644 --- a/core/modules/simpletest/simpletest.module +++ b/core/modules/simpletest/simpletest.module @@ -30,24 +30,6 @@ function simpletest_help($path, $arg) { } /** - * Implements hook_menu(). - */ -function simpletest_menu() { - $items['admin/config/development/testing'] = array( - 'title' => 'Testing', - 'description' => 'Run tests against Drupal core and your modules. These tests help assure that your site code is working as designed.', - 'route_name' => 'simpletest.test_form', - 'weight' => -5, - ); - $items['admin/config/development/testing/results/%'] = array( - 'title' => 'Test result', - 'description' => 'View result of tests.', - 'route_name' => 'simpletest.result_form', - ); - return $items; -} - -/** * Implements hook_menu_link_defaults(). */ function simpletest_menu_link_defaults() { diff --git a/core/modules/statistics/statistics.module b/core/modules/statistics/statistics.module index a8a0105..47f8980 100644 --- a/core/modules/statistics/statistics.module +++ b/core/modules/statistics/statistics.module @@ -79,19 +79,6 @@ function statistics_node_links_alter(array &$node_links, NodeInterface $entity, } /** - * Implements hook_menu(). - */ -function statistics_menu() { - $items['admin/config/system/statistics'] = array( - 'title' => 'Statistics', - 'description' => 'Control details about what and how your site logs content statistics.', - 'route_name' => 'statistics.settings', - 'weight' => -15, - ); - return $items; -} - -/** * Implements hook_menu_link_defaults(). */ function statistics_menu_link_defaults() { diff --git a/core/modules/system/lib/Drupal/system/Controller/AdminController.php b/core/modules/system/lib/Drupal/system/Controller/AdminController.php index 6a7bbc0..f1e231f 100644 --- a/core/modules/system/lib/Drupal/system/Controller/AdminController.php +++ b/core/modules/system/lib/Drupal/system/Controller/AdminController.php @@ -36,7 +36,7 @@ public function index() { // Sort links by title. uasort($admin_tasks, 'drupal_sort_title'); // Move 'Configure permissions' links to the bottom of each section. - $permission_key = "admin/people/permissions#module-$module"; + $permission_key = "user.admin.people.permissions.$module"; if (isset($admin_tasks[$permission_key])) { $permission_task = $admin_tasks[$permission_key]; unset($admin_tasks[$permission_key]); diff --git a/core/modules/system/lib/Drupal/system/Tests/Path/PathUnitTestBase.php b/core/modules/system/lib/Drupal/system/Tests/Path/PathUnitTestBase.php index faaa158..64a92ea 100644 --- a/core/modules/system/lib/Drupal/system/Tests/Path/PathUnitTestBase.php +++ b/core/modules/system/lib/Drupal/system/Tests/Path/PathUnitTestBase.php @@ -20,7 +20,7 @@ public function setUp() { $this->fixtures = new UrlAliasFixtures(); // The alias whitelist expects that the menu path roots are set by a // menu router rebuild. - \Drupal::state()->set('menu_path_roots', array('user', 'admin')); + \Drupal::state()->set('router.path_roots', array('user', 'admin')); } public function tearDown() { diff --git a/core/modules/system/system.module b/core/modules/system/system.module index 065d280..a205955 100644 --- a/core/modules/system/system.module +++ b/core/modules/system/system.module @@ -2912,14 +2912,16 @@ function system_get_module_admin_tasks($module, $info) { // Append link for permissions. if (\Drupal::moduleHandler()->implementsHook($module, 'permission')) { - $item = menu_get_item('admin/people/permissions'); - if (!empty($item['access'])) { - $item['link_path'] = $item['href']; - $item['title'] = t('Configure @module permissions', array('@module' => $info['name'])); - unset($item['description']); - $item['localized_options']['fragment'] = 'module-' . $module; - $item = entity_create('menu_link', $item); - $admin_tasks["admin/people/permissions#module-$module"] = $item; + /** @var \Drupal\Core\Access\AccessManager $access_manager */ + $access_manager = \Drupal::service('access_manager'); + /** @var \Drupal\menu_link\MenuLinkStorageControllerInterface $menu_link_storage_controller */ + $menu_link_storage_controller = \Drupal::entityManager()->getStorageController('menu_link'); + if ($access_manager->checkNamedRoute('user.admin_permissions', array(), \Drupal::currentUser())) { + $path = \Drupal::urlGenerator()->getPathFromRoute('user.admin_permissions'); + $options = array(); + $options['fragment'] = 'module-' . $module; + $menu_link = $menu_link_storage_controller->create(array('route_name' => 'user.admin_permissions', 'link_path' => $path, 'title' => t('Configure @module permissions', array('@module' => $info['name'])), 'localized_options' => $options)); + $admin_tasks["user.admin.people.permissions.$module"] = $menu_link; } } diff --git a/core/modules/system/tests/modules/module_test/module_test.module b/core/modules/system/tests/modules/module_test/module_test.module index 6bb9a78..2810178 100644 --- a/core/modules/system/tests/modules/module_test/module_test.module +++ b/core/modules/system/tests/modules/module_test/module_test.module @@ -69,25 +69,6 @@ function module_test_hook_info() { } /** - * Implements hook_menu(). - */ -function module_test_menu() { - $items['module-test/hook-dynamic-loading-invoke'] = array( - 'title' => 'Test hook dynamic loading (invoke)', - 'route_name' => 'module_test.dynamic_invoke', - ); - $items['module-test/hook-dynamic-loading-invoke-all'] = array( - 'title' => 'Test hook dynamic loading (invoke_all)', - 'route_name' => 'module_test.dynamic_invoke_all', - ); - $items['module-test/class-loading'] = array( - 'title' => 'Test loading a class from another module', - 'route_name' => 'module_test.class_loading', - ); - return $items; -} - -/** * Page callback for 'hook dynamic loading' test. * * If the hook is dynamically loaded correctly, the menu callback should diff --git a/core/modules/system/tests/modules/plugin_test/plugin_test.module b/core/modules/system/tests/modules/plugin_test/plugin_test.module index 6a33894..147e052 100644 --- a/core/modules/system/tests/modules/plugin_test/plugin_test.module +++ b/core/modules/system/tests/modules/plugin_test/plugin_test.module @@ -14,14 +14,3 @@ function plugin_test_plugin_test_alter(&$definitions) { } $definitions['user_login']['altered_single'] = TRUE; } - -/** - * Implements hook_menu(). - */ -function plugin_test_menu() { - $items = array(); - $items['plugin_definition_test'] = array( - 'route_name' => 'plugin_test.definition', - ); - return $items; -} diff --git a/core/modules/system/tests/modules/test_page_test/test_page_test.module b/core/modules/system/tests/modules/test_page_test/test_page_test.module index 7933a85..93c10c5 100644 --- a/core/modules/system/tests/modules/test_page_test/test_page_test.module +++ b/core/modules/system/tests/modules/test_page_test/test_page_test.module @@ -1,18 +1,6 @@ 'Test front page', - 'route_name' => 'test_page_test.test_page', - ); - - return $items; -} - -/** * Page callback: Returns a test page and sets the title. * * @deprecated Use \Drupal\test_page_test\Controller\TestPageTestController::testPage() diff --git a/core/modules/system/tests/modules/theme_test/theme_test.module b/core/modules/system/tests/modules/theme_test/theme_test.module index bdb1404..4fdfd09 100644 --- a/core/modules/system/tests/modules/theme_test/theme_test.module +++ b/core/modules/system/tests/modules/theme_test/theme_test.module @@ -64,27 +64,6 @@ function theme_test_system_theme_info() { } /** - * Implements hook_menu(). - */ -function theme_test_menu() { - $items['theme-test/suggestion'] = array( - 'route_name' => 'theme_test.suggestion', - 'theme callback' => '_theme_custom_theme', - 'type' => MENU_CALLBACK, - ); - $items['theme-test/alter'] = array( - 'theme callback' => '_theme_custom_theme', - 'route_name' => 'theme_test.alter', - 'type' => MENU_CALLBACK, - ); - $items['theme-test/function-template-overridden'] = array( - 'theme callback' => '_theme_custom_theme', - 'route_name' => 'theme_test.function_template_override', - ); - return $items; -} - -/** * Implements hook_preprocess_HOOK() for HTML document templates. */ function theme_test_preprocess_html(&$variables) { diff --git a/core/modules/taxonomy/lib/Drupal/taxonomy/Plugin/views/argument_default/Tid.php b/core/modules/taxonomy/lib/Drupal/taxonomy/Plugin/views/argument_default/Tid.php index 57ad428..2f6e58b 100644 --- a/core/modules/taxonomy/lib/Drupal/taxonomy/Plugin/views/argument_default/Tid.php +++ b/core/modules/taxonomy/lib/Drupal/taxonomy/Plugin/views/argument_default/Tid.php @@ -10,6 +10,9 @@ use Drupal\views\ViewExecutable; use Drupal\views\Plugin\views\display\DisplayPluginBase; use Drupal\views\Plugin\views\argument_default\ArgumentDefaultPluginBase; +use Drupal\node\NodeInterface; +use Symfony\Component\DependencyInjection\ContainerInterface; +use Symfony\Component\HttpFoundation\Request; /** * Taxonomy tid default argument. @@ -22,6 +25,42 @@ class Tid extends ArgumentDefaultPluginBase { /** + * The request object. + * + * @var \Symfony\Component\HttpFoundation\Request + */ + protected $request; + + /** + * Constructs a new Tid instance. + * + * @param array $configuration + * A configuration array containing information about the plugin instance. + * @param string $plugin_id + * The plugin_id for the plugin instance. + * @param array $plugin_definition + * The plugin implementation definition. + * @param \Symfony\Component\HttpFoundation\Request $request + * The request object. + */ + public function __construct(array $configuration, $plugin_id, array $plugin_definition, Request $request) { + parent::__construct($configuration, $plugin_id, $plugin_definition); + $this->request = $request; + } + + /** + * {@inheritdoc} + */ + public static function create(ContainerInterface $container, array $configuration, $plugin_id, array $plugin_definition) { + return new static( + $configuration, + $plugin_id, + $plugin_definition, + $container->get('request') + ); + } + + /** * Overrides \Drupal\views\Plugin\views\Plugin\views\PluginBase::init(). */ public function init(ViewExecutable $view, DisplayPluginBase $display, array &$options = NULL) { @@ -114,6 +153,9 @@ public function submitOptionsForm(&$form, &$form_state, &$options = array()) { $options['vids'] = array_filter($options['vids']); } + /** + * {@inheritdoc} + */ public function getArgument() { // Load default argument from taxonomy page. if (!empty($this->options['term_page'])) { @@ -123,14 +165,8 @@ public function getArgument() { } // Load default argument from node. if (!empty($this->options['node'])) { - foreach (range(1, 3) as $i) { - $node = menu_get_object('node', $i); - if (!empty($node)) { - break; - } - } // Just check, if a node could be detected. - if ($node) { + if (($node = $this->request->attributes->has('node')) && $node instanceof NodeInterface) { $taxonomy = array(); $instances = field_info_instances('node', $node->getType()); foreach ($instances as $instance) { diff --git a/core/modules/taxonomy/taxonomy.module b/core/modules/taxonomy/taxonomy.module index f2fe6fe..e4fbec3 100644 --- a/core/modules/taxonomy/taxonomy.module +++ b/core/modules/taxonomy/taxonomy.module @@ -232,33 +232,6 @@ function taxonomy_theme() { } /** - * Implements hook_menu(). - */ -function taxonomy_menu() { - $items['admin/structure/taxonomy'] = array( - 'title' => 'Taxonomy', - 'description' => 'Manage tagging, categorization, and classification of your content.', - 'route_name' => 'taxonomy.vocabulary_list', - ); - - $items['taxonomy/term/%taxonomy_term'] = array( - 'title' => 'Taxonomy term', - 'title callback' => 'taxonomy_term_title', - 'title arguments' => array(2), - 'route_name' => 'taxonomy.term_page', - ); - $items['taxonomy/term/%taxonomy_term/feed'] = array( - 'title' => 'Taxonomy term', - 'title callback' => 'taxonomy_term_title', - 'title arguments' => array(2), - 'route_name' => 'taxonomy.term_feed', - 'type' => MENU_CALLBACK, - ); - - return $items; -} - -/** * Implements hook_menu_link_defaults(). */ function taxonomy_menu_link_defaults() { diff --git a/core/modules/toolbar/toolbar.module b/core/modules/toolbar/toolbar.module index d91527b..a460f12 100644 --- a/core/modules/toolbar/toolbar.module +++ b/core/modules/toolbar/toolbar.module @@ -422,6 +422,7 @@ function toolbar_get_menu_tree() { ->condition('module', 'system') ->condition('link_path', 'admin'); $result = $query->execute(); + debug($result); if (!empty($result)) { $admin_link = menu_link_load(reset($result)); $tree = menu_build_tree('admin', array( @@ -468,6 +469,7 @@ function toolbar_menu_navigation_links(&$tree) { function toolbar_get_rendered_subtrees() { $subtrees = array(); $tree = toolbar_get_menu_tree(); + debug(array_keys($tree)); foreach ($tree as $tree_item) { $item = $tree_item['link']; if (!$item['hidden'] && $item['access']) { @@ -480,6 +482,8 @@ function toolbar_get_rendered_subtrees() { } $parents = $query->execute()->fetchCol(); $subtree = menu_build_tree($item['menu_name'], array('expanded' => $parents, 'min_depth' => $item['depth']+1)); + debug(array_keys($subtree)); + debug($item->id()); toolbar_menu_navigation_links($subtree); $subtree = menu_tree_output($subtree); $subtree = drupal_render($subtree); diff --git a/core/modules/tour/tests/tour_test/tour_test.module b/core/modules/tour/tests/tour_test/tour_test.module index 0df3e57..3b1ca24 100644 --- a/core/modules/tour/tests/tour_test/tour_test.module +++ b/core/modules/tour/tests/tour_test/tour_test.module @@ -18,18 +18,19 @@ function tour_test_admin_paths() { } /** - * Implements hook_menu(). + * Implements hook_menu_link_defaults(). */ -function tour_test_menu() { - $items['tour-test-1'] = array( +function hook_menu_link_defaults() { + $links['tour_test.1'] = array( 'route_name' => 'tour_test.1', - 'title' => 'Tour test 1' + 'link_title' => 'Tour test 1' ); - $items['tour-test-2/subpath'] = array( + $links['tour_test.2'] = array( 'route_name' => 'tour_test.2', - 'title' => 'Tour test 2' + 'link_title' => 'Tour test 2' ); - return $items; + + return $links; } /** diff --git a/core/modules/update/update.module b/core/modules/update/update.module index adf6ba3..4b0484d 100644 --- a/core/modules/update/update.module +++ b/core/modules/update/update.module @@ -162,22 +162,6 @@ function update_library_info() { } /** - * Implements hook_menu(). - */ -function update_menu() { - $items = array(); - - $items['admin/reports/updates'] = array( - 'title' => 'Available updates', - 'description' => 'Get a status report about available updates for your installed modules and themes.', - 'route_name' => 'update.status', - 'weight' => -50, - ); - - return $items; -} - -/** * Implements hook_menu_link_defaults(). */ function update_menu_link_defaults() { diff --git a/core/modules/user/user.module b/core/modules/user/user.module index 4262403..2494246 100644 --- a/core/modules/user/user.module +++ b/core/modules/user/user.module @@ -709,88 +709,6 @@ function user_register_access() { } /** - * Implements hook_menu(). - */ -function user_menu() { - // Registration and login pages. - $items['user'] = array( - 'title' => 'User account', - 'title callback' => 'user_menu_title', - 'weight' => -10, - 'route_name' => 'user.page', - 'menu_name' => 'account', - ); - - // Since menu_get_ancestors() does not support multiple placeholders in a row, - // this MENU_CALLBACK cannot be removed yet. - $items['user/reset/%/%/%'] = array( - 'title' => 'Reset password', - 'route_name' => 'user.reset', - 'type' => MENU_CALLBACK, - ); - - $items['user/logout'] = array( - 'title' => 'Log out', - 'route_name' => 'user.logout', - 'weight' => 10, - 'menu_name' => 'account', - ); - - // User listing pages. - $items['admin/people'] = array( - 'title' => 'People', - 'description' => 'Manage user accounts, roles, and permissions.', - 'route_name' => 'user.admin_account', - 'position' => 'left', - 'weight' => -4, - ); - - // Permissions and role forms. - $items['admin/people/permissions'] = array( - 'title' => 'Permissions', - 'description' => 'Determine access to features by selecting permissions for roles.', - 'route_name' => 'user.admin_permissions', - 'type' => MENU_SIBLING_LOCAL_TASK, - ); - - $items['admin/people/roles/manage/%user_role'] = array( - 'title' => 'Edit role', - 'route_name' => 'user.role_edit', - ); - - // Administration pages. - $items['admin/config/people'] = array( - 'title' => 'People', - 'description' => 'Configure user accounts.', - 'position' => 'left', - 'weight' => -20, - 'route_name' => 'user.admin_index', - ); - - $items['admin/config/people/accounts'] = array( - 'title' => 'Account settings', - 'description' => 'Configure default behavior of users, including registration requirements, e-mails, and fields.', - 'weight' => -10, - 'route_name' => 'user.account_settings', - ); - - $items['user/%user'] = array( - 'title' => 'My account', - 'title callback' => 'user_page_title', - 'title arguments' => array(1), - 'route_name' => 'user.view', - ); - $items['user/%user/cancel'] = array( - 'route_name' => 'user.cancel', - ); - $items['user/%user/cancel/confirm/%/%'] = array( - 'title' => 'Confirm account cancellation', - 'route_name' => 'user.cancel_confirm', - ); - return $items; -} - -/** * Implements hook_menu_link_defaults(). */ function user_menu_link_defaults() { diff --git a/core/modules/views/lib/Drupal/views/Plugin/views/argument/Date.php b/core/modules/views/lib/Drupal/views/Plugin/views/argument/Date.php index 3bf75ef..c11bc81 100644 --- a/core/modules/views/lib/Drupal/views/Plugin/views/argument/Date.php +++ b/core/modules/views/lib/Drupal/views/Plugin/views/argument/Date.php @@ -8,6 +8,9 @@ namespace Drupal\views\Plugin\views\argument; use Drupal\Core\Database\Database; +use Drupal\node\NodeInterface; +use Symfony\Component\DependencyInjection\ContainerInterface; +use Symfony\Component\HttpFoundation\Request; /** * Abstract argument handler for dates. @@ -41,16 +44,53 @@ class Date extends Formula { */ protected $argFormat = 'Y-m-d'; + /** + * The request object. + * + * @var \Symfony\Component\HttpFoundation\Request + */ + protected $request; + var $option_name = 'default_argument_date'; /** + * Constructs a new Date instance. + * + * @param array $configuration + * A configuration array containing information about the plugin instance. + * @param string $plugin_id + * The plugin_id for the plugin instance. + * @param array $plugin_definition + * The plugin implementation definition. + * @param \Symfony\Component\HttpFoundation\Request $request + * The request object. + */ + public function __construct(array $configuration, $plugin_id, array $plugin_definition, Request $request) { + parent::__construct($configuration, $plugin_id, $plugin_definition); + $this->request = $request; + } + + /** + * {@inheritdoc} + */ + public static function create(ContainerInterface $container, array $configuration, $plugin_id, array $plugin_definition) { + return new static( + $configuration, + $plugin_id, + $plugin_definition, + $container->get('request') + ); + } + + /** * Add an option to set the default value to the current date. */ public function defaultArgumentForm(&$form, &$form_state) { parent::defaultArgumentForm($form, $form_state); - $form['default_argument_type']['#options'] += array('date' => t('Current date')); - $form['default_argument_type']['#options'] += array('node_created' => t("Current node's creation time")); - $form['default_argument_type']['#options'] += array('node_changed' => t("Current node's update time")); } + $form['default_argument_type']['#options'] += array('date' => $this->t('Current date')); + $form['default_argument_type']['#options'] += array('node_created' => $this->t("Current node's creation time")); + $form['default_argument_type']['#options'] += array('node_changed' => $this->t("Current node's update time")); + } /** * Set the empty argument value to the current date, @@ -61,18 +101,9 @@ public function getDefaultArgument($raw = FALSE) { return date($this->argFormat, REQUEST_TIME); } elseif (!$raw && in_array($this->options['default_argument_type'], array('node_created', 'node_changed'))) { - foreach (range(1, 3) as $i) { - $node = menu_get_object('node', $i); - if (!empty($node)) { - continue; - } - } + $node = $this->request->attributes->get('node'); - if (arg(0) == 'node' && is_numeric(arg(1))) { - $node = node_load(arg(1)); - } - - if (empty($node)) { + if (!($node instanceof NodeInterface)) { return parent::getDefaultArgument(); } elseif ($this->options['default_argument_type'] == 'node_created') { @@ -90,7 +121,7 @@ public function getDefaultArgument($raw = FALSE) { * {@inheritdoc} */ public function getSortName() { - return t('Date', array(), array('context' => 'Sort order')); + return $this->t('Date', array(), array('context' => 'Sort order')); } /** diff --git a/core/modules/views/lib/Drupal/views/Plugin/views/display/DisplayPluginBase.php b/core/modules/views/lib/Drupal/views/Plugin/views/display/DisplayPluginBase.php index e371f7d..a307cbe 100644 --- a/core/modules/views/lib/Drupal/views/Plugin/views/display/DisplayPluginBase.php +++ b/core/modules/views/lib/Drupal/views/Plugin/views/display/DisplayPluginBase.php @@ -2382,21 +2382,6 @@ public function executeHookMenuLinkDefaults(array &$existing_links) { } /** - * If this display creates a page with a menu item, implement it here. - * - * @param array $callbacks - * An array of already existing menu items provided by drupal. - * - * @return array - * The menu router items registers for this display. - * - * @see hook_menu() - */ - public function executeHookMenu($callbacks) { - return array(); - } - - /** * Render this display. */ public function render() { diff --git a/core/modules/views/views.module b/core/modules/views/views.module index 1959cd8..191f3e8 100644 --- a/core/modules/views/views.module +++ b/core/modules/views/views.module @@ -271,51 +271,6 @@ function views_permission() { } /** - * Implement hook_menu_alter(). - */ -function views_menu_alter(&$callbacks) { - $our_paths = array(); - $views = views_get_applicable_views('uses_hook_menu'); - foreach ($views as $data) { - list($view, $display_id) = $data; - $result = $view->executeHookMenu($display_id, $callbacks); - if (is_array($result)) { - // The menu system doesn't support having two otherwise - // identical paths with different placeholders. So we - // want to remove the existing items from the menu whose - // paths would conflict with ours. - - // First, we must find any existing menu items that may - // conflict. We use a regular expression because we don't - // know what placeholders they might use. Note that we - // first construct the regex itself by replacing %views_arg - // in the display path, then we use this constructed regex - // (which will be something like '#^(foo/%[^/]*/bar)$#') to - // search through the existing paths. - $regex = '#^(' . preg_replace('#%views_arg#', '%[^/]*', implode('|', array_keys($result))) . ')$#'; - $matches = preg_grep($regex, array_keys($callbacks)); - - // Remove any conflicting items that were found. - foreach ($matches as $path) { - // Don't remove the paths we just added! - if (!isset($our_paths[$path])) { - unset($callbacks[$path]); - } - } - foreach ($result as $path => $item) { - if (!isset($callbacks[$path])) { - // Add a new item, possibly replacing (and thus effectively - // overriding) one that we removed above. - $callbacks[$path] = $item; - } - $our_paths[$path] = TRUE; - } - } - $view->destroy(); - } -} - -/** * Implements hook_menu_link_defaults_alter(). */ function views_menu_link_defaults_alter(array &$links) { diff --git a/core/modules/views_ui/views_ui.module b/core/modules/views_ui/views_ui.module index 2cc12df..3ed19b8 100644 --- a/core/modules/views_ui/views_ui.module +++ b/core/modules/views_ui/views_ui.module @@ -38,29 +38,6 @@ function views_ui_help($path, $arg) { } /** - * Implements hook_menu(). - */ -function views_ui_menu() { - $items = array(); - - // Top-level Views module pages (not tied to a particular View). - $items['admin/structure/views'] = array( - 'title' => 'Views', - 'description' => 'Manage customized lists of content.', - 'route_name' => 'views_ui.list', - ); - - // A page in the Reports section to show usage of plugins in all views. - $items['admin/reports/views-plugins'] = array( - 'title' => 'Views plugins', - 'description' => 'Overview of plugins used in all views.', - 'route_name' => 'views_ui.reports_plugins', - ); - - return $items; -} - -/** * Implements hook_menu_link_defaults(). */ function views_ui_menu_link_defaults() { diff --git a/core/tests/Drupal/Tests/Core/EventSubscriber/PathRootsSubscriberTest.php b/core/tests/Drupal/Tests/Core/EventSubscriber/PathRootsSubscriberTest.php new file mode 100644 index 0000000..ee3fda3 --- /dev/null +++ b/core/tests/Drupal/Tests/Core/EventSubscriber/PathRootsSubscriberTest.php @@ -0,0 +1,86 @@ + 'Drupal\Core\EventSubscriber\PathRootsSubscriber', + 'description' => '', + 'group' => 'Routing' + ); + } + + /** + * {@inheritdoc} + */ + protected function setUp() { + $this->state = $this->getMock('Drupal\Core\KeyValueStore\StateInterface'); + $this->pathRootsSubscriber = new PathRootsSubscriber($this->state); + } + + /** + * Tests altering and finished event. + * + * @covers ::onRouteAlter() + * @covers ::onRouteFinished() + */ + public function testSubscribing() { + $route_collection = new RouteCollection(); + $route_collection->add('test_route1', new Route('/test/bar')); + $route_collection->add('test_route2', new Route('/test/baz')); + $route_collection->add('test_route3', new Route('/test2/bar/baz')); + + $event = new RouteBuildEvent($route_collection, 'provider'); + $this->pathRootsSubscriber->onRouteAlter($event); + + $route_collection = new RouteCollection(); + $route_collection->add('test_route4', new Route('/test1/bar')); + $route_collection->add('test_route5', new Route('/test2/baz')); + $route_collection->add('test_route6', new Route('/test2/bar/baz')); + + $event = new RouteBuildEvent($route_collection, 'provider'); + $this->pathRootsSubscriber->onRouteAlter($event); + + $this->state->expects($this->once()) + ->method('set') + ->with('router.path_roots', array('test', 'test2', 'test1')); + + $this->pathRootsSubscriber->onRouteFinished(); + } + +}