function views_plugin_style_mapping::options_form

Overrides views_plugin_style::options_form

File

plugins/views_plugin_style_mapping.inc, line 55

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;
    }
}