diff --git a/core/modules/shortcut/lib/Drupal/shortcut/Form/SetCustomize.php b/core/modules/shortcut/lib/Drupal/shortcut/Form/SetCustomize.php new file mode 100644 index 0000000..299e9f8 --- /dev/null +++ b/core/modules/shortcut/lib/Drupal/shortcut/Form/SetCustomize.php @@ -0,0 +1,97 @@ + TRUE, + '#weight' => -20, + ); + + $form['shortcuts']['links'] = array( + '#type' => 'table', + '#header' => array(t('Name'), t('Weight'), t('Operations')), + '#empty' => t('No shortcuts available. @link', array('@link' => l(t('Add a shortcut'), 'admin/config/user-interface/shortcut/' . $this->entity->id() . '/add-link'))), + '#attributes' => array('id' => 'shortcuts'), + '#tabledrag' => array( + array('order', 'sibling', 'shortcut-weight'), + ), + ); + + foreach ($this->entity->links as $link) { + $mlid = $link->id(); + $form['shortcuts']['links'][$mlid]['#attributes']['class'][] = 'draggable'; + $form['shortcuts']['links'][$mlid]['name']['#markup'] = l($link->link_title, $link->link_path); + $form['shortcuts']['links'][$mlid]['#weight'] = $link->weight; + $form['shortcuts']['links'][$mlid]['weight'] = array( + '#type' => 'weight', + '#title' => t('Weight for @title', array('@title' => $link->link_title)), + '#title_display' => 'invisible', + '#default_value' => $link->weight, + '#attributes' => array('class' => array('shortcut-weight')), + ); + + $links['edit'] = array( + 'title' => t('Edit'), + 'href' => "admin/config/user-interface/shortcut/link/$mlid", + ); + $links['delete'] = array( + 'title' => t('Delete'), + 'href' => "admin/config/user-interface/shortcut/link/$mlid/delete", + ); + $form['shortcuts']['links'][$mlid]['operations'] = array( + '#type' => 'operations', + '#links' => $links, + ); + } + // Sort the list so the output is ordered by weight. + uasort($form['shortcuts']['links'], 'element_sort'); + return $form; + } + + /** + * Overrides Drupal\Core\Entity\EntityFormController::actions(). + */ + protected function actions(array $form, array &$form_state) { + // Only includes a Save action for the entity, no direct Delete button. + return array( + 'submit' => array( + '#value' => t('Save changes'), + '#access' => !empty($this->entity->links), + '#submit' => array( + array($this, 'submit'), + array($this, 'save'), + ), + ), + ); + } + + /** + * {@inheritdoc} + */ + public function save(array $form, array &$form_state) { + foreach ($this->entity->links as $link) { + $link->weight = $form_state['values']['shortcuts']['links'][$link->mlid]['weight']; + $link->save(); + } + drupal_set_message(t('The shortcut set has been updated.')); + } + +} diff --git a/core/modules/shortcut/lib/Drupal/shortcut/Plugin/Core/Entity/Shortcut.php b/core/modules/shortcut/lib/Drupal/shortcut/Plugin/Core/Entity/Shortcut.php index 5b3f17a..3c9bd1c 100644 --- a/core/modules/shortcut/lib/Drupal/shortcut/Plugin/Core/Entity/Shortcut.php +++ b/core/modules/shortcut/lib/Drupal/shortcut/Plugin/Core/Entity/Shortcut.php @@ -27,6 +27,7 @@ * "form" = { * "default" = "Drupal\shortcut\ShortcutFormController", * "edit" = "Drupal\shortcut\ShortcutFormController", + * "customize" = "Drupal\shortcut\Form\SetCustomize", * "delete" = "Drupal\shortcut\Form\ShortcutDeleteForm" * } * }, diff --git a/core/modules/shortcut/lib/Drupal/shortcut/ShortcutAccessController.php b/core/modules/shortcut/lib/Drupal/shortcut/ShortcutAccessController.php index d5a143d..7aa488e 100644 --- a/core/modules/shortcut/lib/Drupal/shortcut/ShortcutAccessController.php +++ b/core/modules/shortcut/lib/Drupal/shortcut/ShortcutAccessController.php @@ -30,12 +30,14 @@ protected function checkAccess(EntityInterface $entity, $operation, $langcode, A } return FALSE; break; + case 'delete': if (!user_access('administer shortcuts', $account)) { return FALSE; } return $entity->id() != 'default'; break; + } } diff --git a/core/modules/shortcut/shortcut.admin.inc b/core/modules/shortcut/shortcut.admin.inc index 5e1d1a1..a9f255c 100644 --- a/core/modules/shortcut/shortcut.admin.inc +++ b/core/modules/shortcut/shortcut.admin.inc @@ -180,130 +180,6 @@ function shortcut_set_add() { } /** - * Form callback: builds the form for customizing shortcut sets. - * - * @param $form - * An associative array containing the structure of the form. - * @param $form_state - * An associative array containing the current state of the form. - * @param $shortcut_set Drupal\shortcut\Plugin\Core\Entity\Shortcut - * An object representing the shortcut set which is being edited. - * - * @return - * An array representing the form definition. - * - * @ingroup forms - * @see shortcut_set_customize_submit() - */ -function shortcut_set_customize($form, &$form_state, $shortcut_set) { - $form['#shortcut_set_name'] = $shortcut_set->id(); - $form['shortcuts'] = array( - '#tree' => TRUE, - '#weight' => -20, - 'links' => array(), - ); - - foreach ($shortcut_set->links as $uuid => $link) { - $mlid = $link['mlid']; - $form['shortcuts']['links'][$mlid]['name']['#markup'] = l($link['link_title'], $link['link_path']); - $form['shortcuts']['links'][$mlid]['weight'] = array( - '#type' => 'weight', - '#title' => t('Weight for @title', array('@title' => $link['link_title'])), - '#title_display' => 'invisible', - '#delta' => 50, - '#default_value' => $link['weight'], - '#attributes' => array('class' => array('shortcut-weight')), - ); - - $links['edit'] = array( - 'title' => t('Edit'), - 'href' => "admin/config/user-interface/shortcut/link/$mlid", - ); - $links['delete'] = array( - 'title' => t('Delete'), - 'href' => "admin/config/user-interface/shortcut/link/$mlid/delete", - ); - $form['shortcuts']['links'][$mlid]['operations'] = array( - '#type' => 'operations', - '#links' => $links, - ); - } - - $form['actions'] = array( - '#type' => 'actions', - '#access' => !empty($shortcut_set->links), - ); - $form['actions']['submit'] = array( - '#type' => 'submit', - '#value' => t('Save changes'), - ); - - return $form; -} - -/** - * Submit handler for shortcut_set_customize(). - */ -function shortcut_set_customize_submit($form, &$form_state) { - foreach ($form_state['values']['shortcuts']['links'] as $mlid => $data) { - $link = menu_link_load($mlid); - $link['weight'] = $data['weight']; - menu_link_save($link); - } - drupal_set_message(t('The shortcut set has been updated.')); -} - -/** - * Returns HTML for a shortcut set customization form. - * - * @param $variables - * An associative array containing: - * - form: A render element representing the form. - * - * @see shortcut_set_customize() - * @ingroup themeable - */ -function theme_shortcut_set_customize($variables) { - $form = $variables['form']; - - // Do not add any rows to the table if there are no shortcuts to display. - $statuses = empty($shortcuts_by_status['enabled']) && empty($shortcuts_by_status['disabled']) ? array() : array_keys($shortcuts_by_status); - - $rows = array(); - drupal_add_tabledrag('shortcuts', 'order', 'sibling', 'shortcut-weight'); - foreach (element_children($form['shortcuts']['links']) as $key) { - $shortcut = &$form['shortcuts']['links'][$key]; - $row = array(); - $row[] = drupal_render($shortcut['name']); - $row[] = drupal_render($shortcut['weight']); - $row[] = drupal_render($shortcut['operations']); - $rows[] = array( - 'data' => $row, - 'class' => array('draggable'), - ); - } - - $header = array(t('Name'), t('Weight'), t('Operations')); - - $table = array( - '#theme' => 'table', - '#header' => $header, - '#rows' => $rows, - '#empty' => t('No shortcuts available. Add a shortcut.', array( - '@link' => url('admin/config/user-interface/shortcut/manage/' . $form['#shortcut_set_name'] . '/add-link'), - )), - '#attributes' => array( - 'id' => 'shortcuts', - ), - ); - - $output = drupal_render($table); - $output .= drupal_render($form['actions']); - $output = drupal_render_children($form) . $output; - return $output; -} - -/** * Form callback: builds the form for adding a new shortcut link. * * @param $form diff --git a/core/modules/shortcut/shortcut.module b/core/modules/shortcut/shortcut.module index a14a3e7..f658b24 100644 --- a/core/modules/shortcut/shortcut.module +++ b/core/modules/shortcut/shortcut.module @@ -98,13 +98,7 @@ function shortcut_menu() { ); $items['admin/config/user-interface/shortcut/manage/%shortcut_set'] = array( 'title' => 'Edit shortcuts', - 'page callback' => 'drupal_get_form', - 'page arguments' => array('shortcut_set_customize', 5), - 'title callback' => 'entity_page_label', - 'title arguments' => array(5), - 'access callback' => 'shortcut_set_edit_access', - 'access arguments' => array(5), - 'file' => 'shortcut.admin.inc', + 'route_name' => 'shortcut_set_customize', ); $items['admin/config/user-interface/shortcut/manage/%shortcut_set/links'] = array( 'title' => 'List links', @@ -174,18 +168,6 @@ function shortcut_admin_paths() { } /** - * Implements hook_theme(). - */ -function shortcut_theme() { - return array( - 'shortcut_set_customize' => array( - 'render element' => 'form', - 'file' => 'shortcut.admin.inc', - ), - ); -} - -/** * Access callback for editing a shortcut set. * * @param $shortcut_set Drupal\shortcut\Plugin\Core\Entity\Shortcut diff --git a/core/modules/shortcut/shortcut.routing.yml b/core/modules/shortcut/shortcut.routing.yml index f4925c3..107beb3 100644 --- a/core/modules/shortcut/shortcut.routing.yml +++ b/core/modules/shortcut/shortcut.routing.yml @@ -25,3 +25,10 @@ shortcut_set_edit: _entity_form: 'shortcut.edit' requirements: _entity_access: 'shortcut.edit' + +shortcut_set_customize: + pattern: '/admin/config/user-interface/shortcut/manage/{shortcut}' + defaults: + _entity_form: 'shortcut.customize' + requirements: + _entity_access: 'shortcut.edit'