views_table_filter.module in Views Table Filter 7
File
views_table_filter.module
View source
<?php
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'])) {
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,
);
}
}
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'])) {
return;
}
$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');
}