Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
Total | |
0.00% |
0 / 1 |
|
0.00% |
0 / 6 |
CRAP | |
0.00% |
0 / 45 |
User | |
0.00% |
0 / 1 |
|
0.00% |
0 / 6 |
132 | |
0.00% |
0 / 45 |
__construct | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 3 |
|||
defineOptions | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 5 |
|||
buildOptionsForm | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 20 |
|||
submitOptionsForm | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 2 |
|||
validateEntity | |
0.00% |
0 / 1 |
30 | |
0.00% |
0 / 9 |
|||
calculateDependencies | |
0.00% |
0 / 1 |
6 | |
0.00% |
0 / 6 |
<?php | |
/** | |
* @file | |
* Contains \Drupal\user\Plugin\views\argument_validator\User. | |
*/ | |
namespace Drupal\user\Plugin\views\argument_validator; | |
use Drupal\Core\Entity\EntityInterface; | |
use Drupal\Core\Entity\EntityManagerInterface; | |
use Drupal\views\Plugin\views\argument\ArgumentPluginBase; | |
use Drupal\Core\Form\FormStateInterface; | |
use Drupal\views\Plugin\views\argument_validator\Entity; | |
/** | |
* 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. | |
*/ | |
class User extends Entity { | |
/** | |
* The user storage. | |
* | |
* @var \Drupal\Core\Entity\EntityStorageInterface | |
*/ | |
protected $userStorage; | |
/** | |
* {@inheritdoc} | |
*/ | |
public function __construct(array $configuration, $plugin_id, $plugin_definition, EntityManagerInterface $entity_manager) { | |
parent::__construct($configuration, $plugin_id, $plugin_definition, $entity_manager); | |
$this->userStorage = $entity_manager->getStorage('user'); | |
} | |
/** | |
* {@inheritdoc} | |
*/ | |
protected function defineOptions() { | |
$options = parent::defineOptions(); | |
$options['restrict_roles'] = array('default' => FALSE); | |
$options['roles'] = array('default' => array()); | |
return $options; | |
} | |
/** | |
* {@inheritdoc} | |
*/ | |
public function buildOptionsForm(&$form, FormStateInterface $form_state) { | |
parent::buildOptionsForm($form, $form_state); | |
$sanitized_id = ArgumentPluginBase::encodeValidatorId($this->definition['id']); | |
$form['restrict_roles'] = array( | |
'#type' => 'checkbox', | |
'#title' => $this->t('Restrict user based on role'), | |
'#default_value' => $this->options['restrict_roles'], | |
); | |
$form['roles'] = array( | |
'#type' => 'checkboxes', | |
'#title' => $this->t('Restrict to the selected roles'), | |
'#options' => array_map(array('\Drupal\Component\Utility\Html', 'escape'), user_role_names(TRUE)), | |
'#default_value' => $this->options['roles'], | |
'#description' => $this->t('If no roles are selected, users from any role will be allowed.'), | |
'#states' => array( | |
'visible' => array( | |
':input[name="options[validate][options][' . $sanitized_id . '][restrict_roles]"]' => array('checked' => TRUE), | |
), | |
), | |
); | |
} | |
/** | |
* {@inheritdoc} | |
*/ | |
public function submitOptionsForm(&$form, FormStateInterface $form_state, &$options = array()) { | |
// filter trash out of the options so we don't store giant unnecessary arrays | |
$options['roles'] = array_filter($options['roles']); | |
} | |
/** | |
* {@inheritdoc} | |
*/ | |
protected function validateEntity(EntityInterface $entity) { | |
/** @var \Drupal\user\UserInterface $entity */ | |
$role_check_success = TRUE; | |
// See if we're filtering users based on roles. | |
if (!empty($this->options['restrict_roles']) && !empty($this->options['roles'])) { | |
$roles = $this->options['roles']; | |
if (!(bool) array_intersect($entity->getRoles(), $roles)) { | |
$role_check_success = FALSE; | |
} | |
} | |
return $role_check_success && parent::validateEntity($entity); | |
} | |
/** | |
* {@inheritdoc} | |
*/ | |
public function calculateDependencies() { | |
$dependencies = parent::calculateDependencies(); | |
foreach ($this->entityManager->getStorage('user_role')->loadMultiple(array_keys($this->options['roles'])) as $role) { | |
$dependencies[$role->getConfigDependencyKey()][] = $role->getConfigDependencyName(); | |
} | |
return $dependencies; | |
} | |
} |