Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
| Total | |
0.00% |
0 / 1 |
|
0.00% |
0 / 9 |
CRAP | |
0.00% |
0 / 117 |
| SwitchShortcutSet | |
0.00% |
0 / 1 |
|
0.00% |
0 / 9 |
342 | |
0.00% |
0 / 117 |
| __construct | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 2 |
|||
| create | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 4 |
|||
| getFormId | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 2 |
|||
| buildForm | |
0.00% |
0 / 1 |
30 | |
0.00% |
0 / 2 |
|||
| anonymous function | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 2 |
|||
| exists | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 4 |
|||
| validateForm | |
0.00% |
0 / 1 |
12 | |
0.00% |
0 / 6 |
|||
| submitForm | |
0.00% |
0 / 1 |
20 | |
0.00% |
0 / 34 |
|||
| checkAccess | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 2 |
|||
| <?php | |
| /** | |
| * @file | |
| * Contains \Drupal\shortcut\Form\SwitchShortcutSet. | |
| */ | |
| namespace Drupal\shortcut\Form; | |
| use Drupal\Core\Form\FormBase; | |
| use Drupal\Core\Form\FormStateInterface; | |
| use Drupal\shortcut\Entity\ShortcutSet; | |
| use Drupal\shortcut\ShortcutSetStorageInterface; | |
| use Drupal\user\UserInterface; | |
| use Symfony\Component\DependencyInjection\ContainerInterface; | |
| /** | |
| * Builds the shortcut set switch form. | |
| */ | |
| class SwitchShortcutSet extends FormBase { | |
| /** | |
| * The account the shortcut set is for. | |
| * | |
| * @var \Drupal\user\UserInterface | |
| */ | |
| protected $user; | |
| /** | |
| * The shortcut set storage. | |
| * | |
| * @var \Drupal\shortcut\ShortcutSetStorageInterface | |
| */ | |
| protected $shortcutSetStorage; | |
| /** | |
| * Constructs a SwitchShortcutSet object. | |
| * | |
| * @param \Drupal\shortcut\ShortcutSetStorageInterface $shortcut_set_storage | |
| * The shortcut set storage. | |
| */ | |
| public function __construct(ShortcutSetStorageInterface $shortcut_set_storage) { | |
| $this->shortcutSetStorage = $shortcut_set_storage; | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public static function create(ContainerInterface $container) { | |
| return new static( | |
| $container->get('entity.manager')->getStorage('shortcut_set') | |
| ); | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function getFormId() { | |
| return 'shortcut_set_switch'; | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function buildForm(array $form, FormStateInterface $form_state, UserInterface $user = NULL) { | |
| $account = $this->currentUser(); | |
| $this->user = $user; | |
| // Prepare the list of shortcut sets. | |
| $options = array_map(function (ShortcutSet $set) { | |
| return $set->label(); | |
| }, $this->shortcutSetStorage->loadMultiple()); | |
| $current_set = shortcut_current_displayed_set($this->user); | |
| // Only administrators can add shortcut sets. | |
| $add_access = $account->hasPermission('administer shortcuts'); | |
| if ($add_access) { | |
| $options['new'] = $this->t('New set'); | |
| } | |
| $account_is_user = $this->user->id() == $account->id(); | |
| if (count($options) > 1) { | |
| $form['set'] = array( | |
| '#type' => 'radios', | |
| '#title' => $account_is_user ? $this->t('Choose a set of shortcuts to use') : $this->t('Choose a set of shortcuts for this user'), | |
| '#options' => $options, | |
| '#default_value' => $current_set->id(), | |
| ); | |
| $form['label'] = array( | |
| '#type' => 'textfield', | |
| '#title' => $this->t('Label'), | |
| '#description' => $this->t('The new set is created by copying items from your default shortcut set.'), | |
| '#access' => $add_access, | |
| '#states' => array( | |
| 'visible' => array( | |
| ':input[name="set"]' => array('value' => 'new'), | |
| ), | |
| 'required' => array( | |
| ':input[name="set"]' => array('value' => 'new'), | |
| ), | |
| ), | |
| ); | |
| $form['id'] = array( | |
| '#type' => 'machine_name', | |
| '#machine_name' => array( | |
| 'exists' => array($this, 'exists'), | |
| 'replace_pattern' => '[^a-z0-9-]+', | |
| 'replace' => '-', | |
| ), | |
| // This ID could be used for menu name. | |
| '#maxlength' => 23, | |
| '#states' => array( | |
| 'required' => array( | |
| ':input[name="set"]' => array('value' => 'new'), | |
| ), | |
| ), | |
| '#required' => FALSE, | |
| ); | |
| if (!$account_is_user) { | |
| $default_set = $this->shortcutSetStorage->getDefaultSet($this->user); | |
| $form['new']['#description'] = $this->t('The new set is created by copying items from the %default set.', array('%default' => $default_set->label())); | |
| } | |
| $form['actions'] = array('#type' => 'actions'); | |
| $form['actions']['submit'] = array( | |
| '#type' => 'submit', | |
| '#value' => $this->t('Change set'), | |
| ); | |
| } | |
| else { | |
| // There is only 1 option, so output a message in the $form array. | |
| $form['info'] = array( | |
| '#markup' => '<p>' . $this->t('You are currently using the %set-name shortcut set.', array('%set-name' => $current_set->label())) . '</p>', | |
| ); | |
| } | |
| return $form; | |
| } | |
| /** | |
| * Determines if a shortcut set exists already. | |
| * | |
| * @param string $id | |
| * The set ID to check. | |
| * | |
| * @return bool | |
| * TRUE if the shortcut set exists, FALSE otherwise. | |
| */ | |
| public function exists($id) { | |
| return (bool) $this->shortcutSetStorage->getQuery() | |
| ->condition('id', $id) | |
| ->execute(); | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function validateForm(array &$form, FormStateInterface $form_state) { | |
| if ($form_state->getValue('set') == 'new') { | |
| // Check to prevent creating a shortcut set with an empty title. | |
| if (trim($form_state->getValue('label')) == '') { | |
| $form_state->setErrorByName('label', $this->t('The new set label is required.')); | |
| } | |
| } | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function submitForm(array &$form, FormStateInterface $form_state) { | |
| $account = $this->currentUser(); | |
| $account_is_user = $this->user->id() == $account->id(); | |
| if ($form_state->getValue('set') == 'new') { | |
| // Save a new shortcut set with links copied from the user's default set. | |
| /* @var \Drupal\shortcut\Entity\ShortcutSet $set */ | |
| $set = $this->shortcutSetStorage->create(array( | |
| 'id' => $form_state->getValue('id'), | |
| 'label' => $form_state->getValue('label'), | |
| )); | |
| $set->save(); | |
| $replacements = array( | |
| '%user' => $this->user->label(), | |
| '%set_name' => $set->label(), | |
| ':switch-url' => $this->url('<current>'), | |
| ); | |
| if ($account_is_user) { | |
| // Only administrators can create new shortcut sets, so we know they have | |
| // access to switch back. | |
| drupal_set_message($this->t('You are now using the new %set_name shortcut set. You can edit it from this page or <a href=":switch-url">switch back to a different one.</a>', $replacements)); | |
| } | |
| else { | |
| drupal_set_message($this->t('%user is now using a new shortcut set called %set_name. You can edit it from this page.', $replacements)); | |
| } | |
| $form_state->setRedirect( | |
| 'entity.shortcut_set.customize_form', | |
| array('shortcut_set' => $set->id()) | |
| ); | |
| } | |
| else { | |
| // Switch to a different shortcut set. | |
| /* @var \Drupal\shortcut\Entity\ShortcutSet $set */ | |
| $set = $this->shortcutSetStorage->load($form_state->getValue('set')); | |
| $replacements = array( | |
| '%user' => $this->user->getDisplayName(), | |
| '%set_name' => $set->label(), | |
| ); | |
| drupal_set_message($account_is_user ? $this->t('You are now using the %set_name shortcut set.', $replacements) : $this->t('%user is now using the %set_name shortcut set.', $replacements)); | |
| } | |
| // Assign the shortcut set to the provided user account. | |
| $this->shortcutSetStorage->assignUser($set, $this->user); | |
| } | |
| /** | |
| * Checks access for the shortcut set switch form. | |
| * | |
| * @param \Drupal\user\UserInterface $user | |
| * (optional) The owner of the shortcut set. | |
| * | |
| * @return \Drupal\Core\Access\AccessResultInterface | |
| * The access result. | |
| */ | |
| public function checkAccess(UserInterface $user = NULL) { | |
| return shortcut_set_switch_access($user); | |
| } | |
| } |