diff --git a/src/Controller/SearchController.php b/src/Controller/SearchController.php index 54e7723..7daf962 100644 --- a/src/Controller/SearchController.php +++ b/src/Controller/SearchController.php @@ -45,15 +45,38 @@ class SearchController extends AbstractController case 'article': break; + case 'torrent': $torrents = []; foreach ($torrentService->searchTorrents($request->query->get('query')) as $torrent) { + // Apply locales filter + if ($lastTorrentLocales = $torrentService->findLastTorrentLocalesByTorrentIdApproved($torrent->getId())) + { + if (!count( + array_intersect( + $lastTorrentLocales->getValue(), + $user->getLocales() + ) + )) { + continue; + } + } + + // Apply sensitive filters + if ($lastTorrentSensitive = $torrentService->findLastTorrentSensitiveByTorrentIdApproved($torrent->getId())) + { + if ($user->isSensitive() && $lastTorrentSensitive->isValue()) + { + continue; + } + } + // Read file if (!$file = $torrentService->readTorrentFileByTorrentId($torrent->getId())) { - continue; // @TODO + continue; // @TODO exception } // Generate keywords @@ -134,7 +157,9 @@ class SearchController extends AbstractController ]); break; + default: + throw $this->createNotFoundException(); } } diff --git a/src/Service/TorrentService.php b/src/Service/TorrentService.php index c792793..76899d1 100644 --- a/src/Service/TorrentService.php +++ b/src/Service/TorrentService.php @@ -355,6 +355,24 @@ class TorrentService ); } + public function findLastTorrentLocalesByTorrentIdApproved( + int $torrentId, + bool $approved = true + ): ?TorrentLocales + { + return $this->entityManagerInterface + ->getRepository(TorrentLocales::class) + ->findOneBy( + [ + 'torrentId' => $torrentId, + 'approved' => $approved + ], + [ + 'id' => 'DESC' + ] + ); + } + public function findTorrentLocalesByTorrentId(int $torrentId): array { return $this->entityManagerInterface @@ -466,6 +484,24 @@ class TorrentService ); } + public function findLastTorrentSensitiveByTorrentIdApproved( + int $torrentId, + bool $approved = true + ): ?TorrentSensitive + { + return $this->entityManagerInterface + ->getRepository(TorrentSensitive::class) + ->findOneBy( + [ + 'torrentId' => $torrentId, + 'approved' => $approved, + ], + [ + 'id' => 'DESC' + ] + ); + } + public function findTorrentSensitiveByTorrentId(int $torrentId): array { return $this->entityManagerInterface