diff options
author | Thomas Citharel <tcit@tcit.fr> | 2017-04-27 16:23:54 +0200 |
---|---|---|
committer | Nicolas LÅ“uillet <nicolas@loeuillet.org> | 2017-05-02 15:28:39 +0200 |
commit | 50cfd8108b8e318fd28564d2e9d30943ab12aac0 (patch) | |
tree | e5b5da24c787d2278e8c2771f00686311be11504 | |
parent | c37515f880bd05b86e3e848cc184018295ec1920 (diff) | |
download | wallabag-50cfd8108b8e318fd28564d2e9d30943ab12aac0.tar.gz wallabag-50cfd8108b8e318fd28564d2e9d30943ab12aac0.tar.zst wallabag-50cfd8108b8e318fd28564d2e9d30943ab12aac0.zip |
Add pagination
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
3 files changed, 45 insertions, 12 deletions
diff --git a/src/Wallabag/UserBundle/Controller/ManageController.php b/src/Wallabag/UserBundle/Controller/ManageController.php index f0e3d4de..86fcd431 100644 --- a/src/Wallabag/UserBundle/Controller/ManageController.php +++ b/src/Wallabag/UserBundle/Controller/ManageController.php | |||
@@ -4,12 +4,14 @@ namespace Wallabag\UserBundle\Controller; | |||
4 | 4 | ||
5 | use FOS\UserBundle\Event\UserEvent; | 5 | use FOS\UserBundle\Event\UserEvent; |
6 | use FOS\UserBundle\FOSUserEvents; | 6 | use FOS\UserBundle\FOSUserEvents; |
7 | use Pagerfanta\Adapter\DoctrineORMAdapter; | ||
8 | use Pagerfanta\Exception\OutOfRangeCurrentPageException; | ||
9 | use Pagerfanta\Pagerfanta; | ||
7 | use Symfony\Component\HttpFoundation\Request; | 10 | use Symfony\Component\HttpFoundation\Request; |
8 | use Symfony\Bundle\FrameworkBundle\Controller\Controller; | 11 | use Symfony\Bundle\FrameworkBundle\Controller\Controller; |
9 | use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method; | 12 | use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method; |
10 | use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route; | 13 | use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route; |
11 | use Wallabag\UserBundle\Entity\User; | 14 | use Wallabag\UserBundle\Entity\User; |
12 | use Wallabag\CoreBundle\Entity\Config; | ||
13 | use Wallabag\UserBundle\Form\SearchUserType; | 15 | use Wallabag\UserBundle\Form\SearchUserType; |
14 | 16 | ||
15 | /** | 17 | /** |
@@ -20,17 +22,32 @@ class ManageController extends Controller | |||
20 | /** | 22 | /** |
21 | * Lists all User entities. | 23 | * Lists all User entities. |
22 | * | 24 | * |
23 | * @Route("/", name="user_index") | 25 | * @Route("/index/{page}", name="user_index") |
24 | * @Method("GET") | 26 | * @Method("GET") |
27 | * | ||
28 | * @param int $page | ||
29 | * | ||
30 | * @return \Symfony\Component\HttpFoundation\RedirectResponse|\Symfony\Component\HttpFoundation\Response | ||
25 | */ | 31 | */ |
26 | public function indexAction() | 32 | public function indexAction($page = 1) |
27 | { | 33 | { |
28 | $em = $this->getDoctrine()->getManager(); | 34 | $em = $this->getDoctrine()->getManager(); |
29 | 35 | ||
30 | $users = $em->getRepository('WallabagUserBundle:User')->findAll(); | 36 | $qb = $em->getRepository('WallabagUserBundle:User')->createQueryBuilder('u'); |
37 | $pagerAdapter = new DoctrineORMAdapter($qb->getQuery(), true, false); | ||
38 | $pagerFanta = new Pagerfanta($pagerAdapter); | ||
39 | $pagerFanta->setMaxPerPage(50); | ||
40 | |||
41 | try { | ||
42 | $pagerFanta->setCurrentPage($page); | ||
43 | } catch (OutOfRangeCurrentPageException $e) { | ||
44 | if ($page > 1) { | ||
45 | return $this->redirect($this->generateUrl('user_index', ['page' => $pagerFanta->getNbPages()]), 302); | ||
46 | } | ||
47 | } | ||
31 | 48 | ||
32 | return $this->render('WallabagUserBundle:Manage:index.html.twig', array( | 49 | return $this->render('WallabagUserBundle:Manage:index.html.twig', array( |
33 | 'users' => $users, | 50 | 'users' => $pagerFanta, |
34 | )); | 51 | )); |
35 | } | 52 | } |
36 | 53 | ||
@@ -176,10 +193,22 @@ class ManageController extends Controller | |||
176 | 193 | ||
177 | $searchTerm = (isset($request->get('search_user')['term']) ? $request->get('search_user')['term'] : ''); | 194 | $searchTerm = (isset($request->get('search_user')['term']) ? $request->get('search_user')['term'] : ''); |
178 | 195 | ||
179 | $users = $em->getRepository('WallabagUserBundle:User')->getUsersForSearch($searchTerm); | 196 | $qb = $em->getRepository('WallabagUserBundle:User')->getQueryBuilderForSearch($searchTerm); |
197 | |||
198 | $pagerAdapter = new DoctrineORMAdapter($qb->getQuery(), true, false); | ||
199 | $pagerFanta = new Pagerfanta($pagerAdapter); | ||
200 | $pagerFanta->setMaxPerPage(50); | ||
201 | |||
202 | try { | ||
203 | $pagerFanta->setCurrentPage($page); | ||
204 | } catch (OutOfRangeCurrentPageException $e) { | ||
205 | if ($page > 1) { | ||
206 | return $this->redirect($this->generateUrl('user_index', ['page' => $pagerFanta->getNbPages()]), 302); | ||
207 | } | ||
208 | } | ||
180 | 209 | ||
181 | return $this->render('WallabagUserBundle:Manage:index.html.twig', array( | 210 | return $this->render('WallabagUserBundle:Manage:index.html.twig', array( |
182 | 'users' => $users, | 211 | 'users' => $pagerFanta, |
183 | )); | 212 | )); |
184 | } | 213 | } |
185 | 214 | ||
diff --git a/src/Wallabag/UserBundle/Repository/UserRepository.php b/src/Wallabag/UserBundle/Repository/UserRepository.php index 66bbab39..6adbe329 100644 --- a/src/Wallabag/UserBundle/Repository/UserRepository.php +++ b/src/Wallabag/UserBundle/Repository/UserRepository.php | |||
@@ -60,11 +60,9 @@ class UserRepository extends EntityRepository | |||
60 | * | 60 | * |
61 | * @return QueryBuilder | 61 | * @return QueryBuilder |
62 | */ | 62 | */ |
63 | public function getUsersForSearch($term) | 63 | public function getQueryBuilderForSearch($term) |
64 | { | 64 | { |
65 | return $this->createQueryBuilder('u') | 65 | return $this->createQueryBuilder('u') |
66 | ->andWhere('lower(u.username) LIKE lower(:term) OR lower(u.email) LIKE lower(:term) OR lower(u.name) LIKE lower(:term)')->setParameter('term', '%'.$term.'%') | 66 | ->andWhere('lower(u.username) LIKE lower(:term) OR lower(u.email) LIKE lower(:term) OR lower(u.name) LIKE lower(:term)')->setParameter('term', '%'.$term.'%'); |
67 | ->getQuery() | ||
68 | ->getResult(); | ||
69 | } | 67 | } |
70 | } | 68 | } |
diff --git a/src/Wallabag/UserBundle/Resources/views/Manage/index.html.twig b/src/Wallabag/UserBundle/Resources/views/Manage/index.html.twig index abc02852..7a76f157 100644 --- a/src/Wallabag/UserBundle/Resources/views/Manage/index.html.twig +++ b/src/Wallabag/UserBundle/Resources/views/Manage/index.html.twig | |||
@@ -7,6 +7,9 @@ | |||
7 | <div class="row"> | 7 | <div class="row"> |
8 | <div class="col s12"> | 8 | <div class="col s12"> |
9 | <div class="card-panel"> | 9 | <div class="card-panel"> |
10 | {% if users.getNbPages > 1 %} | ||
11 | {{ pagerfanta(users, 'twitter_bootstrap_translated', {'proximity': 1}) }} | ||
12 | {% endif %} | ||
10 | <div class="row"> | 13 | <div class="row"> |
11 | <div class="col s6"> | 14 | <div class="col s6"> |
12 | <p class="help">{{ 'user.description'|trans|raw }}</p> | 15 | <p class="help">{{ 'user.description'|trans|raw }}</p> |
@@ -22,7 +25,7 @@ | |||
22 | <tr> | 25 | <tr> |
23 | <th>{{ 'user.form.username_label'|trans }}</th> | 26 | <th>{{ 'user.form.username_label'|trans }}</th> |
24 | <th>{{ 'user.form.email_label'|trans }}</th> | 27 | <th>{{ 'user.form.email_label'|trans }}</th> |
25 | <th>{{ 'user.form2017-03-10 16:51:07.last_login_label'|trans }}</th> | 28 | <th>{{ 'user.form.last_login_label'|trans }}</th> |
26 | <th>{{ 'user.list.actions'|trans }}</th> | 29 | <th>{{ 'user.list.actions'|trans }}</th> |
27 | </tr> | 30 | </tr> |
28 | </thead> | 31 | </thead> |
@@ -43,6 +46,9 @@ | |||
43 | <p> | 46 | <p> |
44 | <a href="{{ path('user_new') }}" class="waves-effect waves-light btn">{{ 'user.list.create_new_one'|trans }}</a> | 47 | <a href="{{ path('user_new') }}" class="waves-effect waves-light btn">{{ 'user.list.create_new_one'|trans }}</a> |
45 | </p> | 48 | </p> |
49 | {% if users.getNbPages > 1 %} | ||
50 | {{ pagerfanta(users, 'twitter_bootstrap_translated', {'proximity': 1}) }} | ||
51 | {% endif %} | ||
46 | </div> | 52 | </div> |
47 | </div> | 53 | </div> |
48 | </div> | 54 | </div> |