From 228366de575fb70d2535766b5966a2478313778c Mon Sep 17 00:00:00 2001 From: Jordi Boggiano Date: Mon, 28 Oct 2024 22:56:35 +0100 Subject: [PATCH] Fix pagination on extension page, fixes #1472, fixes #1469 --- src/Controller/ExtensionController.php | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/src/Controller/ExtensionController.php b/src/Controller/ExtensionController.php index 1bfd99b2d..9c3c1b135 100644 --- a/src/Controller/ExtensionController.php +++ b/src/Controller/ExtensionController.php @@ -16,6 +16,7 @@ use App\Model\DownloadManager; use App\Model\FavoriteManager; use Pagerfanta\Adapter\FixedAdapter; +use Pagerfanta\Doctrine\ORM\QueryAdapter; use Pagerfanta\Pagerfanta; use Predis\Client as RedisClient; use Symfony\Component\HttpFoundation\JsonResponse; @@ -30,16 +31,17 @@ class ExtensionController extends Controller #[Route(path: '/extensions.{_format}', name: 'browse_extensions', defaults: ['_format' => 'html'])] public function extensionsAction(Request $req, RedisClient $redis, FavoriteManager $favMgr, DownloadManager $dlMgr): Response { - $packages = $this->getEM()->getRepository(Package::class) + $packageQuery = $this->getEM() + ->getRepository(Package::class) ->createQueryBuilder('p') ->where("(p.type = 'php-ext' OR p.type = 'php-ext-zend')") ->andWhere('p.frozen IS NULL') - ->orderBy('p.name') - ->getQuery() - ->enableResultCache(900) - ->getResult(); + ->orderBy('p.name'); - $packages = new Pagerfanta(new FixedAdapter(count($packages), $packages)); + $packages = new Pagerfanta(new QueryAdapter($packageQuery, false)); + $packages->setNormalizeOutOfRangePages(true); + $packages->setMaxPerPage(15); + $packages->setCurrentPage(max(1, $req->query->getInt('page', 1))); $data = [ 'packages' => $packages,