Info-hash search

Добавляем поиск по хешу, вывод хеша в топики.
This commit is contained in:
Exile 2014-08-24 21:15:26 +04:00
commit 098595e3ea
11 changed files with 99 additions and 54 deletions

View file

@ -230,6 +230,7 @@ if ($tor_reged && $tor_info)
'DL_TITLE_CLASS' => (isset($bt_userdata['user_status'])) ? $dl_status_css[$bt_userdata['user_status']] : 'gen', 'DL_TITLE_CLASS' => (isset($bt_userdata['user_status'])) ? $dl_status_css[$bt_userdata['user_status']] : 'gen',
'FILESIZE' => $tor_file_size, 'FILESIZE' => $tor_file_size,
'MAGNET' => $tor_magnet, 'MAGNET' => $tor_magnet,
'HASH' => strtoupper(bin2hex($tor_info['info_hash'])),
'DOWNLOAD_COUNT' => sprintf($lang['DOWNLOAD_NUMBER'], $download_count), 'DOWNLOAD_COUNT' => sprintf($lang['DOWNLOAD_NUMBER'], $download_count),
'REGED_TIME' => bb_date($tor_info['reg_time']), 'REGED_TIME' => bb_date($tor_info['reg_time']),
'REGED_DELTA' => delta_time($tor_info['reg_time']), 'REGED_DELTA' => delta_time($tor_info['reg_time']),

View file

@ -70,7 +70,7 @@ $domain_name = (!empty($_SERVER['SERVER_NAME'])) ? $_SERVER['SERVER_NAME'] : $do
// Version info // Version info
$bb_cfg['tp_version'] = '2.0.9 (RC)'; $bb_cfg['tp_version'] = '2.0.9 (RC)';
$bb_cfg['tp_release_date'] = '23-08-2014'; $bb_cfg['tp_release_date'] = '24-08-2014';
$bb_cfg['tp_release_state'] = 'R597'; $bb_cfg['tp_release_state'] = 'R597';
// Database // Database

View file

@ -2845,3 +2845,26 @@ function update_atom ($type, $id)
break; break;
} }
} }
function hash_search ($hash)
{
global $lang;
$hash = htmlCHR(trim($hash));
if (!isset($hash) || mb_strlen($hash, 'UTF-8') != 40)
{
bb_die(sprintf($lang['HASH_INVALID'], $hash));
}
$info_hash = DB()->escape(pack("H*", $hash));
if ($row = DB()->fetch_row("SELECT topic_id FROM " . BB_BT_TORRENTS . " WHERE info_hash = '$info_hash'"))
{
redirect(TOPIC_URL . $row['topic_id']);
}
else
{
bb_die(sprintf($lang['HASH_NOT_FOUND'], $hash));
}
}

View file

@ -1494,6 +1494,7 @@ $lang['REPORTS_DELETED'] = 'The selected reports were deleted.';//
$lang['SEARCH_S'] = 'search...'; $lang['SEARCH_S'] = 'search...';
$lang['FORUM_S'] = 'on forum'; $lang['FORUM_S'] = 'on forum';
$lang['TRACKER_S'] = 'on tracker'; $lang['TRACKER_S'] = 'on tracker';
$lang['HASH_S'] = 'by info_hash';
// copyright // copyright
$lang['NOTICE'] = '!ATTENTION!'; $lang['NOTICE'] = '!ATTENTION!';
@ -2976,3 +2977,6 @@ $lang['ATOM_SUBSCRIBE'] = 'Subscribe to the feed';
$lang['ATOM_NO_MODE'] = 'Do not specify a mode for the feed'; $lang['ATOM_NO_MODE'] = 'Do not specify a mode for the feed';
$lang['ATOM_NO_FORUM'] = 'This forum does not have a feed (no ongoing topics)'; $lang['ATOM_NO_FORUM'] = 'This forum does not have a feed (no ongoing topics)';
$lang['ATOM_NO_USER'] = 'This user does not have a feed (no ongoing topics)'; $lang['ATOM_NO_USER'] = 'This user does not have a feed (no ongoing topics)';
$lang['HASH_INVALID'] = 'Hash %s is invalid';
$lang['HASH_NOT_FOUND'] = 'Release with hash %s not found';

View file

@ -1494,6 +1494,7 @@ $lang['REPORTS_DELETED'] = 'Выбранные сообщения удалены
$lang['SEARCH_S'] = 'поиск…'; $lang['SEARCH_S'] = 'поиск…';
$lang['FORUM_S'] = 'по форуму'; $lang['FORUM_S'] = 'по форуму';
$lang['TRACKER_S'] = 'по трекеру'; $lang['TRACKER_S'] = 'по трекеру';
$lang['HASH_S'] = 'по info_hash';
// copyright // copyright
$lang['NOTICE'] = '!ВНИМАНИЕ!'; $lang['NOTICE'] = '!ВНИМАНИЕ!';
@ -2976,3 +2977,6 @@ $lang['ATOM_SUBSCRIBE'] = 'Подписка на ленту';
$lang['ATOM_NO_MODE'] = 'Не указан режим для ленты'; $lang['ATOM_NO_MODE'] = 'Не указан режим для ленты';
$lang['ATOM_NO_FORUM'] = 'Для этого форума нет ленты (нет начатых тем)'; $lang['ATOM_NO_FORUM'] = 'Для этого форума нет ленты (нет начатых тем)';
$lang['ATOM_NO_USER'] = 'Для этого пользователя нет ленты (нет начатых тем)'; $lang['ATOM_NO_USER'] = 'Для этого пользователя нет ленты (нет начатых тем)';
$lang['HASH_INVALID'] = 'Хэш %s некорректен';
$lang['HASH_NOT_FOUND'] = 'Раздача с хэшем %s не найдена';

