diff --git a/newznab/controllers/Releases.php b/newznab/controllers/Releases.php index df214737c..fe4c4bb78 100644 --- a/newznab/controllers/Releases.php +++ b/newznab/controllers/Releases.php @@ -1147,7 +1147,6 @@ class Releases * @param string $usenetName * @param string $posterName * @param string $groupName - * @param array $cat * @param int $sizeFrom * @param int $sizeTo * @param int $hasNfo @@ -1158,22 +1157,44 @@ class Releases * @param int $limit * @param string $orderBy * @param int $maxAge - * @param array $excludedCats + * @param integer[] $excludedCats * @param string $type + * @param array $cat * * @return array */ public function search( - $searchName, $usenetName, $posterName, $groupName, $cat = [-1], $sizeFrom, - $sizeTo, $hasNfo, $hasComments, $daysNew, $daysOld, $offset = 0, $limit = 1000, - $orderBy = '', $maxAge = -1, $excludedCats = [], $type = 'basic' - ) - { - - $sphinxSearch = new SphinxSearch(); - $releaseSearch = new ReleaseSearch($this->pdo, $sphinxSearch); - $sizeRange = range(1, 11); - $groups = new Groups(); + $searchName, + $usenetName, + $posterName, + $groupName, + $sizeFrom, + $sizeTo, + $hasNfo, + $hasComments, + $daysNew, + $daysOld, + $offset = 0, + $limit = 1000, + $orderBy = '', + $maxAge = -1, + $excludedCats = [], + $type = 'basic', + $cat = [-1] + ) { + $sizeRange = [ + 1 => 1, + 2 => 2.5, + 3 => 5, + 4 => 10, + 5 => 20, + 6 => 30, + 7 => 40, + 8 => 80, + 9 => 160, + 10 => 320, + 11 => 640, + ]; if ($orderBy == '') { $orderBy = []; @@ -1196,20 +1217,21 @@ class Releases $whereSql = sprintf( "%s - WHERE r.passwordstatus <= (select value from settings where setting='showpasswordedrelease') AND r.nzbstatus = %d %s %s %s %s %s %s %s %s %s %s %s", - $releaseSearch->getFullTextJoinString(), + WHERE r.passwordstatus %s AND r.nzbstatus = %d %s %s %s %s %s %s %s %s %s %s %s", + $this->releaseSearch->getFullTextJoinString(), + $this->showPasswords(), Enzebe::NZB_ADDED, ($maxAge > 0 ? sprintf(' AND r.postdate > (NOW() - INTERVAL %d DAY) ', $maxAge) : ''), - ($groupName != -1 ? sprintf(' AND r.groupid = %d ', $groups->getIDByName($groupName)) : ''), - (in_array($sizeFrom, $sizeRange) ? ' AND r.size > ' . (string)(104857600 * (int)$sizeFrom) . ' ' : ''), - (in_array($sizeTo, $sizeRange) ? ' AND r.size < ' . (string)(104857600 * (int)$sizeTo) . ' ' : ''), + ($groupName != -1 ? sprintf(' AND r.groupid = %d ', $this->groups->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]) . ' ' : ''), ($hasNfo != 0 ? ' AND r.nfostatus = 1 ' : ''), ($hasComments != 0 ? ' AND r.comments > 0 ' : ''), ($type !== 'advanced' ? $this->categorySQL($cat) : ($cat[0] != '-1' ? sprintf(' AND (r.categoryid = %d) ', $cat[0]) : '')), ($daysNew != -1 ? sprintf(' AND r.postdate < (NOW() - INTERVAL %d DAY) ', $daysNew) : ''), ($daysOld != -1 ? sprintf(' AND r.postdate > (NOW() - INTERVAL %d DAY) ', $daysOld) : ''), (count($excludedCats) > 0 ? ' AND r.categoryid NOT IN (' . implode(',', $excludedCats) . ')' : ''), - (count($searchOptions) > 0 ? $releaseSearch->getSearchSQL($searchOptions) : '') + (count($searchOptions) > 0 ? $this->releaseSearch->getSearchSQL($searchOptions) : '') ); $baseSql = sprintf( @@ -1219,7 +1241,7 @@ class Releases groups.name AS group_name, rn.id AS nfoid, re.releaseid AS reid, - cp.id AS categoryParentID + cp.id AS categoryparentid FROM releases r LEFT OUTER JOIN releasevideo re ON re.releaseid = r.id LEFT OUTER JOIN releasenfo rn ON rn.releaseid = r.id @@ -1246,7 +1268,6 @@ class Releases if ($releases && count($releases)) { $releases[0]['_totalrows'] = $this->getPagerCount($baseSql); } - return $releases; } diff --git a/www/pages/search.php b/www/pages/search.php index 0c4f7dc32..f99cd9386 100644 --- a/www/pages/search.php +++ b/www/pages/search.php @@ -1,205 +1,137 @@ isLoggedIn()) { +if (!$page->users->isLoggedIn()) { $page->show403(); } -$grp = new Groups(); -$releases = new Releases(); -$c = new Category(); +$groups = new Groups(['Settings' => $page->settings]); +$releases = new Releases(['Groups' => $groups, 'Settings' => $page->settings]); -$page->meta_title = "Search Nzbs"; -$page->meta_keywords = "search,nzb,description,details"; +$page->meta_title = "Search Nzbs"; +$page->meta_keywords = "search,nzb,description,details"; $page->meta_description = "Search for Nzbs"; -$results = array(); -$searchtype = "basic"; -$searchStr = ""; +$results = []; +$searchType = "basic"; if (isset($_REQUEST["search_type"]) && $_REQUEST["search_type"] == "adv") { - $searchtype = "advanced"; + $searchType = "advanced"; } -if (isset($_REQUEST["id"]) && !isset($_REQUEST["searchadvr"]) && !isset($_REQUEST["subject"])) { - $offset = (isset($_REQUEST["offset"]) && ctype_digit($_REQUEST['offset'])) ? $_REQUEST["offset"] : 0; - $ordering = $releases->getBrowseOrdering(); - $orderby = isset($_REQUEST["ob"]) && in_array($_REQUEST['ob'], $ordering) ? $_REQUEST["ob"] : ''; +$ordering = $releases->getBrowseOrdering(); +$orderBy = (isset($_REQUEST["ob"]) && in_array($_REQUEST['ob'], $ordering) ? $_REQUEST["ob"] : ''); +$offset = (isset($_REQUEST["offset"]) && ctype_digit($_REQUEST['offset'])) ? $_REQUEST["offset"] : 0; - if ($searchtype == "basic") { - $searchStr = (string) $_REQUEST["id"]; - $categoryId = array(); - if (isset($_REQUEST["t"])) { - $categoryId = explode(",", $_REQUEST["t"]); - } else { - $categoryId[] = -1; - } - - foreach ($ordering as $ordertype) { - $page->smarty->assign('orderby' . $ordertype, WWW_TOP . "/search/" . htmlentities($searchStr) . "?t=" . (implode(',', $categoryId)) . "&ob=" . $ordertype); - } - - $page->smarty->assign('category', $categoryId); - $page->smarty->assign('pagerquerybase', WWW_TOP . "/search/" . htmlentities($searchStr) . "?t=" . (implode(',', $categoryId)) . "&ob=" . $orderby . "&offset="); - $page->smarty->assign('search', $searchStr); - if (isset ($_REQUEST['subject'])) { - $page->smarty->assign('subject', $_REQUEST['subject']); - } - $results = $releases->search($searchStr, -1, -1, -1, $categoryId, -1, -1, 0, 0, -1, -1, $offset, ITEMS_PER_PAGE, $orderby, -1, $page->userdata["categoryexclusions"]); - } - - $page->smarty->assign('lastvisit', $page->userdata['lastlogin']); - if (sizeof($results) > 0) { - $totalRows = $results[0]['_totalrows']; - } else { - $totalRows = 0; - } - - $page->smarty->assign('pagertotalitems', $totalRows); - $page->smarty->assign('pageroffset', $offset); - $page->smarty->assign('pageritemsperpage', ITEMS_PER_PAGE); - $page->smarty->assign('pagerquerysuffix', "#results"); - - $pager = $page->smarty->fetch("pager.tpl"); - $page->smarty->assign('pager', $pager); -} - -if (isset($_REQUEST["subject"]) && !isset($_REQUEST["searchadvr"]) && !isset($_REQUEST["id"])) { - $offset = (isset($_REQUEST["offset"]) && ctype_digit($_REQUEST['offset'])) ? $_REQUEST["offset"] : 0; - $ordering = $releases->getBrowseOrdering(); - $orderby = isset($_REQUEST["ob"]) && in_array($_REQUEST['ob'], $ordering) ? $_REQUEST["ob"] : ''; - - if ($searchtype == "basic") { - $searchStr = (string) $_REQUEST["subject"]; - - $categoryId = array(); - if (isset($_REQUEST["t"])) { - $categoryId = explode(",", $_REQUEST["t"]); - } else { - $categoryId[] = -1; - } - - foreach ($ordering as $ordertype) { - $page->smarty->assign('orderby' . $ordertype, WWW_TOP . "/search/" . htmlentities($searchStr) . "?t=" . (implode(',', $categoryId)) . "&ob=" . $ordertype); - } - - $page->smarty->assign('category', $categoryId); - $page->smarty->assign('pagerquerybase', WWW_TOP . "/search/" . htmlentities($searchStr) . "?t=" . (implode(',', $categoryId)) . "&ob=" . $orderby . "&offset="); - $page->smarty->assign('subject', $searchStr); - $results = $releases->search($searchStr, -1, -1, -1, $categoryId, -1, -1, 0, 0, -1, -1, $offset, ITEMS_PER_PAGE, $orderby, -1, $page->userdata["categoryexclusions"]); - } - - $page->smarty->assign('lastvisit', $page->userdata['lastlogin']); - if (sizeof($results) > 0) { - $totalRows = $results[0]['_totalrows']; - } else { - $totalRows = 0; - } - - $page->smarty->assign('pagertotalitems', $totalRows); - $page->smarty->assign('pageroffset', $offset); - $page->smarty->assign('pageritemsperpage', ITEMS_PER_PAGE); - $page->smarty->assign('pagerquerysuffix', "#results"); - - $pager = $page->smarty->fetch("pager.tpl"); - $page->smarty->assign('pager', $pager); -} - -if (isset($_REQUEST["searchadvr"]) && !isset($_REQUEST["id"]) && !isset($_REQUEST["subject"])) { - $offset = (isset($_REQUEST["offset"]) && ctype_digit($_REQUEST['offset'])) ? $_REQUEST["offset"] : 0; - $ordering = $releases->getBrowseOrdering(); - $orderby = isset($_REQUEST["ob"]) && in_array($_REQUEST['ob'], $ordering) ? $_REQUEST["ob"] : ''; - - if ($searchtype !== "basic") { - - $searchSearchName = (string) $_REQUEST["searchadvr"]; - $searchUsenetName = (string) $_REQUEST["searchadvsubject"]; - $searchPoster = (string) $_REQUEST["searchadvposter"]; - $searchdaysnew = (string) $_REQUEST["searchadvdaysnew"]; - $searchdaysold = (string) $_REQUEST["searchadvdaysold"]; - $searchGroups = (string) $_REQUEST["searchadvgroups"]; - $searchCat = (string) $_REQUEST["searchadvcat"]; - $searchSizeFrom = (string) $_REQUEST["searchadvsizefrom"]; - $searchSizeTo = (string) $_REQUEST["searchadvsizeto"]; - $searchHasNFO = (string) $_REQUEST["searchadvhasnfo"]; - $searchHascomments = (string) $_REQUEST["searchadvhascomments"]; - - $page->smarty->assign('searchadvr', $searchSearchName); - $page->smarty->assign('searchadvsubject', $searchUsenetName); - $page->smarty->assign('searchadvposter', $searchPoster); - $page->smarty->assign('searchadvdaysnew', $searchdaysnew); - $page->smarty->assign('searchadvdaysold', $searchdaysold); - $page->smarty->assign('selectedgroup', $searchGroups); - $page->smarty->assign('selectedcat', $searchCat); - $page->smarty->assign('selectedsizefrom', $searchSizeFrom); - $page->smarty->assign('selectedsizeto', $searchSizeTo); - $page->smarty->assign('searchadvhasnfo', $searchHasNFO); - $page->smarty->assign('searchadvhascomments', $searchHascomments); - foreach ($ordering as $ordertype) { - $page->smarty->assign('orderby' . $ordertype, WWW_TOP . "/search?searchadvr=" . htmlentities($searchSearchName) . "&searchadvsubject=" . htmlentities($searchUsenetName) . "&searchadvposter=" . htmlentities($searchPoster) . "&searchadvdaysnew=" . htmlentities($searchdaysnew) . "&searchadvdaysold=" . htmlentities($searchdaysold) . "&searchadvgroups=" . htmlentities($searchGroups) . "&searchadvcat=" . htmlentities($searchCat) . "&searchadvsizefrom=" . htmlentities($searchSizeFrom) . "&searchadvsizeto=" . htmlentities($searchSizeTo) . "&searchadvhasnfo=" . htmlentities($searchHasNFO) . "&searchadvhascomments=" . htmlentities($searchHascomments) . "&search_type=adv" . "&ob=" . $ordertype); - } - - $page->smarty->assign('pagerquerybase', WWW_TOP . "/search?searchadvr=" . htmlentities($searchSearchName) . "&searchadvsubject=" . htmlentities($searchUsenetName) . "&searchadvposter=" . htmlentities($searchPoster) . "&searchadvdaysnew=" . htmlentities($searchdaysnew) . "&searchadvdaysold=" . htmlentities($searchdaysold) . "&searchadvgroups=" . htmlentities($searchGroups) . "&searchadvcat=" . htmlentities($searchCat) . "&searchadvsizefrom=" . htmlentities($searchSizeFrom) . "&searchadvsizeto=" . htmlentities($searchSizeTo) . "&searchadvhasnfo=" . htmlentities($searchHasNFO) . "&searchadvhascomments=" . htmlentities($searchHascomments) . "&search_type=adv" . "&ob=" . $orderby . "&offset="); - if ($_REQUEST["searchadvr"] == "") { - $searchSearchName = -1; - } - if ($_REQUEST["searchadvsubject"] == "") { - $searchUsenetName = -1; - } - if ($_REQUEST["searchadvposter"] == "") { - $searchPoster = -1; - } - if ($_REQUEST["searchadvdaysnew"] == "") { - $searchdaysnew = -1; - } - if ($_REQUEST["searchadvdaysold"] == "") { - $searchdaysold = -1; - } - if ($_REQUEST["searchadvcat"] == "") { - $searchCat = -1; - } - $results = $releases->search($searchSearchName, $searchUsenetName, $searchPoster, $searchGroups, [$searchCat], $searchSizeFrom, $searchSizeTo, $searchHasNFO, $searchHascomments, $searchdaysnew, $searchdaysold, $offset, ITEMS_PER_PAGE, $orderby, -1, $page->userdata["categoryexclusions"], "advanced"); - } - - $page->smarty->assign('lastvisit', $page->userdata['lastlogin']); - if (sizeof($results) > 0) { - $totalRows = $results[0]['_totalrows']; - } else { - $totalRows = 0; - } - - $page->smarty->assign('pagertotalitems', $totalRows); - $page->smarty->assign('pageroffset', $offset); - $page->smarty->assign('pageritemsperpage', ITEMS_PER_PAGE); - $page->smarty->assign('pagerquerysuffix', "#results"); - - $pager = $page->smarty->fetch("pager.tpl"); - $page->smarty->assign('pager', $pager); -} - -$grouplist = $grp->getGroupsForSelect(); -$page->smarty->assign('grouplist', $grouplist); - -$catlist = $c->getForSelect(); -$page->smarty->assign('catlist', $catlist); - -$sizelist = array(-1 => '--Select--', - 1 => '100MB', - 2 => '250MB', - 3 => '500MB', - 4 => '1GB', - 5 => '2GB', - 6 => '3GB', - 7 => '4GB', - 8 => '8GB', - 9 => '16GB', - 10 => '32GB', - 11 => '64GB' +$page->smarty->assign( + [ + 'subject' => '', 'search' => '', 'category' => [0], 'pagertotalitems' => 0, + 'pageritemsperpage' => 1, 'pageroffset' => 1, 'covgroup' => '' + ] ); -$page->smarty->assign('sizelist', $sizelist); -$page->smarty->assign('results', $results); -$page->smarty->assign('sadvanced', ($searchtype != "basic")); +if ((isset($_REQUEST["id"]) || isset($_REQUEST["subject"])) && !isset($_REQUEST["searchadvr"]) && $searchType == "basic") { + + $searchString = ''; + switch (true) { + case isset($_REQUEST["subject"]): + $searchString = (string) $_REQUEST["subject"]; + $page->smarty->assign('subject', $searchString); + break; + case isset($_REQUEST["id"]): + $searchString =(string) $_REQUEST["id"]; + $page->smarty->assign('search', $searchString); + break; + } + + $categoryID[] = -1; + if (isset($_REQUEST['t'])) { + $categoryID = explode(',', $_REQUEST['t']); + } + foreach ($releases->getBrowseOrdering() as $orderType) { + $page->smarty->assign( + "orderby$orderType", + WWW_TOP . '/search/' . htmlentities($searchString) . '?t=' . (implode(',', $categoryID)) . "&ob=$orderType" + ); + } + + $results = $releases->search( + $searchString, -1, -1, -1, -1, -1, 0, 0, -1, -1, $offset, 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' => ITEMS_PER_PAGE, + 'pagerquerysuffix' => "#results", + 'pagerquerybase' => + WWW_TOP . "/search/" . htmlentities($searchString) . "?t=" . + (implode(',', $categoryID)) . "&ob=$orderBy&offset=", + 'category' => $categoryID + ] + ); + +} + +$searchVars = [ + 'searchadvr' => '', 'searchadvsubject' => '', 'searchadvposter' => '', + 'searchadvdaysnew' => '', 'searchadvdaysold' => '', 'searchadvgroups' => '', + 'searchadvcat' => '', 'searchadvsizefrom' => '', 'searchadvsizeto' => '', + 'searchadvhasnfo' => '', 'searchadvhascomments' => '' +]; + +foreach($searchVars as $searchVarKey => $searchVar) { + $searchVars[$searchVarKey] = (isset($_REQUEST[$searchVarKey]) ? (string) $_REQUEST[$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 (isset($_REQUEST["searchadvr"]) && !isset($_REQUEST["id"]) && !isset($_REQUEST["subject"]) && $searchType != "basic") { + + $orderByString = ''; + foreach ($searchVars as $searchVarKey => $searchVar) { + $orderByString .= "&$searchVarKey=" . htmlentities($searchVar); + } + $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['searchadvgroups'], $searchVars['searchadvsizefrom'], $searchVars['searchadvsizeto'], + $searchVars['searchadvhasnfo'], $searchVars['searchadvhascomments'], + ($searchVars['searchadvdaysnew'] == '' ? -1 : $searchVars['searchadvdaysnew']), + ($searchVars['searchadvdaysold'] == '' ? -1 : $searchVars['searchadvdaysold']), + $offset, 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' => ITEMS_PER_PAGE, + 'pagerquerysuffix' => "#results", + 'pagerquerybase' => WWW_TOP . "/search?$orderByString&search_type=adv&ob=$orderBy&offset=" + ] + ); +} $ft1 = $page->settings->checkIndex('releases', 'ix_releases_name_searchname_ft'); $ft2 = $page->settings->checkIndex('releases', 'ix_releases_name_ft'); @@ -207,7 +139,7 @@ $ft3 = $page->settings->checkIndex('releases', 'ix_releases_searchname_ft'); switch (NN_RELEASE_SEARCH_TYPE) { case ReleaseSearch::FULLTEXT: $search_description = -'MySQL Full Text Search Rules:
+ 'MySQL Full Text Search Rules:
A leading exclamation point(! in place of +) indicates that this word must be present in each row that is returned.
A leading minus sign indicates that this word must not be present in any of the rows that are returned.
By default (when neither + nor - is specified) the word is optional, but the rows that contain it are rated higher.
@@ -219,7 +151,7 @@ See + 'Sphinx Search Rules:
The search is case insensitive.
All words must be separated by spaces. Do not seperate words using . or _ or -, sphinx will match a space against those automatically.
@@ -235,8 +167,20 @@ You can enclose words using paranthesis. ie: (^game*|^dex*)s03*(x264<<nogrp$) You can combine some of these rules, but not all.
'; break; } -$page->smarty->assign('search_description', $search_description); +$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' => $groups->getGroupsForSelect(), + 'catlist' => (new Category(['Settings' => $page->settings]))->getForSelect(), + 'search_description' => $search_description, + 'pager' => $page->smarty->fetch("pager.tpl") + ] +); $page->content = $page->smarty->fetch('search.tpl'); $page->render(); \ No newline at end of file