blob: 0f61fe232fe1159ce2e882a3bb0bb45e6301545e [file] [log] [blame]
<?php
namespace Adldap\Query;
use Countable;
use ArrayIterator;
use IteratorAggregate;
class Paginator implements Countable, IteratorAggregate
{
/**
* The complete results array.
*
* @var array
*/
protected $results = [];
/**
* The total amount of pages.
*
* @var int
*/
protected $pages;
/**
* The amount of entries per page.
*
* @var int
*/
protected $perPage;
/**
* The current page number.
*
* @var int
*/
protected $currentPage;
/**
* The current entry offset number.
*
* @var int
*/
protected $currentOffset;
/**
* Constructor.
*
* @param array $results
* @param int $perPage
* @param int $currentPage
* @param int $pages
*/
public function __construct(array $results = [], $perPage = 50, $currentPage = 0, $pages = 0)
{
$this->setResults($results)
->setPerPage($perPage)
->setCurrentPage($currentPage)
->setPages($pages)
->setCurrentOffset(($this->getCurrentPage() * $this->getPerPage()));
}
/**
* Get an iterator for the entries.
*
* @return ArrayIterator
*/
public function getIterator()
{
$entries = array_slice($this->getResults(), $this->getCurrentOffset(), $this->getPerPage(), true);
return new ArrayIterator($entries);
}
/**
* Returns the complete results array.
*
* @return array
*/
public function getResults()
{
return $this->results;
}
/**
* Returns the total amount of pages
* in a paginated result.
*
* @return int
*/
public function getPages()
{
return $this->pages;
}
/**
* Returns the total amount of entries
* allowed per page.
*
* @return int
*/
public function getPerPage()
{
return $this->perPage;
}
/**
* Returns the current page number.
*
* @return int
*/
public function getCurrentPage()
{
return $this->currentPage;
}
/**
* Returns the current offset number.
*
* @return int
*/
public function getCurrentOffset()
{
return $this->currentOffset;
}
/**
* Returns the total amount of results.
*
* @return int
*/
public function count()
{
return count($this->results);
}
/**
* Sets the results array property.
*
* @param array $results
*
* @return Paginator
*/
protected function setResults(array $results)
{
$this->results = $results;
return $this;
}
/**
* Sets the total number of pages.
*
* @param int $pages
*
* @return Paginator
*/
protected function setPages($pages = 0)
{
$this->pages = (int) $pages;
return $this;
}
/**
* Sets the number of entries per page.
*
* @param int $perPage
*
* @return Paginator
*/
protected function setPerPage($perPage = 50)
{
$this->perPage = (int) $perPage;
return $this;
}
/**
* Sets the current page number.
*
* @param int $currentPage
*
* @return Paginator
*/
protected function setCurrentPage($currentPage = 0)
{
$this->currentPage = (int) $currentPage;
return $this;
}
/**
* Sets the current offset number.
*
* @param int $offset
*
* @return Paginator
*/
protected function setCurrentOffset($offset = 0)
{
$this->currentOffset = (int) $offset;
return $this;
}
}