Update search

This commit is contained in:
DariusIII
2018-04-12 14:04:16 +02:00
parent f149508691
commit 3e3d8052a5
48 changed files with 191 additions and 427 deletions
+12 -5
View File
@@ -52,9 +52,11 @@ class ReleaseSearch
* @param array $options Array where keys are the column name, and value is the search string.
* @param bool $forceLike Force a "like" search on the column.
*
* @return string
* @param null $query
* @param bool $builder
*
*/
public function getSearchSQL(array $options = [], $forceLike = false): string
public function getSearchSQL(array $options = [], $forceLike = false, $query = null, $builder = false)
{
$this->searchOptions = $options;
@@ -62,7 +64,7 @@ class ReleaseSearch
return $this->likeSQL();
}
return $this->sphinxSQL();
return $this->sphinxSQL($query, $builder);
}
/**
@@ -104,11 +106,12 @@ class ReleaseSearch
}
/**
* Create SQL sub-query using sphinx full text search.
* @param null $query
* @param bool $builder
*
* @return string
*/
private function sphinxSQL(): string
private function sphinxSQL($query = null, $builder = false)
{
$searchQuery = $fullReturn = '';
@@ -131,6 +134,10 @@ class ReleaseSearch
}
}
if ($searchQuery !== '') {
if ($builder === true) {
return $query->whereRaw("(rse.query = '@@relaxed ?')", [trim($searchQuery).$this->sphinxQueryOpt]);
}
$fullReturn = sprintf("AND (rse.query = '@@relaxed %s')", trim($searchQuery).$this->sphinxQueryOpt);
} else {
$fullReturn = $this->likeSQL();
+98 -138
View File
@@ -66,44 +66,6 @@ class Releases
$this->showPasswords = self::showPasswords();
}
/**
* Used for pager on browse page.
*
* @param array $cat
* @param int $maxAge
* @param array $excludedCats
* @param string|int $groupName
*
* @return int
*/
public function getBrowseCount($cat, $maxAge = -1, array $excludedCats = [], $groupName = ''): int
{
$sql = sprintf(
'SELECT COUNT(r.id) AS count
FROM releases r
%s
WHERE r.nzbstatus = %d
AND r.passwordstatus %s
%s %s %s %s',
($groupName !== -1 ? 'LEFT JOIN groups g ON g.id = r.groups_id' : ''),
NZB::NZB_ADDED,
$this->showPasswords,
($groupName !== -1 ? sprintf(' AND g.name = %s', $this->pdo->escapeString($groupName)) : ''),
Category::getCategorySearch($cat),
($maxAge > 0 ? (' AND r.postdate > NOW() - INTERVAL '.$maxAge.' DAY ') : ''),
(\count($excludedCats) ? (' AND r.categories_id NOT IN ('.implode(',', $excludedCats).')') : '')
);
$count = Cache::get(md5($sql));
if ($count !== null) {
return $count;
}
$count = $this->pdo->query($sql);
$expiresAt = Carbon::now()->addSeconds(config('nntmux.cache_expiry_short'));
Cache::put(md5($sql), $count[0]['count'], $expiresAt);
return $count[0]['count'] ?? 0;
}
/**
* @param array $cat
* @param $orderBy
@@ -119,25 +81,25 @@ class Releases
$orderBy = $this->getBrowseOrder($orderBy);
$qry = Release::query()
->fromSub(function ($query) use ($cat, $maxAge, $excludedCats, $groupName, $minSize, $orderBy) {
$query->select(['releases.*', 'g.name as group_name'])
->from('releases')
->where('releases.nzbstatus', NZB::NZB_ADDED);
$query->select(['r.*', 'g.name as group_name'])
->from('releases as r')
->where('r.nzbstatus', NZB::NZB_ADDED);
self::showPasswords($query, true);
if ($cat !== [-1]) {
Category::getCategorySearch($cat, $query, true);
}
$query->leftJoin('groups as g', 'g.id', '=', 'releases.groups_id');
$query->leftJoin('groups as g', 'g.id', '=', 'r.groups_id');
if ($maxAge > 0) {
$query->where('releases.postdate', '>', Carbon::now()->subDays($maxAge));
$query->where('r.postdate', '>', Carbon::now()->subDays($maxAge));
}
if (\count($excludedCats) > 0) {
$query->whereNotIn('releases.categories_id', $excludedCats);
$query->whereNotIn('r.categories_id', $excludedCats);
}
if ($groupName !== -1) {
$query->where('g.name', $groupName);
}
if ($minSize > 0) {
$query->where('releases.size', '>=', $minSize);
$query->where('r.size', '>=', $minSize);
}
$query->orderBy($orderBy[0], $orderBy[1]);
}, 'r')
@@ -181,26 +143,26 @@ class Releases
return '='.self::PASSWD_NONE;
}
return $query->where('releases.passwordstatus', self::PASSWD_NONE);
return $query->where('r.passwordstatus', self::PASSWD_NONE);
case 1: // Show releases with no password or a potential password (Show unprocessed releases).
if ($builder === false) {
return '<= '.self::PASSWD_POTENTIAL;
}
return $query->where('releases.passwordstatus', '=<', self::PASSWD_POTENTIAL);
return $query->where('r.passwordstatus', '=<', self::PASSWD_POTENTIAL);
case 2: // Hide releases with a password or a potential password (Show unprocessed releases).
if ($builder === false) {
return '<= '.self::PASSWD_NONE;
}
return $query->where('releases.passwordstatus', '=<', self::PASSWD_NONE);
return $query->where('r.passwordstatus', '=<', self::PASSWD_NONE);
case 10: // Shows everything.
default:
if ($builder === false) {
return '<= '.self::PASSWD_RAR;
}
return $query->where('releases.passwordstatus', '=<', self::PASSWD_RAR);
return $query->where('r.passwordstatus', '=<', self::PASSWD_RAR);
}
}
@@ -624,29 +586,29 @@ class Releases
/**
* Function for searching on the site (by subject, searchname or advanced).
*
* @param string|int $searchName
* @param string|int $usenetName
* @param string|int $posterName
* @param string|int $fileName
* @param string|int $groupName
* @param int $sizeFrom
* @param int $sizeTo
* @param int $hasNfo
* @param int $hasComments
* @param int $daysNew
* @param int $daysOld
* @param int $offset
* @param int $limit
* @param string|array $orderBy
* @param int $maxAge
* @param int|array $excludedCats
* @param string $type
* @param array $cat
*
* @param int $minSize
* @return array
*
* @param $searchName
* @param $usenetName
* @param $posterName
* @param $fileName
* @param $groupName
* @param $sizeFrom
* @param $sizeTo
* @param $hasNfo
* @param $hasComments
* @param $daysNew
* @param $daysOld
* @param string|array $orderBy
* @param int $maxAge
* @param array $excludedCats
* @param string $type
* @param array $cat
* @param int $minSize
*
* @return \Illuminate\Contracts\Pagination\LengthAwarePaginator|mixed
*/
public function search($searchName, $usenetName, $posterName, $fileName, $groupName, $sizeFrom, $sizeTo, $hasNfo, $hasComments, $daysNew, $daysOld, $offset = 0, $limit = 1000, $orderBy = '', $maxAge = -1, array $excludedCats = [], $type = 'basic', array $cat = [-1], $minSize = 0): array
public function search($searchName, $usenetName, $posterName, $fileName, $groupName, $sizeFrom, $sizeTo, $hasNfo, $hasComments, $daysNew, $daysOld, $orderBy = '', $maxAge = -1, array $excludedCats = [], $type = 'basic', array $cat = [-1], $minSize = 0)
{
$sizeRange = [
1 => 1,
@@ -684,82 +646,82 @@ class Releases
$searchOptions['filename'] = $fileName;
}
$catQuery = '';
if ($type === 'basic') {
$catQuery = Category::getCategorySearch($cat);
} elseif ($type === 'advanced' && (int) $cat[0] !== -1) {
$catQuery = sprintf('AND r.categories_id = %d', $cat[0]);
}
$sql = Release::query()
->fromSub(function ($query) use ($maxAge, $groupName, $sizeFrom, $sizeRange, $sizeTo, $hasNfo, $hasComments, $cat, $excludedCats, $type, $daysNew, $daysOld, $searchOptions, $minSize) {
$query->select(['r.*', 'r.categories_id AS category_ids', 'df.failed as failed', 'g.name as group_name', 'rn.releases_id as nfoid', 're.releases_id as reid', 'cp.id as categoryparentid', 'v.tvdb', 'v.trakt', 'v.tvrage', 'v.tvmaze', 'v.imdb', 'v.tmdb', 'tve.firstaired'])
->selectRaw("CONCAT(cp.title, ' > ', c.title) AS category_name")
->from('releases as r')
->leftJoin('video_data as re','re.releases_id', '=', 'r.id')
->leftJoin('videos as v', 'v.id', '=', 'r.videos_id')
->leftJoin('tv_episodes as tve', 'tve.id', '=', 'r.tv_episodes_id')
->leftJoin('release_nfos as rn', 'rn.releases_id', '=', 'r.id')
->leftJoin('groups as g', 'g.id', '=', 'r.groups_id')
->leftJoin('categories as c', 'c.id', '=', 'r.categories_id')
->leftJoin('categories as cp', 'cp.id', '=', 'c.parentid')
->leftJoin('dnzb_failures as df', 'df.release_id', '=', 'r.id')
->join('releases_se as rse', 'rse.id', '=', 'r.id');
//self::showPasswords($query, true);
$query->where('r.nzbstatus', '=', NZB::NZB_ADDED);
$whereSql = sprintf(
'%s WHERE r.passwordstatus %s AND r.nzbstatus = %d %s %s %s %s %s %s %s %s %s %s %s %s',
$this->releaseSearch->getFullTextJoinString(),
$this->showPasswords,
NZB::NZB_ADDED,
($maxAge > 0 ? sprintf(' AND r.postdate > (NOW() - INTERVAL %d DAY) ', $maxAge) : ''),
((int) $groupName !== -1 ? sprintf(' AND r.groups_id = %d ', Group::getIDByName($groupName)) : ''),
(array_key_exists($sizeFrom, $sizeRange) ? ' AND r.size > '.(string) (104857600 * (int) $sizeRange[$sizeFrom]).' ' : ''),
(array_key_exists($sizeTo, $sizeRange) ? ' AND r.size < '.(string) (104857600 * (int) $sizeRange[$sizeTo]).' ' : ''),
((int) $hasNfo !== 0 ? ' AND r.nfostatus = 1 ' : ''),
((int) $hasComments !== 0 ? ' AND r.comments > 0 ' : ''),
$catQuery,
((int) $daysNew !== -1 ? sprintf(' AND r.postdate < (NOW() - INTERVAL %d DAY) ', $daysNew) : ''),
((int) $daysOld !== -1 ? sprintf(' AND r.postdate > (NOW() - INTERVAL %d DAY) ', $daysOld) : ''),
(\count($excludedCats) > 0 ? ' AND r.categories_id NOT IN ('.implode(',', $excludedCats).')' : ''),
(\count($searchOptions) > 0 ? $this->releaseSearch->getSearchSQL($searchOptions) : ''),
($minSize > 0 ? sprintf('AND r.size >= %d', $minSize) : '')
);
if ($maxAge > 0) {
$query->where('r.postdate', '>', Carbon::now()->subDays($maxAge));
}
$baseSql = sprintf(
"SELECT r.*,
CONCAT(cp.title, ' > ', c.title) AS category_name,
%s AS category_ids,
df.failed AS failed,
g.name AS group_name,
rn.releases_id AS nfoid,
re.releases_id AS reid,
cp.id AS categoryparentid,
v.tvdb, v.trakt, v.tvrage, v.tvmaze, v.imdb, v.tmdb,
tve.firstaired
FROM releases r
LEFT OUTER JOIN video_data re ON re.releases_id = r.id
LEFT OUTER JOIN videos v ON r.videos_id = v.id
LEFT OUTER JOIN tv_episodes tve ON r.tv_episodes_id = tve.id
LEFT OUTER JOIN release_nfos rn ON rn.releases_id = r.id
LEFT JOIN groups g ON g.id = r.groups_id
LEFT JOIN categories c ON c.id = r.categories_id
LEFT JOIN categories cp ON cp.id = c.parentid
LEFT OUTER JOIN dnzb_failures df ON df.release_id = r.id
%s",
$this->getConcatenatedCategoryIDs(),
$whereSql
);
if ((int) $groupName !== -1) {
$query->where('r.groups_id', '=', Group::getIDByName($groupName));
}
$sql = sprintf(
'SELECT * FROM (
%s
) r
ORDER BY r.%s %s
LIMIT %d OFFSET %d',
$baseSql,
$orderBy[0],
$orderBy[1],
$limit,
$offset
);
if (array_key_exists($sizeFrom, $sizeRange)) {
$query->where('r.size', '<', (string) (104857600 * (int) $sizeRange[$sizeTo]));
}
$releases = Cache::get(md5($sql));
if ((int) $hasNfo !== 0) {
$query->where('r.nfostatus', '=', 1);
}
if ((int) $hasComments !== 0) {
$query->where('r.comments', '>', 0);
}
if ($type === 'basic') {
Category::getCategorySearch($cat, $query, true);
} elseif ($type === 'advanced' && (int) $cat[0] !== -1) {
$query->where('r.categories_id', '=', $cat[0]);
}
if ((int) $daysNew !== -1) {
$query->where('r.postdate', '<', Carbon::now()->subDays($daysNew));
}
if ((int) $daysOld !== -1) {
$query->where('r.postdate', '>', Carbon::now()->subDays($daysOld));
}
if (\count($excludedCats) > 0) {
$query->whereNotIn('r.categories_id', $excludedCats);
}
if (\count($searchOptions) > 0) {
$this->releaseSearch->getSearchSQL($searchOptions, false, $query, true);
}
if ($minSize > 0) {
$query->where('r.size', '>=', $minSize);
}
}, 'r')
->orderBy('r.'.$orderBy[0], $orderBy[1]);
$releases = Cache::get(md5($searchName.$usenetName.$posterName.$fileName.$groupName.$sizeFrom.$sizeTo.$hasNfo.$hasComments.$daysNew.$daysOld.implode('.', $orderBy).$maxAge. implode('.',$excludedCats).$type.implode('.',$cat).$minSize));
if ($releases !== null) {
return $releases;
}
$releases = $this->pdo->query($sql);
if (! empty($releases) && \count($releases)) {
$releases[0]['_totalrows'] = $this->getPagerCount($baseSql);
}
$releases = $sql->paginate(config('nntmux.items_per_page'));
$expiresAt = Carbon::now()->addSeconds(config('nntmux.cache_expiry_medium'));
Cache::put(md5($sql), $releases, $expiresAt);
Cache::put(md5($searchName.$usenetName.$posterName.$fileName.$groupName.$sizeFrom.$sizeTo.$hasNfo.$hasComments.$daysNew.$daysOld.implode('.', $orderBy).$maxAge. implode('.',$excludedCats).$type.implode('.',$cat).$minSize), $releases, $expiresAt);
return $releases;
}
@@ -1110,8 +1072,6 @@ class Releases
0,
-1,
-1,
0,
$limit,
'',
-1,
$excludedCats,
+1
View File
@@ -1,4 +1,5 @@
2018-04-12 DariusIII
* Chg: Update search
* Fix: Fix missing = in search query
* Chg: Update headermenu search
* Chg: Update search
+2 -3
View File
@@ -124,7 +124,6 @@ class ApiController extends BasePageController
$groupName = $api->group();
UserRequest::addApiRequest($uid, $request->getRequestUri());
$categoryID = $api->categoryID();
$limit = $api->limit();
if ($request->has('q')) {
$relData = $releases->search(
@@ -139,8 +138,6 @@ class ApiController extends BasePageController
0,
-1,
-1,
$offset,
$limit,
'',
$maxAge,
$catExclusions,
@@ -149,7 +146,9 @@ class ApiController extends BasePageController
$minSize
);
} else {
$page = $request->has('page') ? $request->input('page') : 1;
$relData = $releases->getBrowseRange(
$page,
$categoryID,
'',
$maxAge,
+1 -1
View File
@@ -94,7 +94,7 @@ class BasePageController extends Controller
*/
public function __construct(Request $request)
{
$this->middleware('auth')->except('api', 'rss', 'contact', 'showContactForm', 'callback', 'search');
$this->middleware('auth')->except('api', 'rss', 'contact', 'showContactForm', 'callback');
// Buffer settings/DB connection.
$this->settings = new Settings();
$this->pdo = new DB();
+9 -20
View File
@@ -17,6 +17,7 @@ class SearchController extends BasePageController
public function search(Request $request)
{
$this->setPrefs();
dump($request->all());
$releases = new Releases(['Groups' => null, 'Settings' => $this->settings]);
$meta_title = 'Search Nzbs';
@@ -32,12 +33,10 @@ class SearchController extends BasePageController
$ordering = $releases->getBrowseOrdering();
$orderBy = ($request->has('ob') && \in_array($request->input('ob'), $ordering, false) ? $request->input('ob') : '');
$offset = ($request->has('offset') && ctype_digit($request->input('offset'))) ? $request->input('offset') : 0;
$this->smarty->assign(
[
'subject' => '', 'search' => '', 'category' => [0], 'pagertotalitems' => 0,
'pageritemsperpage' => 1, 'pageroffset' => 1, 'covgroup' => '',
'subject' => '', 'search' => '', 'category' => [0], 'covgroup' => '',
]
);
@@ -61,7 +60,7 @@ class SearchController extends BasePageController
foreach ($releases->getBrowseOrdering() as $orderType) {
$this->smarty->assign(
'orderby'.$orderType,
WWW_TOP.'/search/'.htmlentities($searchString, ENT_QUOTES | ENT_HTML5).'?t='.implode(',', $categoryID).'&amp;ob='.$orderType
WWW_TOP.'/search?id='.htmlentities($searchString, ENT_QUOTES | ENT_HTML5).'?t='.implode(',', $categoryID).'&amp;ob='.$orderType
);
}
@@ -77,8 +76,6 @@ class SearchController extends BasePageController
0,
-1,
-1,
$offset,
config('nntmux.items_per_page'),
$orderBy,
-1,
$this->userdata['categoryexclusions'],
@@ -86,15 +83,12 @@ class SearchController extends BasePageController
$categoryID
);
dump($results->total());
$this->smarty->assign(
[
'lastvisit' => $this->userdata['lastlogin'],
'pagertotalitems' => \count($results) > 0 ? $results[0]['_totalrows'] : 0,
'pageroffset' => $offset,
'pageritemsperpage' => config('nntmux.items_per_page'),
'pagerquerysuffix' => '#results',
'pagerquerybase' => WWW_TOP.'/search/'.htmlentities($searchString, ENT_QUOTES | ENT_HTML5).'?t='.
implode(',', $categoryID).'&amp;ob='.$orderBy.'&amp;offset=',
'category' => $categoryID,
]
);
@@ -145,8 +139,6 @@ class SearchController extends BasePageController
$searchVars['searchadvhascomments'],
($searchVars['searchadvdaysnew'] === '' ? -1 : $searchVars['searchadvdaysnew']),
($searchVars['searchadvdaysold'] === '' ? -1 : $searchVars['searchadvdaysold']),
$offset,
config('nntmux.items_per_page'),
$orderBy,
-1,
$this->userdata['categoryexclusions'],
@@ -154,14 +146,12 @@ class SearchController extends BasePageController
[$searchVars['searchadvcat'] === '' ? -1 : $searchVars['searchadvcat']]
);
dump($results->total());
$this->smarty->assign(
[
'lastvisit' => $this->userdata['lastlogin'],
'pagertotalitems' => \count($results) > 0 ? $results[0]['_totalrows'] : 0,
'pageroffset' => $offset,
'pageritemsperpage' => config('nntmux.items_per_page'),
'pagerquerysuffix' => '#results',
'pagerquerybase' => WWW_TOP.'/search?'.$orderByString.'&search_type=adv&ob='.$orderBy.'&offset=',
]
);
}
@@ -192,7 +182,6 @@ You can combine some of these rules, but not all.<br />';
'grouplist' => Group::getGroupsForSelect(),
'catlist' => Category::getForSelect(),
'search_description' => $search_description,
'pager' => $this->smarty->fetch('pager.tpl'),
]
);
-192
View File
@@ -1,192 +0,0 @@
<?php
use App\Models\Group;
use App\Models\Category;
use Blacklight\Releases;
use Illuminate\Support\Facades\Auth;
if (! Auth::check()) {
$page->show403();
}
$releases = new Releases(['Groups' => null, 'Settings' => $page->settings]);
$page->meta_title = 'Search Nzbs';
$page->meta_keywords = 'search,nzb,description,details';
$page->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') : '');
$offset = (request()->has('offset') && ctype_digit(request()->input('offset'))) ? request()->input('offset') : 0;
$page->smarty->assign(
[
'subject' => '', 'search' => '', 'category' => [0], 'pagertotalitems' => 0,
'pageritemsperpage' => 1, 'pageroffset' => 1, 'covgroup' => '',
]
);
if ($searchType === 'basic' && ! request()->has('searchadvr') && (request()->has('id') || request()->has('subject'))) {
$searchString = '';
switch (true) {
case request()->has('subject'):
$searchString = (string) request()->input('subject');
$page->smarty->assign('subject', $searchString);
break;
case request()->has('id'):
$searchString = (string) request()->input('id');
$page->smarty->assign('search', $searchString);
break;
}
$categoryID[] = -1;
if (request()->has('t')) {
$categoryID = explode(',', request()->input('t'));
}
foreach ($releases->getBrowseOrdering() as $orderType) {
$page->smarty->assign(
'orderby'.$orderType,
WWW_TOP.'/search/'.htmlentities($searchString, ENT_QUOTES | ENT_HTML5).'?t='.implode(',', $categoryID).'&amp;ob='.$orderType
);
}
$results = $releases->search(
$searchString,
-1,
-1,
-1,
-1,
-1,
-1,
0,
0,
-1,
-1,
$offset,
config('nntmux.items_per_page'),
$orderBy,
-1,
$page->userdata['categoryexclusions'],
'basic',
$categoryID
);
$page->smarty->assign(
[
'lastvisit' => $page->userdata['lastlogin'],
'pagertotalitems' => \count($results) > 0 ? $results[0]['_totalrows'] : 0,
'pageroffset' => $offset,
'pageritemsperpage' => config('nntmux.items_per_page'),
'pagerquerysuffix' => '#results',
'pagerquerybase' => WWW_TOP.'/search/'.htmlentities($searchString, ENT_QUOTES | ENT_HTML5).'?t='.
implode(',', $categoryID).'&amp;ob='.$orderBy.'&amp;offset=',
'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) {
$page->smarty->assign($searchVarKey, $searchVars[$searchVarKey]);
}
if ($searchType !== 'basic' && request()->has('searchadvr') && ! request()->has('id') && ! request()->has('subject')) {
$orderByString = '';
foreach ($searchVars as $searchVarKey => $searchVar) {
$orderByString .= "&$searchVarKey=".htmlentities($searchVar, ENT_QUOTES | ENT_HTML5);
}
$orderByString = ltrim($orderByString, '&');
foreach ($ordering as $orderType) {
$page->smarty->assign(
'orderby'.$orderType,
WWW_TOP.'/search?'.$orderByString.'&search_type=adv&ob='.$orderType
);
}
$results = $releases->search(
($searchVars['searchadvr'] === '' ? -1 : $searchVars['searchadvr']),
($searchVars['searchadvsubject'] === '' ? -1 : $searchVars['searchadvsubject']),
($searchVars['searchadvposter'] === '' ? -1 : $searchVars['searchadvposter']),
($searchVars['searchadvfilename'] === '' ? -1 : $searchVars['searchadvfilename']),
$searchVars['searchadvgroups'],
$searchVars['searchadvsizefrom'],
$searchVars['searchadvsizeto'],
$searchVars['searchadvhasnfo'],
$searchVars['searchadvhascomments'],
($searchVars['searchadvdaysnew'] === '' ? -1 : $searchVars['searchadvdaysnew']),
($searchVars['searchadvdaysold'] === '' ? -1 : $searchVars['searchadvdaysold']),
$offset,
config('nntmux.items_per_page'),
$orderBy,
-1,
$page->userdata['categoryexclusions'],
'advanced',
[$searchVars['searchadvcat'] === '' ? -1 : $searchVars['searchadvcat']]
);
$page->smarty->assign(
[
'lastvisit' => $page->userdata['lastlogin'],
'pagertotalitems' => \count($results) > 0 ? $results[0]['_totalrows'] : 0,
'pageroffset' => $offset,
'pageritemsperpage' => config('nntmux.items_per_page'),
'pagerquerysuffix' => '#results',
'pagerquerybase' => WWW_TOP.'/search?'.$orderByString.'&search_type=adv&ob='.$orderBy.'&offset=',
]
);
}
$search_description =
'Sphinx Search Rules:<br />
The search is case insensitive.<br />
All words must be separated by spaces.
Do not seperate words using . or _ or -, sphinx will match a space against those automatically.<br />
Putting | between words makes any of those words optional.<br />
Putting << between words makes the word on the left have to be before the word on the right.<br />
Putting - or ! in front of a word makes that word excluded. Do not add a space between the - or ! and the word.<br />
Quoting all the words using " will look for an exact match.<br />
Putting ^ at the start will limit searches to releases that start with that word.<br />
Putting $ at the end will limit searches to releases that end with that word.<br />
Putting a * after a word will do a partial word search. ie: fish* will match fishing.<br />
If your search is only words seperated by spaces, all those words will be mandatory, the order of the words is not important.<br />
You can enclose words using paranthesis. ie: (^game*|^dex*)s03*(x264<&lt;nogrp$)<br />
You can combine some of these rules, but not all.<br />';
$page->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' => Group::getGroupsForSelect(),
'catlist' => Category::getForSelect(),
'search_description' => $search_description,
'pager' => $page->smarty->fetch('pager.tpl'),
]
);
$page->content = $page->smarty->fetch('search.tpl');
$page->pagerender();
+2 -2
View File
@@ -47,7 +47,7 @@
</div>
</div>
<div class="col-md-4">
{$pager}
{$results->links()}
</div>
</div>
<hr>
@@ -198,7 +198,7 @@
</div>
</div>
<div class="col-md-4">
{$pager}
{$results->links()}
</div>
</div>
</div>
+2 -2
View File
@@ -63,7 +63,7 @@
</div>
</div>
<div class="col-md-4">
{$pager}
{$results->links()}
</div>
</div>
<hr>
@@ -203,7 +203,7 @@
</div>
</div>
<div class="col-md-4">
{$pager}
{$results->links()}
</div>
</div>
</div>
@@ -1,5 +1,5 @@
<div class="container nzb_multi_operations">
{$pager}
{$results->links()}
<div class="pull-right">
With Selected:
<button type="button" class="btn btn-info btn-sm nzb_multi_operations_download">Download NZBs</button>
+2 -2
View File
@@ -46,7 +46,7 @@
</div>
</div>
<div class="col-md-4">
{$pager}
{$results->links()}
</div>
</div>
<hr>
@@ -201,7 +201,7 @@
</div>
</div>
<div class="col-md-4">
{$pager}
{$results->links()}
</div>
</div>
</div>
+2 -2
View File
@@ -181,7 +181,7 @@
</div>
</div>
<div class="col-md-4">
{$pager}
{$results->links()}
</div>
</div>
<hr>
@@ -376,7 +376,7 @@
</div>
</div>
<div class="col-md-4">
{$pager}
{$results->links()}
</div>
</div>
<br><br><br>
@@ -194,7 +194,7 @@
</div>
</div>
<div class="col-md-4">
{$pager}
{$results->links()}
</div>
</div>
{/if}
@@ -188,7 +188,7 @@
</div>
</div>
<div class="col-md-4">
{$pager}
{$results->links()}
</div>
</div>
{/if}
+2 -2
View File
@@ -47,7 +47,7 @@
</div>
</div>
<div class="col-md-4">
{$pager}
{$results->links()}
</div>
</div>
<hr>
@@ -388,7 +388,7 @@
</div>
</div>
<div class="col-md-4">
{$pager}
{$results->links()}
</div>
</div>
</div>
+2 -2
View File
@@ -54,7 +54,7 @@
</div>
</div>
<div class="col-md-4">
{$pager}
{$results->links()}
</div>
</div>
<hr>
@@ -233,7 +233,7 @@
</div>
</div>
<div class="col-md-4">
{$pager}
{$results->links()}
</div>
</div>
</div>
@@ -1,5 +1,5 @@
<div class="container nzb_multi_operations">
{$pager}
{$results->links()}
<div class="pull-right">
With Selected:
<button type="button" class="btn btn-info btn-sm nzb_multi_operations_download" data-toggle="tooltip"
+2 -2
View File
@@ -52,7 +52,7 @@
</div>
</div>
<div class="col-md-4">
{$pager}
{$results->links()}
</div>
</div>
<hr>
@@ -230,7 +230,7 @@
</div>
</div>
<div class="col-md-4">
{$pager}
{$results->links()}
</div>
</div>
</div>
+2 -2
View File
@@ -197,7 +197,7 @@
</div>
</div>
<div class="col-md-4">
{$pager}
{$results->links()}
</div>
</div>
<hr>
@@ -429,7 +429,7 @@
</div>
</div>
<div class="col-md-4">
{$pager}
{$results->links()}
</div>
</div>
<br><br><br>
@@ -224,7 +224,7 @@
</div>
</div>
<div class="col-md-4">
{$pager}
{$results->links()}
</div>
</div>
{/if}
@@ -218,7 +218,7 @@
</div>
</div>
<div class="col-md-4">
{$pager}
{$results->links()}
</div>
</div>
{/if}
+2 -2
View File
@@ -53,7 +53,7 @@
</div>
</div>
<div class="col-md-4">
{$pager}
{$results->links()}
</div>
</div>
<hr>
@@ -441,7 +441,7 @@
</div>
</div>
<div class="col-md-4">
{$pager}
{$results->links()}
</div>
</div>
</div>
+2 -2
View File
@@ -47,7 +47,7 @@
</div>
</div>
<div class="col-md-4">
{$pager}
{$results->links()}
</div>
</div>
<hr>
@@ -201,7 +201,7 @@
</div>
</div>
<div class="col-md-4">
{$pager}
{$results->links()}
</div>
</div>
</div>
+2 -2
View File
@@ -63,7 +63,7 @@
</div>
</div>
<div class="col-md-4">
{$pager}
{$results->links()}
</div>
</div>
<hr>
@@ -203,7 +203,7 @@
</div>
</div>
<div class="col-md-4">
{$pager}
{$results->links()}
</div>
</div>
</div>
@@ -1,5 +1,5 @@
<div class="container nzb_multi_operations">
{$pager}
{$results->links()}
<div class="pull-right">
With Selected:
<button type="button" class="btn btn-info btn-sm nzb_multi_operations_download">Download NZBs</button>
+2 -2
View File
@@ -46,7 +46,7 @@
</div>
</div>
<div class="col-md-4">
{$pager}
{$results->links()}
</div>
</div>
<hr>
@@ -204,7 +204,7 @@
</div>
</div>
<div class="col-md-4">
{$pager}
{$results->links()}
</div>
</div>
</div>
+2 -2
View File
@@ -197,7 +197,7 @@
</div>
</div>
<div class="col-md-4">
{$pager}
{$results->links()}
</div>
</div>
<hr>
@@ -429,7 +429,7 @@
</div>
</div>
<div class="col-md-4">
{$pager}
{$results->links()}
</div>
</div>
<br><br><br>
@@ -194,7 +194,7 @@
</div>
</div>
<div class="col-md-4">
{$pager}
{$results->links()}
</div>
</div>
{/if}
@@ -188,7 +188,7 @@
</div>
</div>
<div class="col-md-4">
{$pager}
{$results->links()}
</div>
</div>
{/if}
+2 -2
View File
@@ -47,7 +47,7 @@
</div>
</div>
<div class="col-md-4">
{$pager}
{$results->links()}
</div>
</div>
<hr>
@@ -394,7 +394,7 @@
</div>
</div>
<div class="col-md-4">
{$pager}
{$results->links()}
</div>
</div>
</div>
+2 -2
View File
@@ -14,7 +14,7 @@
</form>
</div>
{$pager}
{$results->links()}
<br/><br/>
@@ -44,7 +44,7 @@
</table>
<br/>
{$pager}
{$results->links()}
{else}
<p>No AniDB episodes available.</p>
{/if}
+2 -2
View File
@@ -2,7 +2,7 @@
<div class="well well-sm">
{if $booklist}
{$pager}
{$results->links()}
<table style="margin-top:10px;" class="data table table-striped responsive-utilities jambo-table Sortable">
<tr>
@@ -24,7 +24,7 @@
</table>
<br/>
{$pager}
{$results->links()}
{else}
<p>No books available.</p>
{/if}
@@ -13,7 +13,7 @@
<input class="btn btn-default" type="submit" value="Go"/>
</form>
{if $regex}
<div>{$pager}</div>
<div>{$results->links()}</div>
<table style="margin-top:10px;" class="data table table-striped responsive-utilities jambo-table Sortable">
<tr>
<th style="width:20px;">id</th>
@@ -49,6 +49,6 @@
</tr>
{/foreach}
</table>
<div style="margin-top: 15px">{$pager}</div>
<div style="margin-top: 15px">{$results->links()}</div>
{/if}
</div>
@@ -11,7 +11,7 @@
<input class="btn btn-default" type="submit" value="Go"/>
</form>
{if $regex}
<div>{$pager}</div>
<div>{$results->links()}</div>
<table style="margin-top:10px;" class="data table table-striped responsive-utilities jambo-table Sortable">
<tr>
<th style="width:20px;">id</th>
@@ -45,6 +45,6 @@
</tr>
{/foreach}
</table>
<div style="margin-top: 15px">{$pager}</div>
<div style="margin-top: 15px">{$results->links()}</div>
{/if}
</div>
@@ -1,7 +1,7 @@
<h1>{$title}</h1>
<div class="well well-sm">
{if $commentslist}
{$pager}
{$results->links()}
<table style="margin-top:10px;" class="data table table-striped responsive-utilities jambo-table Sortable">
<tr>
<th>user</th>
@@ -2,7 +2,7 @@
<div class="well well-sm">
{if $consolelist}
{$pager}
{$results->links()}
<table style="margin-top:10px;" class="data table table-striped responsive-utilities jambo-table Sortable">
<tr>
@@ -24,7 +24,7 @@
</table>
<br/>
{$pager}
{$results->links()}
{else}
<p>No games available.</p>
{/if}
@@ -2,7 +2,7 @@
<h1>{$title}</h1>
{if $releaselist}
{$pager}
{$results->links()}
<table style="margin-top:10px;" class="data table table-striped responsive-utilities jambo-table Sortable">
<tr>
@@ -35,7 +35,7 @@
</table>
<br/>
{$pager}
{$results->links()}
{else}
<p>No releases available.</p>
{/if}
+1 -1
View File
@@ -1,7 +1,7 @@
<div class="well well-sm">
<h1>{$title}</h1>
{if $gamelist}
{$pager}
{$results->links()}
<table style="margin-top:10px;" class="data table table-striped responsive-utilities jambo-table Sortable">
<tr>
<th>ID</th>
+2 -2
View File
@@ -14,7 +14,7 @@
<input class="btn btn-default" type="submit" value="Go"/>
</form>
<div style="position:absolute;">
{$pager}
{$results->links()}
</div>
<div style="text-align:center;">
<a title="Reset all groups" href="javascript:ajax_all_reset()" class="all_reset"
@@ -83,7 +83,7 @@
</table>
<div style="position:relative;margin-top:5px;">
<div style="position:absolute;">
{$pager}
{$results->links()}
</div>
<div style="text-align:center;">
<form name="groupsearch" action="" style="margin-bottom:5px;">
+1 -1
View File
@@ -2,7 +2,7 @@
<h1>{$title}</h1>
{if $movielist}
{$pager}
{$results->links()}
<table style="margin-top:10px;" class="data table table-striped responsive-utilities jambo-table Sortable">
<tr>
<th>IMDB ID</th>
+2 -2
View File
@@ -2,7 +2,7 @@
<h1>{$title}</h1>
{if $musiclist}
{$pager}
{$results->links()}
<table style="margin-top:10px;" class="data table table-striped responsive-utilities jambo-table Sortable">
<tr>
@@ -24,7 +24,7 @@
</table>
<br/>
{$pager}
{$results->links()}
{else}
<p>No Music available.</p>
{/if}
+2 -2
View File
@@ -13,7 +13,7 @@
</span>
</div>
</form>
{$pager}
{$results->links()}
<table class="data table table-striped responsive-utilities jambo-table">
<tr>
<th> Date</th>
@@ -365,6 +365,6 @@
</table>
<hr>
<div style="padding-bottom:10px;">
{$pager}
{$results->links()}
</div>
</div>
@@ -18,7 +18,7 @@
<br/><br/>
{if $releaselist}
{$pager}
{$results->links()}
<table style="margin-top:10px;" class="data table table-striped responsive-utilities jambo-table">
<tr>
@@ -39,7 +39,7 @@
</table>
<br/>
{$pager}
{$results->links()}
{else}
<p>No results.</p>
{/if}
@@ -2,7 +2,7 @@
<h1>{$title}</h1>
{if $releaselist}
{$pager}
{$results->links()}
<table style="margin-top:10px;" class="data table table-striped responsive-utilities jambo-table Sortable">
<tr>
@@ -33,7 +33,7 @@
</table>
<br/>
{$pager}
{$results->links()}
{else}
<p>No releases available.</p>
{/if}
@@ -11,7 +11,7 @@
<input class="btn btn-default" type="submit" value="Go"/>
</form>
{if isset($regex)}
<div>{$pager}</div>
<div>{$results->links()}</div>
<table style="margin-top:10px;" class="data table table-striped responsive-utilities jambo-table Sortable">
<tr>
<th style="width:20px;">id</th>
@@ -46,6 +46,6 @@
</tr>
{/foreach}
</table>
<div style="margin-top: 15px">{$pager}</div>
<div style="margin-top: 15px">{$results->links()}</div>
{/if}
</div>
+2 -2
View File
@@ -190,7 +190,7 @@
{if $sites}
<div style="margin-bottom:5px;">These are the remote websites we have seen so far:</div>
{$pager}
{$results->links()}
<div style="float:right;">
<a href="javascript:ajax_sharing_toggle_all(1);" onclick="setTimeout('history.go(0);',700);"
class="sharing_toggle_all">[Enable All]</a>
@@ -231,7 +231,7 @@
</tr>
{/foreach}
</table>
{$pager}
{$results->links()}
{else}
<p>No remote sites found in your database.</p>
{/if}
+1 -1
View File
@@ -10,7 +10,7 @@
<input class="btn btn-default" type="submit" value="Go"/>
</form>
</div>
{$pager}
{$results->links()}
<br/>
<br/>
<table style="width:100%;margin-top:10px;"
+1 -1
View File
@@ -24,7 +24,7 @@
</form>
</div>
{$pager}
{$results->links()}
<br/><br/>