You are here

function global_filter_field_slider_widget_form_alter in Views Global Filter 8

Same name and namespace in other branches
  1. 7 widgets/global_filter.rangewidget.inc \global_filter_field_slider_widget_form_alter()

Called via hook_field_widget_form_alter().

Turns slider widget into a slider range widget... ...provided this was requested on the Global Filter block configuration ...provided Contextual Range Filter module is enabled.

1 call to global_filter_field_slider_widget_form_alter()
global_filter_field_widget_form_alter in ./global_filter.widgets.inc
Implements hook_field_widget_form_alter().

File

widgets/global_filter.rangewidget.inc, line 17
global_filter.rangewidget.inc

Code

function global_filter_field_slider_widget_form_alter(&$element, &$form_state, $context) {

  // Or $context['instance']['field_name']; ?
  $name = $element['#field_name'];
  $filter_key = global_filter_key_by_name($name);
  $convert_to_range = global_filter_get_parameter($filter_key, 'convert_to_range');
  $autosubmit = global_filter_get_parameter($filter_key, 'set_on_select');
  $slider_settings =& $element['value']['#attached']['js']['0']['data']['slider'];
  $lang = $form_state['language'];

  // Normally loops only once.
  foreach ($slider_settings as &$settings) {
    $settings['autosubmit'] = $autosubmit;

    // Only convert slider to range slider if we can support ranges via module
    // Contextual Range Filter. Maybe we should also check if this field is
    // actually enabled as a CRF ?
    if ($convert_to_range && module_exists('contextual_range_filter')) {
      $settings['range'] = TRUE;

      // Remove validation and ease maxlength restriction on textfield when
      // it's a range.
      unset($element['value']['#element_validate']);

      // #maxlength is used in _form_validate() (form.inc)
      if (isset($element['value']['#maxlength'])) {

        // Add 2 for delimiter.
        $element['value']['#maxlength'] = 2 * $element['value']['#maxlength'] + 2;
      }
      if (empty($form_state['input'][$name][$lang][0])) {
        $range = global_filter_get_session_value($name);
      }
      else {
        $range = reset($form_state['input'][$name][$lang][0]);
      }
      list($from, $to) = contextual_range_filter_split(is_array($range) ? reset($range) : $range);
      $settings['values'] = array(
        empty($from) ? $settings['min'] : $from,
        empty($to) ? $settings['max'] : $to,
      );
      unset($settings['value']);
    }
  }
}