From 488640825b2cf7c2e83c06c63a32f97bb3752295 Mon Sep 17 00:00:00 2001 From: glix08 Date: Tue, 2 Aug 2011 08:24:16 +0000 Subject: [PATCH] r187 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Очистка и некоторые правки хобота, бан медиагета (по 40-50 человек раздают из-за расшаривания торрентов всеобщего). git-svn-id: https://torrentpier2.googlecode.com/svn/trunk@187 a8ac35ab-4ca4-ca47-4c2d-a49a94f06293 --- install/xbt/linux/Tracker/connection.cpp | 5 +- install/xbt/linux/Tracker/server.cpp | 157 ++++++++------------ install/xbt/linux/Tracker/server.h | 9 +- install/xbt/linux/Tracker/tracker_input.cpp | 3 + install/xbt/linux/misc/bt_strings.h | 1 - upload/config.php | 2 +- 6 files changed, 72 insertions(+), 105 deletions(-) diff --git a/install/xbt/linux/Tracker/connection.cpp b/install/xbt/linux/Tracker/connection.cpp index ced4adf70..71a78b8de 100644 --- a/install/xbt/linux/Tracker/connection.cpp +++ b/install/xbt/linux/Tracker/connection.cpp @@ -192,6 +192,7 @@ void Cconnection::read(const std::string& v) { do { a++; } while (a < e && v[a] == '/'); + if (a + 1 < e && v[a + 1] == '/') a += 2; @@ -221,8 +222,8 @@ void Cconnection::read(const std::string& v) if (!ti.valid()) break; gzip = false; - if (ti.banned()) - s = Cbvalue().d(bts_failure_reason, bts_banned_client).read(); + if (ti.banned()) + s = Cbvalue().d(bts_failure_reason, bts_banned_client).read(); else if (0) s = Cbvalue().d(bts_failure_reason, bts_banned_client).read(); else diff --git a/install/xbt/linux/Tracker/server.cpp b/install/xbt/linux/Tracker/server.cpp index 3341e4256..5739894a7 100644 --- a/install/xbt/linux/Tracker/server.cpp +++ b/install/xbt/linux/Tracker/server.cpp @@ -330,8 +330,6 @@ std::string Cserver::insert_peer(const Ctracker_input& v, bool udp, t_user* user std::string xbt_error = ""; if (v.m_left && v.m_event != Ctracker_input::e_paused && user && !user->can_leech && !m_config.m_free_leech) /*if (xbt_error.empty())*/ xbt_error = bts_can_not_leech; - if (v.m_left && user && user->user_park) //park - xbt_error = bts_park; if (user && user->user_active == 0) //unactive xbt_error = bts_disabled; if (!file.ctime) @@ -378,7 +376,6 @@ std::string Cserver::insert_peer(const Ctracker_input& v, bool udp, t_user* user long long rel = 0; long long ul_gdc = 0, ul_gdc_16k = 0; int ul_gdc_count = 0, ul_16k_count = 0, ul_eq_dl_count = 0; - int end_vip = 0; bool ipv6set = v.m_ipv6set && (v.m_family == AF_INET6 || m_config.m_trust_ipv6); @@ -437,59 +434,46 @@ std::string Cserver::insert_peer(const Ctracker_input& v, bool udp, t_user* user } downloaded_db = (m_config.m_free_leech || file.dl_percent<0) ? 0 : (downloaded * file.dl_percent /100); - if (user->user_vip == 2 && user->user_vip_exp < time()) end_vip = 1; //vip - if (user->user_vip > 0 && end_vip == 0) downloaded_db = 0; //vip - if (user->uid == file.tor_poster_id) rel = uploaded; - else if (!v.m_left && file.seeders == 1) bonus = 1; + if (user->uid == file.tor_poster_id) + rel = uploaded; + else if (!v.m_left && file.seeders == 1) + bonus = 1; // TorrentPier: bb_bt_users_dl_status int new_status = v.m_left ? 0 : 1; if (user->uid == file.tor_poster_id) new_status = -1; if (new_status != i->dl_status && file.tor_topic_id) { Csql_query q(m_database, "(?,?,?),"); // topic_id,user_id,user_status,update_time - q.p(file.tor_topic_id); // topic_id - q.p(user->uid); // user_id + q.p(file.tor_topic_id); // topic_id + q.p(user->uid); // user_id q.p(new_status); m_users_dl_status_buffer += q.read(); i->dl_status = new_status; } - // TorrentPier: bb_bt_torrent_activity - int user_status = new_status; - if (new_status == -1) new_status = 2; - Csql_query q(m_database, "(?,?,?,?,?,?,?,?,?,?,?,?),"); - q.p(user->uid); // user_id - q.p(file.tor_topic_id); // torrent_id - q.p(uploaded); - q.p(downloaded_db); - q.p(upspeed); // speed_up mediumint(8) unsigned NOT NULL default '0', - q.p(downspeed); // speed_down mediumint(8) unsigned NOT NULL default '0', - q.p(new_status); - q.p(bonus ? uploaded/bonus : 0); - q.p(user_status); - q.p(downloaded); - q.p(time()); - q.p(m_config.m_announce_interval); //torrent_time - m_tor_dl_stat_buffer += q.read(); + // TorrentPier: bb_bt_tor_dl_stat + if (uploaded || downloaded) { + Csql_query q(m_database, "(?,?,?,?,?,?),"); // torrent_id, user_id, attach_id, t_up_total, t_down_total + q.p(file.fid); // torrent_id + q.p(user->uid); // user_id + q.p(file.tor_attach_id); // attach_id + q.p(uploaded); + q.p(downloaded_db); + q.p(bonus ? uploaded * bonus / 100 : 0); + m_tor_dl_stat_buffer += q.read(); + } // TorrentPier: bb_cheat_log long long cheat = (long long) m_config.m_cheat_upload * 1024 * 1024 * 1024; if (uploaded > cheat) { - Csql_query q(m_database, "(?,?,?,?),"); // torrent_id,user_id,attach_id,t_up_total,t_down_total - q.p(user->uid); // user_id + Csql_query q(m_database, "(?,?,?,?),"); // torrent_id, user_id, attach_id, t_up_total, t_down_total + q.p(user->uid); // user_id q.p(uploaded); q.p(hex_encode(8, ntohl(v.m_ipa))); q.p(time()); m_cheat_buffer += q.read(); } - - //vip - if (end_vip) { - Csql_query q(m_database, "(?),"); // user_id - q.p(user->uid); // user_id - m_vip_buffer += q.read(); - } } Csql_query q(m_database, "(?,?,?,?,?,?,?,?,?,?, ?,?,?,?, ?,?,?,?,?,?),"); @@ -503,21 +487,21 @@ std::string Cserver::insert_peer(const Ctracker_input& v, bool udp, t_user* user ip_st = hex_encode(8, ntohl(v.m_ipa)); peer_hash = md5(v.m_info_hash+v.m_passkey+port_st+ip_st); - q.p(file.fid); // torrent_id mediumint(8) unsigned NOT NULL default '0', + q.p(file.fid); // torrent_id mediumint(8) unsigned NOT NULL default '0' q.p(v.m_peer_id); q.p(peer_hash); - q.p(user->uid); // user_id mediumint(9) NOT NULL default '0', - q.p(hex_encode(8, ntohl(v.m_ipa))); // ip char(8) binary NOT NULL default '0', - q.p(const_memory_range(v.m_ipv6bin, ipv6set ? 16 : 0)); // ipv6 varchar(32) - q.p(ntohs(v.m_port)); // port smallint(5) unsigned NOT NULL default '0', - q.p(uploaded); // uploaded bigint(20) unsigned NOT NULL default '0', - q.p(downloaded_db); // downloaded bigint(20) unsigned NOT NULL default '0', - q.p(v.m_left && v.m_event != Ctracker_input::e_paused ? 0 : 1); // seeder tinyint(1) NOT NULL default '0', - q.p(user->uid==file.tor_poster_id),// releaser - q.p(v.m_left ? (v.m_left>=file.tor_size ? 0 : ((file.tor_size-v.m_left)*100/file.tor_size)) : v.m_uploaded); // complete_percent bigint(20) unsigned NOT NULL default '0', - q.p(upspeed); // speed_up mediumint(8) unsigned NOT NULL default '0', - q.p(downspeed); // speed_down mediumint(8) unsigned NOT NULL default '0', - q.p(time()); // update_time int(11) NOT NULL default '0', + q.p(user->uid); // user_id mediumint(9) NOT NULL default '0' + q.p(hex_encode(8, ntohl(v.m_ipa))); // ip char(8) binary NOT NULL default '0' + q.p(const_memory_range(v.m_ipv6bin, ipv6set ? 16 : 0)); // ipv6 varchar(32) + q.p(ntohs(v.m_port)); // port smallint(5) unsigned NOT NULL default '0' + q.p(uploaded); // uploaded bigint(20) unsigned NOT NULL default '0' + q.p(downloaded_db); // downloaded bigint(20) unsigned NOT NULL default '0' + q.p(v.m_left && v.m_event != Ctracker_input::e_paused ? 0 : 1); // seeder tinyint(1) NOT NULL default '0' + q.p(user->uid==file.tor_poster_id), // releaser + q.p(v.m_left ? (v.m_left>=file.tor_size ? 0 : ((file.tor_size-v.m_left)*100/file.tor_size)) : v.m_uploaded); // complete_percent bigint(20) unsigned NOT NULL default '0' + q.p(upspeed); // speed_up mediumint(8) unsigned NOT NULL default '0' + q.p(downspeed); // speed_down mediumint(8) unsigned NOT NULL default '0' + q.p(time()); // update_time int(11) NOT NULL default '0' q.p(xbt_error); q.p( ul_16k_count*3 > ul_gdc_count*2 ? ul_gdc_16k : ul_gdc ); q.p(ul_gdc_count); @@ -533,7 +517,7 @@ std::string Cserver::insert_peer(const Ctracker_input& v, bool udp, t_user* user q.p(uploaded); q.p(user->uid); q.p(rel); - q.p(bonus ? uploaded/bonus : 0); + q.p(bonus ? uploaded / bonus : 0); q.p(upspeed); q.p(downspeed); m_users_updates_buffer += q.read(); @@ -847,7 +831,7 @@ void Cserver::read_db_deny_from_hosts() return; try { - Csql_result result = Csql_query(m_database, "select begin, end from ?").p_name(table_name(table_deny_from_hosts)).execute(); + Csql_result result = Csql_query(m_database, "SELECT begin, end FROM ?").p_name(table_name(table_deny_from_hosts)).execute(); BOOST_FOREACH(t_deny_from_hosts::reference i, m_deny_from_hosts) i.second.marked = true; for (Csql_row row; row = result.fetch_row(); ) @@ -906,7 +890,7 @@ void Cserver::read_db_files_sql() if (!m_config.m_auto_register) { // XBT read only new torrents, so we need to mark deleted in "_del" table - q = "select rpad(info_hash,20,' '), ?, is_del, dl_percent from "+table_name(table_files)+"_del"; + q = "SELECT rpad(info_hash,20,' '), ?, is_del, dl_percent FROM "+table_name(table_files)+"_del"; q.p_name(column_name(column_files_fid)); Csql_result result = q.execute(); for (Csql_row row; row = result.fetch_row(); ) @@ -930,20 +914,20 @@ void Cserver::read_db_files_sql() } } // fix - q = "delete from "+table_name(table_files)+"_del where ? = ?"; + q = "DELETE FROM "+table_name(table_files)+"_del WHERE ? = ?"; q.p_name(column_name(column_files_fid)); q.p(row[1].i()); q.execute(); } } if (m_files.empty()) - m_database.query("update bb_bt_tracker_snap set " + m_database.query("UPDATE bb_bt_tracker_snap SET " + column_name(column_files_leechers) + " = 0, " + column_name(column_files_seeders) + " = 0, speed_up=0, speed_down=0"); else if (m_config.m_auto_register) return; - q = "select rpad(bt.info_hash,20,' '), bt.?, bt.?, bt.reg_time, bt.size, bt.attach_id, bt.topic_id, bt.poster_id, " - + column_name(column_files_dl_percent) + " from ? bt where reg_time >= ?"; + q = "SELECT rpad(bt.info_hash,20,' '), bt.?, bt.?, bt.reg_time, bt.size, bt.attach_id, bt.topic_id, bt.poster_id, " + + column_name(column_files_dl_percent) + " FROM ? bt WHERE reg_time >= ?"; q.p_name(column_name(column_files_completed)); q.p_name(column_name(column_files_fid)); q.p_name(table_name(table_files)); @@ -982,8 +966,8 @@ void Cserver::read_db_users() try { // TorrentPier begin - Csql_query q(m_database, "select bt.?, auth_key, " + column_name(column_users_can_leech) + ", " - + column_name(column_users_torrents_limit) + ", user_vip, user_vip_exp, user_park, u.user_active from ? bt LEFT JOIN bb_users u ON (u.user_id=bt.user_id)"); + Csql_query q(m_database, "SELECT bt.?, auth_key, " + column_name(column_users_can_leech) + ", " + + column_name(column_users_torrents_limit) + ", u.user_active FROM ? bt LEFT JOIN bb_users u ON (u.user_id = bt.user_id)"); // TorrentPier end q.p_name(column_name(column_users_uid)); @@ -1003,10 +987,7 @@ void Cserver::read_db_users() user.torrents_limit = row[3].i(); user.peers_limit = 2; // # of IP addresses user can leech from user.can_leech = row[2].i(); - user.user_vip = row[4].i(); - user.user_vip_exp = row[5].i(); - user.user_park = row[6].i(); - user.user_active = row[7].i(); + user.user_active = row[4].i(); if (row[1].size()) { user.passkey = row[1].s(); m_users_torrent_passes[user.passkey] = &user; @@ -1042,7 +1023,7 @@ void Cserver::write_db_files() if (!file.fid) { // TorrentPier begin - Csql_query(m_database, "insert into ? (info_hash, reg_time) values (?, unix_timestamp())").p_name(table_name(table_files)).p(i.first).execute(); + Csql_query(m_database, "INSERT INTO ? (info_hash, reg_time) VALUES (?, unix_timestamp())").p_name(table_name(table_files)).p(i.first).execute(); // TorrentPier end file.fid = m_database.insert_id(); @@ -1065,12 +1046,12 @@ void Cserver::write_db_files() buffer.erase(buffer.size() - 1); // TorrentPier begin - m_database.query("insert into " + table_name(table_files) + " (" + m_database.query("INSERT INTO " + table_name(table_files) + " (" + column_name(column_files_completed) + ", " + column_name(column_files_fid) - + ", seeder_last_seen, speed_up, speed_down) values " + + ", seeder_last_seen, speed_up, speed_down) VALUES " + buffer - + " on duplicate key update speed_up=values(speed_up), speed_down=values(speed_down)," + + " ON DUPLICATE KEY UPDATE speed_up = values(speed_up), speed_down = values(speed_down)," + " " + column_name(column_files_completed) + " = " + column_name(column_files_completed) + " + values(" + column_name(column_files_completed) + ")," + " seeder_last_seen = values(seeder_last_seen)" ); @@ -1085,7 +1066,7 @@ void Cserver::write_db_files() try { m_announce_log_buffer.erase(m_announce_log_buffer.size() - 1); - m_database.query("insert delayed into " + table_name(table_announce_log) + " (ipa, port, event, info_hash, peer_id, downloaded, left0, uploaded, uid, mtime) values " + m_announce_log_buffer); + m_database.query("INSERT DELAYED INTO " + table_name(table_announce_log) + " (ipa, port, event, info_hash, peer_id, downloaded, left0, uploaded, uid, mtime) VALUES " + m_announce_log_buffer); } catch (Cdatabase::exception&) { @@ -1097,7 +1078,7 @@ void Cserver::write_db_files() try { m_scrape_log_buffer.erase(m_scrape_log_buffer.size() - 1); - m_database.query("insert delayed into " + table_name(table_scrape_log) + " (ipa, info_hash, mtime) values " + m_scrape_log_buffer); + m_database.query("INSERT DELAYED INTO " + table_name(table_scrape_log) + " (ipa, info_hash, mtime) VALUES " + m_scrape_log_buffer); } catch (Cdatabase::exception&) { @@ -1110,15 +1091,17 @@ void Cserver::write_db_files() void Cserver::write_db_users() { m_write_db_users_time = time(); + if (!m_use_sql) return; + if (!m_files_users_updates_buffer.empty()) { m_files_users_updates_buffer.erase(m_files_users_updates_buffer.size() - 1); try { - m_database.query("insert into " + table_name(table_files_users) - + " (topic_id, peer_id, peer_hash, user_id, ip, ipv6, port, uploaded, downloaded, seeder, releaser, complete_percent, speed_up, speed_down, update_time, xbt_error, ul_gdc, ul_gdc_c, ul_16k_c, ul_eq_dl) values " + m_database.query("INSERT INTO " + table_name(table_files_users) + + " (topic_id, peer_id, peer_hash, user_id, ip, ipv6, port, uploaded, downloaded, seeder, releaser, complete_percent, speed_up, speed_down, update_time, xbt_error, ul_gdc, ul_gdc_c, ul_16k_c, ul_eq_dl) VALUES " + m_files_users_updates_buffer + " on duplicate key update" + " topic_id = values(topic_id)," @@ -1137,19 +1120,20 @@ void Cserver::write_db_users() + " up_add = up_add + values(uploaded)," + " down_add = down_add + values(downloaded)," + " update_time = values(update_time)," - + " xbt_error=values(xbt_error), ul_gdc=values(ul_gdc), ul_gdc_c=values(ul_gdc_c), ul_16k_c=values(ul_16k_c), ul_eq_dl=values(ul_eq_dl)"); + + " xbt_error = values(xbt_error), ul_gdc = values(ul_gdc), ul_gdc_c = values(ul_gdc_c), ul_16k_c = values(ul_16k_c), ul_eq_dl = values(ul_eq_dl)"); } catch (Cdatabase::exception&) { } m_files_users_updates_buffer.erase(); } + if (!m_users_updates_buffer.empty()) { m_users_updates_buffer.erase(m_users_updates_buffer.size() - 1); try { - m_database.query("insert into " + table_name(table_users) + " (u_down_total, u_up_total, " + column_name(column_users_uid) + ", u_up_release, u_up_bonus, max_up_speed, max_down_speed) values " + m_database.query("INSERT INTO " + table_name(table_users) + " (u_down_total, u_up_total, " + column_name(column_users_uid) + ", u_up_release, u_up_bonus, max_up_speed, max_down_speed) VALUES " + m_users_updates_buffer + " on duplicate key update" + " u_down_total = u_down_total + values(u_down_total)," @@ -1170,12 +1154,13 @@ void Cserver::write_db_users() } m_users_updates_buffer.erase(); } + if (!m_users_dl_status_buffer.empty()) { m_users_dl_status_buffer.erase(m_users_dl_status_buffer.size() - 1); try { - m_database.query("insert into bb_bt_dlstatus_main (topic_id,user_id,user_status) values" + m_database.query("INSERT INTO bb_bt_dlstatus_main (topic_id,user_id,user_status) VALUES" + m_users_dl_status_buffer + " on duplicate key update" + " user_status = values(user_status)"); @@ -1185,12 +1170,13 @@ void Cserver::write_db_users() } m_users_dl_status_buffer.erase(); } + if (!m_tor_dl_stat_buffer.empty()) { m_tor_dl_stat_buffer.erase(m_tor_dl_stat_buffer.size() - 1); try { - m_database.query("insert into bb_bt_torrent_activity(user_id,topic_id,torrent_upload,torrent_download,torrent_speed_up,torrent_speed_down,torrent_dl_status, torrent_bonus, torrent_status, torrent_all_download, torrent_time_st, torrent_time) values" + m_database.query("INSERT INTO bb_bt_torrent_activity(user_id, topic_id, torrent_upload, torrent_download, torrent_speed_up, torrent_speed_down, torrent_dl_status, torrent_bonus, torrent_status, torrent_all_download, torrent_time_st, torrent_time) VALUES" + m_tor_dl_stat_buffer + " on duplicate key update" + " torrent_upload = torrent_upload + values(torrent_upload)," @@ -1207,13 +1193,14 @@ void Cserver::write_db_users() } m_tor_dl_stat_buffer.erase(); } - //cheat + + // Cheat if (!m_cheat_buffer.empty()) { m_cheat_buffer.erase(m_cheat_buffer.size() - 1); try { - m_database.query("insert into bb_bt_cheat_log(cheat_user_id, cheat_uploaded, cheat_ip, cheat_log_time) values" + m_database.query("INSERT INTO bb_bt_cheat_log (cheat_user_id, cheat_uploaded, cheat_ip, cheat_log_time) VALUES" + m_cheat_buffer); } catch (Cdatabase::exception&) @@ -1221,22 +1208,6 @@ void Cserver::write_db_users() } m_cheat_buffer.erase(); } - //vip - if (!m_vip_buffer.empty()) - { - m_vip_buffer.erase(m_vip_buffer.size() - 1); - try - { - m_database.query("UPDATE bb_bt_users SET user_vip = 0 WHERE user_id IN" - + m_vip_buffer ); - m_database.query("UPDATE bb_users SET user_rank = 0 WHERE user_rank = 20 AND user_id IN" - + m_vip_buffer ); - } - catch (Cdatabase::exception&) - { - } - m_vip_buffer.erase(); - } } // TorrentPier end @@ -1246,7 +1217,7 @@ void Cserver::read_config() { try { - Csql_result result = m_database.query("select name, value from " + table_name(table_config) + " where value is not null"); + Csql_result result = m_database.query("SELECT name, value FROM " + table_name(table_config) + " WHERE value is not null"); Cconfig config; for (Csql_row row; row = result.fetch_row(); ) { @@ -1257,7 +1228,7 @@ void Cserver::read_config() if (config.m_torrent_pass_private_key.empty()) { config.m_torrent_pass_private_key = generate_random_string(27); - Csql_query(m_database, "insert into xbt_config (name, value) values ('torrent_pass_private_key', ?)").p(config.m_torrent_pass_private_key).execute(); + Csql_query(m_database, "INSERT INTO xbt_config (name, value) VALUES ('torrent_pass_private_key', ?)").p(config.m_torrent_pass_private_key).execute(); } m_config = config; } diff --git a/install/xbt/linux/Tracker/server.h b/install/xbt/linux/Tracker/server.h index 9a5b88409..11b082ee6 100644 --- a/install/xbt/linux/Tracker/server.h +++ b/install/xbt/linux/Tracker/server.h @@ -57,7 +57,7 @@ public: bool xbt_error_empty; // Upload Greatest Common Divisor long long ul_gdc, ul_gdc_16k; - int ul_gdc_count, ul_16k_count, ul_eq_dl_count, end_vip; + int ul_gdc_count, ul_16k_count, ul_eq_dl_count; bool ipv6set; // boost::array ipv6; @@ -132,9 +132,6 @@ public: peers_limit = 0; torrents_limit = 0; wait_time = 0; - user_vip = 0; - user_vip_exp = 0; - user_park = 0; user_active = 1; } @@ -147,9 +144,6 @@ public: std::string passkey; int torrents_limit; int wait_time; - int user_vip; - int user_vip_exp; - int user_park; int user_active; }; @@ -269,6 +263,5 @@ private: std::string m_users_dl_status_buffer; std::string m_tor_dl_stat_buffer; std::string m_cheat_buffer; - std::string m_vip_buffer; // TorrentPier end }; diff --git a/install/xbt/linux/Tracker/tracker_input.cpp b/install/xbt/linux/Tracker/tracker_input.cpp index ab7d61705..24e5a8d98 100644 --- a/install/xbt/linux/Tracker/tracker_input.cpp +++ b/install/xbt/linux/Tracker/tracker_input.cpp @@ -301,6 +301,9 @@ bool Ctracker_input::banned() const || boost::istarts_with(m_peer_id, "-UT11"); case 'T': // -TS* > TorrentStorm return boost::istarts_with(m_peer_id, "-TS"); + case 'M': // -MG* > MediaGet + return boost::istarts_with(m_peer_id, "-MG1Cr0") + || boost::istarts_with(m_peer_id, "-MG21"); default: return false; } diff --git a/install/xbt/linux/misc/bt_strings.h b/install/xbt/linux/misc/bt_strings.h index d46ed2cc2..f8ed4c986 100644 --- a/install/xbt/linux/misc/bt_strings.h +++ b/install/xbt/linux/misc/bt_strings.h @@ -44,7 +44,6 @@ const std::string bts_announce = "announce"; const std::string bts_announce_list = "announce-list"; const std::string bts_banned_client = "access denied, banned client"; const std::string bts_can_not_leech = "access denied, leeching forbidden, you are only allowed to seed"; -const std::string bts_park = "access denied, account parked"; const std::string bts_close_torrent = "close torrent"; const std::string bts_complete = "complete"; const std::string bts_complete_total = "complete total"; diff --git a/upload/config.php b/upload/config.php index 0f059053d..9f189b3f4 100644 --- a/upload/config.php +++ b/upload/config.php @@ -57,7 +57,7 @@ $bb_cfg['css_ver'] = 1; // Increase number of revision after update $bb_cfg['tp_version'] = '2.0.2'; -$bb_cfg['tp_release_state'] = 'TP II r186'; +$bb_cfg['tp_release_state'] = 'TP II r187'; $bb_cfg['tp_release_date'] = '2-08-2011'; $bb_cfg['board_disabled_msg'] = 'форум временно отключен'; // 'forums temporarily disabled'; // show this msg if board has been disabled via ON/OFF trigger