function shortcut_set_switch

Form callback: builds the form for switching shortcut sets.

Parameters

$form: An associative array containing the structure of the form.

$form_state: An associative array containing the current state of the form.

$account: (optional) The user account whose shortcuts will be switched. Defaults to the current logged-in user.

Return value

An array representing the form definition.

See also

shortcut_set_switch_validate()

shortcut_set_switch_submit()

Related topics

1 string reference to 'shortcut_set_switch'
shortcut_menu in drupal/core/modules/shortcut/shortcut.module
Implements hook_menu().

File

drupal/core/modules/shortcut/shortcut.admin.inc, line 28
Administrative page callbacks for the shortcut module.

Code

function shortcut_set_switch($form, &$form_state, $account = NULL) {
  global $user;
  if (!isset($account)) {
    $account = $user;
  }

  // Prepare the list of shortcut sets.
  $sets = entity_load_multiple('shortcut');
  $current_set = shortcut_current_displayed_set($account);
  $options = array();
  foreach ($sets as $name => $set) {
    $options[$name] = check_plain($set
      ->label());
  }

  // Only administrators can add shortcut sets.
  $add_access = user_access('administer shortcuts');
  if ($add_access) {
    $options['new'] = t('New set');
  }
  if (count($options) > 1) {
    $form['account'] = array(
      '#type' => 'value',
      '#value' => $account,
    );
    $form['set'] = array(
      '#type' => 'radios',
      '#title' => $user->uid == $account->uid ? t('Choose a set of shortcuts to use') : t('Choose a set of shortcuts for this user'),
      '#options' => $options,
      '#default_value' => $current_set
        ->id(),
    );
    $form['label'] = array(
      '#type' => 'textfield',
      '#title' => t('Label'),
      '#title_display' => 'invisible',
      '#description' => t('The new set is created by copying items from your default shortcut set.'),
      '#access' => $add_access,
    );
    $form['id'] = array(
      '#type' => 'machine_name',
      '#machine_name' => array(
        'exists' => 'shortcut_set_load',
        'source' => array(
          'label',
        ),
        '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 ($user->uid != $account->uid) {
      $default_set = shortcut_default_set($account);
      $form['new']['#description'] = t('The new set is created by copying items from the %default set.', array(
        '%default' => $default_set
          ->label(),
      ));
    }
    $form['#attached'] = array(
      'library' => array(
        array(
          'shortcut',
          'drupal.shortcut.admin',
        ),
      ),
    );
    $form['actions'] = array(
      '#type' => 'actions',
    );
    $form['actions']['submit'] = array(
      '#type' => 'submit',
      '#value' => t('Change set'),
    );
  }
  else {

    // There is only 1 option, so output a message in the $form array.
    $form['info'] = array(
      '#markup' => '<p>' . t('You are currently using the %set-name shortcut set.', array(
        '%set-name' => $current_set
          ->label(),
      )) . '</p>',
    );
  }
  return $form;
}