diff --git a/core/modules/menu/lib/Drupal/menu/Controller/MenuController.php b/core/modules/menu/lib/Drupal/menu/Controller/MenuController.php new file mode 100644 index 0000000..c41d6f4 --- /dev/null +++ b/core/modules/menu/lib/Drupal/menu/Controller/MenuController.php @@ -0,0 +1,93 @@ +entityManager = $entity_manager; + } + + /** + * {@inheritdoc} + */ + public static function create(ContainerInterface $container) { + return new static( + $container->get('plugin.manager.entity') + ); + } + + /** + * Shows an overview page of all the custom menus and their descriptions. + * + * @return array + * A render array of the listing page. + */ + public function overview() { + return $this->entityManager->getListController('menu')->render(); + } + + /** + * Gets all the available menus and menu items as a JavaScript array. + * + * @return \Symfony\Component\HttpFoundation\JsonResponse + * The available menu and menu items. + */ + public function getParentOptions() { + $available_menus = array(); + if (isset($_POST['menus']) && count($_POST['menus'])) { + foreach ($_POST['menus'] as $menu) { + $available_menus[$menu] = $menu; + } + } + $options = _menu_get_options(menu_get_menus(), $available_menus, array('mlid' => 0)); + + return new JsonResponse($options); + } + + /** + * Provides the menu link submission form. + * + * @param \Drupal\system\Plugin\Core\Entity\Menu $menu + * An entity representing a custom menu. + * + * @return array + * Returns the menu link submission form. + */ + public function addLink(Menu $menu) { + $menu_link = $this->entityManager->getStorageController('menu_link')->create(array( + 'mlid' => 0, + 'plid' => 0, + 'menu_name' => $menu->id(), + )); + return entity_get_form($menu_link); + } + +} diff --git a/core/modules/menu/lib/Drupal/menu/MenuFormController.php b/core/modules/menu/lib/Drupal/menu/MenuFormController.php index 4eeab27..0b58889 100644 --- a/core/modules/menu/lib/Drupal/menu/MenuFormController.php +++ b/core/modules/menu/lib/Drupal/menu/MenuFormController.php @@ -19,6 +19,11 @@ class MenuFormController extends EntityFormController { */ public function form(array $form, array &$form_state) { $form = parent::form($form, $form_state); + + if ($this->operation == 'edit') { + drupal_set_title(t('Edit menu %label', array('%label' => $this->entity->label())), PASS_THROUGH); + } + $menu = $this->entity; $system_menus = menu_list_system_menus(); $form_state['menu'] = &$menu; @@ -53,6 +58,7 @@ public function form(array $form, array &$form_state) { // Add menu links administration form for existing menus. if (!$menu->isNew() || isset($system_menus[$menu->id()])) { + form_load_include($form_state, 'admin.inc', 'menu'); // Form API supports constructing and validating self-contained sections // within forms, but does not allow to handle the form section's submission // equally separated yet. Therefore, we use a $form_state key to point to diff --git a/core/modules/menu/menu.admin.inc b/core/modules/menu/menu.admin.inc index 8869465..0d1ed0d 100644 --- a/core/modules/menu/menu.admin.inc +++ b/core/modules/menu/menu.admin.inc @@ -5,48 +5,7 @@ * Administrative page callbacks for menu module. */ -use Drupal\menu_link\Plugin\Core\Entity\MenuLink; -use Drupal\system\Plugin\Core\Entity\Menu; use Drupal\Component\Utility\NestedArray; -use Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException; - -/** - * Menu callback which shows an overview page of all the custom menus and their descriptions. - */ -function menu_overview_page() { - return drupal_container()->get('plugin.manager.entity') - ->getListController('menu') - ->render(); -} - -/** - * Page callback: Presents the menu creation form. - * - * @return array - * A form array as expected by drupal_render(). - * - * @see menu_menu() - */ -function menu_menu_add() { - $menu = entity_create('menu', array()); - return entity_get_form($menu); -} - -/** - * Page callback: Presents the menu edit form. - * - * @param \Drupal\system\Plugin\Core\Entity\Menu $menu - * The menu to edit. - * - * @return array - * A form array as expected by drupal_render(). - * - * @see menu_menu() - */ -function menu_menu_edit(Menu $menu) { - drupal_set_title(t('Edit menu %label', array('%label' => $menu->label())), PASS_THROUGH); - return entity_get_form($menu); -} /** * Form constructor to edit an entire menu tree at once. @@ -355,22 +314,3 @@ function menu_edit_menu_submit($form, &$form_state) { drupal_set_message(t('Your configuration has been saved.')); $form_state['redirect'] = $path . $menu['id']; } - -/** - * Menu callback: Provides the menu link submission form. - * - * @param \Drupal\system\Plugin\Core\Entity\Menu $menu - * An entity representing a custom menu. - * - * @return - * Returns the menu link submission form. - */ -function menu_link_add(Menu $menu) { - $menu_link = entity_create('menu_link', array( - 'mlid' => 0, - 'plid' => 0, - 'menu_name' => $menu->id(), - )); - drupal_set_title(t('Add menu link')); - return entity_get_form($menu_link); -} diff --git a/core/modules/menu/menu.module b/core/modules/menu/menu.module index 5daaff5..7027719 100644 --- a/core/modules/menu/menu.module +++ b/core/modules/menu/menu.module @@ -15,7 +15,6 @@ use Drupal\block\Plugin\Core\Entity\Block; use Drupal\system\Plugin\Core\Entity\Menu; use Drupal\system\Plugin\block\block\SystemMenuBlock; -use Symfony\Component\HttpFoundation\JsonResponse; use Drupal\menu_link\Plugin\Core\Entity\MenuLink; use Drupal\menu_link\MenuLinkStorageController; @@ -68,16 +67,7 @@ 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.', - 'page callback' => 'menu_overview_page', - 'access callback' => 'user_access', - 'access arguments' => array('administer menu'), - 'file' => 'menu.admin.inc', - ); - $items['admin/structure/menu/parents'] = array( - 'title' => 'Parent menu items', - 'page callback' => 'menu_parent_options_js', - 'type' => MENU_CALLBACK, - 'access arguments' => array(TRUE), + 'route_name' => 'menu_overview_page', ); $items['admin/structure/menu/list'] = array( 'title' => 'List menus', @@ -85,35 +75,24 @@ function menu_menu() { ); $items['admin/structure/menu/add'] = array( 'title' => 'Add menu', - 'page callback' => 'menu_menu_add', - 'access arguments' => array('administer menu'), + 'route_name' => 'menu_add_menu', 'type' => MENU_LOCAL_ACTION, - 'file' => 'menu.admin.inc', ); $items['admin/structure/menu/settings'] = array( 'title' => 'Settings', 'route_name' => 'menu_settings', - 'access arguments' => array('administer menu'), 'type' => MENU_LOCAL_TASK, 'weight' => 100, ); $items['admin/structure/menu/manage/%menu'] = array( 'title' => 'Edit menu', - 'page callback' => 'menu_menu_edit', - 'page arguments' => array(4), - 'title callback' => 'entity_page_label', - 'title arguments' => array(4), - 'access arguments' => array('administer menu'), - 'file' => 'menu.admin.inc', + 'route_name' => 'menu_edit_menu', ); // Not officially a local action, but displayed as such in // menu_overview_form(). $items['admin/structure/menu/manage/%menu/add'] = array( 'title' => 'Add menu link', - 'page callback' => 'menu_link_add', - 'page arguments' => array(4), - 'access arguments' => array('administer menu'), - 'file' => 'menu.admin.inc', + 'route_name' => 'menu_link_add', ); $items['admin/structure/menu/manage/%menu/edit'] = array( 'title' => 'Edit menu', @@ -127,9 +106,7 @@ function menu_menu() { ); $items['admin/structure/menu/item/%menu_link/edit'] = array( 'title' => 'Edit menu link', - 'page callback' => 'entity_get_form', - 'page arguments' => array(4), - 'access arguments' => array('administer menu'), + 'route_name' => 'menu_link_edit', ); $items['admin/structure/menu/item/%menu_link/reset'] = array( 'title' => 'Reset menu link', @@ -149,7 +126,8 @@ function menu_entity_info_alter(&$entity_info) { $entity_info['menu']['controllers']['list'] = 'Drupal\menu\MenuListController'; $entity_info['menu']['uri_callback'] = 'menu_uri'; $entity_info['menu']['controllers']['form'] = array( - 'default' => 'Drupal\menu\MenuFormController', + 'add' => 'Drupal\menu\MenuFormController', + 'edit' => 'Drupal\menu\MenuFormController', ); } @@ -338,22 +316,6 @@ function menu_parent_options(array $menus, MenuLink $menu_link = NULL, $type = N } /** - * Page callback. - * Get all the available menus and menu items as a JavaScript array. - */ -function menu_parent_options_js() { - $available_menus = array(); - if (isset($_POST['menus']) && count($_POST['menus'])) { - foreach ($_POST['menus'] as $menu) { - $available_menus[$menu] = $menu; - } - } - $options = _menu_get_options(menu_get_menus(), $available_menus, array('mlid' => 0)); - - return new JsonResponse($options); -} - -/** * Helper function to get the items of the given menu. */ function _menu_get_options($menus, $available_menus, $item) { diff --git a/core/modules/menu/menu.routing.yml b/core/modules/menu/menu.routing.yml index aafe5c3..d0ade92 100644 --- a/core/modules/menu/menu.routing.yml +++ b/core/modules/menu/menu.routing.yml @@ -5,6 +5,34 @@ menu_settings: requirements: _permission: 'administer menu' +menu_overview_page: + pattern: '/admin/structure/menu' + defaults: + _controller: '\Drupal\menu\Controller\MenuController::overview' + requirements: + _permission: 'administer menu' + +menu_parent_options_js: + pattern: '/admin/structure/menu/parents' + defaults: + _controller: '\Drupal\menu\Controller\MenuController::getParentOptions' + requirements: + _access: 'TRUE' + +menu_link_add: + pattern: '/admin/structure/menu/manage/{menu}/add' + defaults: + _controller: '\Drupal\menu\Controller\MenuController::addLink' + requirements: + _permission: 'administer menu' + +menu_link_edit: + pattern: '/admin/structure/menu/item/{menu_link}/edit' + defaults: + _entity_form: 'menu_link' + requirements: + _permission: 'administer menu' + menu_link_reset: pattern: 'admin/structure/menu/item/{menu_link}/reset' defaults: @@ -19,6 +47,20 @@ menu_link_delete: requirements: _access_menu_delete_link: 'TRUE' +menu_add_menu: + pattern: '/admin/structure/menu/add' + defaults: + _entity_form: 'menu.add' + requirements: + _permission: 'administer menu' + +menu_edit_menu: + pattern: '/admin/structure/menu/manage/{menu}' + defaults: + _entity_form: 'menu.edit' + requirements: + _permission: 'administer menu' + menu_delete_menu: pattern: 'admin/structure/menu/manage/{menu}/delete' defaults: