1 views_plugin_style_mapping.inc views_plugin_style_mapping::options_form(&$form, &$form_state)

Overrides views_plugin_style::options_form().

Overrides views_plugin_style::options_form

File

core/modules/views/plugins/views_plugin_style_mapping.inc, line 54
Definition of views_plugin_style_mapping.

Class

views_plugin_style_mapping
Allows fields to be mapped to specific use cases.

Code

function options_form(&$form, &$form_state) {
  parent::options_form($form, $form_state);

  // Get the mapping.
  $mapping = $this->define_mapping();

  // 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->display->handler->get_field_labels();

  // 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->init_handlers();
      $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;
  }
}