You are here

views_table_filter.module in Views Table Filter 7

Same filename and directory in other branches
  1. 8 views_table_filter.module
  2. 2.0.x views_table_filter.module

File

views_table_filter.module
View source
<?php

/**
 * Implements hook_form_FORM_ID_alter().
 */
function views_table_filter_form_views_ui_edit_display_form_alter(&$form, &$form_state, $form_id) {
  if (!isset($form_state['view'])) {
    return;
  }
  $view = $form_state['view'];
  $exposed_form = $view->display_handler
    ->get_plugin('exposed_form');
  if (!isset($exposed_form->options['bef'])) {
    return;
  }
  $style = $view->display_handler
    ->get_plugin('style');
  if (!isset($style->options['columns'])) {

    // Not a table style.
    return;
  }
  $filters = array();
  foreach ($view->display_handler
    ->get_handlers('filter') as $name => $filter) {
    if (!empty($filter->options['exposed'])) {
      $filters[$name] = $filter;
    }
  }
  if (empty($filters)) {
    return;
  }
  $labels = $view->display_handler
    ->get_field_labels();
  $columns = array(
    '_none' => t('No'),
  );
  foreach ($style->options['columns'] as $field => $column) {
    if ($field === $column) {
      $columns[$field] = !empty($labels[$field]) ? $labels[$field] : $field;
    }
  }
  if (count($columns) < 2) {
    return;
  }
  $bef_form =& $form['options']['exposed_form_options']['bef'];
  foreach ($filters as $name => $filter) {
    if (!isset($bef_form[$name]['more_options'])) {
      continue;
    }
    $default = isset($exposed_form->options['bef'][$name]['more_options']['table_filter']) ? $exposed_form->options['bef'][$name]['more_options']['table_filter'] : '_none';
    $bef_form[$name]['more_options']['table_filter'] = array(
      '#type' => 'select',
      '#title' => t('Move filter to the table column'),
      '#options' => $columns,
      '#default_value' => $default,
    );
  }
}

/**
 * Implements hook_form_FORM_ID_alter().
 */
function views_table_filter_form_views_exposed_form_alter(&$form, &$form_state, $form_id) {
  if (!isset($form_state['view'])) {
    return;
  }
  $view = $form_state['view'];
  $exposed_form = $view->display_handler
    ->get_plugin('exposed_form');
  if (empty($exposed_form->options['bef'])) {
    return;
  }
  $has_table_filters = FALSE;
  foreach ($exposed_form->options['bef'] as $settings) {
    if (empty($settings['more_options']['table_filter'])) {
      continue;
    }
    $column = $settings['more_options']['table_filter'];
    if ($column !== '_none') {
      $has_table_filters = TRUE;
    }
  }
  if (!$has_table_filters) {
    return;
  }
  $style = $view->display_handler
    ->get_plugin('style');
  if (!isset($style->options['columns'])) {

    // Not a table style.
    return;
  }

  // @todo Enforce table to show headers for empty view result.
  $style->options['empty_table'] = TRUE;
  $form['views_table_filter'] = array(
    '#type' => 'hidden',
    '#default_value' => $view->name . ':' . $view->current_display,
    '#attributes' => array(
      'class' => array(
        'views-table-filter',
      ),
    ),
  );
}
function views_table_filter_preprocess_views_view_table(&$vars) {
  $view = $vars['view'];
  if (!$view->display_handler
    ->uses_exposed()) {
    return;
  }
  $exposed_form = $view->display_handler
    ->get_plugin('exposed_form');
  if (empty($exposed_form->options['bef'])) {
    return;
  }
  $filter_columns = array();
  foreach ($exposed_form->options['bef'] as $filter => $settings) {
    if (empty($settings['more_options']['table_filter'])) {
      continue;
    }
    $column = $settings['more_options']['table_filter'];
    if ($column !== '_none') {
      $filter_columns[$filter] = $column;
    }
  }
  $settings = array();
  foreach ($filter_columns as $filter => $column) {
    if (!isset($vars['header'][$column]) || !isset($view->filter[$filter]->options['expose']['identifier'])) {
      continue;
    }
    $identifier = $view->filter[$filter]->options['expose']['identifier'];
    $filter = drupal_clean_css_identifier($filter);
    $vars['header'][$column] .= '<div class="table-header-filter table-header-filter-' . $filter . '"></div>';
    $settings[$filter] = $identifier;
  }
  if (empty($settings)) {
    return;
  }
  drupal_add_js(drupal_get_path('module', 'views_table_filter') . '/views_table_filter.js');
  drupal_add_js(array(
    'views_table_filter' => array(
      $view->name . ':' . $view->current_display => $settings,
    ),
  ), 'setting');
}