This commit is contained in:
Darko
2014-09-24 13:10:57 +02:00
parent 1669b18a60
commit 00a797f9a6
4 changed files with 297 additions and 25 deletions
@@ -24,7 +24,7 @@ switch ($argv[1]) {
function releases_rt()
{
$pdo = new \DB();
$rows = $pdo->queryExec('SELECT ID, guid, name, searchname, fromname FROM releases');
$rows = $pdo->queryExec('SELECT id, guid, name, searchname, fromname FROM releases');
if ($rows !== false && $rows->rowCount()) {
$sphinx = new \SphinxSearch();
+7 -7
View File
@@ -40,17 +40,17 @@ class SphinxSearch
* Insert release into Sphinx RT table.
* @param $parameters
*/
public function insertRelease($id, $guid, $name, $searchname, $fromname)
public function insertRelease($parameters)
{
if (!is_null($this->sphinxQL) && $id) {
if (!is_null($this->sphinxQL) && $parameters['id']) {
$this->sphinxQL->queryExec(
sprintf(
'REPLACE INTO releases_rt (id, guid, name, searchname, fromname) VALUES (%s, %s, %s, %s, %s)',
$id,
$guid,
$name,
$searchname,
$fromname
$parameters['id'],
$parameters['guid'],
$parameters['name'],
$parameters['searchname'],
$parameters['fromname']
)
);
}
+45 -17
View File
@@ -1628,7 +1628,25 @@ class Releases
$properName = true;
}
}
$relid = $this->insertRelease($cleanRelName, $db->escapeString(utf8_encode($cleanedName)), $row["parts"], $row["groupID"], $relguid, $catId, $row["regexID"], $row["date"], $row["fromname"], $row["reqID"], $page->site, Enzebe::NZB_NONE, $properName === true ? 1 : 0, $isReqID, $prehashID);
$relid = $this->insertRelease(
[
'name' => $db->escapeString($cleanRelName),
'searchname' => $db->escapeString(utf8_encode($cleanedName)),
'totalpart' => $row["parts"],
'groupID' => $row["groupID"],
'guid' => $db->escapeString($row['guid']),
'categoryID' => $catId,
'regexID' => $row["regexID"],
'postdate' => $db->escapeString($row['date']),
'fromname' => $db->escapeString($row['fromname']),
'reqid' => $row["reqID"],
'passwordstatus' => ($page->site->checkpasswordedrar > 0 ? -1 : 0),
'nzbstatus' => \Enzebe::NZB_NONE,
'isrenamed' => ($properName === true ? 1 : 0),
'reqidstatus' => ($isReqID === true ? 1 : 0),
'preid' => ($prehashID === false ? 0 : $prehashID)
]
);
//
// Tag every binary for this release with its parent release id
//
@@ -1914,31 +1932,41 @@ class Releases
return $relname;
}
public function insertRelease($cleanRelName, $cleanedName, $parts, $group, $guid, $catId, $regexID, $date, $fromname, $reqID, $site, $nzbstatus, $isrenamed, $isReqID, $prehashID)
public function insertRelease(array $parameters = [])
{
$db = new DB();
$sphinxSearch = new SphinxSearch();
if ($regexID == "")
$regexID = " null ";
if ($parameters['regexID'] == "")
$parameters['regexID'] = " null ";
if ($reqID != "")
$reqID = $db->escapeString($reqID);
if ($parameters['reqID'] != "")
$parameters['reqID'] = $db->escapeString('reqID');
else
$reqID = " null ";
$parameters['reqID'] = " null ";
$sql = sprintf("insert into releases (name, searchname, totalpart, groupID, adddate, guid, categoryID, regexID, rageID, postdate, fromname, size, reqID, passwordstatus, completion, haspreview, nfostatus, nzbstatus,
$parameters['id'] = $db->queryInsert(sprintf("insert into releases (name, searchname, totalpart, groupID, adddate, guid, categoryID, regexID, rageID, postdate, fromname, size, reqID, passwordstatus, completion, haspreview, nfostatus, nzbstatus,
isrenamed, iscategorized, reqidstatus, prehashID)
values (%s, %s, %d, %d, now(), %s, %d, %s, -1, %s, %s, 0, %s, %d, 100, %d, %d, %d, %d, 1, %d, %d)",
$db->escapeString($cleanRelName), $cleanedName, $parts, $group, $db->escapeString($guid), $catId, $regexID,
$db->escapeString($date), $db->escapeString($fromname), $reqID, ($site->checkpasswordedrar > 0 ? -1 : 0), -1, -1,
$db->escapeString($nzbstatus), $db->escapeString($isrenamed), $db->escapeString($isReqID), $db->escapeString($prehashID)
);
values (%s, %s, %d, %d, now(), %s, %d, %s, -1, %s, %s, 0, %s, %d, 100,-1, -1, %d, %d, 1, %d, %d)",
$parameters['name'],
$parameters['searchname'],
$parameters['totalpart'],
$parameters['groupID'],
$parameters['guid'],
$parameters['categoryID'],
$parameters['regexID'],
$parameters['postdate'],
$parameters['fromname'],
$parameters['reqID'],
$parameters['passwordstatus'],
$parameters['nzbstatus'],
$parameters['isrenamed'],
$parameters['reqidstatus'],
$parameters['prehashID']
));
$relid = $db->queryInsert($sql);
$sphinxSearch->insertRelease($relid, $guid, $cleanRelName, $cleanedName, $fromname);
return $relid;
$sphinxSearch->insertRelease($parameters);
return $parameters['id'];
}
/**
+244
View File
@@ -0,0 +1,244 @@
<?php
require_once(WWW_DIR."/lib/releases.php");
require_once(WWW_DIR."/lib/groups.php");
require_once(WWW_DIR."/lib/category.php");
if (!$users->isLoggedIn()) {
$page->show403();
}
$grp = new Groups();
$releases = new Releases();
$c = new Category();
$page->meta_title = "Search Nzbs";
$page->meta_keywords = "search,nzb,description,details";
$page->meta_description = "Search for Nzbs";
$results = array();
$searchtype = "basic";
$searchStr = "";
if (isset($_REQUEST["search_type"]) && $_REQUEST["search_type"] == "adv") {
$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"] : '';
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)) . "&amp;ob=" . $ordertype);
}
$page->smarty->assign('category', $categoryId);
$page->smarty->assign('pagerquerybase', WWW_TOP . "/search/" . htmlentities($searchStr) . "?t=" . (implode(',', $categoryId)) . "&amp;ob=" . $orderby . "&amp;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)) . "&amp;ob=" . $ordertype);
}
$page->smarty->assign('category', $categoryId);
$page->smarty->assign('pagerquerybase', WWW_TOP . "/search/" . htmlentities($searchStr) . "?t=" . (implode(',', $categoryId)) . "&amp;ob=" . $orderby . "&amp;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" . "&amp;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" . "&amp;ob=" . $orderby . "&amp;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('sizelist', $sizelist);
$page->smarty->assign('results', $results);
$page->smarty->assign('sadvanced', ($searchtype != "basic"));
$ft1 = $db->checkIndex('releases', 'ix_releases_name_searchname_ft');
$ft2 = $db->checkIndex('releases', 'ix_releases_name_ft');
$ft3 = $db->checkIndex('releases', 'ix_releases_searchname_ft');
switch (NN_RELEASE_SEARCH_TYPE) {
case ReleaseSearch::FULLTEXT:
$search_description =
'MySQL Full Text Search Rules:<br />
A leading exclamation point(! in place of +) indicates that this word must be present in each row that is returned.<br />
A leading minus sign indicates that this word must not be present in any of the rows that are returned.<br />
By default (when neither + nor - is specified) the word is optional, but the rows that contain it are rated higher.<br />
See <a target="_blank" href=\'http://dev.mysql.com/doc/refman/5.0/en/fulltext-boolean.html\'>docs</a> for more operators.';
break;
case ReleaseSearch::LIKE:
$search_description = 'Include ^ to indicate search must start with term, -- to exclude words.';
break;
case ReleaseSearch::SPHINX:
default:
$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 />';
break;
}
$page->smarty->assign('search_description', $search_description);
$page->content = $page->smarty->fetch('search.tpl');
$page->render();