View file

@ -1494,6 +1494,7 @@ $lang['REPORTS_DELETED'] = 'Вибрані повідомлення видале
$lang['SEARCH_S'] = 'пошук...'; $lang['SEARCH_S'] = 'пошук...';
$lang['FORUM_S'] = 'по форуму'; $lang['FORUM_S'] = 'по форуму';
$lang['TRACKER_S'] = 'по трекеру'; $lang['TRACKER_S'] = 'по трекеру';
$lang['HASH_S'] = 'по info_hash';
// copyright // copyright
$lang['NOTICE'] = '!УВАГА!'; $lang['NOTICE'] = '!УВАГА!';
@ -2976,3 +2977,6 @@ $lang['ATOM_SUBSCRIBE'] = 'Підписка на стрічку';
$lang['ATOM_NO_MODE'] = 'Не вказано режим для стрічки'; $lang['ATOM_NO_MODE'] = 'Не вказано режим для стрічки';
$lang['ATOM_NO_FORUM'] = 'Для цього форуму немає стрічки (немає початих тем)'; $lang['ATOM_NO_FORUM'] = 'Для цього форуму немає стрічки (немає початих тем)';
$lang['ATOM_NO_USER'] = 'Для цього користувача немає стрічки (немає початих тем)'; $lang['ATOM_NO_USER'] = 'Для цього користувача немає стрічки (немає початих тем)';
$lang['HASH_INVALID'] = 'Хеш %s некоректний';
$lang['HASH_NOT_FOUND'] = 'Роздача з хешем %s не знайдено';

View file

@ -289,10 +289,10 @@ a.postLink-name, a.postLink-name:visited { text-decoration: none; }
* ---------------------------------- */ * ---------------------------------- */
.infobox { .infobox {
border: 1px #B7C0C5 solid; background: #EFEFEF; padding: 1px; border: 1px #B7C0C5 solid; background: #EFEFEF; padding: 1px;
} }
.infobox h1 { .infobox h1 {
background: #D1D7DC; font-size: 1.2em; padding: 0 0.6em 2px; background: #D1D7DC; font-size: 1.2em; padding: 0 0.6em 2px;
} }
/* ---------------------------------- * /* ---------------------------------- *
Inputs, buttons, forms Inputs, buttons, forms
* ---------------------------------- */ * ---------------------------------- */
@ -882,6 +882,9 @@ fieldset.attach { width: 95%; margin: 14px auto; padding: 2px; clear: both; }
a.tr-dl, a.dl-link:link { font-weight: bold; } a.tr-dl, a.dl-link:link { font-weight: bold; }
a.dl-link { font-size: 13px; text-decoration: none; } a.dl-link { font-size: 13px; text-decoration: none; }
a.tr-dl:visited, a.f-dl:visited, a.dl-link:visited { color: #5493B4; font-weight: normal; } a.tr-dl:visited, a.f-dl:visited, a.dl-link:visited { color: #5493B4; font-weight: normal; }
.a-hash { color: #000066 !important; cursor: pointer; }
.a-hash:hover { color: #DD6900 !important; text-decoration: underline !important; }
.a-hash:active, .a-hash:focus { color: #DD6900 !important; text-decoration: underline !important; }
.seed-leech { padding-left: 1px; padding-right: 0; } .seed-leech { padding-left: 1px; padding-right: 0; }
.tr_tm { margin-top: 2px; font-size: 10px; color: #676767; } .tr_tm { margin-top: 2px; font-size: 10px; color: #676767; }

View file

@ -311,13 +311,14 @@ $(document).ready(function() {
</td> </td>
<td style="padding: 3px;"> <td style="padding: 3px;">
<div> <div>
<form id="quick-search" action="" method="post" onsubmit="$(this).attr('action', $('#search-action').val());"> <form id="quick-search" action="" method="post" onsubmit="$(this).attr('action', $('#search-action').val()); if($('#search-action option:selected').attr('class') == 'hash') $('#search-text').attr('name', 'hash');">
<input type="hidden" name="max" value="1" /> <input type="hidden" name="max" value="1" />
<input type="hidden" name="to" value="1" /> <input type="hidden" name="to" value="1" />
<input id="search-text" type="text" name="nm" placeholder="{L_SEARCH_S}" required /> <input id="search-text" type="text" name="nm" placeholder="{L_SEARCH_S}" required />
<select id="search-action"> <select id="search-action">
<option value="tracker.php#results" selected="selected"> {L_TRACKER_S} </option> <option value="tracker.php#results" selected="selected"> {L_TRACKER_S} </option>
<option value="search.php"> {L_FORUM_S} </option> <option value="search.php"> {L_FORUM_S} </option>
<option value="tracker.php" class="hash"> {L_HASH_S} </option>
</select> </select>
<input type="submit" class="med" value="{L_SEARCH}" style="width: 55px;" /> <input type="submit" class="med" value="{L_SEARCH}" style="width: 55px;" />
</form> </form>

View file

@ -267,10 +267,10 @@ $(function(){
</div> </div>
</fieldset> </fieldset>
<fieldset> <fieldset>
<legend>{L_TITLE_MATCH}</legend> <legend><span class="a-hash bold" onclick="$(this).addClass('bold').next().removeClass('bold'); $('#title_search').attr('name','{TITLE_MATCH_NAME}');">{L_TITLE_MATCH}</span>&nbsp;&middot;&nbsp;<span class="a-hash" onclick="$(this).addClass('bold').prev().removeClass('bold'); $('#title_search').attr('name','hash');">{L_HASH_S}</span></legend>
<div> <div>
<p class="input"> <p class="input">
<input style="width: 95%;" class="post" type="text" size="50" maxlength="{TITLE_MATCH_MAX}" name="{TITLE_MATCH_NAME}" value="{TITLE_MATCH_VAL}" /> <input id="title_search" style="width: 95%;" class="post" type="text" size="50" maxlength="{TITLE_MATCH_MAX}" name="{TITLE_MATCH_NAME}" value="{TITLE_MATCH_VAL}" />
</p> </p>
<p class="chbox med"> <p class="chbox med">
{ALL_WORDS_CHBOX} {ALL_WORDS_CHBOX}

View file

@ -158,8 +158,9 @@
<tr class="row1"> <tr class="row1">
<td width="15%">{L_TORRENT}:</td> <td width="15%">{L_TORRENT}:</td>
<td width="70%"> <td width="70%">
{postrow.attach.tor_reged.TRACKER_LINK} &nbsp; {postrow.attach.tor_reged.TRACKER_LINK}
[ <span title="{postrow.attach.tor_reged.REGED_DELTA}">{postrow.attach.tor_reged.REGED_TIME}</span> ] [ <span title="{postrow.attach.tor_reged.REGED_DELTA}">{postrow.attach.tor_reged.REGED_TIME}</span> ]
&#0183; {postrow.attach.tor_reged.HASH}
</td> </td>
<td width="15%" rowspan="4" class="tCenter pad_6"> <td width="15%" rowspan="4" class="tCenter pad_6">
<!-- IF postrow.attach.tor_reged.TOR_FROZEN --> <!-- IF postrow.attach.tor_reged.TOR_FROZEN -->
@ -231,8 +232,8 @@
<td colspan="3"> <td colspan="3">
<script type="text/javascript"> <script type="text/javascript">
ajax.callback.change_torrent = function(data) { ajax.callback.change_torrent = function(data) {
if(data.title) alert(data.title); if (data.title) alert(data.title);
if(data.url) document.location.href = data.url; if (data.url) document.location.href = data.url;
}; };
</script> </script>
<!-- IF TOR_CONTROLS --> <!-- IF TOR_CONTROLS -->
@ -265,9 +266,7 @@
<!-- ENDIF --> <!-- ENDIF -->
<!-- ENDIF --> <!-- ENDIF -->
</select> </select>
<a href="#" onclick="change_torrents($('#tor-{postrow.attach.tor_reged.ATTACH_ID} select').val()); return false;"><input type="submit" value="{L_EDIT}" class="liteoption" /></a> <a href="#" onclick="change_torrents($('#tor-{postrow.attach.tor_reged.ATTACH_ID} select').val()); return false;"><input type="submit" value="{L_EDIT}" class="liteoption" /></a>
<!-- ELSEIF TOR_HELP_LINKS --> <!-- ELSEIF TOR_HELP_LINKS -->
{TOR_HELP_LINKS} {TOR_HELP_LINKS}
<!-- ELSE --> <!-- ELSE -->

View file

@ -245,6 +245,7 @@ $GPC = array(
's_not_seen' => array('sns', $search_all, SELECT), 's_not_seen' => array('sns', $search_all, SELECT),
'time' => array('tm', $search_all, SELECT), 'time' => array('tm', $search_all, SELECT),
'tor_type' => array('tor_type', 0, CHBOX), 'tor_type' => array('tor_type', 0, CHBOX),
'hash' => array('hash', null, REQUEST),
); );
// Define all GPC vars with default values // Define all GPC vars with default values
@ -425,6 +426,11 @@ if (!$set_default)
} }
} }
if (isset($_REQUEST[$hash_key]))
{
hash_search($_REQUEST[$hash_key]);
}
if ($tm =& $_REQUEST[$title_match_key] AND is_string($tm)) if ($tm =& $_REQUEST[$title_match_key] AND is_string($tm))
{ {
if ($tmp = mb_substr(trim($tm), 0, $title_match_max_len)) if ($tmp = mb_substr(trim($tm), 0, $title_match_max_len))