Browse Source

Silently reset per_page within the range if not a json req, refs #425

Jordi Boggiano 10 years ago
parent
commit
3544fdeaea
1 changed files with 10 additions and 6 deletions
  1. 10 6
      src/Packagist/WebBundle/Controller/WebController.php

+ 10 - 6
src/Packagist/WebBundle/Controller/WebController.php

@@ -250,11 +250,15 @@ class WebController extends Controller
             $paginator = new Pagerfanta(new SolariumAdapter($solarium, $select));
 
             $perPage = $req->query->getInt('per_page', 15);
-            if($perPage <= 0 || $perPage > 100) {
-                return new JsonResponse(array(
-                    'status' => 'error',
-                    'message' => 'The optional packages per_page parameter must be an integer between 1 and 100 (default: 15)',
-                ), 400);
+            if ($perPage <= 0 || $perPage > 100) {
+                if ($req->getRequestFormat() === 'json') {
+                    return new JsonResponse(array(
+                        'status' => 'error',
+                        'message' => 'The optional packages per_page parameter must be an integer between 1 and 100 (default: 15)',
+                    ), 400);
+                }
+
+                $perPage = max(0, min(100, $perPage));
             }
             $paginator->setMaxPerPage($perPage);
 
@@ -299,7 +303,7 @@ class WebController extends Controller
                     if ($typeFilter) {
                         $params['type'] = $typeFilter;
                     }
-                    if($perPage !== 15) {
+                    if ($perPage !== 15) {
                         $params['per_page'] = $perPage;
                     }
                     $result['next'] = $this->generateUrl('search', $params, true);