You are here

views_flag_refresh.module in Views Flag Refresh 7

Same filename and directory in other branches
  1. 6 views_flag_refresh.module

Views Flag Refresh allows site administrators to configure which views are refreshed automatically via AJAX when certain flags are selected.

File

views_flag_refresh.module
View 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

Namesort descending 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.