Cмена логики хранения информации dl листа. Для обновления потребуется обновление базы данных, обязательно ознакомьтесь с темой: http://torrentpier.me/threads/revision-571.25681/ git-svn-id: https://torrentpier2.googlecode.com/svn/trunk@571 a8ac35ab-4ca4-ca47-4c2d-a49a94f06293
This commit is contained in:
pherum83@gmail.com 2014-01-28 19:14:24 +00:00
commit 22c699db99
31 changed files with 82 additions and 120 deletions

View file

@ -21,9 +21,7 @@ DROP TABLE IF EXISTS `bb_attach_quota`;
DROP TABLE IF EXISTS `bb_auth_access`;
DROP TABLE IF EXISTS `bb_auth_access_snap`;
DROP TABLE IF EXISTS `bb_banlist`;
DROP TABLE IF EXISTS `bb_bt_dlstatus_main`;
DROP TABLE IF EXISTS `bb_bt_dlstatus_mrg`;
DROP TABLE IF EXISTS `bb_bt_dlstatus_new`;
DROP TABLE IF EXISTS `bb_bt_dlstatus`;
DROP TABLE IF EXISTS `bb_bt_dlstatus_snap`;
DROP TABLE IF EXISTS `bb_bt_last_torstat`;
DROP TABLE IF EXISTS `bb_bt_last_userstat`;
@ -73,7 +71,6 @@ DROP TABLE IF EXISTS `bb_vote_voters`;
DROP TABLE IF EXISTS `bb_words`;
DROP TABLE IF EXISTS `buf_last_seeder`;
DROP TABLE IF EXISTS `buf_topic_view`;
DROP TABLE IF EXISTS `sph_counter`;
--
-- Структура таблицы `bb_ads`
@ -235,40 +232,10 @@ CREATE TABLE IF NOT EXISTS `bb_banlist` (
-- --------------------------------------------------------
--
-- Структура таблицы `bb_bt_dlstatus_main`
-- Структура таблицы `bb_bt_dlstatus`
--
CREATE TABLE IF NOT EXISTS `bb_bt_dlstatus_main` (
`user_id` mediumint(9) NOT NULL DEFAULT '0',
`topic_id` mediumint(8) unsigned NOT NULL DEFAULT '0',
`user_status` tinyint(1) NOT NULL DEFAULT '0',
`last_modified_dlstatus` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`user_id`,`topic_id`),
KEY `topic_id` (`topic_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
-- --------------------------------------------------------
--
-- Структура таблицы `bb_bt_dlstatus_mrg`
--
CREATE TABLE IF NOT EXISTS `bb_bt_dlstatus_mrg` (
`user_id` mediumint(9) NOT NULL DEFAULT '0',
`topic_id` mediumint(8) unsigned NOT NULL DEFAULT '0',
`user_status` tinyint(1) NOT NULL DEFAULT '0',
`last_modified_dlstatus` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
KEY `user_topic` (`user_id`,`topic_id`),
KEY `topic_id` (`topic_id`)
) ENGINE=MRG_MyISAM DEFAULT CHARSET=utf8 UNION=(`bb_bt_dlstatus_main`,`bb_bt_dlstatus_new`);
-- --------------------------------------------------------
--
-- Структура таблицы `bb_bt_dlstatus_new`
--
CREATE TABLE IF NOT EXISTS `bb_bt_dlstatus_new` (
CREATE TABLE IF NOT EXISTS `bb_bt_dlstatus` (
`user_id` mediumint(9) NOT NULL DEFAULT '0',
`topic_id` mediumint(8) unsigned NOT NULL DEFAULT '0',
`user_status` tinyint(1) NOT NULL DEFAULT '0',
@ -1532,15 +1499,3 @@ CREATE TABLE IF NOT EXISTS `buf_topic_view` (
`topic_views` mediumint(8) unsigned NOT NULL DEFAULT '0',
PRIMARY KEY (`topic_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
-- --------------------------------------------------------
--
-- Структура таблицы `sph_counter`
--
CREATE TABLE IF NOT EXISTS `sph_counter` (
`counter_id` int(11) NOT NULL,
`max_doc_id` int(11) NOT NULL,
PRIMARY KEY (`counter_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

View file

@ -55,8 +55,8 @@ $domain_name = (!empty($_SERVER['SERVER_NAME'])) ? $_SERVER['SERVER_NAME'] : $do
// Increase number of revision after update
$bb_cfg['tp_version'] = '2.5 (unstable)';
$bb_cfg['tp_release_date'] = '27-01-2014';
$bb_cfg['tp_release_state'] = 'R570';
$bb_cfg['tp_release_date'] = '28-01-2014';
$bb_cfg['tp_release_state'] = 'R571';
// Database
$charset = 'utf8';

View file

@ -4,7 +4,7 @@ define('IN_FORUM', true);
define('BB_SCRIPT', 'dl_list');
define('IN_SERVICE', true);
define('BB_ROOT', './');
require(BB_ROOT ."common.php");
require(BB_ROOT .'common.php');
$forum_id = (@$_REQUEST[POST_FORUM_URL]) ? (int) $_REQUEST[POST_FORUM_URL] : 0;
$topic_id = (@$_REQUEST[POST_TOPIC_URL]) ? (int) $_REQUEST[POST_TOPIC_URL] : 0;
@ -172,13 +172,7 @@ if ($topics_ary && ($mode == 'set_dl_status' || $mode == 'set_topics_dl_status')
}
$new_dlstatus_sql = DB()->build_array('MULTI_INSERT', $new_dlstatus_ary);
DB()->query("
DELETE FROM ". BB_BT_DLSTATUS_MAIN ."
WHERE user_id = {$user->id}
AND topic_id IN(". join(',', $topics_ary) .")
");
DB()->query("REPLACE INTO ". BB_BT_DLSTATUS_NEW ." $new_dlstatus_sql");
DB()->query("REPLACE INTO ". BB_BT_DLSTATUS ." $new_dlstatus_sql");
redirect("$redirect_type?$redirect");
}

View file

@ -2,6 +2,8 @@
if (!defined('BB_ROOT')) die(basename(__FILE__));
global $bb_cfg;
$fix_errors = true;
$debug_mode = false;

View file

@ -2,6 +2,8 @@
if (!defined('BB_ROOT')) die(basename(__FILE__));
global $bb_cfg;
$fix_errors = true;
$debug_mode = false;

View file

@ -2,6 +2,8 @@
if (!defined('BB_ROOT')) die(basename(__FILE__));
global $bb_cfg;
$gc_cache = array(
'tr_cache',
'bb_cache',
@ -15,6 +17,6 @@ foreach ($gc_cache as $cache_name)
if (method_exists(CACHE($cache_name), 'gc'))
{
$changes = CACHE($cache_name)->gc();
$cron_runtime_log .= date('Y-m-d H:i:s') ." -- tr -- $changes rows deleted\n";
$cron_runtime_log = date('Y-m-d H:i:s') ." -- tr -- $changes rows deleted\n";
}
}

View file

@ -2,6 +2,8 @@
if (!defined('BB_ROOT')) die(basename(__FILE__));
global $bb_cfg;
define('BUF_DLSTATUS_TABLE', 'tmp_buf_dlstatus');
// Move new dl-status records to main table
@ -20,13 +22,13 @@ DB()->query("
SELECT
user_id, topic_id, user_status
FROM
". BB_BT_DLSTATUS_NEW ."
". BB_BT_DLSTATUS ."
WHERE
last_modified_dlstatus < DATE_SUB(NOW(), INTERVAL 1 DAY)
");
DB()->query("
REPLACE INTO ". BB_BT_DLSTATUS_MAIN ."
REPLACE INTO ". BB_BT_DLSTATUS ."
(user_id, topic_id, user_status)
SELECT
user_id, topic_id, user_status
@ -34,9 +36,9 @@ DB()->query("
");
DB()->query("
DELETE new
DELETE dl
FROM ". BUF_DLSTATUS_TABLE ." buf
INNER JOIN ". BB_BT_DLSTATUS_NEW ." new USING(user_id, topic_id)
INNER JOIN ". BB_BT_DLSTATUS ." dl USING(user_id, topic_id)
");
DB()->query("DROP TEMPORARY TABLE ". BUF_DLSTATUS_TABLE);

View file

@ -2,6 +2,8 @@
if (!defined('BB_ROOT')) die(basename(__FILE__));
global $bb_cfg;
$log_days_keep = (int) $bb_cfg['log_days_keep'];
DB()->query("

View file

@ -2,6 +2,8 @@
if (!defined('BB_ROOT')) die(basename(__FILE__));
global $bb_cfg;
sleep(15);
$exec_output = array();

View file

@ -2,6 +2,8 @@
if (!defined('BB_ROOT')) die(basename(__FILE__));
global $bb_cfg;
require_once(INC_DIR .'functions_admin.php');
if ($bb_cfg['prune_enable'])

View file

@ -2,6 +2,8 @@
if (!defined('BB_ROOT')) die(basename(__FILE__));
global $bb_cfg;
$users_per_cycle = 1000;
require_once(INC_DIR .'functions_admin.php');

View file

@ -2,6 +2,8 @@
if (!defined('BB_ROOT')) die(basename(__FILE__));
global $bb_cfg;
if ($bb_cfg['topic_moved_days_keep'])
{
$prune_time = TIMENOW - 86400*$bb_cfg['topic_moved_days_keep'];

View file

@ -2,6 +2,8 @@
if (!defined('BB_ROOT')) die(basename(__FILE__));
global $bb_cfg;
$user_session_expire_time = TIMENOW - intval($bb_cfg['user_session_duration']);
$admin_session_expire_time = TIMENOW - intval($bb_cfg['admin_session_duration']);

View file

@ -2,6 +2,8 @@
if (!defined('BB_ROOT')) die(basename(__FILE__));
global $bb_cfg;
$exec_output = array();
$exec_return_status = 0;

View file

@ -2,7 +2,7 @@
if (!defined('BB_ROOT')) die(basename(__FILE__));
global $tr_cfg;
global $bb_cfg, $tr_cfg;
$releaser = DL_STATUS_RELEASER;
@ -111,21 +111,18 @@ if ($tr_cfg['update_dlstat'])
WHERE u.user_id = ub.user_id
");
// Delete from MAIN what exists in BUF but not exsits in NEW
// Delete from dl_list what exists in BUF but not exsits in NEW
DB()->query("
DELETE main
FROM ". BB_BT_DLSTATUS_MAIN ." main
INNER JOIN (
". NEW_BB_BT_LAST_TORSTAT ." buf
LEFT JOIN ". BB_BT_DLSTATUS_NEW ." new USING(user_id, topic_id)
) USING(user_id, topic_id)
WHERE new.user_id IS NULL
AND new.topic_id IS NULL
DELETE dl
FROM ". BB_BT_DLSTATUS ." dl
INNER JOIN ". NEW_BB_BT_LAST_TORSTAT ." buf USING(user_id, topic_id)
WHERE buf.user_id IS NULL
AND buf.topic_id IS NULL
");
// Update DL-Status
DB()->query("
REPLACE INTO ". BB_BT_DLSTATUS_NEW ."
REPLACE INTO ". BB_BT_DLSTATUS ."
(user_id, topic_id, user_status)
SELECT
user_id, topic_id, dl_status

View file

@ -2,6 +2,8 @@
if (!defined('BB_ROOT')) die(basename(__FILE__));
global $bb_cfg;
if (empty($bb_cfg['seeder_last_seen_days_keep']) || empty($bb_cfg['seeder_never_seen_days_keep']))
{
return;

View file

@ -2,6 +2,8 @@
if (!defined('BB_ROOT')) die(basename(__FILE__));
global $bb_cfg;
DB()->expect_slow_query(600);
//
@ -140,7 +142,7 @@ if ($bb_cfg['torhelp_enabled'])
dl.user_id, GROUP_CONCAT(dl.topic_id)
FROM ". BB_BT_TRACKER_SNAP ." trsn
INNER JOIN ". BB_BT_TORRENTS ." tor ON (tor.topic_id = trsn.topic_id)
INNER JOIN ". BB_BT_DLSTATUS_MAIN ." dl ON (dl.topic_id = tor.topic_id)
INNER JOIN ". BB_BT_DLSTATUS ." dl ON (dl.topic_id = tor.topic_id)
WHERE
trsn.seeders <= $tor_min_seeders
AND trsn.leechers >= $tor_min_leechers

View file

@ -352,19 +352,13 @@ function topic_delete ($mode_or_topic_id, $forum_id = null, $prune_time = 0, $pr
// Delete torrents
DB()->query("
DELETE tor, tr
DELETE tor, tr, dl
FROM ". $tmp_delete_topics ." del
LEFT JOIN ". BB_BT_TORRENTS ." tor USING(topic_id)
LEFT JOIN ". BB_BT_TRACKER ." tr USING(topic_id)
");
/*
// Delete dlstat
DB()->query("
DELETE dl
FROM ". $tmp_delete_topics ." del
LEFT JOIN ". BB_BT_DLSTATUS ." dl USING(topic_id)
");
*/
// Log action
if ($prune)
{

View file

@ -1,5 +1,7 @@
<?php
if (!defined('BB_ROOT')) die(basename(__FILE__));
function get_sql_log ()
{
global $DBS, $CACHES, $sphinx, $datastore;
@ -27,11 +29,11 @@ function get_sql_log ()
if (!empty($datastore->db->dbg))
{
$log .= get_sql_log_html($datastore->db, '$datastore ['.$datastore->engine.']');
$log .= get_sql_log_html($datastore->db, 'cache: datastore ['.$datastore->engine.']');
}
else if(!empty($datastore->dbg))
{
$log .= get_sql_log_html($datastore, '$datastore ['.$datastore->engine.']');
$log .= get_sql_log_html($datastore, 'cache: datastore ['.$datastore->engine.']');
}
return $log;

View file

@ -338,10 +338,8 @@ define('BB_ATTACHMENTS', 'bb_attachments');
define('BB_AUTH_ACCESS_SNAP', 'bb_auth_access_snap');
define('BB_AUTH_ACCESS', 'bb_auth_access');
define('BB_BANLIST', 'bb_banlist');
define('BB_BT_DLSTATUS_MAIN', 'bb_bt_dlstatus_main');
define('BB_BT_DLSTATUS_NEW', 'bb_bt_dlstatus_new');
define('BB_BT_DLSTATUS', 'bb_bt_dlstatus');
define('BB_BT_DLSTATUS_SNAP', 'bb_bt_dlstatus_snap');
define('BB_BT_DLSTATUS', 'bb_bt_dlstatus_mrg'); // main + new
define('BB_BT_LAST_TORSTAT', 'bb_bt_last_torstat');
define('BB_BT_LAST_USERSTAT', 'bb_bt_last_userstat');
define('BB_BT_TORHELP', 'bb_bt_torhelp');
@ -402,18 +400,18 @@ define('USEREMAIL_MAX_LENGTH', 40);
define('PAGE_HEADER', INC_DIR .'page_header.php');
define('PAGE_FOOTER', INC_DIR .'page_footer.php');
define('CAT_URL', "index.php?" .'c=');
define('DOWNLOAD_URL', "download.php?" .'id=');
define('FORUM_URL', "viewforum.php?" .'f=');
define('GROUP_URL', "groupcp.php?" .'g=');
define('CAT_URL', 'index.php?c=');
define('DOWNLOAD_URL', 'download.php?id=');
define('FORUM_URL', 'viewforum.php?f=');
define('GROUP_URL', 'groupcp.php?g=');
define('LOGIN_URL', $bb_cfg['login_url']);
define('MODCP_URL', "modcp.php?" .'f=');
define('MODCP_URL', 'modcp.php?f=');
define('PM_URL', $bb_cfg['pm_url']);
define('POST_URL', "viewtopic.php?" .'p=');
define('POST_URL', 'viewtopic.php?p=');
define('POSTING_URL', $bb_cfg['posting_url']);
define('PROFILE_URL', "profile.php?" .'mode=viewprofile&amp;u=');
define('BONUS_URL', "profile.php?" .'mode=bonus');
define('TOPIC_URL', "viewtopic.php?" .'t=');
define('PROFILE_URL', 'profile.php?mode=viewprofile&amp;u=');
define('BONUS_URL', 'profile.php?mode=bonus');
define('TOPIC_URL', 'viewtopic.php?t=');
define('USER_AGENT', @strtolower($_SERVER['HTTP_USER_AGENT']));
define('UA_OPERA', strpos(USER_AGENT, 'pera'));
@ -482,6 +480,11 @@ function prn_r ($var, $title = '', $print = true)
return $r;
}
function pre ($var, $title = '', $print = true)
{
prn_r($var, $title, $print);
}
function prn ()
{
if (!DBG_USER) return;

View file

@ -34,8 +34,7 @@ if ($show_dbg_info)
$gzip_text .= ($bb_cfg['gzip_compress']) ? $lang['ON'] : $lang['OFF'];
$debug_text = (DEBUG) ? 'Debug ON' : 'Debug OFF';
$stat = '[&nbsp; ';
$stat .= "".$lang['EXECUTION_TIME'] ." $gen_time_txt ".$lang['SEC'];
$stat = '[&nbsp; '. $lang['EXECUTION_TIME'] ." $gen_time_txt ". $lang['SEC'];
if (!empty($DBS))
{
@ -67,8 +66,8 @@ if ($show_dbg_info)
<label><input type="checkbox" onclick="setCookie(\'sql_log\', this.checked ? 1 : 0); window.location.reload();" '. (!empty($_COOKIE['sql_log']) ? HTML_CHECKED : '') .' />show log </label>
<label title="dont truncate long queries"><input type="checkbox" onclick="setCookie(\'sql_log_full\', this.checked ? 1 : 0); window.location.reload();" '. (!empty($_COOKIE['sql_log_full']) ? HTML_CHECKED : '') .' />cutt </label>
<label><input type="checkbox" onclick="setCookie(\'explain\', this.checked ? 1 : 0); window.location.reload();" '. (!empty($_COOKIE['explain']) ? HTML_CHECKED : '') .' />explain </label>
[ <a href="#" class="med" onclick="$p(\'sqlLog\').className=\'sqlLog sqlLogWrapped\'; return false;">wrap</a> &middot; <a href="#sqlLog" class="med" onclick="$(\'#sqlLog\').css({ height: $(window).height()-50 }); return false;">max</a> ]
';
$stat .= !empty($_COOKIE['sql_log']) ? '[ <a href="#" class="med" onclick="$p(\'sqlLog\').className=\'sqlLog sqlLogWrapped\'; return false;">wrap</a> &middot; <a href="#sqlLog" class="med" onclick="$(\'#sqlLog\').css({ height: $(window).height()-50 }); return false;">max</a> ]' : '';
echo '<div style="margin: 6px; font-size:10px; color: #444444; letter-spacing: -1px; text-align: center;">'. $stat .'</div>';
}

View file

@ -27,14 +27,6 @@ if ($profiledata['user_id'] != $userdata['user_id'] && !IS_ADMIN)
message_die(GENERAL_MESSAGE, $lang['NOT_AUTHORISED']);
}
$language = $bb_cfg['default_lang'];
if (!file_exists(LANG_ROOT_DIR ."lang_$language/lang_admin_attach.php"))
{
$language = $attach_config['board_lang'];
}
include(LANG_ROOT_DIR ."lang_$language/lang_admin_attach.php");
$start = request_var('start', 0);
$sort_order = request_var('order', 'ASC');
$sort_order = ($sort_order == 'ASC') ? 'ASC' : 'DESC';

View file

@ -8,7 +8,6 @@ set_die_append_msg();
if (IS_ADMIN)
{
require(LANG_ROOT_DIR ."lang_{$userdata['user_lang']}/lang_admin.php");
$bb_cfg['require_activation'] = false;
$new_user = (int) request_var('admin', '');

View file

@ -856,7 +856,7 @@ $lang['YOU_BEEN_BANNED'] = 'You have been banned from this forum.<br />Please co
$lang['REG_USERS_ONLINE'] = 'Who is online registered users: %d and ';
$lang['HIDDEN_USERS_ONLINE'] = 'hidden users: %d';
$lang['GUEST_USERS_ONLINE'] = 'Online Guests: %d';
$lang['ALL_USERS_ONLNE'] = 'All users:';
$lang['ALL_USERS_ONLINE'] = 'All users:';
$lang['ONLINE_EXPLAIN'] = 'users active over the past five minutes';
$lang['LAST_UPDATED'] = 'Last Updated';

View file

@ -859,7 +859,7 @@ $lang['YOU_BEEN_BANNED'] = 'Вам был закрыт доступ к фору
$lang['REG_USERS_ONLINE'] = 'Сейчас на сайте зарегистрированных пользователей: %d и ';
$lang['HIDDEN_USERS_ONLINE'] = 'скрытых пользователей: %d';
$lang['GUEST_USERS_ONLINE'] = 'Сейчас на сайте гостей: %d';
$lang['ALL_USERS_ONLNE'] = 'Всех:';
$lang['ALL_USERS_ONLINE'] = 'Всех:';
$lang['ONLINE_EXPLAIN'] = 'данные за последние пять минут';
$lang['LAST_UPDATED'] = 'Последнее изменение';

View file

@ -94,7 +94,7 @@ tr.hl-tr:hover td { background-color: #CFC !important; }
<td nowrap="nowrap" align="center">
<a href="admin_cron.php?mode=run&id={list.CRON_ID}"><img src="../images/icon_sync.gif" alt="[Run]" title="{L_CRON_RUN}" /></a>
<a href="admin_cron.php?mode=edit&id={list.CRON_ID}"><img src="../images/icon_edit.gif" alt="[Edit]" title="{L_CRON_EDIT_HEAD_EDIT}" /></a>
<a href="admin_cron.php?mode=delete&id={list.CRON_ID}"><img src="../images/icon_delete.gif" alt="[Del]" title="{L_CRON_DEL}" /></a>
<a href="admin_cron.php?mode=delete&id={list.CRON_ID}"><img src="../images/icon_delete.gif" alt="[Del]" title="{L_CRON_DEL}" onclick="return cfm('Вы действительно хотите удалить крон задачу?');" /></a>
</td>
</tr>
<!-- END list -->

View file

@ -2,7 +2,7 @@
<!-- IF TPL_ADMIN_FRAMESET -->
<!--========================================================================-->
<!DOCTYPE html>
<html dir="{L_CONTENT_DIRECTION}">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset={L_CONTENT_ENCODING}" />
<meta http-equiv="Content-Style-Type" content="text/css" />

View file

@ -1,4 +1,4 @@
<h1 class="pagetitle">{L_MEMBERLIST}</h1>
<h1 class="pagetitle">{PAGE_TITLE}</h1>
<form method="post" action="{S_MODE_ACTION}" name="post">
<table width="100%">

View file

@ -469,7 +469,7 @@ $(document).ready(function() {
<form id="quick-search" action="" method="post" onsubmit="$(this).attr('action', $('#search-action').val());">
<input type="hidden" name="max" value="1" />
<input type="hidden" name="to" value="1" />
<input id="search-text" type="text" name="nm" class="hint" placeholder="{L_SEARCH_S}" required />
<input id="search-text" type="text" name="nm" placeholder="{L_SEARCH_S}" required />
<select id="search-action">
<option value="tracker.php#results" selected="selected"> {L_TRACKER_S} </option>
<option value="search.php"> {L_FORUM_S} </option>

View file

@ -281,12 +281,13 @@
<!-- ELSEIF postrow.attach.tor_reged.TOR_STATUS_REPLY -->
$('#tor_comment').html('{L_TOR_AUTH_SENT_COMMENT}');
<!-- ENDIF -->
$('#comment').attr('value', '');
};
</script>
<span id="tor_comment">
<!-- IF $bb_cfg['tor_comment'] -->
<input type="text" id="comment" onfocus="if(this.value==this.defaultValue || this.className=='hint'){this.value=''; this.className='';}" onblur="if(this.value==''){this.value=this.defaultValue; this.className='hint';}" value="{L_COMMENT}" class="hint" />
<input type="text" id="comment" placeholder="{L_COMMENT}" />
<!-- ENDIF -->
<!-- IF AUTH_MOD -->

View file

@ -175,8 +175,8 @@ if (!$is_auth['auth_read'])
{
if (IS_GUEST)
{
$redirect = ($post_id) ? POST_POST_URL . "=$post_id" : POST_TOPIC_URL . "=$topic_id";
$redirect .= ($start) ? "&start=$start" : '';
$redirect = ($post_id) ? POST_URL ."$post_id#$post_id" : TOPIC_URL . $topic_id;
$redirect .= ($start && !$post_id) ? "&start=$start" : '';
redirect(LOGIN_URL . "?redirect=viewtopic.php&$redirect");
}
bb_die($lang['TOPIC_POST_NOT_EXIST']);