You are here

public function Mapping::buildOptionsForm in Views (for Drupal 7) 8.3

Overrides Drupal\views\Plugin\views\style\StylePluginBase::buildOptionsForm().

Overrides StylePluginBase::buildOptionsForm

File

lib/Drupal/views/Plugin/views/style/Mapping.php, line 73
Definition of Drupal\views\Plugin\views\style\Mapping.

Class

Mapping
Allows fields to be mapped to specific use cases.

Namespace

Drupal\views\Plugin\views\style

Code

public function buildOptionsForm(&$form, &$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 = array(
    '#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 = array();
    $required = !empty($mapping[$key]['#required']);
    if (!$required && empty($mapping[$key]['#multiple'])) {
      $field_options = array(
        '' => t('- None -'),
      );
    }
    $field_options += $field_labels;

    // Optionally filter the available fields.
    if (isset($mapping[$key]['#filter'])) {
      $this->view
        ->initHandlers();
      $this::$mapping[$key]['#filter']($field_options);
      unset($mapping[$key]['#filter']);
    }

    // These values must always be set.
    $overrides = array(
      '#options' => $field_options,
      '#default_value' => $options[$key],
    );

    // Optionally allow the select to be toggleable.
    if (!empty($mapping[$key]['#toggle'])) {
      $form['mapping']["toggle_{$key}"] = array(
        '#type' => 'checkbox',
        '#title' => t('Use a custom %field_name', array(
          '%field_name' => strtolower($mapping[$key]['#title']),
        )),
        '#default_value' => $this->options['mapping']["toggle_{$key}"],
      );
      $overrides['#states']['visible'][':input[name="style_options[mapping][' . "toggle_{$key}" . ']"]'] = array(
        'checked' => TRUE,
      );
    }
    $form['mapping'][$key] = $overrides + $mapping[$key] + $defaults;
  }
}