RepositoryQuery: Do not lose the repository context during pagination
refs #8826
This commit is contained in:
parent
eac5e398be
commit
f83d16acb2
|
@ -376,7 +376,9 @@ class RepositoryQuery implements QueryInterface
|
||||||
*/
|
*/
|
||||||
public function paginate($itemsPerPage = null, $pageNumber = null)
|
public function paginate($itemsPerPage = null, $pageNumber = null)
|
||||||
{
|
{
|
||||||
return $this->query->paginate($itemsPerPage, $pageNumber);
|
$paginator = $this->query->paginate($itemsPerPage, $pageNumber);
|
||||||
|
$paginator->getAdapter()->setQuery($this);
|
||||||
|
return $paginator;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -4,44 +4,64 @@
|
||||||
namespace Icinga\Web\Paginator\Adapter;
|
namespace Icinga\Web\Paginator\Adapter;
|
||||||
|
|
||||||
use Zend_Paginator_Adapter_Interface;
|
use Zend_Paginator_Adapter_Interface;
|
||||||
|
use Icinga\Data\QueryInterface;
|
||||||
/**
|
|
||||||
* @see Zend_Paginator_Adapter_Interface
|
|
||||||
*/
|
|
||||||
|
|
||||||
class QueryAdapter implements Zend_Paginator_Adapter_Interface
|
class QueryAdapter implements Zend_Paginator_Adapter_Interface
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* Array
|
* The query being paginated
|
||||||
*
|
*
|
||||||
* @var array
|
* @var QueryInterface
|
||||||
*/
|
*/
|
||||||
protected $query = null;
|
protected $query;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Item count
|
* Item count
|
||||||
*
|
*
|
||||||
* @var integer
|
* @var int
|
||||||
*/
|
*/
|
||||||
protected $count = null;
|
protected $count;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constructor.
|
* Create a new QueryAdapter
|
||||||
*
|
*
|
||||||
* @param array $query Query to paginate
|
* @param QueryInterface $query The query to paginate
|
||||||
*/
|
*/
|
||||||
// TODO: This might be ready for (QueryInterface $query)
|
public function __construct(QueryInterface $query)
|
||||||
public function __construct($query)
|
|
||||||
{
|
{
|
||||||
$this->query = $query;
|
$this->setQuery($query);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns an array of items for a page.
|
* Set the query to paginate
|
||||||
*
|
*
|
||||||
* @param integer $offset Page offset
|
* @param QueryInterface $query
|
||||||
* @param integer $itemCountPerPage Number of items per page
|
*
|
||||||
* @return array
|
* @return $this
|
||||||
|
*/
|
||||||
|
public function setQuery(QueryInterface $query)
|
||||||
|
{
|
||||||
|
$this->query = $query;
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return the query being paginated
|
||||||
|
*
|
||||||
|
* @return QueryInterface
|
||||||
|
*/
|
||||||
|
public function getQuery()
|
||||||
|
{
|
||||||
|
return $this->query;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Fetch and return the rows in the given range of the query result
|
||||||
|
*
|
||||||
|
* @param int $offset Page offset
|
||||||
|
* @param int $itemCountPerPage Number of items per page
|
||||||
|
*
|
||||||
|
* @return array
|
||||||
*/
|
*/
|
||||||
public function getItems($offset, $itemCountPerPage)
|
public function getItems($offset, $itemCountPerPage)
|
||||||
{
|
{
|
||||||
|
@ -49,15 +69,16 @@ class QueryAdapter implements Zend_Paginator_Adapter_Interface
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the total number of items in the query result.
|
* Return the total number of items in the query result
|
||||||
*
|
*
|
||||||
* @return integer
|
* @return int
|
||||||
*/
|
*/
|
||||||
public function count()
|
public function count()
|
||||||
{
|
{
|
||||||
if ($this->count === null) {
|
if ($this->count === null) {
|
||||||
$this->count = $this->query->count();
|
$this->count = $this->query->count();
|
||||||
}
|
}
|
||||||
|
|
||||||
return $this->count;
|
return $this->count;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue