class User

Validate whether an argument is a valid user.

This supports either numeric arguments (UID) or strings (username) and converts either one into the user's UID. This validator also sets the argument's title to the username.

Plugin annotation


@Plugin(
  id = "user",
  module = "user",
  title = @Translation("User")
)

Hierarchy

Expanded class hierarchy of User

46 string references to 'User'
AddRoleUserTest::getInfo in drupal/core/modules/user/tests/Drupal/user/Tests/Plugin/Action/AddRoleUserTest.php
This method exists to support the simpletest UI runner.
BreadcrumbTest::testBreadCrumbs in drupal/core/modules/system/lib/Drupal/system/Tests/Menu/BreadcrumbTest.php
Tests breadcrumbs on node and administrative paths.
contact_field_extra_fields in drupal/core/modules/contact/contact.module
Implements hook_field_extra_fields().
DbLogController::overview in drupal/core/modules/dblog/lib/Drupal/dblog/Controller/DbLogController.php
Displays a listing of database log messages.
dblog_event in drupal/core/modules/dblog/dblog.admin.inc
Page callback: Displays details about a specific database log message.

... See full list

File

drupal/core/modules/user/lib/Drupal/user/Plugin/views/argument_validator/User.php, line 27
Definition of Drupal\user\Plugin\views\argument_validator\User.

Namespace

Drupal\user\Plugin\views\argument_validator
View source
class User extends ArgumentValidatorPluginBase {
  protected function defineOptions() {
    $options = parent::defineOptions();
    $options['type'] = array(
      'default' => 'uid',
    );
    $options['restrict_roles'] = array(
      'default' => FALSE,
      'bool' => TRUE,
    );
    $options['roles'] = array(
      'default' => array(),
    );
    return $options;
  }
  public function buildOptionsForm(&$form, &$form_state) {
    $form['type'] = array(
      '#type' => 'radios',
      '#title' => t('Type of user filter value to allow'),
      '#options' => array(
        'uid' => t('Only allow numeric UIDs'),
        'name' => t('Only allow string usernames'),
        'either' => t('Allow both numeric UIDs and string usernames'),
      ),
      '#default_value' => $this->options['type'],
    );
    $form['restrict_roles'] = array(
      '#type' => 'checkbox',
      '#title' => t('Restrict user based on role'),
      '#default_value' => $this->options['restrict_roles'],
    );
    $form['roles'] = array(
      '#type' => 'checkboxes',
      '#title' => t('Restrict to the selected roles'),
      '#options' => array_map('check_plain', user_role_names(TRUE)),
      '#default_value' => $this->options['roles'],
      '#description' => t('If no roles are selected, users from any role will be allowed.'),
      '#states' => array(
        'visible' => array(
          ':input[name="options[validate][options][user][restrict_roles]"]' => array(
            'checked' => TRUE,
          ),
        ),
      ),
    );
  }
  public function submitOptionsForm(&$form, &$form_state, &$options = array()) {

    // filter trash out of the options so we don't store giant unnecessary arrays
    $options['roles'] = array_filter($options['roles']);
  }
  public function validateArgument($argument) {
    $type = $this->options['type'];

    // is_numeric() can return false positives, so we ensure it's an integer.
    // However, is_integer() will always fail, since $argument is a string.
    if (is_numeric($argument) && $argument == (int) $argument) {
      if ($type == 'uid' || $type == 'either') {
        if ($argument == $GLOBALS['user']->uid) {

          // If you assign an object to a variable in PHP, the variable
          // automatically acts as a reference, not a copy, so we use
          // clone to ensure that we don't actually mess with the
          // real global $user object.
          $account = clone $GLOBALS['user'];
        }
        $condition = 'uid';
      }
    }
    else {
      if ($type == 'name' || $type == 'either') {
        $name = !empty($GLOBALS['user']->name) ? $GLOBALS['user']->name : config('user.settings')
          ->get('anonymous');
        if ($argument == $name) {
          $account = clone $GLOBALS['user'];
        }
        $condition = 'name';
      }
    }

    // If we don't have a WHERE clause, the argument is invalid.
    if (empty($condition)) {
      return FALSE;
    }
    if (!isset($account)) {
      $account = db_select('users', 'u')
        ->fields('u', array(
        'uid',
        'name',
      ))
        ->condition($condition, $argument)
        ->execute()
        ->fetchObject();
    }
    if (empty($account)) {

      // User not found.
      return FALSE;
    }

    // See if we're filtering users based on roles.
    if (!empty($this->options['restrict_roles']) && !empty($this->options['roles'])) {
      $roles = $this->options['roles'];
      $account->roles = array();
      $account->roles[] = $account->uid ? DRUPAL_AUTHENTICATED_RID : DRUPAL_ANONYMOUS_RID;
      $query = db_select('users_roles', 'u');
      $query
        ->addField('u', 'rid');
      $query
        ->condition('u.uid', $account->uid);
      $result = $query
        ->execute();
      foreach ($result as $role) {
        $account->roles[] = $role->rid;
      }
      if (!(bool) array_intersect($account->roles, $roles)) {
        return FALSE;
      }
    }
    $this->argument->argument = $account->uid;
    $this->argument->validated_title = check_plain(user_format_name($account));
    return TRUE;
  }
  public function processSummaryArguments(&$args) {

    // If the validation says the input is an username, we should reverse the
    // argument so it works for example for generation summary urls.
    $uids_arg_keys = array_flip($args);
    if ($this->options['type'] == 'name') {
      $users = user_load_multiple($args);
      foreach ($users as $uid => $account) {
        $args[$uids_arg_keys[$uid]] = $account->name;
      }
    }
  }

}

