diff --git a/core/modules/shortcut/lib/Drupal/shortcut/ShortcutAccessController.php b/core/modules/shortcut/lib/Drupal/shortcut/ShortcutAccessController.php index da0e616cc74..572423e6355 100644 --- a/core/modules/shortcut/lib/Drupal/shortcut/ShortcutAccessController.php +++ b/core/modules/shortcut/lib/Drupal/shortcut/ShortcutAccessController.php @@ -21,6 +21,7 @@ class ShortcutAccessController extends EntityAccessController { */ protected function checkAccess(EntityInterface $entity, $operation, $langcode, AccountInterface $account) { switch ($operation) { + case 'create': case 'update': if (user_access('administer shortcuts', $account)) { return TRUE; diff --git a/core/modules/shortcut/shortcut.admin.inc b/core/modules/shortcut/shortcut.admin.inc index a75c4e1be04..3ee8e0b7296 100644 --- a/core/modules/shortcut/shortcut.admin.inc +++ b/core/modules/shortcut/shortcut.admin.inc @@ -171,14 +171,6 @@ function shortcut_set_switch_submit($form, &$form_state) { shortcut_set_assign_user($set, $account); } -/** - * Page callback: provides the shortcut set creation form. - */ -function shortcut_set_add() { - $entity = entity_create('shortcut', array()); - return Drupal::entityManager()->getForm($entity); -} - /** * Form callback: builds the form for adding a new shortcut link. * diff --git a/core/modules/shortcut/shortcut.module b/core/modules/shortcut/shortcut.module index c58bf8ad5f7..161885a33b2 100644 --- a/core/modules/shortcut/shortcut.module +++ b/core/modules/shortcut/shortcut.module @@ -91,10 +91,8 @@ function shortcut_menu() { ); $items['admin/config/user-interface/shortcut/add-set'] = array( 'title' => 'Add shortcut set', - 'page callback' => 'shortcut_set_add', - 'access arguments' => array('administer shortcuts'), - 'type' => MENU_LOCAL_ACTION, - 'file' => 'shortcut.admin.inc', + 'route_name' => 'shortcut_set_add', + 'type' => MENU_SIBLING_LOCAL_TASK, ); $items['admin/config/user-interface/shortcut/manage/%shortcut_set'] = array( 'title' => 'Edit shortcuts', @@ -576,3 +574,18 @@ function shortcut_library_info() { return $libraries; } + +/** + * Implements hook_local_actions. + */ +function shortcut_local_actions() { + return array( + array( + 'route_name' => 'shortcut_set_add', + 'title' => t('Add shortcut set'), + 'appears_on' => array( + 'shortcut_set_admin', + ), + ), + ); +} diff --git a/core/modules/shortcut/shortcut.routing.yml b/core/modules/shortcut/shortcut.routing.yml index dbd13762c66..e6bb718ed07 100644 --- a/core/modules/shortcut/shortcut.routing.yml +++ b/core/modules/shortcut/shortcut.routing.yml @@ -19,6 +19,13 @@ shortcut_set_admin: requirements: _permission: 'administer shortcuts' +shortcut_set_add: + pattern: '/admin/config/user-interface/shortcut/add-set' + defaults: + _entity_form: 'shortcut.add' + requirements: + _entity_create_access: 'shortcut' + shortcut_set_edit: pattern: '/admin/config/user-interface/shortcut/manage/{shortcut}/edit' defaults: