public function getPager(array $criteria, $page, $limit = 10, array $sort = array())
{
$query = $this->getRepository()->createQueryBuilder('p')->select('p');
$fields = $this->getEntityManager()->getClassMetadata($this->class)->getFieldNames();
foreach ($sort as $field => $direction) {
if (!in_array($field, $fields)) {
unset($sort[$field]);
}
}
if (count($sort) == 0) {
$sort = array('name' => 'ASC');
}
foreach ($sort as $field => $direction) {
$query->orderBy(sprintf('p.%s', $field), strtoupper($direction));
}
$parameters = array();
if (isset($criteria['enabled'])) {
$query->andWhere('p.enabled = :enabled');
$parameters['enabled'] = $criteria['enabled'];
}
$query->setParameters($parameters);
$pager = new Pager();
$pager->setMaxPerPage($limit);
$pager->setQuery(new ProxyQuery($query));
$pager->setPage($page);
$pager->init();
return $pager;
}