mirror of
https://github.com/NNTmux/newznab-tmux.git
synced 2026-08-29 06:01:26 +00:00
187 lines
7.4 KiB
PHP
187 lines
7.4 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers;
|
|
|
|
use App\Models\Category;
|
|
use App\Models\UsenetGroup;
|
|
use Blacklight\Releases;
|
|
use Illuminate\Http\Request;
|
|
|
|
class SearchController extends BasePageController
|
|
{
|
|
/**
|
|
* @throws \Exception
|
|
*/
|
|
public function search(Request $request): void
|
|
{
|
|
$this->setPreferences();
|
|
$releases = new Releases();
|
|
|
|
$meta_title = 'Search Nzbs';
|
|
$meta_keywords = 'search,nzb,description,details';
|
|
$meta_description = 'Search for Nzbs';
|
|
|
|
$results = [];
|
|
|
|
$searchType = 'basic';
|
|
if ($request->has('search_type') && $request->input('search_type') === 'adv') {
|
|
$searchType = 'advanced';
|
|
}
|
|
|
|
$ordering = $releases->getBrowseOrdering();
|
|
$orderBy = ($request->has('ob') && \in_array($request->input('ob'), $ordering, false) ? $request->input('ob') : '');
|
|
$page = $request->has('page') && is_numeric($request->input('page')) ? $request->input('page') : 1;
|
|
$offset = ($page - 1) * config('nntmux.items_per_page');
|
|
|
|
$this->smarty->assign(
|
|
[
|
|
'subject' => '', 'search' => '', 'category' => [0], 'covgroup' => '',
|
|
]
|
|
);
|
|
|
|
if ($searchType === 'basic' && $request->missing('searchadvr') && ($request->has('id') || $request->has('subject') || $request->has('search'))) {
|
|
$searchString = [];
|
|
switch (true) {
|
|
case $request->filled('subject'):
|
|
$searchString['searchname'] = (string) $request->input('subject') ?? [];
|
|
$this->smarty->assign('subject', $searchString['searchname']);
|
|
break;
|
|
case $request->filled('id'):
|
|
$searchString['searchname'] = (string) $request->input('id') ?? [];
|
|
$this->smarty->assign('id', $searchString['searchname']);
|
|
break;
|
|
case $request->filled('search'):
|
|
$searchString['searchname'] = (string) $request->input('search') ?? [];
|
|
$this->smarty->assign('search', $searchString['searchname']);
|
|
break;
|
|
default:
|
|
$searchString['searchname'] = '';
|
|
}
|
|
|
|
$categoryID[] = -1;
|
|
if ($request->has('t')) {
|
|
$categoryID = explode(',', $request->input('t'));
|
|
}
|
|
foreach ($releases->getBrowseOrdering() as $orderType) {
|
|
$this->smarty->assign(
|
|
'orderby'.$orderType,
|
|
url('/search?id='.htmlentities($searchString['searchname'], ENT_QUOTES | ENT_HTML5).'&t='.implode(',', $categoryID).'&ob='.$orderType));
|
|
}
|
|
|
|
$rslt = $releases->search(
|
|
$searchString,
|
|
-1,
|
|
-1,
|
|
-1,
|
|
-1,
|
|
-1,
|
|
$offset,
|
|
config('nntmux.items_per_page'),
|
|
$orderBy,
|
|
-1,
|
|
$this->userdata->categoryexclusions ?? [],
|
|
'basic',
|
|
$categoryID);
|
|
|
|
$results = $this->paginate($rslt ?? [], $rslt[0]->_totalrows ?? 0, config('nntmux.items_per_page'), $page, $request->url(), $request->query());
|
|
|
|
$this->smarty->assign(
|
|
[
|
|
'lastvisit' => $this->userdata->lastlogin,
|
|
'category' => $categoryID,
|
|
]
|
|
);
|
|
}
|
|
|
|
$searchVars = [
|
|
'searchadvr' => '',
|
|
'searchadvsubject' => '',
|
|
'searchadvposter' => '',
|
|
'searchadvfilename' => '',
|
|
'searchadvdaysnew' => '',
|
|
'searchadvdaysold' => '',
|
|
'searchadvgroups' => '',
|
|
'searchadvcat' => '',
|
|
'searchadvsizefrom' => '',
|
|
'searchadvsizeto' => '',
|
|
'searchadvhasnfo' => '',
|
|
'searchadvhascomments' => '',
|
|
];
|
|
|
|
foreach ($searchVars as $searchVarKey => $searchVar) {
|
|
$searchVars[$searchVarKey] = ($request->has($searchVarKey) ? (string) $request->input($searchVarKey) : '');
|
|
}
|
|
|
|
$searchVars['selectedgroup'] = $searchVars['searchadvgroups'];
|
|
$searchVars['selectedcat'] = $searchVars['searchadvcat'];
|
|
$searchVars['selectedsizefrom'] = $searchVars['searchadvsizefrom'];
|
|
$searchVars['selectedsizeto'] = $searchVars['searchadvsizeto'];
|
|
foreach ($searchVars as $searchVarKey => $searchVar) {
|
|
$this->smarty->assign($searchVarKey, $searchVars[$searchVarKey]);
|
|
}
|
|
|
|
if ($searchType !== 'basic' && $request->missing('id') && $request->missing('subject') && $request->anyFilled(['searchadvr', 'searchadvsubject', 'searchadvfilename', 'searchadvposter'])) {
|
|
$orderByString = '';
|
|
foreach ($searchVars as $searchVarKey => $searchVar) {
|
|
$orderByString .= "&$searchVarKey=".htmlentities($searchVar, ENT_QUOTES | ENT_HTML5);
|
|
}
|
|
$orderByString = ltrim($orderByString, '&');
|
|
|
|
foreach ($ordering as $orderType) {
|
|
$this->smarty->assign(
|
|
'orderby'.$orderType,
|
|
url('/search?'.$orderByString.'&search_type=adv&ob='.$orderType
|
|
));
|
|
}
|
|
|
|
$searchArr = [
|
|
'searchname' => $searchVars['searchadvr'] === '' ? -1 : $searchVars['searchadvr'],
|
|
'name' => $searchVars['searchadvsubject'] === '' ? -1 : $searchVars['searchadvsubject'],
|
|
'fromname' => $searchVars['searchadvposter'] === '' ? -1 : $searchVars['searchadvposter'],
|
|
'filename' => $searchVars['searchadvfilename'] === '' ? -1 : $searchVars['searchadvfilename'],
|
|
];
|
|
|
|
$rslt = $releases->search(
|
|
$searchArr,
|
|
$searchVars['searchadvgroups'],
|
|
$searchVars['searchadvsizefrom'],
|
|
$searchVars['searchadvsizeto'],
|
|
($searchVars['searchadvdaysnew'] === '' ? -1 : $searchVars['searchadvdaysnew']),
|
|
($searchVars['searchadvdaysold'] === '' ? -1 : $searchVars['searchadvdaysold']),
|
|
$offset,
|
|
config('nntmux.items_per_page'),
|
|
$orderBy,
|
|
-1,
|
|
$this->userdata->categoryexclusions ?? [],
|
|
'advanced',
|
|
[$searchVars['searchadvcat'] === '' ? -1 : $searchVars['searchadvcat']]
|
|
);
|
|
|
|
$results = $this->paginate($rslt ?? [], $rslt[0]->_totalrows ?? 0, config('nntmux.items_per_page'), $page, $request->url(), $request->query());
|
|
|
|
$this->smarty->assign(
|
|
[
|
|
'lastvisit' => $this->userdata->lastlogin,
|
|
]
|
|
);
|
|
}
|
|
|
|
$this->smarty->assign(
|
|
[
|
|
'sizelist' => [
|
|
-1 => '--Select--', 1 => '100MB', 2 => '250MB', 3 => '500MB', 4 => '1GB', 5 => '2GB',
|
|
6 => '3GB', 7 => '4GB', 8 => '8GB', 9 => '16GB', 10 => '32GB', 11 => '64GB',
|
|
],
|
|
'results' => $results,
|
|
'sadvanced' => $searchType !== 'basic',
|
|
'grouplist' => UsenetGroup::getGroupsForSelect(),
|
|
'catlist' => Category::getForSelect(),
|
|
]
|
|
);
|
|
|
|
$content = $this->smarty->fetch('search.tpl');
|
|
$this->smarty->assign(compact('content', 'meta_title', 'meta_keywords', 'meta_description'));
|
|
$this->pagerender();
|
|
}
|
|
}
|