From 88971338fac02283b21f689d4555150483c2055b Mon Sep 17 00:00:00 2001 From: Bob den Otter Date: Sat, 13 Mar 2021 15:44:35 +0100 Subject: [PATCH] Don't break if listing pages have extra parameters --- src/Controller/Frontend/ListingController.php | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/Controller/Frontend/ListingController.php b/src/Controller/Frontend/ListingController.php index 7a14969cc..7b3f0c37c 100644 --- a/src/Controller/Frontend/ListingController.php +++ b/src/Controller/Frontend/ListingController.php @@ -50,7 +50,7 @@ public function listing(ContentRepository $contentRepository, string $contentTyp $page = (int) $this->getFromRequest('page', '1'); $amountPerPage = $contentType->get('listing_records'); $order = $this->getFromRequest('order', $contentType->get('order')); - $queryParams = $this->parseQueryParams($this->request); + $queryParams = $this->parseQueryParams($this->request, $contentType); $params = array_merge($queryParams, [ 'status' => 'published', @@ -82,7 +82,7 @@ public function listing(ContentRepository $contentRepository, string $contentTyp return $this->render($templates, $twigVars); } - private function parseQueryParams(Request $request): array + private function parseQueryParams(Request $request, ContentType $contentType): array { if ($this->config->get('general/query_search') === false) { return []; @@ -90,7 +90,9 @@ private function parseQueryParams(Request $request): array $queryParams = collect($request->query->all()); - return $queryParams->mapWithKeys(function ($value, $key) { + $allowedParams = array_merge($contentType['fields']->keys()->all(), $contentType['taxonomy']->all(), ['order']); + + return $queryParams->mapWithKeys(function ($value, $key) use ($allowedParams) { // Ensure we don't have arrays, if we get something like `title[]=…` passed in. if (is_array($value)) { $value = current($value); @@ -101,7 +103,7 @@ private function parseQueryParams(Request $request): array $value = '%' . $value . '%'; } - return [$key => $value]; + return in_array($key, $allowedParams, true) ? [$key => $value] : []; })->toArray(); }