views_flag_refresh.module in Views Flag Refresh 7
Same filename and directory in other branches
Views Flag Refresh allows site administrators to configure which views are refreshed automatically via AJAX when certain flags are selected.
File
views_flag_refresh.moduleView source
<?php
/**
* @file
* Views Flag Refresh allows site administrators to configure which views are
* refreshed automatically via AJAX when certain flags are selected.
*/
/**
* Implements hook_views_api().
*/
function views_flag_refresh_views_api() {
return array(
'api' => '3',
);
}
/**
* Returns an array of flags keyed by machine readable name to an escaped
* display name.
*
* @return array
* An array of options.
*/
function views_flag_refresh_flag_options_get() {
$options = array();
foreach (flag_get_flags() as $flag_id => $flag) {
$options[$flag_id] = check_plain($flag->title);
}
return $options;
}
/**
* Returns an array of widgets keyed by machine readable name to an escaped
* display name.
*
* @return array
* An array of options.
*/
function views_flag_refresh_widget_options_get() {
$options = array();
foreach (views_flag_refresh_widgets_get() as $widget_name => $widget) {
$options[$widget_name] = check_plain($widget['title']);
}
return $options;
}
/**
* Returns widget definitions from hook_views_flag_refresh_widgets()
* implementations.
*
* @param bool $reset
* A boolean flagging whether the static should be reset.
*
* @return array
* An array of widget definitions.
*/
function views_flag_refresh_widgets_get($reset = FALSE) {
$widgets = drupal_static(__FUNCTION__);
if (NULL === $widgets) {
$widgets = module_invoke_all('views_flag_refresh_widgets');
drupal_alter('views_flag_refresh_widgets', $widgets);
}
return $widgets;
}
/**
* Preprocess the primary theme implementation for a view.
*
* If AJAX is enabled for the view, adds javascript files and settings.
*/
function views_flag_refresh_preprocess_views_view(&$vars) {
if ($vars['view']->use_ajax) {
views_flag_refresh_add_js($vars['view']);
}
}
/**
* Adds javascript settings for the view, makes sure the core javascript and
* settings files
*
* @param object $view
* An object containing the view.
*/
function views_flag_refresh_add_js($view) {
$processed = drupal_static(__FUNCTION__);
// Only adds the core javascript files and settings once. The file isn't a
// problem, but the settings become an array if they are added more than once.
if (NULL === $processed) {
$path = drupal_get_path('module', 'views_flag_refresh');
drupal_add_js($path . '/views_flag_refresh.js');
$settings = array(
'viewsFlagRefresh' => array(
'imagePath' => base_path() . $path . '/images',
),
);
drupal_add_js($settings, 'setting');
$processed = TRUE;
}
// Gets all widget definitions.
$widgets = views_flag_refresh_widgets_get();
// Adds our view specific settings and javascript files.
$settings = array(
'viewsFlagRefresh' => array(),
);
$flags = (array) $view->display_handler
->get_option('use_ajax_flags');
foreach ($flags as $flag_name => $enabled) {
if ($enabled) {
// Gets widget information, adds javascript, CSS files if defined.
if (!($widget = $view->display_handler
->get_option('use_ajax_flags_widget'))) {
$widget = 'default';
}
if (isset($widgets[$widget]['js file'])) {
drupal_add_js($widgets[$widget]['js file']);
}
if (isset($widgets[$widget]['css file'])) {
drupal_add_css($widgets[$widget]['css file']);
}
// Adds widget information to the javascript settings.
$key = $view->name . '-' . $view->current_display;
$settings['viewsFlagRefresh']['flags'][$flag_name][$key] = array(
'themeHook' => isset($widgets[$widget]['theme hook']) ? $widgets[$widget]['theme hook'] : FALSE,
'themeHookPost' => isset($widgets[$widget]['theme hook post']) ? $widgets[$widget]['theme hook post'] : FALSE,
);
}
}
drupal_add_js($settings, 'setting');
}
/**
* Implements hook_views_flag_refresh_widgets().
*/
function views_flag_refresh_views_flag_refresh_widgets() {
$widgets = array();
$widgets['default'] = array(
'title' => t('No widget'),
'description' => t('No display changes are made to the view while it is being refreshed.'),
);
$widgets['throbber'] = array(
'title' => t('Throbber image'),
'theme hook' => 'throbber',
'theme hook post' => 'throbberPost',
'description' => t('Display a throbber image in place of the view content while it is being refreshed.'),
'css file' => drupal_get_path('module', 'views_flag_refresh') . '/views_flag_refresh.css',
);
return $widgets;
}
/**
* Implements hook_views_ajax_data_alter().
*/
function views_flag_refresh_views_ajax_data_alter(&$commands, $view) {
if ($view->query->pager->display->handler->options['use_ajax_flags_noscrolltop']) {
foreach ($commands as $key => $command) {
// Remove scrollTop command.
if ($command['command'] == 'viewsScrollTop') {
unset($commands[$key]);
}
}
}
}
Functions
Name | Description |
---|---|
views_flag_refresh_add_js | Adds javascript settings for the view, makes sure the core javascript and settings files |
views_flag_refresh_flag_options_get | Returns an array of flags keyed by machine readable name to an escaped display name. |
views_flag_refresh_preprocess_views_view | Preprocess the primary theme implementation for a view. |
views_flag_refresh_views_ajax_data_alter | Implements hook_views_ajax_data_alter(). |
views_flag_refresh_views_api | Implements hook_views_api(). |
views_flag_refresh_views_flag_refresh_widgets | Implements hook_views_flag_refresh_widgets(). |
views_flag_refresh_widgets_get | Returns widget definitions from hook_views_flag_refresh_widgets() implementations. |
views_flag_refresh_widget_options_get | Returns an array of widgets keyed by machine readable name to an escaped display name. |