You are here

function filter_harmonizer_form_views_ui_config_item_form_alter in Views Filter Harmonizer 7

Implements hook_form_FORMID_alter().

File

./filter_harmonizer.module, line 25
filter_harmonizer.module For Views where both exposed and contextual filters are active on a page.

Code

function filter_harmonizer_form_views_ui_config_item_form_alter(&$form, &$form_state) {
  if (variable_get('filter_harmonizer_always') || empty($form_state['section'])) {

    // Nothing to do (in the wrong place).
    return;
  }
  switch ($form_state['section']) {
    case 'arguments':
      $filter_handlers = $form_state['view']->display_handler
        ->get_handlers('filter');
      if (!empty($filter_handlers[$form_state['handler']->field])) {
        $title = t("Ignore this contextual filter <em>after</em> initial page load, when the user applies this same field's <em>exposed</em> filter.");
        break;
      }

      // This contextual filter does not have a regular filter counterpart.
      return;
    case 'filters':
      $contextual_handlers = $form_state['view']->display_handler
        ->get_handlers('argument');
      if (!empty($contextual_handlers[$form_state['handler']->field])) {
        $title = t('Override the companion <em>contextual</em> filter');
        break;
      }

      // This regular filter does not have a contextual filter counterpart.
      return;
    default:

      // Only want this tickbox on regular and contextual filter forms.
      return;
  }
  $filter_harmonizer_contextual_filters = variable_get('filter_harmonizer_contextual_filters', array());
  $view_name = $form_state['view']->name;
  $display_id = $form_state['display_id'];
  $field_name = $form_state['id'];
  $form['options']['filter_harmonizer_enable'] = array(
    '#type' => 'checkbox',
    '#title' => $title,
    '#description' => t("When ticked, the contextual filter will apply only on initial page load when the exposed filter has not been applied yet."),
    '#default_value' => !empty($filter_harmonizer_contextual_filters[$view_name][$display_id][$field_name]),
    '#fieldset' => 'argument_present',
  );
  $form['buttons']['submit']['#submit'][] = 'filter_harmonizer_views_ui_config_item_form_submit';
}