diff --git a/Resources/config/services.yml b/Resources/config/services.yml
index 5f36aabf5..d2ae37056 100644
--- a/Resources/config/services.yml
+++ b/Resources/config/services.yml
@@ -23,6 +23,7 @@ services:
- "@doctrine.orm.entity_manager"
- "@security.token_storage"
- "@chill.main.security.authorization.helper"
+ - "@chill_main.paginator_factory"
calls:
- ['setContainer', ["@service_container"]]
tags:
diff --git a/Resources/views/Person/list.html.twig b/Resources/views/Person/list.html.twig
index 654b49ddf..dc90de4bd 100644
--- a/Resources/views/Person/list.html.twig
+++ b/Resources/views/Person/list.html.twig
@@ -18,6 +18,8 @@
{{ '%total% persons matching the search %pattern%'|transchoice( total, {'%pattern%': pattern, '%total%' : total}) }}
+{{ 'Results %start%-%end% of %total%'|trans({ '%start%' : start, '%end%': start + persons|length, '%total%' : total } ) }}
+
{% if persons|length > 0 %}
@@ -55,4 +57,25 @@
{% endfor %}
+
+
+
{% endif %}
+
+{% if preview == false %}
+{{ chill_pagination(paginator) }}
+{% endif %}
+
diff --git a/Search/PersonSearch.php b/Search/PersonSearch.php
index eceabd4ab..e2678cb6c 100644
--- a/Search/PersonSearch.php
+++ b/Search/PersonSearch.php
@@ -22,20 +22,21 @@ namespace Chill\PersonBundle\Search;
use Chill\MainBundle\Search\AbstractSearch;
use Doctrine\ORM\EntityManagerInterface;
use Chill\PersonBundle\Entity\Person;
-use Symfony\Component\DependencyInjection\ContainerInterface;
+use Chill\MainBundle\Search\SearchInterface;
use Symfony\Component\DependencyInjection\ContainerAwareInterface;
use Symfony\Component\DependencyInjection\ContainerAwareTrait;
use Chill\MainBundle\Search\ParsingException;
use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorage;
use Chill\MainBundle\Security\Authorization\AuthorizationHelper;
use Symfony\Component\Security\Core\Role\Role;
+use Chill\MainBundle\Pagination\PaginatorFactory;
class PersonSearch extends AbstractSearch implements ContainerAwareInterface
{
use ContainerAwareTrait;
/**
- *
+ *
* @var EntityManagerInterface
*/
private $em;
@@ -48,17 +49,29 @@ class PersonSearch extends AbstractSearch implements ContainerAwareInterface
/**
*
- * @var AuthorizationHelper
+ * @var AuthorizationHelper
*/
private $helper;
+ /**
+ *
+ * @var PaginatorFactory
+ */
+ protected $paginatorFactory;
- public function __construct(EntityManagerInterface $em,
- TokenStorage $tokenStorage, AuthorizationHelper $helper)
+ const NAME = "person_regular";
+
+
+ public function __construct(
+ EntityManagerInterface $em,
+ TokenStorage $tokenStorage,
+ AuthorizationHelper $helper,
+ PaginatorFactory $paginatorFactory)
{
$this->em = $em;
$this->user = $tokenStorage->getToken()->getUser();
$this->helper = $helper;
+ $this->paginatorFactory = $paginatorFactory;
// throw an error if user is not a valid user
if (!$this->user instanceof \Chill\MainBundle\Entity\User) {
@@ -96,18 +109,24 @@ class PersonSearch extends AbstractSearch implements ContainerAwareInterface
*/
public function renderResult(array $terms, $start = 0, $limit = 50, array $options = array())
{
+ $total = $this->count($terms);
+ $paginator = $this->paginatorFactory->create($total);
- return $this->container->get('templating')->render('ChillPersonBundle:Person:list.html.twig',
- array(
+ return $this->container->get('templating')->render('ChillPersonBundle:Person:list.html.twig',
+ array(
'persons' => $this->search($terms, $start, $limit, $options),
'pattern' => $this->recomposePattern($terms, array('nationality',
'firstname', 'lastname', 'birthdate', 'gender'), $terms['_domain']),
- 'total' => $this->count($terms)
+ 'total' => $total,
+ 'start' => $start,
+ 'search_name' => self::NAME,
+ 'preview' => $options[SearchInterface::SEARCH_PREVIEW_OPTION],
+ 'paginator' => $paginator
));
}
/**
- *
+ *
* @param string $pattern
* @param int $start
* @param int $limit
@@ -143,11 +162,11 @@ class PersonSearch extends AbstractSearch implements ContainerAwareInterface
private $_cacheQuery = array();
/**
- *
+ *
* @param array $terms
* @return \Doctrine\ORM\QueryBuilder
*/
- protected function createQuery(array $terms)
+ protected function createQuery(array $terms)
{
//get from cache
$cacheKey = md5(serialize($terms));
@@ -219,7 +238,7 @@ class PersonSearch extends AbstractSearch implements ContainerAwareInterface
}
//restraint center for security
- $reachableCenters = $this->helper->getReachableCenters($this->user,
+ $reachableCenters = $this->helper->getReachableCenters($this->user,
new Role('CHILL_PERSON_SEE'));
$qb->andWhere($qb->expr()
->in('p.center', ':centers'))