protected function TaxonomyIndexMachineName::valueForm in Taxonomy Machine Name 8
Options form subform for setting options.
This should be overridden by all child classes and it must define $form['value']
Overrides ManyToOne::valueForm
See also
buildOptionsForm()
File
- src/
Plugin/ views/ filter/ TaxonomyIndexMachineName.php, line 168
Class
- TaxonomyIndexMachineName
- Filter by term id.
Namespace
Drupal\taxonomy_machine_name\Plugin\views\filterCode
protected function valueForm(&$form, FormStateInterface $form_state) {
$vocabulary = $this->vocabularyStorage
->load($this->options['vid']);
if (empty($vocabulary) && $this->options['limit']) {
$form['markup'] = [
'#markup' => '<div class="js-form-item form-item">' . $this
->t('An invalid vocabulary is selected. Please change it in the options.') . '</div>',
];
return;
}
if ($this->options['type'] == 'textfield') {
$terms = $this->value ? Term::loadMultiple($this->value) : [];
$form['value'] = [
'#title' => $this->options['limit'] ? $this
->t('Select terms from vocabulary @voc', [
'@voc' => $vocabulary
->label(),
]) : $this
->t('Select terms'),
'#type' => 'textfield',
'#default_value' => EntityAutocomplete::getEntityLabels($terms),
];
if ($this->options['limit']) {
$form['value']['#type'] = 'entity_autocomplete';
$form['value']['#target_type'] = 'taxonomy_term';
$form['value']['#selection_settings']['target_bundles'] = [
$vocabulary
->id(),
];
$form['value']['#tags'] = TRUE;
$form['value']['#process_default_value'] = FALSE;
}
}
else {
if (!empty($this->options['hierarchy']) && $this->options['limit']) {
$tree = $this->termStorage
->loadTree($vocabulary
->id(), 0, NULL, TRUE);
$options = [];
if ($tree) {
foreach ($tree as $term) {
$choice = new \stdClass();
$choice->option = [
$term
->get('machine_name')
->get(0)->value => str_repeat('-', $term->depth) . \Drupal::service('entity.repository')
->getTranslationFromContext($term)
->label(),
];
$options[] = $choice;
}
}
}
else {
$options = [];
$query = \Drupal::entityQuery('taxonomy_term')
->sort('weight')
->sort('name')
->addTag('taxonomy_term_access');
if ($this->options['limit']) {
$query
->condition('vid', $vocabulary
->id());
}
$terms = Term::loadMultiple($query
->execute());
foreach ($terms as $term) {
$options[$term
->get('machine_name')
->get(0)->value] = \Drupal::service('entity.repository')
->getTranslationFromContext($term)
->label();
}
}
$default_value = (array) $this->value;
if ($exposed = $form_state
->get('exposed')) {
$identifier = $this->options['expose']['identifier'];
if (!empty($this->options['expose']['reduce'])) {
$options = $this
->reduceValueOptions($options);
if (!empty($this->options['expose']['multiple']) && empty($this->options['expose']['required'])) {
$default_value = [];
}
}
if (empty($this->options['expose']['multiple'])) {
if (empty($this->options['expose']['required']) && (empty($default_value) || !empty($this->options['expose']['reduce']))) {
$default_value = 'All';
}
elseif (empty($default_value)) {
$keys = array_keys($options);
$default_value = array_shift($keys);
}
elseif ($default_value == [
'',
]) {
$default_value = 'All';
}
else {
$copy = $default_value;
$default_value = array_shift($copy);
}
}
}
$form['value'] = [
'#type' => 'select',
'#title' => $this->options['limit'] ? $this
->t('Select terms from vocabulary @voc', [
'@voc' => $vocabulary
->label(),
]) : $this
->t('Select terms'),
'#multiple' => TRUE,
'#options' => $options,
'#size' => min(9, count($options)),
'#default_value' => $default_value,
];
$user_input = $form_state
->getUserInput();
if ($exposed && isset($identifier) && !isset($user_input[$identifier])) {
$user_input[$identifier] = $default_value;
$form_state
->setUserInput($user_input);
}
}
if (!$form_state
->get('exposed')) {
// Retain the helper option.
$this->helper
->buildOptionsForm($form, $form_state);
// Show help text if not exposed to end users.
$form['value']['#description'] = t('Leave blank for all. Otherwise, the first selected term will be the default instead of "Any".');
}
}