Members

Namesort descending Modifiers Type Description Overrides
ArgumentValidatorPluginBase::$argument protected property The argument handler instance associated with this plugin.
ArgumentValidatorPluginBase::access public function Determine if the administrator has the privileges to use this plugin 1
ArgumentValidatorPluginBase::checkAccess protected function If we don't have access to the form but are showing it anyway, ensure that the form is safe and cannot be changed from user input.
ArgumentValidatorPluginBase::setArgument public function Sets the parent argument this plugin is associated with.
ArgumentValidatorPluginBase::validateOptionsForm public function Provide the default form form for validating options Overrides PluginBase::validateOptionsForm
ContainerFactoryPluginBase::create public static function Creates an instance of the plugin. Overrides ContainerFactoryPluginInterface::create 11
PluginBase::$configuration protected property Configuration information passed into the plugin. 1
PluginBase::$definition public property Plugins's definition
PluginBase::$displayHandler public property The display object this plugin is for.
PluginBase::$options public property Options for this plugin will be held here.
PluginBase::$pluginDefinition protected property The plugin implementation definition.
PluginBase::$pluginId protected property The plugin_id.
PluginBase::$usesOptions protected property Denotes whether the plugin has an additional options form. 8
PluginBase::$view public property The top object of a view. 1
PluginBase::destroy public function Clears a plugin. 2
PluginBase::getAvailableGlobalTokens public function Returns an array of available token replacements.
PluginBase::getPluginDefinition public function Returns the definition of the plugin implementation. Overrides PluginInspectionInterface::getPluginDefinition
PluginBase::getPluginId public function Returns the plugin_id of the plugin instance. Overrides PluginInspectionInterface::getPluginId
PluginBase::globalTokenForm public function Adds elements for available core tokens to a form.
PluginBase::globalTokenReplace public function Returns a string with any core tokens replaced.
PluginBase::init public function Initialize the plugin. 8
PluginBase::pluginTitle public function Return the human readable name of the display.
PluginBase::query public function Add anything to the query that we might need to. 13
PluginBase::setOptionDefaults protected function Fills up the options of the plugin with defaults.
PluginBase::summaryTitle public function Returns the summary of the settings in the display. 6
PluginBase::themeFunctions public function Provide a full list of possible theme templates used by this style. 1
PluginBase::unpackOptions public function Unpack options over our existing defaults, drilling down into arrays so that defaults don't get totally blown away.
PluginBase::usesOptions public function Returns the usesOptions property. 8
PluginBase::validate public function Validate that the plugin is correct and can be saved. 4
PluginBase::__construct public function Constructs a Plugin object. Overrides PluginBase::__construct
User::buildOptionsForm public function Provide the default form for setting options. Overrides ArgumentValidatorPluginBase::buildOptionsForm
User::defineOptions protected function Retrieve the options when this is a new access control plugin Overrides ArgumentValidatorPluginBase::defineOptions
User::processSummaryArguments public function Process the summary arguments for displaying. Overrides ArgumentValidatorPluginBase::processSummaryArguments
User::submitOptionsForm public function Provide the default form form for submitting options Overrides ArgumentValidatorPluginBase::submitOptionsForm
User::validateArgument public function Overrides ArgumentValidatorPluginBase::validateArgument