Security update for Core, with self-updated composer
[yaffs-website] / web / core / modules / user / src / Plugin / views / filter / Name.php
1 <?php
2
3 namespace Drupal\user\Plugin\views\filter;
4
5 use Drupal\Core\Entity\Element\EntityAutocomplete;
6 use Drupal\Core\Form\FormStateInterface;
7 use Drupal\user\Entity\User;
8 use Drupal\views\Plugin\views\filter\InOperator;
9
10 /**
11  * Filter handler for usernames.
12  *
13  * @ingroup views_filter_handlers
14  *
15  * @ViewsFilter("user_name")
16  */
17 class Name extends InOperator {
18
19   protected $alwaysMultiple = TRUE;
20
21   protected function valueForm(&$form, FormStateInterface $form_state) {
22     $users = $this->value ? User::loadMultiple($this->value) : [];
23     $default_value = EntityAutocomplete::getEntityLabels($users);
24     $form['value'] = [
25       '#type' => 'entity_autocomplete',
26       '#title' => $this->t('Usernames'),
27       '#description' => $this->t('Enter a comma separated list of user names.'),
28       '#target_type' => 'user',
29       '#tags' => TRUE,
30       '#default_value' => $default_value,
31       '#process_default_value' => $this->isExposed(),
32     ];
33
34     $user_input = $form_state->getUserInput();
35     if ($form_state->get('exposed') && !isset($user_input[$this->options['expose']['identifier']])) {
36       $user_input[$this->options['expose']['identifier']] = $default_value;
37       $form_state->setUserInput($user_input);
38     }
39   }
40
41   protected function valueValidate($form, FormStateInterface $form_state) {
42     $uids = [];
43     if ($values = $form_state->getValue(['options', 'value'])) {
44       foreach ($values as $value) {
45         $uids[] = $value['target_id'];
46       }
47       sort($uids);
48     }
49     $form_state->setValue(['options', 'value'], $uids);
50   }
51
52   public function acceptExposedInput($input) {
53     $rc = parent::acceptExposedInput($input);
54
55     if ($rc) {
56       // If we have previously validated input, override.
57       if (isset($this->validated_exposed_input)) {
58         $this->value = $this->validated_exposed_input;
59       }
60     }
61
62     return $rc;
63   }
64
65   public function validateExposed(&$form, FormStateInterface $form_state) {
66     if (empty($this->options['exposed'])) {
67       return;
68     }
69
70     if (empty($this->options['expose']['identifier'])) {
71       return;
72     }
73
74     $identifier = $this->options['expose']['identifier'];
75     $input = $form_state->getValue($identifier);
76
77     if ($this->options['is_grouped'] && isset($this->options['group_info']['group_items'][$input])) {
78       $this->operator = $this->options['group_info']['group_items'][$input]['operator'];
79       $input = $this->options['group_info']['group_items'][$input]['value'];
80     }
81
82     $uids = [];
83     $values = $form_state->getValue($identifier);
84     if ($values && (!$this->options['is_grouped'] || ($this->options['is_grouped'] && ($input != 'All')))) {
85       foreach ($values as $value) {
86         $uids[] = $value['target_id'];
87       }
88     }
89
90     if ($uids) {
91       $this->validated_exposed_input = $uids;
92     }
93   }
94
95   protected function valueSubmit($form, FormStateInterface $form_state) {
96     // prevent array filter from removing our anonymous user.
97   }
98
99   /**
100    * {@inheritdoc}
101    */
102   public function getValueOptions() {
103     return $this->valueOptions;
104   }
105
106   public function adminSummary() {
107     // set up $this->valueOptions for the parent summary
108     $this->valueOptions = [];
109
110     if ($this->value) {
111       $result = \Drupal::entityTypeManager()->getStorage('user')
112         ->loadByProperties(['uid' => $this->value]);
113       foreach ($result as $account) {
114         if ($account->id()) {
115           $this->valueOptions[$account->id()] = $account->label();
116         }
117         else {
118           // Intentionally NOT translated.
119           $this->valueOptions[$account->id()] = 'Anonymous';
120         }
121       }
122     }
123
124     return parent::adminSummary();
125   }
126
127 }