function Mapping::buildOptionsForm

Same name in other branches
  1. 9 core/modules/views/src/Plugin/views/style/Mapping.php \Drupal\views\Plugin\views\style\Mapping::buildOptionsForm()
  2. 8.9.x core/modules/views/src/Plugin/views/style/Mapping.php \Drupal\views\Plugin\views\style\Mapping::buildOptionsForm()
  3. 10 core/modules/views/src/Plugin/views/style/Mapping.php \Drupal\views\Plugin\views\style\Mapping::buildOptionsForm()

Overrides StylePluginBase::buildOptionsForm

File

core/modules/views/src/Plugin/views/style/Mapping.php, line 69

Class

Mapping
Allows fields to be mapped to specific use cases.

Namespace

Drupal\views\Plugin\views\style

Code

public function buildOptionsForm(&$form, FormStateInterface $form_state) {
    parent::buildOptionsForm($form, $form_state);
    // Get the mapping.
    $mapping = $this->defineMapping();
    // Restrict the list of defaults to the mapping, in case they have changed.
    $options = array_intersect_key($this->options['mapping'], $mapping);
    // Get the labels of the fields added to this display.
    $field_labels = $this->displayHandler
        ->getFieldLabels();
    // Provide some default values.
    $defaults = [
        '#type' => 'select',
        '#required' => FALSE,
        '#multiple' => FALSE,
    ];
    // For each mapping, add a select element to the form.
    foreach ($options as $key => $value) {
        // If the field is optional, add a 'None' value to the top of the options.
        $field_options = [];
        $required = !empty($mapping[$key]['#required']);
        if (!$required && empty($mapping[$key]['#multiple'])) {
            $field_options = [
                '' => $this->t('- None -'),
            ];
        }
        $field_options += $field_labels;
        // Optionally filter the available fields.
        if (isset($mapping[$key]['#filter'])) {
            $this->view
                ->initHandlers();
            $filter = $mapping[$key]['#filter'];
            $this::$filter($field_options);
            unset($mapping[$key]['#filter']);
        }
        // These values must always be set.
        $overrides = [
            '#options' => $field_options,
            '#default_value' => $options[$key],
        ];
        // Optionally allow the select to be toggleable.
        if (!empty($mapping[$key]['#toggle'])) {
            $form['mapping']["toggle_{$key}"] = [
                '#type' => 'checkbox',
                '#title' => $this->t('Use a custom %field_name', [
                    '%field_name' => strtolower($mapping[$key]['#title']),
                ]),
                '#default_value' => $this->options['mapping']["toggle_{$key}"],
            ];
            $overrides['#states']['visible'][':input[name="style_options[mapping][' . "toggle_{$key}" . ']"]'] = [
                'checked' => TRUE,
            ];
        }
        $form['mapping'][$key] = $overrides + $mapping[$key] + $defaults;
    }
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.