You are here

function views_refresh_shift_page_and_render in Views Refresh 7

Tries to load the previous page of the view if the current page is empty.

1 call to views_refresh_shift_page_and_render()
views_refresh_ajax_handler in ./views_refresh.module
Menu callback to reload a view via AJAX - modified copy of views_ajax().

File

./views_refresh.module, line 187
Views Refresh module.

Code

function views_refresh_shift_page_and_render($view, $name, $output, $display_id, $args, $pager_element, $dom_id) {
  global $pager_page_array;
  if (empty($pager_page_array)) {
    $pager_page_array = array();
  }
  $page_array = isset($_GET['page']) ? explode(',', $_GET['page']) : array();

  /** @var view $view */
  $pager_id = $view->query->pager
    ->get_pager_id();
  for ($i = 0; $i <= $pager_id || $i < count($pager_page_array); $i++) {
    $pager_page_array[$i] = empty($page_array[$i]) ? 0 : $page_array[$i];
  }
  $page = intval($pager_page_array[$pager_id]);
  if ($page < 0) {
    $page = 0;
  }

  // Limit page decrement attempts to avoid DOS attacks.
  $attempts = 5;
  while ($page > 0 && empty($view->result) && $attempts > 0) {
    $attempts--;
    $page--;
    $pager_page_array[$pager_id] = $page;
    $_GET['page'] = implode(',', pager_load_array($page, $pager_id, $page_array));
    $view = views_get_view($name);
    $view
      ->init_display();
    if (isset($pager_element)) {
      $view->display[$display_id]->handler
        ->set_option('pager_element', $pager_element);
    }
    $view->dom_id = $dom_id;
    $output = $view
      ->preview($display_id, $args);
  }
  return $output;
}