You are here

public function views_plugin_style_mapping::options_form in Views (for Drupal 7) 7.3

Provide a form to edit options for this plugin.

Overrides views_plugin_style::options_form

File

plugins/views_plugin_style_mapping.inc, line 55
Definition of views_plugin_style_mapping.

Class

views_plugin_style_mapping
Allows fields to be mapped to specific use cases.

Code

public 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();
      $filter = $mapping[$key]['#filter'];
      $this::$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;
  }
}