You are here

function views_customfield_handler_field_phpcode::pre_render in Views Custom Field 6

File

includes/views_customfield_handler_field_phpcode.inc, line 83
Contains the 'customfield' phpcode field handler.

Class

views_customfield_handler_field_phpcode

Code

function pre_render($results) {

  // Evaluate the PHP code.
  foreach ($this->view->result as $i => $row) {
    $this->view->result[$i]->{$this->field_alias} = $this
      ->render_row($row);
  }

  // If we're sorting, do the actual sorting then fix the results as per the pager info.
  if ($this->options['sortable'] != VIEWS_CUSTOMFIELD_SORTABLE_NO && $this->sort_order) {
    usort($this->view->result, array(
      new views_customfield_sorter($this->options['sortable'], $this->sort_order, $this->field_alias),
      'sort',
    ));

    // Handle paging logic as in view::execute()
    if (!empty($this->pager['items_per_page'])) {
      if (!empty($this->pager['use_pager']) || !empty($this->view->get_total_rows)) {
        $this->view->total_rows = count($this->view->result) - $this->pager['offset'];
      }
      if (!empty($this->pager['use_pager'])) {

        // dump information about what we already know into the globals
        global $pager_page_array, $pager_total, $pager_total_items;

        // total rows in query
        $pager_total_items[$this->pager['element']] = $this->view->total_rows;

        // total pages
        $pager_total[$this->pager['element']] = ceil($pager_total_items[$this->pager['element']] / $this->pager['items_per_page']);

        // What page was requested
        $pager_page_array = isset($_GET['page']) ? explode(',', $_GET['page']) : array();

        // If the requested page was within range. $this->pager['current_page']
        // defaults to 0 so we don't need to set it in an out-of-range condition.
        if (!empty($pager_page_array[$this->pager['element']])) {
          $page = intval($pager_page_array[$this->pager['element']]);
          if ($page > 0 && $page < $pager_total[$this->pager['element']]) {
            $this->pager['current_page'] = $page;
          }
        }
        $pager_page_array[$this->pager['element']] = $this->pager['current_page'];
      }
      $offset = $this->pager['current_page'] * $this->pager['items_per_page'] + $this->pager['offset'];
      $results = array_slice($this->view->result, $offset, $this->pager['items_per_page']);
      $this->view->result = $results;
    }
    $this->view->pager = $this->pager;
  }
}