From 624a7c6df1142048cc73770e2c7b7377acd30a9e Mon Sep 17 00:00:00 2001 From: =?utf8?q?Nicolas=20L=C5=93uillet?= Date: Tue, 12 Apr 2016 16:04:17 +0200 Subject: [PATCH] Improve pagination when user has lot of entries Fix #1905 * Usage of whiteoctober/WhiteOctoberPagerfantaBundle --- app/AppKernel.php | 11 +++++---- composer.json | 3 ++- .../CoreBundle/Controller/EntryController.php | 9 +------ .../CoreBundle/Resources/config/services.yml | 24 ++++++++++++------- .../public/themes/baggy/css/main.css | 14 +++++------ .../public/themes/material/css/main.css | 15 ++++++++++++ .../themes/baggy/Entry/entries.html.twig | 13 +++------- .../themes/material/Entry/entries.html.twig | 8 +------ .../Tests/Controller/EntryControllerTest.php | 3 +-- 9 files changed, 53 insertions(+), 47 deletions(-) diff --git a/app/AppKernel.php b/app/AppKernel.php index 30ac7463..04f86eb7 100644 --- a/app/AppKernel.php +++ b/app/AppKernel.php @@ -22,19 +22,22 @@ class AppKernel extends Kernel new Nelmio\ApiDocBundle\NelmioApiDocBundle(), new Nelmio\CorsBundle\NelmioCorsBundle(), new Liip\ThemeBundle\LiipThemeBundle(), - new Wallabag\CoreBundle\WallabagCoreBundle(), - new Wallabag\ApiBundle\WallabagApiBundle(), new Bazinga\Bundle\HateoasBundle\BazingaHateoasBundle(), new Lexik\Bundle\FormFilterBundle\LexikFormFilterBundle(), new FOS\OAuthServerBundle\FOSOAuthServerBundle(), - new Wallabag\UserBundle\WallabagUserBundle(), new Stof\DoctrineExtensionsBundle\StofDoctrineExtensionsBundle(), new Scheb\TwoFactorBundle\SchebTwoFactorBundle(), new KPhoen\RulerZBundle\KPhoenRulerZBundle(), - new Wallabag\ImportBundle\WallabagImportBundle(), new Doctrine\Bundle\MigrationsBundle\DoctrineMigrationsBundle(), new Craue\ConfigBundle\CraueConfigBundle(), new Lexik\Bundle\MaintenanceBundle\LexikMaintenanceBundle(), + new WhiteOctober\PagerfantaBundle\WhiteOctoberPagerfantaBundle(), + + // wallabag bundles + new Wallabag\CoreBundle\WallabagCoreBundle(), + new Wallabag\ApiBundle\WallabagApiBundle(), + new Wallabag\UserBundle\WallabagUserBundle(), + new Wallabag\ImportBundle\WallabagImportBundle(), new Wallabag\AnnotationBundle\WallabagAnnotationBundle(), ]; diff --git a/composer.json b/composer.json index 7dbc6772..594a2045 100644 --- a/composer.json +++ b/composer.json @@ -81,7 +81,8 @@ "craue/config-bundle": "~1.4", "mnapoli/piwik-twig-extension": "^1.0", "lexik/maintenance-bundle": "~2.1", - "ocramius/proxy-manager": "1.*" + "ocramius/proxy-manager": "1.*", + "white-october/pagerfanta-bundle": "^1.0" }, "require-dev": { "doctrine/doctrine-fixtures-bundle": "~2.2", diff --git a/src/Wallabag/CoreBundle/Controller/EntryController.php b/src/Wallabag/CoreBundle/Controller/EntryController.php index cba58858..e6077707 100644 --- a/src/Wallabag/CoreBundle/Controller/EntryController.php +++ b/src/Wallabag/CoreBundle/Controller/EntryController.php @@ -3,7 +3,6 @@ namespace Wallabag\CoreBundle\Controller; use Pagerfanta\Adapter\DoctrineORMAdapter; -use Pagerfanta\Exception\OutOfRangeCurrentPageException; use Pagerfanta\Pagerfanta; use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route; use Symfony\Bundle\FrameworkBundle\Controller\Controller; @@ -253,13 +252,7 @@ class EntryController extends Controller $entries = new Pagerfanta($pagerAdapter); $entries->setMaxPerPage($this->getUser()->getConfig()->getItemsPerPage()); - try { - $entries->setCurrentPage($page); - } catch (OutOfRangeCurrentPageException $e) { - if ($page > 1) { - return $this->redirect($this->generateUrl($type, array('page' => $entries->getNbPages())), 302); - } - } + $entries->setCurrentPage($page); return $this->render( 'WallabagCoreBundle:Entry:entries.html.twig', diff --git a/src/Wallabag/CoreBundle/Resources/config/services.yml b/src/Wallabag/CoreBundle/Resources/config/services.yml index a36f3392..11d4d59b 100644 --- a/src/Wallabag/CoreBundle/Resources/config/services.yml +++ b/src/Wallabag/CoreBundle/Resources/config/services.yml @@ -3,14 +3,14 @@ services: class: Wallabag\CoreBundle\Helper\DetectActiveTheme arguments: - "@security.token_storage" - - %wallabag_core.theme% + - "%wallabag_core.theme%" # custom form type wallabag_core.form.type.config: class: Wallabag\CoreBundle\Form\Type\ConfigType arguments: - - %liip_theme.themes% - - %wallabag_core.languages% + - "%liip_theme.themes%" + - "%wallabag_core.languages%" tags: - { name: form.type } @@ -32,7 +32,7 @@ services: wallabag_core.table_prefix_subscriber: class: Wallabag\CoreBundle\Subscriber\TablePrefixSubscriber arguments: - - %database_table_prefix% + - "%database_table_prefix%" tags: - { name: doctrine.event_subscriber } @@ -92,10 +92,10 @@ services: class: Wallabag\CoreBundle\EventListener\RegistrationConfirmedListener arguments: - "@doctrine.orm.entity_manager" - - %wallabag_core.theme% - - %wallabag_core.items_on_page% - - %wallabag_core.rss_limit% - - %wallabag_core.language% + - "%wallabag_core.theme%" + - "%wallabag_core.items_on_page%" + - "%wallabag_core.rss_limit%" + - "%wallabag_core.language%" tags: - { name: kernel.event_subscriber } @@ -114,3 +114,11 @@ services: class: Wallabag\CoreBundle\Operator\Doctrine\Matches tags: - { name: rulerz.operator, executor: rulerz.executor.doctrine, operator: matches, inline: true } + + pagerfanta.view.wallabag_view: + class: Pagerfanta\View\OptionableView + arguments: + - "@pagerfanta.view.twitter_bootstrap" + - { proximity: 1 } + public: false + tags: [{ name: pagerfanta.view, alias: wallabag_view }] diff --git a/src/Wallabag/CoreBundle/Resources/public/themes/baggy/css/main.css b/src/Wallabag/CoreBundle/Resources/public/themes/baggy/css/main.css index 1cb2ddf3..ba430cc4 100755 --- a/src/Wallabag/CoreBundle/Resources/public/themes/baggy/css/main.css +++ b/src/Wallabag/CoreBundle/Resources/public/themes/baggy/css/main.css @@ -512,7 +512,7 @@ img.preview { width: 50%; } -.pagination { +div.pagination ul { text-align: right; margin-bottom:50px; } @@ -523,25 +523,25 @@ img.preview { color: #999; } -.pagination > * { +div.pagination ul > * { display: inline-block; margin-left: 0.5em; } -.pagination a { +div.pagination ul a { color: #999; text-decoration: none; } - .pagination a:hover, .pagination a:focus { +div.pagination ul a:hover, div.pagination ul a:focus { text-decoration: underline; - } +} -.pagination .disabled { +div.pagination ul .disabled { display: none; } -.pagination .current { +div.pagination ul .current { height: 25px; padding: 4px 8px; border: 1px solid #d5d5d5; diff --git a/src/Wallabag/CoreBundle/Resources/public/themes/material/css/main.css b/src/Wallabag/CoreBundle/Resources/public/themes/material/css/main.css index 96c38822..fb0f5776 100755 --- a/src/Wallabag/CoreBundle/Resources/public/themes/material/css/main.css +++ b/src/Wallabag/CoreBundle/Resources/public/themes/material/css/main.css @@ -80,6 +80,14 @@ main, #content, .valign-wrapper { margin-bottom: 0; } +.pagination { + float: right; +} + +.pagination ul { + margin: 0 !important; +} + .pagination li { padding: 0; } @@ -90,6 +98,13 @@ main, #content, .valign-wrapper { display: block; } +.pagination li.active span { + padding: 0px 10px; + height: 30px; + display: block; + color: #fff; +} + .page-footer .footer-copyright p { display: inline; } diff --git a/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Entry/entries.html.twig b/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Entry/entries.html.twig index 29cb9584..8114c703 100644 --- a/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Entry/entries.html.twig +++ b/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Entry/entries.html.twig @@ -7,16 +7,9 @@
{{ 'entry.list.number_on_the_page'|transchoice(entries.count) }}
+ {{ 'entry.filters.title'|trans }} + {{ pagerfanta(entries, 'wallabag_view') }} +
{% endblock %} diff --git a/src/Wallabag/CoreBundle/Resources/views/themes/material/Entry/entries.html.twig b/src/Wallabag/CoreBundle/Resources/views/themes/material/Entry/entries.html.twig index 74c2623e..f637136c 100644 --- a/src/Wallabag/CoreBundle/Resources/views/themes/material/Entry/entries.html.twig +++ b/src/Wallabag/CoreBundle/Resources/views/themes/material/Entry/entries.html.twig @@ -21,13 +21,7 @@
{{ 'entry.list.number_on_the_page'|transchoice(entries.count) }}
- + {{ pagerfanta(entries, 'wallabag_view') }} {% endblock %}
diff --git a/src/Wallabag/CoreBundle/Tests/Controller/EntryControllerTest.php b/src/Wallabag/CoreBundle/Tests/Controller/EntryControllerTest.php index 46fbaf91..f15aaab1 100644 --- a/src/Wallabag/CoreBundle/Tests/Controller/EntryControllerTest.php +++ b/src/Wallabag/CoreBundle/Tests/Controller/EntryControllerTest.php @@ -225,8 +225,7 @@ class EntryControllerTest extends WallabagCoreTestCase $client->request('GET', '/all/list/900'); - $this->assertEquals(302, $client->getResponse()->getStatusCode()); - $this->assertEquals('/all/list', $client->getResponse()->getTargetUrl()); + $this->assertEquals(404, $client->getResponse()->getStatusCode()); } /** -- 2.41.0