You are here

function freepager_preprocess_views_freepager in Free pager 7.2

Implements hook_preprocess_HOOK().

File

./freepager.module, line 71
Some basic function for Free pager. Mostly implementations of Views hooks.

Code

function freepager_preprocess_views_freepager(&$vars) {

  // Let's get some of the data we will need.
  $view =& $vars['view'];
  if (count($view->result) <= 1) {
    $view->result = array();
    return;
  }
  $fields = array_keys(freepager_settings());
  foreach ($fields as $field) {
    $field_names[$field] = $view->display_handler->options[$field];
  }
  $current_path = implode('/', arg());

  // Let's go see if we're looking at a page matching the provided paths.
  $row_number = -1;
  foreach ($view->result as $row => $result) {
    $rendered_fields = _freepager_render_views_row($view, $row, $field_names['path']);
    if ($rendered_fields[$field_names['path']] == $current_path) {
      $row_number = $row;
      break;
    }
  }

  // If no hit is found, set a flag and quit.
  if ($row_number == -1) {
    $view->display_handler->no_path_match = TRUE;
    return;
  }
  $count = count($view->result);
  $params = drupal_get_query_parameters();

  // Build the 'previous' item.
  if ($field_names['previous']) {
    $previous_row_number = $row_number - 1;

    // Loop the 'previous' index, if the pager is set to loop.
    if ($previous_row_number < 0 && $view->display_handler
      ->get_option('loop')) {
      $previous_row_number += $count;
    }
    if ($previous_row_number >= 0) {
      $previous_rendered_fields = _freepager_render_views_row($view, $previous_row_number);
      $vars['previous'] = $previous_rendered_fields[$field_names['previous']];
      $vars['previous_linked'] = l($vars['previous'], $previous_rendered_fields[$field_names['path']], array(
        'query' => $params,
        'html' => TRUE,
        'attributes' => array(
          'rel' => 'prev',
        ),
      ));
    }
  }

  // Build the 'current' item.
  if ($field_names['current']) {
    $rendered_fields = _freepager_render_views_row($view, $row_number);
    $vars['current'] = $rendered_fields[$field_names['current']];
    $vars['current_linked'] = l($vars['current'], $rendered_fields[$field_names['path']], array(
      'query' => $params,
      'html' => TRUE,
    ));
  }

  // Build the 'next' item.
  if ($field_names['next']) {
    $next_row_number = $row_number + 1;

    // Loop the 'next' index, if the pager is set to loop.
    if ($next_row_number >= $count && $view->display_handler
      ->get_option('loop')) {
      $next_row_number -= $count;
    }
    if ($next_row_number < $count) {
      $next_rendered_fields = _freepager_render_views_row($view, $next_row_number);
      $vars['next'] = $next_rendered_fields[$field_names['next']];
      $vars['next_linked'] = l($vars['next'], $next_rendered_fields[$field_names['path']], array(
        'query' => $params,
        'html' => TRUE,
        'attributes' => array(
          'rel' => 'next',
        ),
      ));
    }
  }

  // Set two other items that might be used by the theme template.
  $vars['row_number'] = $row_number;
  $vars['total_rows'] = $count;

  // This is commented out, while waiting for a better solution (and jQuery
  // implementation that follows coding standards. See
  // http://drupal.org/node/1966002#comment-7398708 .
  //
  //  // If the jQuery mobile library is present, load it and run some helping JS.
  //  if (($library = libraries_load('jquery-mobile')) && !empty($library['loaded'])) {
  //    drupal_add_js(drupal_get_path('module', 'freepager') . '/freepager.js');
  //  }
}