Example #1
0
 public function __construct(PageRange $pageRange)
 {
     $currentPage = $pageRange->getCurrentPage();
     $numItemsPerPage = $pageRange->getNumItems();
     $totalItems = $pageRange->getTotalItems();
     if (!$totalItems) {
         $this->isOutOfBounds = true;
         $this->numItemsPerPage = $numItemsPerPage;
         return;
     }
     $isOutOfBounds = $currentPage > ceil($totalItems / $numItemsPerPage);
     // pages
     $numPages = ceil($totalItems / $numItemsPerPage);
     $currentPage = $isOutOfBounds ? 1 : $currentPage;
     // go to page 1 if out of bounds
     $previousPage = $currentPage == 1 ? $numPages : $currentPage - 1;
     // flip around if at the beginning
     $nextPage = $currentPage == $numPages ? 1 : $currentPage + 1;
     // flip around if at the end
     $firstPage = 1;
     $lastPage = $numPages;
     // num items on current page
     if ($currentPage == $numPages && $currentPage > 1) {
         $numItemsOnCurrentPage = $totalItems % $numItemsPerPage;
     } else {
         if ($totalItems < $numItemsPerPage) {
             $numItemsOnCurrentPage = $totalItems;
         } else {
             $numItemsOnCurrentPage = $numItemsPerPage;
         }
     }
     // indices (start at 0)
     $offset = ($currentPage - 1) * $numItemsPerPage;
     $last = $offset + $numItemsOnCurrentPage - 1;
     // items
     $firstItemOnCurrentPage = $offset + 1;
     $lastItemOnCurrentPage = $last + 1;
     // set instance vars
     $this->isOutOfBounds = $isOutOfBounds;
     $this->totalItems = (int) $totalItems;
     $this->numItemsPerPage = (int) $numItemsPerPage;
     $this->numItemsOnCurrentPage = (int) $numItemsOnCurrentPage;
     $this->firstItemOnCurrentPage = (int) $firstItemOnCurrentPage;
     $this->lastItemOnCurrentPage = (int) $lastItemOnCurrentPage;
     $this->numPages = (int) $numPages;
     $this->currentPage = (int) $currentPage;
     $this->previousPage = (int) $previousPage;
     $this->nextPage = (int) $nextPage;
     $this->firstPage = (int) $firstPage;
     $this->lastPage = (int) $lastPage;
     $this->offset = (int) $offset;
     $this->last = (int) $last;
     return $this;
 }