From 55230343079a330987fcb60d2a1d856360146030 Mon Sep 17 00:00:00 2001 From: ghost Date: Mon, 13 Nov 2023 11:23:37 +0200 Subject: [PATCH] add search filters counter #35 --- src/Controller/SearchController.php | 87 ++++++++++++++++------- templates/default/search/module.html.twig | 55 ++++++++------ 2 files changed, 97 insertions(+), 45 deletions(-) diff --git a/src/Controller/SearchController.php b/src/Controller/SearchController.php index fbb029f..caa3848 100644 --- a/src/Controller/SearchController.php +++ b/src/Controller/SearchController.php @@ -9,6 +9,7 @@ use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpFoundation\Request; use App\Service\UserService; +use App\Service\TorrentService; use App\Service\ActivityService; class SearchController extends AbstractController @@ -16,6 +17,7 @@ class SearchController extends AbstractController public function module( Request $request, UserService $userService, + TorrentService $torrentService, ActivityService $activityService ): Response { @@ -23,8 +25,12 @@ class SearchController extends AbstractController $locales = []; $categories = []; + // Request + $query = $request->get('query') ? urldecode($request->get('query')) : ''; + $filter = $request->get('filter') ? true : false; + // Extended search - if ($request->get('filter')) + if ($filter) { // Init user $user = $this->initUser( @@ -33,26 +39,37 @@ class SearchController extends AbstractController $activityService ); + // Keywords + $keywords = explode(' ', $query); + // Locales foreach (explode('|', $this->getParameter('app.locales')) as $locale) { + if ($request->get('locales')) { - $locales[] = - [ - 'value' => $locale, - 'checked' => in_array($locale, (array) $request->get('locales')) ? true : false, - ]; + $checked = in_array($locale, (array) $request->get('locales')); } else { - $locales[] = - [ - 'value' => $locale, - 'checked' => in_array($locale, $user->getLocales()) ? true : false, - ]; + $checked = in_array($locale, $user->getLocales()); } + + $locales[] = + [ + 'value' => $locale, + 'checked' => $checked, + 'total' => $torrentService->findTorrentsTotal( + 0, + $keywords, + [$locale], + $request->get('categories') ? $request->get('categories') : $user->getCategories(), + $sensitive, + !$user->isModerator() ? true : null, + !$user->isModerator() ? true : null, + ) + ]; } // Categories @@ -60,30 +77,52 @@ class SearchController extends AbstractController { if ($request->get('categories')) { - $categories[] = - [ - 'value' => $category, - 'checked' => in_array($category, (array) $request->get('categories')) ? true : false, - ]; + $checked = in_array($category, (array) $request->get('categories')); } else { - $categories[] = - [ - 'value' => $category, - 'checked' => in_array($category, $user->getCategories()) ? true : false, - ]; + $checked = in_array($category, $user->getCategories()); } + + $categories[] = + [ + 'value' => $category, + 'checked' => $checked, + 'total' => $torrentService->findTorrentsTotal( + 0, + $keywords, + $request->get('locales') ? $request->get('locales') : $user->getLocales(), + [$category], + $sensitive, + !$user->isModerator() ? true : null, + !$user->isModerator() ? true : null, + ) + ]; } + + // Sensitive + $sensitive = + [ + 'checked' => $request->get('sensitive'), + 'total' => $torrentService->findTorrentsTotal( + 0, + $keywords, + $request->get('locales') ? $request->get('locales') : $user->getLocales(), + $request->get('categories') ? $request->get('categories') : $user->getCategories(), + true, + !$user->isModerator() ? true : null, + !$user->isModerator() ? true : null, + ) + ]; } return $this->render( 'default/search/module.html.twig', [ - 'query' => $request->get('query') ? urldecode($request->get('query')) : '', - 'filter' => $request->get('filter'), - 'sensitive' => $request->get('sensitive'), + 'query' => $query, + 'filter' => $filter, + 'sensitive' => $sensitive, 'locales' => $locales, 'categories' => $categories, ] diff --git a/templates/default/search/module.html.twig b/templates/default/search/module.html.twig index e968a6f..8b1b99b 100644 --- a/templates/default/search/module.html.twig +++ b/templates/default/search/module.html.twig @@ -9,16 +9,21 @@
{% for locale in locales | sort %} -
- {% if locale.checked %} - - {% else %} - - {% endif %} - -
+ {#{% if locale.total %}#} +
+ {% if locale.checked %} + + {% else %} + + {% endif %} + +
+ {#{% endif %}#} {% endfor %}
@@ -26,29 +31,37 @@
{% for category in categories | sort %} -
- {% if category.checked %} - - {% else %} - - {% endif %} - -
+ {#{% if category.total %}#} +
+ {% if category.checked %} + + {% else %} + + {% endif %} + +
+ {#{% endif %}#} {% endfor %}
{{ 'other' | trans | u.title }}
- {% if sensitive %} + {% if sensitive.checked %} {% else %} {% endif %}