You are here

function views_ef_fieldset_display_extender_plugin::options_form in Views Exposed Form Fieldset 7

Same name and namespace in other branches
  1. 7.2 views/views_ef_fieldset_display_extender_plugin.inc \views_ef_fieldset_display_extender_plugin::options_form()

Provide a form to edit options for this plugin.

Overrides views_plugin_display_extender::options_form

File

views/views_ef_fieldset_display_extender_plugin.inc, line 22
Provides a display extender plugin for View 3.x.

Class

views_ef_fieldset_display_extender_plugin
@file Provides a display extender plugin for View 3.x.

Code

function options_form(&$form, &$form_state) {
  parent::options_form($form, $form_state);
  if ($form_state['section'] != 'exposed_form_options') {
    return;
  }
  $options = $this->display
    ->get_option('views_ef_fieldset');
  $defaults = $this
    ->option_definition();
  $form['views_ef_fieldset'] = array(
    '#tree' => TRUE,
  );
  $form['views_ef_fieldset']['enabled'] = array(
    '#type' => 'checkbox',
    '#default_value' => isset($options['enabled']) ? $options['enabled'] : $defaults['views_ef_fieldset']['enabled']['default'],
    '#title' => t('Enable fieldset around exposed forms ?'),
  );
  $form['views_ef_fieldset']['options'] = array(
    '#type' => 'fieldset',
    '#title' => t('Exposed form fieldsets'),
    '#states' => array(
      'visible' => array(
        ':input[name="views_ef_fieldset[enabled]"]' => array(
          'checked' => TRUE,
        ),
      ),
    ),
  );
  $exposed_fields = array_values($this->view->display_handler
    ->get_handlers('filter'));
  foreach ($exposed_fields as $exposed_field_index => $exposed_field) {
    if (!$exposed_field
      ->can_expose() || !$exposed_field
      ->is_exposed()) {
      unset($exposed_fields[$exposed_field_index]);
    }
  }
  $sort_fields = array_values($this->view->display_handler
    ->get_handlers('sort'));
  foreach ($sort_fields as $sort_fields_index => $sort_field) {
    if (!$sort_field
      ->can_expose() || !$sort_field
      ->is_exposed()) {
      unset($sort_fields[$sort_fields_index]);
    }
  }
  if (!empty($sort_fields)) {
    $sort_by = new Stdclass();
    $sort_by->handler_type = 'sort';
    $sort_by->options = array(
      'id' => 'sort_by',
      'expose' => array(
        'label' => 'Sort by',
      ),
    );
    $exposed_fields[] = $sort_by;
  }
  if ($form['exposed_form_options']['expose_sort_order']['#default_value'] == 1 && count($sort_fields)) {
    $sort_order = new Stdclass();
    $sort_order->handler_type = 'sort';
    $sort_order->options = array(
      'id' => 'sort_order',
      'expose' => array(
        'label' => 'Sort order',
      ),
    );
    $exposed_fields[] = $sort_order;
  }
  $submit_button = new Stdclass();
  $submit_button->handler_type = 'buttons';
  $submit_button->options = array(
    'id' => 'submit',
    'expose' => array(
      'label' => 'Submit button',
    ),
  );
  $exposed_fields[] = $submit_button;
  if ($form['exposed_form_options']['reset_button']['#default_value'] == 1) {
    $reset_button = new Stdclass();
    $reset_button->handler_type = 'buttons';
    $reset_button->options = array(
      'id' => 'reset',
      'expose' => array(
        'label' => 'Reset button',
      ),
    );
    $exposed_fields[] = $reset_button;
  }
  foreach ($exposed_fields as $exposed_field_index => $exposed_field) {
    $container = new StdClass();
    $container->handler_type = 'container';
    $container->container_type = 'fieldset';
    $container->weight = $exposed_field_index;
    $container->options = array(
      'id' => 'container-' . $exposed_field_index,
      'expose' => array(
        'label' => 'Container ' . $exposed_field_index,
      ),
    );
    $exposed_fields[] = $container;
  }
  $root_options = !empty($options['options']['sort']['root']) ? $options['options']['sort']['root'] : array();

  // Add defaults
  $root_options += array(
    'title' => t('Filters'),
    'description' => '',
    'collapsible' => TRUE,
    'collapsed' => TRUE,
    'collapsed_if_no_exposed_input' => FALSE,
    'container_type' => 'fieldset',
  );
  $data = array(
    array(
      'id' => 'root',
      'type' => 'container',
      'weight' => 0,
      'pid' => '',
      'label' => 'Root',
      'title' => $root_options['title'],
      'description' => $root_options['description'],
      'collapsible' => (bool) $root_options['collapsible'],
      'collapsed' => (bool) $root_options['collapsed'],
      'collapsed_if_no_exposed_input' => (bool) $root_options['collapsed_if_no_exposed_input'],
      'container_type' => $root_options['container_type'],
    ),
  );
  foreach ($exposed_fields as $index => $field) {
    $field_options = $options['options']['sort'][$field->options['id']];
    $label = $field->options['expose']['label'] ? $field->options['expose']['label'] : $field->options['id'];
    $data[] = array(
      'id' => $field->options['id'],
      'type' => $field->handler_type,
      'weight' => isset($field_options['weight']) ? $field_options['weight'] : (isset($field->weight) ? $field->weight : $index - count($exposed_fields)),
      'pid' => empty($field_options['pid']) ? 'root' : $field_options['pid'],
      'label' => $label,
      'title' => isset($field_options['title']) ? $field_options['title'] : $label,
      'description' => isset($field_options['description']) ? $field_options['description'] : '',
      'collapsible' => !empty($field_options['collapsible']),
      'collapsed' => !empty($field_options['collapsed']),
      'collapsed_if_no_exposed_input' => !empty($field_options['collapsed_if_no_exposed_input']),
      'container_type' => isset($field_options['container_type']) ? $field_options['container_type'] : 'fieldset',
    );
  }
  $viewsEFFieldsetData = new ViewsEFFieldsetData($data);
  $table_rows = array();
  foreach ($viewsEFFieldsetData
    ->buildFlat() as $item) {
    $item = $item['item'];
    $table_rows[$item['id']] = array(
      'weight' => array(
        '#item' => $item,
        '#type' => 'weight',
        '#title' => $item['title'],
        '#delta' => count($data),
        '#title_display' => 'invisible',
        '#default_value' => $item['weight'],
        '#attributes' => array(
          'class' => array(
            'item-weight',
          ),
        ),
      ),
      'type' => array(
        '#type' => 'hidden',
        '#default_value' => $item['type'],
      ),
      'id' => array(
        '#type' => 'hidden',
        '#default_value' => $item['id'],
        '#size' => 4,
        '#attributes' => array(
          'class' => array(
            'item-id',
          ),
        ),
      ),
      'pid' => array(
        '#type' => 'hidden',
        '#default_value' => $item['pid'],
        '#size' => 4,
        '#attributes' => array(
          'class' => array(
            'item-pid',
          ),
        ),
      ),
      'depth' => array(
        '#type' => 'hidden',
        '#default_value' => $item['depth'],
      ),
    );
    if ($item['type'] == 'container') {
      $table_rows[$item['id']] += array(
        'container_type' => array(
          '#type' => 'select',
          '#default_value' => $item['container_type'],
          '#options' => array(
            'container' => 'Container',
            'fieldset' => 'Fieldset',
            'vertical_tabs' => 'Vertical tabs',
          ),
        ),
        'title' => array(
          '#type' => 'textfield',
          '#size' => 15,
          '#default_value' => $item['title'],
        ),
        'description' => array(
          '#type' => 'textfield',
          '#size' => 15,
          '#default_value' => $item['description'],
        ),
        'collapsible' => array(
          '#type' => 'checkbox',
          '#default_value' => $item['collapsible'],
        ),
        'collapsed' => array(
          '#type' => 'checkbox',
          '#default_value' => $item['collapsed'],
        ),
        'collapsed_if_no_exposed_input' => array(
          '#type' => 'checkbox',
          '#default_value' => $item['collapsed_if_no_exposed_input'],
        ),
      );
    }
  }
  $form['views_ef_fieldset']['options']['sort'] = $table_rows;
  $form['views_ef_fieldset']['options']['sort']['#theme'][] = 'views_ef_fieldset_reorder_form';
}