mirror of
https://github.com/OPSnet/Gazelle.git
synced 2026-01-16 18:04:34 -05:00
63 lines
1.8 KiB
PHP
63 lines
1.8 KiB
PHP
<?php
|
|
/** @phpstan-var \Gazelle\User $Viewer */
|
|
/** @phpstan-var \Twig\Environment $Twig */
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace Gazelle;
|
|
|
|
/**
|
|
* New transcode module:
|
|
* $_GET['filter'] determines which torrents should be shown and can be uploaded (default), snatched or seeding
|
|
* $_GET['target'] further filters which transcodes one would like to do and can be V0, 320 or all (default)
|
|
* Here, 'any' means that at least one of the formats V0 and/or 320 is missing and 'all' means that both of them are missing.
|
|
* 'v0', etc. mean that this specific format is missing (but others might be present).
|
|
*
|
|
* Furthermore, there's $_GET['userid'] which allows to see the page as a different user would see it (specifically relevant for uploaded/snatched/seeding).
|
|
*/
|
|
|
|
if (!isset($_GET['userid'])) {
|
|
$user = $Viewer;
|
|
} else {
|
|
if (!$Viewer->permitted('users_override_paranoia')) {
|
|
Error403::error();
|
|
}
|
|
$user = new Manager\User()->findById((int)$_GET['userid']);
|
|
if (is_null($user)) {
|
|
Error404::error();
|
|
}
|
|
}
|
|
|
|
$filter = $_GET['filter'] ?? 'uploaded';
|
|
$search = $_GET['search'] ?? null;
|
|
$target = $_GET['target'] ?? 'all';
|
|
$better = new Search\Transcode($user, new Manager\Torrent());
|
|
|
|
try {
|
|
$better->setMode(Enum\BetterFilter::{$filter});
|
|
} catch (\Error) {
|
|
Error400::error('Unknown filter.');
|
|
}
|
|
try {
|
|
$better->setEncoding(Enum\BetterEncoding::from($target));
|
|
} catch (\ValueError) {
|
|
Error400::error('Unknown target.');
|
|
}
|
|
if ($search) {
|
|
$better->setSearch($search);
|
|
}
|
|
|
|
$list = $better->list(200, 0);
|
|
shuffle($list);
|
|
$list = array_slice($list, 0, TORRENTS_PER_PAGE);
|
|
|
|
echo $Twig->render('better/search.twig', [
|
|
'filter' => $filter,
|
|
'list' => $list,
|
|
'search' => $search,
|
|
'source' => array_map(fn ($b) => $b['source'], $list),
|
|
'target' => $target,
|
|
'total' => $better->total(),
|
|
'viewer' => $Viewer,
|
|
]);
|