You are here

function global_filter_get_view_next_value in Views Global Filter 8

Same name and namespace in other branches
  1. 6 global_filter.module \global_filter_get_view_next_value()
  2. 7 global_filter.module \global_filter_get_view_next_value()

In the supplied view return the successor to the supplied reference value.

Parameters

int $ref_base_value: the base field value (eg nid, uid), whose successor is to be found and returned based on the supplied view

string $view_id: the machine_name of the view to be evaluated; defaults to the view set in the 'global_filter_view_autocycle' variable

Return value

mixed next value of the specified view; this will be the first value if $ref_base_value is empty

2 calls to global_filter_get_view_next_value()
global_filter_init in ./global_filter.module
Implements hook_init().
global_filter_slidebox_data_alter in plugins/slidebox.inc
Implements hook_slidebox_data_alter().

File

./global_filter.module, line 320
global_filter.module

Code

function global_filter_get_view_next_value($ref_base_value = NULL, $view_id = NULL) {
  if ($ref_base_value == NULL) {
    $ref_base_value = global_filter_get_session_value('view_autocycle');
  }
  if (empty($view_id)) {
    $view_id = global_filter_get_module_parameter('view_autocycle');

    // String prefix=='view_'.
    $view_id = drupal_substr($view_id, 5);
  }
  $view = views_get_view($view_id);
  if (!is_object($view)) {
    drupal_set_message(t('Global Filter: auto-cycle filter could not find view: %view.', array(
      '%view' => empty($view_id) ? t('no name specified') : $view_id,
    )), 'error');
    return $ref_base_value;
  }
  $view
    ->init_display();
  $view
    ->pre_execute();
  $view
    ->execute();
  if (empty($view->result)) {
    return $ref_base_value;
  }

  // Find $ref_view_value in the view result set; must be a base-field.
  foreach ($view->result as $row) {
    if ($row->{$view->base_field} == $ref_base_value) {

      // Current will give us next...
      $next_row = current($view->result);
      break;
    }
  }
  if (empty($next_row)) {
    if (isset($ref_base_value)) {

      // Reference value was set, but not found.
      return FALSE;
    }

    // Return first view result.
    $next_row = reset($view->result);
  }
  $value = $next_row->{$view->base_field};
  global_filter_set_on_session('view_autocycle', $value);
  return $value;
}