From 6912f10a0ed6920e3eeb39b906ea731a38bf0c9d Mon Sep 17 00:00:00 2001 From: Yuna Scatari Date: Mon, 24 Feb 2014 15:59:43 +0200 Subject: [PATCH 001/106] Code cleanup, and slip stream of code --- browse.php | 494 ++++++++++++++++++++++++++++------------------------- 1 file changed, 263 insertions(+), 231 deletions(-) diff --git a/browse.php b/browse.php index b9533ec..9281c4d 100644 --- a/browse.php +++ b/browse.php @@ -38,46 +38,78 @@ $searchstr = ''; if (isset($_GET['search'])) - $searchstr = (string) unesc($_GET["search"]); + $searchstr = (string)unesc($_GET["search"]); $cleansearchstr = htmlspecialchars_uni($searchstr); if (empty($cleansearchstr)) - unset($cleansearchstr); + unset($cleansearchstr); // sorting by MarkoStamcar if (isset($_GET['sort']) && isset($_GET['type'])) { - $column = ''; - $ascdesc = ''; - - switch ($_GET['sort']) { - case '1': $column = "name"; break; - case '2': $column = "numfiles"; break; - case '3': $column = "comments"; break; - case '4': $column = "added"; break; - case '5': $column = "size"; break; - case '6': $column = "times_completed"; break; - case '7': $column = "seeders"; break; - case '8': $column = "leechers"; break; - case '9': $column = "owner"; break; - case '10': if (get_user_class() >= UC_MODERATOR) $column = "moderatedby"; break; - default: $column = "id"; break; - } - - switch ($_GET['type']) { - case 'asc': $ascdesc = "ASC"; $linkascdesc = "asc"; break; - case 'desc': $ascdesc = "DESC"; $linkascdesc = "desc"; break; - default: $ascdesc = "DESC"; $linkascdesc = "desc"; break; - } - - - $orderby = "ORDER BY torrents." . $column . " " . $ascdesc; - $pagerlink = "sort=" . intval($_GET['sort']) . "&type=" . $linkascdesc . "&"; + $column = ''; + $ascdesc = ''; + + switch ($_GET['sort']) { + case '1': + $column = "name"; + break; + case '2': + $column = "numfiles"; + break; + case '3': + $column = "comments"; + break; + case '4': + $column = "added"; + break; + case '5': + $column = "size"; + break; + case '6': + $column = "times_completed"; + break; + case '7': + $column = "seeders"; + break; + case '8': + $column = "leechers"; + break; + case '9': + $column = "owner"; + break; + case '10': + if (get_user_class() >= UC_MODERATOR) + $column = "moderatedby"; + break; + default: + $column = "id"; + break; + } + + switch ($_GET['type']) { + case 'asc': + $ascdesc = "ASC"; + $linkascdesc = "asc"; + break; + case 'desc': + $ascdesc = "DESC"; + $linkascdesc = "desc"; + break; + default: + $ascdesc = "DESC"; + $linkascdesc = "desc"; + break; + } + + + $orderby = "ORDER BY t." . $column . " " . $ascdesc; + $pagerlink = "sort=" . intval($_GET['sort']) . "&type=" . $linkascdesc . "&"; } else { - $orderby = "ORDER BY torrents.sticky ASC, torrents.id DESC"; - $pagerlink = ""; + $orderby = "ORDER BY t.sticky ASC, t.id DESC"; + $pagerlink = ""; } @@ -87,269 +119,269 @@ $incldead = 0; if (isset($_GET['incldead'])) { - if ($_GET["incldead"] == 1) { - $addparam .= "incldead=1&"; - if (!isset($CURUSER) || get_user_class() < UC_ADMINISTRATOR) - $wherea[] = "banned != 'yes'"; - } - elseif ($_GET["incldead"] == 2) { - $addparam .= "incldead=2&"; - $wherea[] = "visible = 'no'"; - } - elseif ($_GET["incldead"] == 3) { - $addparam .= "incldead=3&"; - $wherea[] = "free = 'yes'"; - $wherea[] = "visible = 'yes'"; - } - elseif ($_GET["incldead"] == 4) { - $addparam .= "incldead=4&"; - $wherea[] = "seeders = 0"; - $wherea[] = "visible = 'yes'"; - } - $incldead = (int) $_GET['incldead']; + if ($_GET["incldead"] == 1) { + $addparam .= "incldead=1&"; + if (!isset($CURUSER) || get_user_class() < UC_ADMINISTRATOR) + $wherea[] = "banned != 'yes'"; + } elseif ($_GET["incldead"] == 2) { + $addparam .= "incldead=2&"; + $wherea[] = "visible = 'no'"; + } elseif ($_GET["incldead"] == 3) { + $addparam .= "incldead=3&"; + $wherea[] = "free = 'yes'"; + $wherea[] = "visible = 'yes'"; + } elseif ($_GET["incldead"] == 4) { + $addparam .= "incldead=4&"; + $wherea[] = "seeders = 0"; + $wherea[] = "visible = 'yes'"; + } + $incldead = (int)$_GET['incldead']; } else - $wherea[] = "visible = 'yes'"; + $wherea[] = "visible = 'yes'"; if (isset($_GET['cat'])) - $category = (int) $_GET["cat"]; -else - $category = 0; + $category = (int)$_GET["cat"]; else + $category = 0; if (isset($_GET['all'])) - $all = $_GET["all"]; -else - $all = false; + $all = $_GET["all"]; else + $all = false; if (!$all) -if (!$_GET && $CURUSER["notifs"]) { - $all = True; - foreach ($cats as $cat) { - $all &= $cat[id]; - if (strpos($CURUSER["notifs"], "[cat" . $cat[id] . "]") !== false) { - $wherecatina[] = $cat[id]; - $addparam .= "c$cat[id]=1&"; - } - } -} elseif ($category) { - if (!is_valid_id($category)) - stderr($tracker_lang['error'], "Invalid category ID."); - $wherecatina[] = $category; - $addparam .= "cat=$category&"; -} else { - $all = true; - foreach ($cats as $cat) { - $all &= $_GET["cr$car[id]"]; - if (isset($_GET["c$cat[id]"])) { - $wherecatina[] = $cat[id]; - $addparam .= "c$cat[id]=1&"; - } - } -} + if (!$_GET && $CURUSER["notifs"]) { + $all = True; + foreach ($cats as $cat) { + $all &= $cat[id]; + if (strpos($CURUSER["notifs"], "[cat" . $cat[id] . "]") !== false) { + $wherecatina[] = $cat[id]; + $addparam .= "c$cat[id]=1&"; + } + } + } elseif ($category) { + if (!is_valid_id($category)) + stderr($tracker_lang['error'], "Invalid category ID."); + $wherecatina[] = $category; + $addparam .= "cat=$category&"; + } else { + $all = true; + foreach ($cats as $cat) { + $all &= $_GET["cr$car[id]"]; + if (isset($_GET["c$cat[id]"])) { + $wherecatina[] = $cat[id]; + $addparam .= "c$cat[id]=1&"; + } + } + } if ($all) { - $wherecatina = array(); - $addparam = ""; + $wherecatina = array(); + $addparam = ""; } if (count($wherecatina) > 1) - $wherecatin = implode(",",$wherecatina); -elseif (count($wherecatina) == 1) - $wherea[] = "category = $wherecatina[0]"; + $wherecatin = implode(",", $wherecatina); elseif (count($wherecatina) == 1) + $wherea[] = "category = $wherecatina[0]"; $wherebase = $wherea; if (isset($cleansearchstr)) { - $wherea[] = "torrents.name LIKE '%" . sqlwildcardesc($searchstr) . "%'"; - $addparam .= "search=" . urlencode($searchstr) . "&"; + $wherea[] = "t.name LIKE '%" . sqlwildcardesc($searchstr) . "%'"; + $addparam .= "search=" . urlencode($searchstr) . "&"; } $where = implode(" AND ", $wherea); if (isset($wherecatin) && !empty($wherecatin)) - $where .= ($where ? " AND " : "") . "category IN (" . $wherecatin . ")"; + $where .= ($where ? " AND " : "") . "t.category IN (" . $wherecatin . ")"; if ($where != "") - $where = "WHERE $where"; + $where = "WHERE $where"; -$res = sql_query("SELECT COUNT(*) FROM torrents $where") or die(mysql_error()); +$res = sql_query("SELECT COUNT(*) FROM torrents AS t $where") or die(mysql_error()); $row = mysql_fetch_array($res); $count = $row[0]; $num_torrents = $count; if (!$count && isset($cleansearchstr)) { - $wherea = $wherebase; - //$orderby = "ORDER BY id DESC"; - $searcha = explode(" ", $cleansearchstr); - $sc = 0; - foreach ($searcha as $searchss) { - if (strlen($searchss) <= 1) - continue; - $sc++; - if ($sc > 5) - break; - $ssa = array(); - $ssa[] = "torrents.name LIKE '%" . sqlwildcardesc($searchss) . "%'"; - } - if ($sc) { - $where = implode(" AND ", $wherea); - if ($where != "") - $where = "WHERE $where"; - $res = sql_query("SELECT COUNT(*) FROM torrents $where"); - $row = mysql_fetch_array($res); - $count = $row[0]; - } + $wherea = $wherebase; + //$orderby = "ORDER BY id DESC"; + $searcha = explode(" ", $cleansearchstr); + $sc = 0; + foreach ($searcha as $searchss) { + if (strlen($searchss) <= 1) + continue; + $sc++; + if ($sc > 5) + break; + $ssa = array(); + $ssa[] = "t.name LIKE '%" . sqlwildcardesc($searchss) . "%'"; + } + if ($sc) { + $where = implode(" AND ", $wherea); + if ($where != "") + $where = "WHERE $where"; + $res = sql_query("SELECT COUNT(*) FROM torrents AS t $where"); + $row = mysql_fetch_array($res); + $count = $row[0]; + } } $torrentsperpage = $CURUSER["torrentsperpage"]; if (!$torrentsperpage) - $torrentsperpage = 25; + $torrentsperpage = 25; -if ($count) -{ +if ($count) { if ($addparam != "") { - if ($pagerlink != "") { - if ($addparam{strlen($addparam)-1} != ";") { // & = & - $addparam = $addparam . "&" . $pagerlink; - } else { - $addparam = $addparam . $pagerlink; - } - } + if ($pagerlink != "") { + if ($addparam{strlen($addparam) - 1} != ";") { // & = & + $addparam = $addparam . "&" . $pagerlink; + } else { + $addparam = $addparam . $pagerlink; + } + } } else { - $addparam = $pagerlink; + $addparam = $pagerlink; } - list($pagertop, $pagerbottom, $limit) = pager($torrentsperpage, $count, "browse.php?" . $addparam); - $query = "SELECT torrents.id, torrents.moderated, torrents.moderatedby, torrents.category, torrents.leechers, torrents.seeders, torrents.free, torrents.name, torrents.times_completed, torrents.size, torrents.added, torrents.comments, torrents.numfiles, torrents.filename, torrents.sticky, torrents.owner," . - "IF(torrents.numratings < $minvotes, NULL, ROUND(torrents.ratingsum / torrents.numratings, 1)) AS rating, categories.name AS cat_name, categories.image AS cat_pic, users.username, users.class".($CURUSER ? ", EXISTS(SELECT * FROM readtorrents WHERE readtorrents.userid = ".sqlesc($CURUSER["id"])." AND readtorrents.torrentid = torrents.id) AS readtorrent" : ", 1 AS readtorrent")." FROM torrents LEFT JOIN categories ON category = categories.id LEFT JOIN users ON torrents.owner = users.id $where $orderby $limit"; - $res = sql_query($query) or die(mysql_error()); -} -else - unset($res); + list($pagertop, $pagerbottom, $limit) = pager($torrentsperpage, $count, "browse.php?" . $addparam); + $query = "SELECT t.id, t.moderated, t.moderatedby, t.category, t.leechers, t.seeders, t.free, t.name, t.times_completed, t.size, t.added, t.comments, t.numfiles, t.filename, t.sticky, t.owner," . "IF(t.numratings < $minvotes, NULL, ROUND(t.ratingsum / t.numratings, 1)) AS rating, c.name AS cat_name, c.image AS cat_pic, u.username, u.class" . ($CURUSER ? ", EXISTS(SELECT * FROM readtorrents WHERE readtorrents.userid = " . sqlesc($CURUSER["id"]) . " AND readtorrents.torrentid = t.id) AS readtorrent" : ", 1 AS readtorrent") . " FROM torrents AS t LEFT JOIN categories AS c ON t.category = c.id LEFT JOIN users AS u ON t.owner = u.id $where $orderby $limit"; + $res = sql_query($query) or die(mysql_error()); +} else + unset($res); if (isset($cleansearchstr)) - stdhead($tracker_lang['search_results_for']." \"$cleansearchstr\""); -else - stdhead($tracker_lang['browse']); + stdhead($tracker_lang['search_results_for'] . " \"$cleansearchstr\""); else + stdhead($tracker_lang['browse']); ?> - + - - - + \n"); + print(''); -print(""); +echo ''; if ($num_torrents) { - print(""); + echo ''; - torrenttable($res, "index"); + torrenttable($res, "index"); - print(""); + echo ''; -} -else { - if (isset($cleansearchstr)) { - print("\n"); - //print("

Ïîïðîáóéòå èçìåíèòü çàïðîñ ïîèñêà.

\n"); - } - else { - print("\n"); - //print("

Èçâèíèòå, äàííàÿ êàòåãîðèÿ ïóñòàÿ.

\n"); - } +} else { + if (isset($cleansearchstr)) { + print("\n"); + //print("

Ïîïðîáóéòå èçìåíèòü çàïðîñ ïîèñêà.

\n"); + } else { + print("\n"); + //print("

Èçâèíèòå, äàííàÿ êàòåãîðèÿ ïóñòàÿ.

\n"); + } } -print("
Ñïèñîê òîððåíòîâ
- -
- - - - -
- +
- -" : ""); - print("\n"); - $i++; -} - -$alllink = ""; - -$ncats = count($cats); -$nrows = ceil($ncats/$catsperrow); -$lastrowcols = $ncats % $catsperrow; - -if ($lastrowcols != 0) -{ - if ($catsperrow - $lastrowcols != 1) - { - print(""); - } -} -?> + -
" . htmlspecialchars_uni($cat['name']) . " Ñïèñîê òîððåíòîâ
-
-
-: - - - - - -
- - - -
+
+ +
+ + + + + + + +
+ + + + " : ""); + print("\n"); + $i++; + } + + $alllink = ""; + + $ncats = count($cats); + $nrows = ceil($ncats / $catsperrow); + $lastrowcols = $ncats % $catsperrow; + + if ($lastrowcols != 0) { + if ($catsperrow - $lastrowcols != 1) { + print(""); + } + } + ?> + +
" . htmlspecialchars_uni($cat['name']) . " 
+
+
+ : + + + + + +
+ + + +
".$tracker_lang['search_results_for']." \"" . htmlspecialchars_uni($searchstr) . "\"
' . $tracker_lang['search_results_for'] . ' "' . htmlspecialchars_uni($searchstr) . '"
"); - print($pagertop); - print("
'; + echo $pagertop; + echo '
"); - print($pagerbottom); - print("
'; + echo $pagerbottom; + echo '
".$tracker_lang['nothing_found']."
".$tracker_lang['nothing_found']."
" . $tracker_lang['nothing_found'] . "
" . $tracker_lang['nothing_found'] . "
"); +echo ''; stdfoot(); From 35bf60e8bab7484c8ef2c1508c3788236f2bd3d7 Mon Sep 17 00:00:00 2001 From: yunasc Date: Mon, 24 Feb 2014 19:35:32 +0200 Subject: [PATCH 002/106] =?UTF-8?q?=D0=92=D0=B5=D1=80=D0=BD=D1=83=D0=BB=20?= =?UTF-8?q?=D0=BD=D0=B0=D0=B7=D0=B0=D0=B4=20=D0=BF=D1=80=D0=B0=D0=B2=D0=B8?= =?UTF-8?q?=D0=BB=D1=8C=D0=BD=D1=83=D1=8E=20=D0=BA=D0=BE=D0=B4=D0=B8=D1=80?= =?UTF-8?q?=D0=BE=D0=B2=D0=BA=D1=83=20+=20=D1=81=D0=B4=D0=B5=D0=BB=D0=B0?= =?UTF-8?q?=D0=BB=20Reformat=20code?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- include/functions_global.php | 1391 ++++++++++++++++++---------------- 1 file changed, 741 insertions(+), 650 deletions(-) diff --git a/include/functions_global.php b/include/functions_global.php index 1d2879a..b70f811 100644 --- a/include/functions_global.php +++ b/include/functions_global.php @@ -27,492 +27,568 @@ */ # IMPORTANT: Do not edit below unless you know what you are doing! -if(!defined('IN_TRACKER')) - die('Hacking attempt!'); - -function get_user_class_color($class, $username) -{ - global $tracker_lang; - switch ($class) - { - case UC_SYSOP: - return "" . $username . ""; - break; - case UC_ADMINISTRATOR: - return "" . $username . ""; - break; - case UC_MODERATOR: - return "" . $username . ""; - break; - case UC_UPLOADER: - return "" . $username . ""; - break; - case UC_VIP: - return "" . $username . ""; - break; - case UC_POWER_USER: - return "" . $username . ""; - break; - case UC_USER: - return "" . $username . ""; - break; - } - return "$username"; +if (!defined('IN_TRACKER')) + die('Hacking attempt!'); + +function get_user_class_color($class, $username) { + global $tracker_lang; + switch ($class) { + case UC_SYSOP: + return "" . $username . ""; + break; + case UC_ADMINISTRATOR: + return "" . $username . ""; + break; + case UC_MODERATOR: + return "" . $username . ""; + break; + case UC_UPLOADER: + return "" . $username . ""; + break; + case UC_VIP: + return "" . $username . ""; + break; + case UC_POWER_USER: + return "" . $username . ""; + break; + case UC_USER: + return "" . $username . ""; + break; + } + return "$username"; } -function display_date_time($timestamp = 0 , $tzoffset = 0){ - return date("Y-m-d H:i:s", $timestamp + ($tzoffset * 60)); +function display_date_time($timestamp = 0, $tzoffset = 0) { + return date("Y-m-d H:i:s", $timestamp + ($tzoffset * 60)); } -function cut_text ($txt, $car) { - while(strlen($txt) > $car) { - return substr($txt, 0, $car) . "..."; +function cut_text($txt, $car) { + while (strlen($txt) > $car) { + return substr($txt, 0, $car) . "..."; } return $txt; } -function textbbcode($form, $name, $content="") { -?> - - -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- -
- -
- -
-
+ + +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ +
+ +
+ +
+
\n"); - print("
".($heading ? "$heading
" : "")."$text
\n"); + if ($htmlstrip) { + $heading = htmlspecialchars_uni(trim($heading)); + $text = htmlspecialchars_uni(trim($text)); + } + print("
\n"); + print("
" . ($heading ? "$heading
" : "") . "$text
\n"); } function stderr($heading = '', $text = '') { @@ -555,8 +631,8 @@ function newerr($heading = '', $text = '', $head = true, $foot = true, $die = tr function sqlerr($file = '', $line = '') { global $queries; print("" . - "

������ � SQL

\n" . - "����� �� ������� MySQL: " . htmlspecialchars_uni(mysql_error()) . ($file != '' && $line != '' ? "

� $file, ����� $line

" : "") . "

������ ����� $queries.

"); + "

Îøèáêà â SQL

\n" . + "Îòâåò îò ñåðâåðà MySQL: " . htmlspecialchars_uni(mysql_error()) . ($file != '' && $line != '' ? "

â $file, ëèíèÿ $line

" : "") . "

Çàïðîñ íîìåð $queries.

"); die; } @@ -579,11 +655,10 @@ function get_dt_num() { return date("YmdHis"); } -function format_urls($s) -{ +function format_urls($s) { return preg_replace( - "/(\A|[^=\]'\"a-zA-Z0-9])((http|ftp|https|ftps|irc):\/\/[^()<>\s]+)/i", - "\\1\\2", $s); + "/(\A|[^=\]'\"a-zA-Z0-9])((http|ftp|https|ftps|irc):\/\/[^()<>\s]+)/i", + "\\1\\2", $s); } /* @@ -602,49 +677,47 @@ function format_local_urls($s) //Finds last occurrence of needle in haystack //in PHP5 use strripos() instead of this -function _strlastpos ($haystack, $needle, $offset = 0) -{ - $addLen = strlen ($needle); +function _strlastpos($haystack, $needle, $offset = 0) { + $addLen = strlen($needle); $endPos = $offset - $addLen; - while (true) - { - if (($newPos = strpos ($haystack, $needle, $endPos + $addLen)) === false) break; + while (true) { + if (($newPos = strpos($haystack, $needle, $endPos + $addLen)) === false) break; $endPos = $newPos; } return ($endPos >= 0) ? $endPos : false; } -function format_quotes($s) -{ - while ($old_s != $s) - { - $old_s = $s; +function format_quotes($s) { + while ($old_s != $s) { + $old_s = $s; - //find first occurrence of [/quote] - $close = strpos($s, "[/quote]"); - if ($close === false) - return $s; + //find first occurrence of [/quote] + $close = strpos($s, "[/quote]"); + if ($close === false) + return $s; - //find last [quote] before first [/quote] - //note that there is no check for correct syntax - $open = _strlastpos(substr($s,0,$close), "[quote"); - if ($open === false) - return $s; + //find last [quote] before first [/quote] + //note that there is no check for correct syntax + $open = _strlastpos(substr($s, 0, $close), "[quote"); + if ($open === false) + return $s; - $quote = substr($s,$open,$close - $open + 8); + $quote = substr($s, $open, $close - $open + 8); - //[quote]Text[/quote] - $quote = preg_replace( - "/\[quote\]\s*((\s|.)+?)\s*\[\/quote\]\s*/i", - "

Quote:

\\1

", $quote); + //[quote]Text[/quote] + $quote = preg_replace( + "/\[quote\]\s*((\s|.)+?)\s*\[\/quote\]\s*/i", + "

Quote:

\\1

", + $quote); - //[quote=Author]Text[/quote] - $quote = preg_replace( - "/\[quote=(.+?)\]\s*((\s|.)+?)\s*\[\/quote\]\s*/i", - "

\\1 wrote:

\\2

", $quote); + //[quote=Author]Text[/quote] + $quote = preg_replace( + "/\[quote=(.+?)\]\s*((\s|.)+?)\s*\[\/quote\]\s*/i", + "

\\1 wrote:

\\2

", + $quote); - $s = substr($s,0,$open) . $quote . substr($s,$close + 8); - } + $s = substr($s, 0, $open) . $quote . substr($s, $close + 8); + } return $s; } @@ -652,26 +725,26 @@ function format_quotes($s) // Format quote function encode_quote($text) { $start_html = "
" - ."" - .""; diff --git a/browse.php b/browse.php index f91c953..481cd7f 100644 --- a/browse.php +++ b/browse.php @@ -242,7 +242,7 @@ $addparam = $pagerlink; } list($pagertop, $pagerbottom, $limit) = pager($torrentsperpage, $count, "browse.php?" . $addparam); - $query = "SELECT t.id, t.moderated, t.moderatedby, t.category, (t.leechers + t.remote_leechers) AS leechers, (t.seeders + t.remote_seeders) AS seeders, t.free, t.name, t.times_completed, t.size, t.added, t.comments, t.numfiles, t.filename, t.not_sticky, t.owner," . "IF(t.numratings < $minvotes, NULL, ROUND(t.ratingsum / t.numratings, 1)) AS rating, c.name AS cat_name, c.image AS cat_pic, u.username, u.class" . ($CURUSER ? ", EXISTS(SELECT * FROM readtorrents WHERE readtorrents.userid = " . sqlesc($CURUSER["id"]) . " AND readtorrents.torrentid = t.id) AS readtorrent" : ", 1 AS readtorrent") . " FROM torrents AS t LEFT JOIN categories AS c ON t.category = c.id LEFT JOIN users AS u ON t.owner = u.id $where $orderby $limit"; + $query = "SELECT t.id, t.moderated, t.moderatedby, t.category, (t.leechers + t.remote_leechers) AS leechers, (t.seeders + t.remote_seeders) AS seeders, t.multitracker, t.free, t.name, t.times_completed, t.size, t.added, t.comments, t.numfiles, t.filename, t.not_sticky, t.owner," . "IF(t.numratings < $minvotes, NULL, ROUND(t.ratingsum / t.numratings, 1)) AS rating, c.name AS cat_name, c.image AS cat_pic, u.username, u.class" . ($CURUSER ? ", EXISTS(SELECT * FROM readtorrents WHERE readtorrents.userid = " . sqlesc($CURUSER["id"]) . " AND readtorrents.torrentid = t.id) AS readtorrent" : ", 1 AS readtorrent") . " FROM torrents AS t LEFT JOIN categories AS c ON t.category = c.id LEFT JOIN users AS u ON t.owner = u.id $where $orderby $limit"; $res = sql_query($query) or die(mysql_error()); } else unset($res); diff --git a/details.php b/details.php index 7007a23..efcb64e 100644 --- a/details.php +++ b/details.php @@ -485,7 +485,7 @@ function seed_sort($a,$b) { //$highlight = $CURUSER["id"] == $arr["id"] ? " bgcolor=#00A527" : "";; $snatched_small[] = "".get_user_class_color($arr["class"], $arr["username"])." ($ratio)"; $snatched_full .= "\n"; + "\n"; } $snatched_full .= "
������
"; + . "" + . "
Öèòàòà
"; $end_html = "
"; - $text = preg_replace("#\[quote\](.*?)\[/quote\]#si", "".$start_html."\\1".$end_html."", $text); + $text = preg_replace("#\[quote\](.*?)\[/quote\]#si", "" . $start_html . "\\1" . $end_html . "", $text); return $text; } // Format quote from function encode_quote_from($text) { $start_html = "
" - ."" - ."
\\1 �����
"; + . "" + . "
\\1 ïèñàë
"; $end_html = "
"; - $text = preg_replace("#\[quote=(.+?)\](.*?)\[/quote\]#si", "".$start_html."\\2".$end_html."", $text); + $text = preg_replace("#\[quote=(.+?)\](.*?)\[/quote\]#si", "" . $start_html . "\\2" . $end_html . "", $text); return $text; } // Format spoiler /*function encode_spoiler($text) { - $replace = "
������� �����
"; + $replace = "
Ñêðûòûé òåêñò
"; $text = preg_replace("#\[hide\](.*?)\[/hide\]#si", $replace, $text); return $text; } @@ -697,102 +770,103 @@ function encode_spoiler_from($text) { } // Format spoiler -function escape1($matches){ - return "
������� �����
"; +function escape1($matches) { + return "
Ñêðûòûé òåêñò
"; } // Format spoiler from -function escape2($matches){ - return "
".$matches[1]."
"; +function escape2($matches) { + return "
" . $matches[1] . "
"; } // Format code function encode_code($text) { $start_html = "
" - ."" - ."" - ."
���
{ZEILEN}"; + . "" + . "" + . "
Êîä
{ZEILEN}"; $end_html = "
"; $match_count = preg_match_all("#\[code\](.*?)\[/code\]#si", $text, $matches); - for ($mout = 0; $mout < $match_count; ++$mout) { - $before_replace = $matches[1][$mout]; - $after_replace = $matches[1][$mout]; - $after_replace = trim ($after_replace); - $zeilen_array = explode ("
", $after_replace); - $j = 1; - $zeilen = ""; - foreach ($zeilen_array as $str) { - $zeilen .= "".$j."
"; - ++$j; - } - $after_replace = str_replace ("", "", $after_replace); - $after_replace = str_replace ("&", "&", $after_replace); - $after_replace = str_replace ("", "  ", $after_replace); - $after_replace = str_replace ("", "  ", $after_replace); - $after_replace = str_replace ("", "   ", $after_replace); - $after_replace = preg_replace ("/^ {1}/m", " ", $after_replace); - $str_to_match = "[code]".$before_replace."[/code]"; - $replace = str_replace ("{ZEILEN}", $zeilen, $start_html); - $replace .= $after_replace; - $replace .= $end_html; - $text = str_replace ($str_to_match, $replace, $text); - } - - $text = str_replace ("[code]", $start_html, $text); - $text = str_replace ("[/code]", $end_html, $text); - return $text; + for ($mout = 0; $mout < $match_count; ++$mout) { + $before_replace = $matches[1][$mout]; + $after_replace = $matches[1][$mout]; + $after_replace = trim($after_replace); + $zeilen_array = explode("
", $after_replace); + $j = 1; + $zeilen = ""; + foreach ($zeilen_array as $str) { + $zeilen .= "" . $j . "
"; + ++$j; + } + $after_replace = str_replace("", "", $after_replace); + $after_replace = str_replace("&", "&", $after_replace); + $after_replace = str_replace("", "  ", $after_replace); + $after_replace = str_replace("", "  ", $after_replace); + $after_replace = str_replace("", "   ", $after_replace); + $after_replace = preg_replace("/^ {1}/m", " ", $after_replace); + $str_to_match = "[code]" . $before_replace . "[/code]"; + $replace = str_replace("{ZEILEN}", $zeilen, $start_html); + $replace .= $after_replace; + $replace .= $end_html; + $text = str_replace($str_to_match, $replace, $text); + } + + $text = str_replace("[code]", $start_html, $text); + $text = str_replace("[/code]", $end_html, $text); + return $text; } function encode_php($text) { $start_html = "
" - ."" - ."" - ." From 7905db5648eb105665a48d44559cd250ba86f17c Mon Sep 17 00:00:00 2001 From: VictoRD11 Date: Tue, 25 Feb 2014 11:41:11 +0200 Subject: [PATCH 005/106] =?UTF-8?q?SEO=20=D1=82=D0=B5=D0=B3=D0=B8=20=D0=BD?= =?UTF-8?q?=D0=B0=20=D0=BA=D0=B0=D0=B6=D0=B4=D1=83=D1=8E=20=D1=80=D0=B0?= =?UTF-8?q?=D0=B7=D0=B4=D0=B0=D1=87=D1=83=20by=20VictoRD11?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Auto-merge failed, had to resolve conflicts manually. --- details.php | 5 ++++- edit.php | 4 ++++ include/functions.php | 2 +- install/database.sql | 2 ++ takeedit.php | 5 +++++ takeupload.php | 13 ++++++++++++- themes/Gray/stdhead.php | 6 ++++++ themes/TBDev/stdhead.php | 6 ++++++ upload.php | 15 +++++++++------ 9 files changed, 49 insertions(+), 9 deletions(-) diff --git a/details.php b/details.php index f584fd8..af782b3 100644 --- a/details.php +++ b/details.php @@ -190,10 +190,13 @@ function dltable($name, $arr, $torrent) if (!isset($id) || !$id) die(); -$res = sql_query("SELECT t.free, t.seeders, t.banned, t.leechers, t.info_hash, t.filename, UNIX_TIMESTAMP() - UNIX_TIMESTAMP(t.last_action) AS lastseed, t.numratings, t.name, IF(t.numratings < $minvotes, NULL, ROUND(t.ratingsum / t.numratings, 1)) AS rating, t.owner, t.save_as, t.descr, t.visible, t.size, t.added, t.views, t.hits, t.times_completed, t.id, t.type, t.numfiles, t.image1, t.image2, t.image3, t.image4, t.image5, c.name AS cat_name, u.username FROM torrents AS t LEFT JOIN categories AS c ON t.category = c.id LEFT JOIN users AS u ON t.owner = u.id WHERE t.id = $id") +$res = sql_query("SELECT t.keywords, t.description, t.free, t.seeders, t.banned, t.leechers, t.info_hash, t.filename, UNIX_TIMESTAMP() - UNIX_TIMESTAMP(t.last_action) AS lastseed, t.numratings, t.name, IF(t.numratings < $minvotes, NULL, ROUND(t.ratingsum / t.numratings, 1)) AS rating, t.owner, t.save_as, t.descr, t.visible, t.size, t.added, t.views, t.hits, t.times_completed, t.id, t.type, t.numfiles, t.image1, t.image2, t.image3, t.image4, t.image5, c.name AS cat_name, u.username FROM torrents AS t LEFT JOIN categories AS c ON t.category = c.id LEFT JOIN users AS u ON t.owner = u.id WHERE t.id = $id") or sqlerr(__FILE__, __LINE__); $row = mysql_fetch_array($res); +$keywords = $row['keywords']; +$description = $row['description']; + sql_query("INSERT INTO readtorrents (userid, torrentid) VALUES (".sqlesc($CURUSER["id"]).", ".sqlesc($id).")")/* or sqlerr(__FILE__,__LINE__)*/; $owned = $moderator = 0; diff --git a/edit.php b/edit.php index c5b3fcb..cbf7ef0 100644 --- a/edit.php +++ b/edit.php @@ -84,6 +84,10 @@ $s .= "\n"; tr("Òèï", $s, 1); + + tr('Keywords', '', 1); + tr('Description', '', 1); + tr("Âèäèìûé", " Âèäèìûé â òîððåíòàõ
PHP - ���
{ZEILEN}"; + . "" + . "" + . "
PHP - Êîä
{ZEILEN}"; $end_html = "
"; $match_count = preg_match_all("#\[php\](.*?)\[/php\]#si", $text, $matches); - for ($mout = 0; $mout < $match_count; ++$mout) { - $before_replace = $matches[1][$mout]; - $after_replace = $matches[1][$mout]; - $after_replace = trim ($after_replace); + for ($mout = 0; $mout < $match_count; ++$mout) { + $before_replace = $matches[1][$mout]; + $after_replace = $matches[1][$mout]; + $after_replace = trim($after_replace); $after_replace = str_replace("<", "<", $after_replace); $after_replace = str_replace(">", ">", $after_replace); $after_replace = str_replace(""", '"', $after_replace); $after_replace = preg_replace("/" : "".$after_replace.""; - ob_start (); - highlight_string ($after_replace); - $after_replace = ob_get_contents (); - ob_end_clean (); + $after_replace = (substr($after_replace, 0, + 5) != "") ? "" . $after_replace . "\n?>" : "" . $after_replace . ""; + ob_start(); + highlight_string($after_replace); + $after_replace = ob_get_contents(); + ob_end_clean(); $zeilen_array = explode("
", $after_replace); - $j = 1; - $zeilen = ""; - foreach ($zeilen_array as $str) { - $zeilen .= "".$j."
"; - ++$j; - } + $j = 1; + $zeilen = ""; + foreach ($zeilen_array as $str) { + $zeilen .= "" . $j . "
"; + ++$j; + } $after_replace = str_replace("\n", "", $after_replace); $after_replace = str_replace("&", "&", $after_replace); $after_replace = str_replace(" ", "  ", $after_replace); $after_replace = str_replace(" ", "  ", $after_replace); $after_replace = str_replace("\t", "   ", $after_replace); $after_replace = preg_replace("/^ {1}/m", " ", $after_replace); - $str_to_match = "[php]".$before_replace."[/php]"; + $str_to_match = "[php]" . $before_replace . "[/php]"; $replace = str_replace("{ZEILEN}", $zeilen, $start_html); - $replace .= $after_replace; - $replace .= $end_html; - $text = str_replace ($str_to_match, $replace, $text); - } + $replace .= $after_replace; + $replace .= $end_html; + $text = str_replace($str_to_match, $replace, $text); + } $text = str_replace("[php]", $start_html, $text); $text = str_replace("[/php]", $end_html, $text); - return $text; + return $text; } -function code_nobb ($matches){ +function code_nobb($matches) { $code = $matches[1]; $code = str_replace("[", "[", $code); $code = str_replace("]", "]", $code); - return '[code]'.$code.'[/code]'; + return '[code]' . $code . '[/code]'; } function format_comment($text, $strip_html = true) { @@ -800,15 +874,15 @@ function format_comment($text, $strip_html = true) { $smiliese = $smilies; $s = $text; - // This fixes the extraneous ;) smilies problem. When there was an html escaped - // char before a closing bracket - like >), "), ... - this would be encoded - // to &xxx;), hence all the extra smilies. I created a new :wink: label, removed - // the ;) one, and replace all genuine ;) by :wink: before escaping the body. - // (What took us so long? :blush:)- wyz + // This fixes the extraneous ;) smilies problem. When there was an html escaped + // char before a closing bracket - like >), "), ... - this would be encoded + // to &xxx;), hence all the extra smilies. I created a new :wink: label, removed + // the ;) one, and replace all genuine ;) by :wink: before escaping the body. + // (What took us so long? :blush:)- wyz $s = str_replace(";)", ":wink:", $s); - $s = preg_replace_callback("#\[code\](.*?)\[/code\]#si","code_nobb",$s); + $s = preg_replace_callback("#\[code\](.*?)\[/code\]#si", "code_nobb", $s); if ($strip_html) $s = htmlspecialchars_uni($s); @@ -817,12 +891,12 @@ function format_comment($text, $strip_html = true) { $html[] = "\"\\1\""; $bb[] = "#\[img=([a-zA-Z]+)\](?!javascript:)([^?](?:[^\[]+|\[(?!url))*?)\[/img\]#is"; $html[] = "\"\\2\""; - $bb[] = "#\[img\ alt=([a-zA-Z�-��-�0-9\_\-\. ]+)\](?!javascript:)([^?](?:[^\[]+|\[(?!url))*?)\[/img\]#is"; + $bb[] = "#\[img\ alt=([a-zA-Zà-ÿÀ-ß0-9\_\-\. ]+)\](?!javascript:)([^?](?:[^\[]+|\[(?!url))*?)\[/img\]#is"; $html[] = "\"\\1\""; - $bb[] = "#\[img=([a-zA-Z]+) alt=([a-zA-Z�-��-�0-9\_\-\. ]+)\](?!javascript:)([^?](?:[^\[]+|\[(?!url))*?)\[/img\]#is"; + $bb[] = "#\[img=([a-zA-Z]+) alt=([a-zA-Zà-ÿÀ-ß0-9\_\-\. ]+)\](?!javascript:)([^?](?:[^\[]+|\[(?!url))*?)\[/img\]#is"; $html[] = "\"\\2\""; $bb[] = "#\[kp=([0-9]+)\]#is"; - $html[] = "\"���������\""; + $html[] = "\"Êèíîïîèñê\""; $bb[] = "#\[url\]([\w]+?://([\w\#$%&~/.\-;:=,?@\]+]+|\[(?!url=))*?)\[/url\]#is"; $html[] = "\\1"; $bb[] = "#\[url\]((www|ftp)\.([\w\#$%&~/.\-;:=,?@\]+]+|\[(?!url=))*?)\[/url\]#is"; @@ -859,7 +933,7 @@ function format_comment($text, $strip_html = true) { $html[] = "
  • "; $bb[] = "#\[hr\]#si"; $html[] = "
    "; - $bb[] = "#\[youtube=([[:alnum:]]+)\]#si"; # Пример иÑпользованиÑ: [youtube=gyzGhfbZVqI] + $bb[] = "#\[youtube=([[:alnum:]]+)\]#si"; $html[] = ''; $s = preg_replace($bb, $html, $s); @@ -875,15 +949,24 @@ function format_comment($text, $strip_html = true) { //$s = str_replace(" ", "  ", $s); foreach ($smiliese as $code => $url) - $s = str_replace($code, "\""", $s); + $s = str_replace($code, + "\""", $s); foreach ($privatesmilies as $code => $url) $s = str_replace($code, "", $s); - while (preg_match("#\[quote\](.*?)\[/quote\]#si", $s)) $s = encode_quote($s); - while (preg_match("#\[quote=(.+?)\](.*?)\[/quote\]#si", $s)) $s = encode_quote_from($s); - while (preg_match("#\[hide\](.*?)\[/hide\]#si", $s)) $s = encode_spoiler($s); - while (preg_match("#\[hide=(.+?)\](.*?)\[/hide\]#si", $s)) $s = encode_spoiler_from($s); + while (preg_match("#\[quote\](.*?)\[/quote\]#si", $s)) { + $s = encode_quote($s); + } + while (preg_match("#\[quote=(.+?)\](.*?)\[/quote\]#si", $s)) { + $s = encode_quote_from($s); + } + while (preg_match("#\[hide\](.*?)\[/hide\]#si", $s)) { + $s = encode_spoiler($s); + } + while (preg_match("#\[hide=(.+?)\](.*?)\[/hide\]#si", $s)) { + $s = encode_spoiler_from($s); + } if (preg_match("#\[code\](.*?)\[/code\]#si", $s)) $s = encode_code($s); if (preg_match("#\[php\](.*?)\[/php\]#si", $s)) $s = encode_php($s); @@ -891,143 +974,151 @@ function format_comment($text, $strip_html = true) { } function get_user_class() { - global $CURUSER; - return $CURUSER["class"]; + global $CURUSER; + return $CURUSER["class"]; } function get_user_class_name($class) { - global $tracker_lang; - switch ($class) { - case UC_USER: return $tracker_lang['class_user']; + global $tracker_lang; + switch ($class) { + case UC_USER: + return $tracker_lang['class_user']; - case UC_POWER_USER: return $tracker_lang['class_power_user']; + case UC_POWER_USER: + return $tracker_lang['class_power_user']; - case UC_VIP: return $tracker_lang['class_vip']; + case UC_VIP: + return $tracker_lang['class_vip']; - case UC_UPLOADER: return $tracker_lang['class_uploader']; + case UC_UPLOADER: + return $tracker_lang['class_uploader']; - case UC_MODERATOR: return $tracker_lang['class_moderator']; + case UC_MODERATOR: + return $tracker_lang['class_moderator']; - case UC_ADMINISTRATOR: return $tracker_lang['class_administrator']; + case UC_ADMINISTRATOR: + return $tracker_lang['class_administrator']; - case UC_SYSOP: return $tracker_lang['class_sysop']; - } - return ""; + case UC_SYSOP: + return $tracker_lang['class_sysop']; + } + return ""; } function is_valid_user_class($class) { - return is_numeric($class) && floor($class) == $class && $class >= UC_USER && $class <= UC_SYSOP; + return is_numeric($class) && floor($class) == $class && $class >= UC_USER && $class <= UC_SYSOP; } //---------------------------------- //---- Security function v0.1 by xam //---------------------------------- -function int_check($value,$stdhead = false, $stdfood = true, $die = true, $log = true) { +function int_check($value, $stdhead = false, $stdfood = true, $die = true, $log = true) { global $CURUSER; - $msg = "Invalid ID Attempt: Username: ".$CURUSER["username"]." - UserID: ".$CURUSER["id"]." - UserIP : ".getip(); - if ( is_array($value) ) { - foreach ($value as $val) int_check ($val); - } else { - if (!is_valid_id($value)) { - if ($stdhead) { - if ($log) - write_log($msg); - stderr("ERROR","Invalid ID! For security reason, we have been logged this action."); - }else { - Print ("

    Error

    \n"); print("
    "); + $msg = "Invalid ID Attempt: Username: " . $CURUSER["username"] . " - UserID: " . $CURUSER["id"] . " - UserIP : " . getip(); + if (is_array($value)) { + foreach ($value as $val) int_check($val); + } else { + if (!is_valid_id($value)) { + if ($stdhead) { + if ($log) + write_log($msg); + stderr("ERROR", "Invalid ID! For security reason, we have been logged this action."); + } else { + Print ("

    Error

    "); Print ("Invalid ID! For security reason, we have been logged this action.
    "); if ($log) write_log($msg); - } - - if ($stdfood) - stdfoot(); - if ($die) - die; - } - else - return true; - } + } + + if ($stdfood) + stdfoot(); + if ($die) + die; + } else + return true; + } } + //---------------------------------- //---- Security function v0.1 by xam //---------------------------------- function is_valid_id($id) { - return is_numeric($id) && ($id > 0) && (floor($id) == $id); + return is_numeric($id) && ($id > 0) && (floor($id) == $id); } function sql_ts_to_ut($s) { - return sql_timestamp_to_unix_timestamp($s); + return sql_timestamp_to_unix_timestamp($s); } function sql_timestamp_to_unix_timestamp($s) { - return mktime(substr($s, 11, 2), substr($s, 14, 2), substr($s, 17, 2), substr($s, 5, 2), substr($s, 8, 2), substr($s, 0, 4)); + return mktime(substr($s, 11, 2), substr($s, 14, 2), substr($s, 17, 2), substr($s, 5, 2), substr($s, 8, 2), + substr($s, 0, 4)); +} + +function get_ratio_color($ratio) { + if ($ratio < 0.1) return "#ff0000"; + if ($ratio < 0.2) return "#ee0000"; + if ($ratio < 0.3) return "#dd0000"; + if ($ratio < 0.4) return "#cc0000"; + if ($ratio < 0.5) return "#bb0000"; + if ($ratio < 0.6) return "#aa0000"; + if ($ratio < 0.7) return "#990000"; + if ($ratio < 0.8) return "#880000"; + if ($ratio < 0.9) return "#770000"; + if ($ratio < 1) return "#660000"; + return "#000000"; } - function get_ratio_color($ratio) { - if ($ratio < 0.1) return "#ff0000"; - if ($ratio < 0.2) return "#ee0000"; - if ($ratio < 0.3) return "#dd0000"; - if ($ratio < 0.4) return "#cc0000"; - if ($ratio < 0.5) return "#bb0000"; - if ($ratio < 0.6) return "#aa0000"; - if ($ratio < 0.7) return "#990000"; - if ($ratio < 0.8) return "#880000"; - if ($ratio < 0.9) return "#770000"; - if ($ratio < 1) return "#660000"; - return "#000000"; - } - - function get_slr_color($ratio) { - if ($ratio < 0.025) return "#ff0000"; - if ($ratio < 0.05) return "#ee0000"; - if ($ratio < 0.075) return "#dd0000"; - if ($ratio < 0.1) return "#cc0000"; - if ($ratio < 0.125) return "#bb0000"; - if ($ratio < 0.15) return "#aa0000"; - if ($ratio < 0.175) return "#990000"; - if ($ratio < 0.2) return "#880000"; - if ($ratio < 0.225) return "#770000"; - if ($ratio < 0.25) return "#660000"; - if ($ratio < 0.275) return "#550000"; - if ($ratio < 0.3) return "#440000"; - if ($ratio < 0.325) return "#330000"; - if ($ratio < 0.35) return "#220000"; - if ($ratio < 0.375) return "#110000"; - return "#000000"; - } +function get_slr_color($ratio) { + if ($ratio < 0.025) return "#ff0000"; + if ($ratio < 0.05) return "#ee0000"; + if ($ratio < 0.075) return "#dd0000"; + if ($ratio < 0.1) return "#cc0000"; + if ($ratio < 0.125) return "#bb0000"; + if ($ratio < 0.15) return "#aa0000"; + if ($ratio < 0.175) return "#990000"; + if ($ratio < 0.2) return "#880000"; + if ($ratio < 0.225) return "#770000"; + if ($ratio < 0.25) return "#660000"; + if ($ratio < 0.275) return "#550000"; + if ($ratio < 0.3) return "#440000"; + if ($ratio < 0.325) return "#330000"; + if ($ratio < 0.35) return "#220000"; + if ($ratio < 0.375) return "#110000"; + return "#000000"; +} function write_log($text, $color = "transparent", $type = "tracker") { - $type = sqlesc($type); - $color = sqlesc($color); - $text = sqlesc($text); - $added = sqlesc(get_date_time()); - sql_query("INSERT INTO sitelog (added, color, txt, type) VALUES($added, $color, $text, $type)"); + $type = sqlesc($type); + $color = sqlesc($color); + $text = sqlesc($text); + $added = sqlesc(get_date_time()); + sql_query("INSERT INTO sitelog (added, color, txt, type) VALUES($added, $color, $text, $type)"); } function get_et($ts) { - return get_elapsed_time($ts); + return get_elapsed_time($ts); } function get_elapsed_time($ts) { - $mins = floor((time() - $ts) / 60); - $hours = floor($mins / 60); - $mins -= $hours * 60; - $days = floor($hours / 24); - $hours -= $days * 24; - $weeks = floor($days / 7); - $days -= $weeks * 7; - $t = ""; - if ($weeks > 0) - return "$weeks �����" . ($weeks > 1 ? "�" : "�"); - if ($days > 0) - return "$days �" . ($days > 1 ? "���" : "���"); - if ($hours > 0) - return "$hours ���" . ($hours > 1 ? "��" : ""); - if ($mins > 0) - return "$mins �����" . ($mins > 1 ? "" : "�"); - return "< 1 ������"; + $mins = floor((time() - $ts) / 60); + $hours = floor($mins / 60); + $mins -= $hours * 60; + $days = floor($hours / 24); + $hours -= $days * 24; + $weeks = floor($days / 7); + $days -= $weeks * 7; + $t = ""; + if ($weeks > 0) + return "$weeks íåäåë" . ($weeks > 1 ? "è" : "ÿ"); + if ($days > 0) + return "$days ä" . ($days > 1 ? "íåé" : "åíü"); + if ($hours > 0) + return "$hours ÷àñ" . ($hours > 1 ? "îâ" : ""); + if ($mins > 0) + return "$mins ìèíóò" . ($mins > 1 ? "" : "à"); + return "< 1 ìèíóòû"; } ?> \ No newline at end of file From 4073a1981b9d11a9e153b16365e9b9c73dc9c96e Mon Sep 17 00:00:00 2001 From: yunasc Date: Mon, 24 Feb 2014 19:45:30 +0200 Subject: [PATCH 003/106] [BUGFIX] thumbnail.php fix + reformat code of screenshot.php --- screenshot.php | 24 +++++++++++------------ thumbnail.php | 52 ++++++++++++++++++++++++++------------------------ 2 files changed, 39 insertions(+), 37 deletions(-) diff --git a/screenshot.php b/screenshot.php index a6eaaf5..88da50e 100644 --- a/screenshot.php +++ b/screenshot.php @@ -40,12 +40,12 @@ $tmp = explode('.', $image_path); $ext = strtolower(end($tmp)); if ($ext == 'jpg' || $ext == 'jpeg') { -$img = @imagecreatefromjpeg($image_path); + $img = @imagecreatefromjpeg($image_path); } else if ($ext == 'png') { -$img = @imagecreatefrompng($image_path); + $img = @imagecreatefrompng($image_path); # Only if your version of GD includes GIF support } else if ($ext == 'gif') { -$img = @imagecreatefromgif($image_path); + $img = @imagecreatefromgif($image_path); } # If an image was successfully loaded, test the image for size @@ -53,22 +53,22 @@ # Get image size and scale ratio $width = imagesx($img); $height = imagesy($img); - $scale = min(MAX_WIDTH/$width, MAX_HEIGHT/$height); + $scale = min(MAX_WIDTH / $width, MAX_HEIGHT / $height); # If the image is larger than the max shrink it if ($scale < 1) { if (($width > MAX_WIDTH) OR ($height > MAX_HEIGHT)) { - $new_width = floor($scale*$width); - $new_height = floor($scale*$height); + $new_width = floor($scale * $width); + $new_height = floor($scale * $height); # Create a new temporary image $tmp_img = imagecreatetruecolor($new_width, $new_height); # Copy and resize old image into new image imagecopyresampled($tmp_img, $img, 0, 0, 0, 0, - $new_width, $new_height, $width, $height); + $new_width, $new_height, $width, $height); imagedestroy($img); $img = $tmp_img; } - }else{ + } else { header("Location: $image_path"); exit; } @@ -77,10 +77,10 @@ # Create error image if necessary if (!$img) { $img = imagecreate(MAX_WIDTH, MAX_HEIGHT); - imagecolorallocate($img,0,0,0); - $c = imagecolorallocate($img,70,70,70); - imageline($img,0,0,MAX_WIDTH,MAX_HEIGHT,$c2); - imageline($img,MAX_WIDTH,0,0,MAX_HEIGHT,$c2); + imagecolorallocate($img, 0, 0, 0); + $c = imagecolorallocate($img, 70, 70, 70); + imageline($img, 0, 0, MAX_WIDTH, MAX_HEIGHT, $c2); + imageline($img, MAX_WIDTH, 0, 0, MAX_HEIGHT, $c2); } # Display the image diff --git a/thumbnail.php b/thumbnail.php index faf53ba..999cc4c 100644 --- a/thumbnail.php +++ b/thumbnail.php @@ -37,49 +37,51 @@ # Load image $img = null; -$ext = strtolower(end(explode('.', $image_path))); +$temp = explode('.', $image_path); +$ext = strtolower(end($temp)); if ($ext == 'jpg' || $ext == 'jpeg') { -$img = @imagecreatefromjpeg($image_path); + $img = @imagecreatefromjpeg($image_path); } else if ($ext == 'png') { -$img = @imagecreatefrompng($image_path); + $img = @imagecreatefrompng($image_path); # Only if your version of GD includes GIF support } else if ($ext == 'gif') { -$img = @imagecreatefromgif($image_path); + $img = @imagecreatefromgif($image_path); } # If an image was successfully loaded, test the image for size if ($img) { # Get image size and scale ratio -$width = imagesx($img); -$height = imagesy($img); -$scale = min(MAX_WIDTH/$width, MAX_HEIGHT/$height); + $width = imagesx($img); + $height = imagesy($img); + $scale = min(MAX_WIDTH / $width, MAX_HEIGHT / $height); # If the image is larger than the max shrink it -if ($scale < 1) { -if (($width > MAX_WIDTH) OR ($height > MAX_HEIGHT)) { -$new_width = floor($scale*$width); -$new_height = floor($scale*$height); + if ($scale < 1) { + if (($width > MAX_WIDTH) OR ($height > MAX_HEIGHT)) { + $new_width = floor($scale * $width); + $new_height = floor($scale * $height); # Create a new temporary image -$tmp_img = imagecreatetruecolor($new_width, $new_height); + $tmp_img = imagecreatetruecolor($new_width, $new_height); # Copy and resize old image into new image -imagecopyresampled($tmp_img, $img, 0, 0, 0, 0, -$new_width, $new_height, $width, $height); -imagedestroy($img); -$img = $tmp_img; + imagecopyresampled($tmp_img, $img, 0, 0, 0, 0, + $new_width, $new_height, $width, $height); + imagedestroy($img); + $img = $tmp_img; + } + } else { + header("Location: $image_path"); + exit; + } } -}else{ -header("Location: $image_path"); -exit; -}} # Create error image if necessary if (!$img) { -$img = imagecreate(MAX_WIDTH, MAX_HEIGHT); -imagecolorallocate($img,0,0,0); -$c = imagecolorallocate($img,70,70,70); -imageline($img,0,0,MAX_WIDTH,MAX_HEIGHT,$c2); -imageline($img,MAX_WIDTH,0,0,MAX_HEIGHT,$c2); + $img = imagecreate(MAX_WIDTH, MAX_HEIGHT); + imagecolorallocate($img, 0, 0, 0); + $c = imagecolorallocate($img, 70, 70, 70); + imageline($img, 0, 0, MAX_WIDTH, MAX_HEIGHT, $c2); + imageline($img, MAX_WIDTH, 0, 0, MAX_HEIGHT, $c2); } # Display the image From 7146fbb821625bfe66660cfb0d8b3724313a7a30 Mon Sep 17 00:00:00 2001 From: yunasc Date: Mon, 24 Feb 2014 22:04:48 +0200 Subject: [PATCH 004/106] v2.1.14 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ÐžÐ¿Ñ‚Ð¸Ð¼Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð·Ð°Ð¿Ñ€Ð¾Ñа в browse.php (иÑпользование индекÑа Ð´Ð»Ñ Ñортировки) Скрипт апгрейда базы данных иÑкать в папке upgrade/ --- browse.php | 4 ++-- edit.php | 2 +- include/functions.php | 2 +- include/functions_torrenttable.php | 4 ++-- install/database.sql | 5 +++-- takeedit.php | 6 +++--- takeupload.php | 8 ++++---- upgrade/from_2.1.14_2.1.15.sql | 8 ++++++++ upload.php | 2 +- 9 files changed, 25 insertions(+), 16 deletions(-) create mode 100644 upgrade/from_2.1.14_2.1.15.sql diff --git a/browse.php b/browse.php index 9281c4d..d1c91e2 100644 --- a/browse.php +++ b/browse.php @@ -108,7 +108,7 @@ } else { - $orderby = "ORDER BY t.sticky ASC, t.id DESC"; + $orderby = "ORDER BY t.not_sticky DESC, t.id DESC"; $pagerlink = ""; } @@ -242,7 +242,7 @@ $addparam = $pagerlink; } list($pagertop, $pagerbottom, $limit) = pager($torrentsperpage, $count, "browse.php?" . $addparam); - $query = "SELECT t.id, t.moderated, t.moderatedby, t.category, t.leechers, t.seeders, t.free, t.name, t.times_completed, t.size, t.added, t.comments, t.numfiles, t.filename, t.sticky, t.owner," . "IF(t.numratings < $minvotes, NULL, ROUND(t.ratingsum / t.numratings, 1)) AS rating, c.name AS cat_name, c.image AS cat_pic, u.username, u.class" . ($CURUSER ? ", EXISTS(SELECT * FROM readtorrents WHERE readtorrents.userid = " . sqlesc($CURUSER["id"]) . " AND readtorrents.torrentid = t.id) AS readtorrent" : ", 1 AS readtorrent") . " FROM torrents AS t LEFT JOIN categories AS c ON t.category = c.id LEFT JOIN users AS u ON t.owner = u.id $where $orderby $limit"; + $query = "SELECT t.id, t.moderated, t.moderatedby, t.category, t.leechers, t.seeders, t.free, t.name, t.times_completed, t.size, t.added, t.comments, t.numfiles, t.filename, t.not_sticky, t.owner," . "IF(t.numratings < $minvotes, NULL, ROUND(t.ratingsum / t.numratings, 1)) AS rating, c.name AS cat_name, c.image AS cat_pic, u.username, u.class" . ($CURUSER ? ", EXISTS(SELECT * FROM readtorrents WHERE readtorrents.userid = " . sqlesc($CURUSER["id"]) . " AND readtorrents.torrentid = t.id) AS readtorrent" : ", 1 AS readtorrent") . " FROM torrents AS t LEFT JOIN categories AS c ON t.category = c.id LEFT JOIN users AS u ON t.owner = u.id $where $orderby $limit"; $res = sql_query($query) or die(mysql_error()); } else unset($res); diff --git a/edit.php b/edit.php index 94414fe..c5b3fcb 100644 --- a/edit.php +++ b/edit.php @@ -96,7 +96,7 @@ "
    " , 1); if(get_user_class() >= UC_ADMINISTRATOR) - tr("Âàæíûé", " Ïðèêðåïèòü ýòîò òîððåíò (âñåãäà íàâåðõó)", 1); + tr("Âàæíûé", " Ïðèêðåïèòü ýòîò òîððåíò (âñåãäà íàâåðõó)", 1); print("
    \n"); print("\n"); diff --git a/include/functions.php b/include/functions.php index 758c6e7..65cd13a 100644 --- a/include/functions.php +++ b/include/functions.php @@ -965,7 +965,7 @@ function parked() { //  ýòîé ñòðîêå çàáèò êîïèðàéò. Ïðè åãî óáèðàíèè ìîæåøü ïîïëàòèòüñÿ ðàáî÷èì òðåêåðîì ;)  äàííîì ñëó÷àå - óáèðàÿ ñòðî÷êè íèæå òû íå ñìîæåøü èñïîëüçîâàòü òðåêåð. define ('VERSION', ''); -define ('NUM_VERSION', '2.1.14'); +define ('NUM_VERSION', '2.1.15'); define ('TBVERSION', 'Powered by TBDev v'.NUM_VERSION.' Yuna Scatari Edition '.VERSION.' Copyright © 2001-'.date('Y')); function mysql_modified_rows () { diff --git a/include/functions_torrenttable.php b/include/functions_torrenttable.php index 594afd1..bee4687 100644 --- a/include/functions_torrenttable.php +++ b/include/functions_torrenttable.php @@ -206,7 +206,7 @@ function torrenttable($res, $variant = "index") { while ($row = mysql_fetch_assoc($res)) { $id = $row["id"]; - print("\n"); + print("\n"); print("
  • "); if (isset($row["cat_name"])) { @@ -233,7 +233,7 @@ function torrenttable($res, $variant = "index") { $freepic = ''; } $thisisfree = $freepic; - print("".($row["sticky"] == "yes" ? "Âàæíûé: " : "")."".($row["not_sticky"] == "no" ? "Âàæíûé: " : "")."= UC_ADMINISTRATOR && in_array($_POST['free'], array('yes', 'silver', 'no'))) diff --git a/takeupload.php b/takeupload.php index 1dc860b..d7beba9 100644 --- a/takeupload.php +++ b/takeupload.php @@ -86,10 +86,10 @@ function bark($msg) { $free = $_POST['free']; } -if ($_POST['sticky'] == 'yes' AND get_user_class() >= UC_ADMINISTRATOR) - $sticky = "yes"; +if ($_POST['not_sticky'] == 'no' AND get_user_class() >= UC_ADMINISTRATOR) + $not_sticky = "no"; else - $sticky = "no"; + $not_sticky = "yes"; function dict_check($d, $s) { if ($d["type"] != "dictionary") @@ -256,7 +256,7 @@ function dict_get($d, $k, $t) { $torrent = htmlspecialchars_uni(str_replace("_", " ", $torrent)); -$ret = sql_query("INSERT INTO torrents (filename, owner, visible, sticky, info_hash, name, size, numfiles, type, descr, ori_descr, free, image1, image2, image3, image4, image5, category, save_as, added, last_action) VALUES (" . implode(",", array_map("sqlesc", array($fname, $CURUSER["id"], "no", $sticky, $infohash, $torrent, $totallen, count($filelist), $type, $descr, $descr, $free, $inames[0], $inames[1], $inames[2], $inames[3], $inames[4], 0 + $_POST["type"], $dname))) . ", '" . get_date_time() . "', '" . get_date_time() . "')"); +$ret = sql_query("INSERT INTO torrents (filename, owner, visible, not_sticky, info_hash, name, size, numfiles, type, descr, ori_descr, free, image1, image2, image3, image4, image5, category, save_as, added, last_action) VALUES (" . implode(",", array_map("sqlesc", array($fname, $CURUSER["id"], "no", $not_sticky, $infohash, $torrent, $totallen, count($filelist), $type, $descr, $descr, $free, $inames[0], $inames[1], $inames[2], $inames[3], $inames[4], 0 + $_POST["type"], $dname))) . ", '" . get_date_time() . "', '" . get_date_time() . "')"); if (!$ret) { if (mysql_errno() == 1062) bark("torrent already uploaded!"); diff --git a/upgrade/from_2.1.14_2.1.15.sql b/upgrade/from_2.1.14_2.1.15.sql new file mode 100644 index 0000000..3d435e7 --- /dev/null +++ b/upgrade/from_2.1.14_2.1.15.sql @@ -0,0 +1,8 @@ +# +# SQL script to update from 2.12.14 version to 2.12.15 +# + +ALTER TABLE `torrents` ADD COLUMN `not_sticky` ENUM('yes','no') NOT NULL DEFAULT 'yes' AFTER `sticky`; +UPDATE `torrents` SET `not_sticky` = 'no' WHERE `sticky` = 'yes'; +ALTER TABLE `torrents` ADD INDEX `vnsi` (`visible`, `not_sticky`, `id`); +ALTER TABLE `torrents` DROP COLUMN `sticky`; \ No newline at end of file diff --git a/upload.php b/upload.php index ea5ba5b..625e20b 100644 --- a/upload.php +++ b/upload.php @@ -85,7 +85,7 @@ , 1); if (get_user_class() >= UC_ADMINISTRATOR) - tr("Âàæíûé", "Ïðèêðåïèòü ýòîò òîððåíò (âñåãäà íàâåðõó)", 1); + tr("Âàæíûé", "Ïðèêðåïèòü ýòîò òîððåíò (âñåãäà íàâåðõó)", 1); ?>
    Îáðàòèòå âíèìàíèå, ÷òî òîððåíò àâòîìàòè÷åñêè ñòàíåò âèäèìûì êîãäà ïîÿâèòüñÿ ðàçäàþùèé è àâòîìàòè÷åñêè ïåðåñòàíåò áûòü âèäèìûì (ñòàíåò ìåðòâÿêîì) êîãäà íå áóäåò ðàçäàþùåãî íåêîòîðîå âðåìÿ. Èñïîëüçóéòå ýòîò ïåðåêëþ÷àòåëü äëÿ óñêîðåíèÿ ïðîöåñà. Òàêæå ó÷òèòå ÷òî íåâèäèìûå òîððåíòû (ìåðòâÿêè) âñå-ðàâíî ìîãóò áûòü ïðîñìîòðåíû è íàéäåíû, ýòî ïðîñòî íå ïî-óìîë÷àíèþ.
    ", 1); diff --git a/include/functions.php b/include/functions.php index 65cd13a..f6c91c0 100644 --- a/include/functions.php +++ b/include/functions.php @@ -660,7 +660,7 @@ function parsedescr($d, $html) { } function stdhead($title = "", $msgalert = true) { - global $CURUSER, $SITE_ONLINE, $FUNDS, $SITENAME, $DEFAULTBASEURL, $ss_uri, $tracker_lang, $default_theme; + global $CURUSER, $SITE_ONLINE, $FUNDS, $SITENAME, $DEFAULTBASEURL, $ss_uri, $tracker_lang, $default_theme, $keywords, $description; if (!$SITE_ONLINE) die('Site is down for maintenance, please check back again later... thanks
    '); diff --git a/install/database.sql b/install/database.sql index 8c65350..40f867a 100644 --- a/install/database.sql +++ b/install/database.sql @@ -532,6 +532,8 @@ CREATE TABLE `torrents` ( `id` int(10) unsigned NOT NULL auto_increment, `info_hash` varbinary(40) NOT NULL default '', `name` varchar(255) NOT NULL default '', + `keywords` varchar(255) NOT NULL default '', + `description` text NOT NULL, `filename` varchar(255) NOT NULL default '', `save_as` varchar(255) NOT NULL default '', `descr` text NOT NULL, diff --git a/takeedit.php b/takeedit.php index a157df7..b361a29 100644 --- a/takeedit.php +++ b/takeedit.php @@ -276,6 +276,11 @@ function dict_get($d, $k, $t) { if (!$descr) bark("Âû äîëæíû ââåñòè îïèñàíèå!"); +$keywords = htmlspecialchars_uni((string)$_POST["keywords"]); +$description = htmlspecialchars_uni((string)$_POST["description"]); + +$updateset[] = "keywords = " . sqlesc($keywords); +$updateset[] = "description = " . sqlesc($description); $updateset[] = "name = " . sqlesc($name); $updateset[] = "descr = " . sqlesc($descr); $updateset[] = "ori_descr = " . sqlesc($descr); diff --git a/takeupload.php b/takeupload.php index d7beba9..09cbc1b 100644 --- a/takeupload.php +++ b/takeupload.php @@ -91,6 +91,17 @@ function bark($msg) { else $not_sticky = "yes"; +//SEO mods +$keywords = htmlspecialchars_uni((string)$_POST["keywords"]); +$description = htmlspecialchars_uni((string)$_POST["description"]); + +if (!$keywords) + $keywords = ''; + +if (!$description) + $description = ''; +//SEO mods + function dict_check($d, $s) { if ($d["type"] != "dictionary") bark("not a dictionary"); @@ -256,7 +267,7 @@ function dict_get($d, $k, $t) { $torrent = htmlspecialchars_uni(str_replace("_", " ", $torrent)); -$ret = sql_query("INSERT INTO torrents (filename, owner, visible, not_sticky, info_hash, name, size, numfiles, type, descr, ori_descr, free, image1, image2, image3, image4, image5, category, save_as, added, last_action) VALUES (" . implode(",", array_map("sqlesc", array($fname, $CURUSER["id"], "no", $not_sticky, $infohash, $torrent, $totallen, count($filelist), $type, $descr, $descr, $free, $inames[0], $inames[1], $inames[2], $inames[3], $inames[4], 0 + $_POST["type"], $dname))) . ", '" . get_date_time() . "', '" . get_date_time() . "')"); +$ret = sql_query("INSERT INTO torrents (filename, owner, visible, not_sticky, info_hash, name, keywords, description, size, numfiles, type, descr, ori_descr, free, image1, image2, image3, image4, image5, category, save_as, added, last_action) VALUES (" . implode(",", array_map("sqlesc", array($fname, $CURUSER["id"], "no", $not_sticky, $infohash, $torrent, $keywords, $description, $totallen, count($filelist), $type, $descr, $descr, $free, $inames[0], $inames[1], $inames[2], $inames[3], $inames[4], 0 + $_POST["type"], $dname))) . ", '" . get_date_time() . "', '" . get_date_time() . "')"); if (!$ret) { if (mysql_errno() == 1062) bark("torrent already uploaded!"); diff --git a/themes/Gray/stdhead.php b/themes/Gray/stdhead.php index d48bdb7..2fbc87a 100644 --- a/themes/Gray/stdhead.php +++ b/themes/Gray/stdhead.php @@ -37,6 +37,12 @@ function initSpoilers(context) { //--> +\n"; +if($description) + echo "\n"; +?> diff --git a/themes/TBDev/stdhead.php b/themes/TBDev/stdhead.php index f54f10c..498a00c 100644 --- a/themes/TBDev/stdhead.php +++ b/themes/TBDev/stdhead.php @@ -39,6 +39,12 @@ function initSpoilers(context) { //--> +\n"; +if($description) + echo "\n"; +?> diff --git a/upload.php b/upload.php index 625e20b..67bbfd0 100644 --- a/upload.php +++ b/upload.php @@ -77,12 +77,15 @@ $s .= "\n"; tr($tracker_lang['type'], $s, 1); - if(get_user_class() >= UC_ADMINISTRATOR) - tr("Òèï ðàçäà÷è", -"
    ". -"
    ". -"
    " -, 1); +tr('Keywords', '', 1); +tr('Description', '', 1); + +if(get_user_class() >= UC_ADMINISTRATOR) + tr("Òèï ðàçäà÷è", + "
    ". + "
    ". + "
    " + , 1); if (get_user_class() >= UC_ADMINISTRATOR) tr("Âàæíûé", "Ïðèêðåïèòü ýòîò òîððåíò (âñåãäà íàâåðõó)", 1); From 1d745c6a437d03ec4a4120f3d5acb57b23dba4d4 Mon Sep 17 00:00:00 2001 From: yunasc Date: Thu, 27 Feb 2014 19:24:56 +0200 Subject: [PATCH 006/106] =?UTF-8?q?=D0=A4=D0=BE=D1=80=D0=BC=D0=B0=20=D0=BE?= =?UTF-8?q?=D0=B1=D1=80=D0=B0=D1=82=D0=BD=D0=BE=D0=B9=20=D1=81=D0=B2=D1=8F?= =?UTF-8?q?=D0=B7=D1=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- contactus.php | 114 +++++++++++++++++++++++++++++++++++++++ include/config.php | 4 ++ themes/Gray/stdhead.php | 2 + themes/TBDev/stdhead.php | 2 + 4 files changed, 122 insertions(+) create mode 100644 contactus.php diff --git a/contactus.php b/contactus.php new file mode 100644 index 0000000..bda3f01 --- /dev/null +++ b/contactus.php @@ -0,0 +1,114 @@ +ÍÅ áûëî îòïðàâëåíî àäìèíèñòðàöèè, èç-çà íåïðåäâèäåííîé îøèáêè ñåðâåðà.', 'error'); + stdfoot(); + +} else { + stdhead('Ñâÿçàòüñÿ ñ íàìè'); + if ($use_captcha) { + include_once("include/captcha.php"); + $hash = create_captcha(); + } +?> +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + Ñâÿçàòüñÿ ñ íàìè +
    + Âàø Email: + + +
    + Òåìà: + + +
    + Ñîîáùåíèå: + + +
    + Êîä áåçîïàñíîñòè: + + +

    Ïîæàëóéñòà, ââåäèòå òåêñò èçîáðàæåííûé íà êàðòèíêå âíèçó.
    Ýòîò ïðîöåññ ïðåäîòâðàùàåò àâòîìàòè÷åñêóþ ðåãèñòðàöèþ.

    + Captcha
    + Êîä ÷óâñòâèòåëåí ê ðåãèñòðó
    + Êëèêíèòå äâà ðàçà íà êàðòèíêå, ÷òî-áû îáíîâèòü êàðòèíêó. + +
    + + +
    +
    + \ No newline at end of file diff --git a/include/config.php b/include/config.php index 2aba0c2..a0e6e89 100644 --- a/include/config.php +++ b/include/config.php @@ -78,6 +78,10 @@ $allow_block_hide = true; // Ðàçðåøèòü ñâîðà÷èâàíèå áëîêîâ $check_for_working_mta = true; // Ïðîâåðÿòü ðàáîòó ïî÷òîâîãî MTA ïðè ðåãèñòðàöèè ïîëüçîâàòåëÿ (TCP connect @ domain:25) $force_private_tracker = true; + +$admin_email = 'admin@'.$_SERVER['HTTP_HOST']; // Ïî÷òà àäìèíèñòðàòîðà òðåêåðà, äëÿ ôîðìû îáðàòíîé ñâÿçè +$website_name = 'TBDev'; // Êðàòêîå èìÿ ñàéòà, äëÿ ôîðìû îáðàòíîé ñâÿçè + $enable_adv_antidreg = false; // Èñïîëüçîâàòü ïðîäâèíóòóþ ñèñòåìó ïðîòèâ äâîéíûõ ðåãèñòðàöèé. Ïîÿñíåíèå âíèçó: /* * Åñëè íàø þçåð ñäåëàë ïðîñòî âûõîä (ññûëêà "Âûõîä" aka logout.php) òî ó íåãî â êóêñàõ îñòàíåòñÿ uid diff --git a/themes/Gray/stdhead.php b/themes/Gray/stdhead.php index 2fbc87a..ed9e51e 100644 --- a/themes/Gray/stdhead.php +++ b/themes/Gray/stdhead.php @@ -87,6 +87,8 @@ function initSpoilers(context) {  • --> + •  +
    diff --git a/themes/TBDev/stdhead.php b/themes/TBDev/stdhead.php index 498a00c..52879eb 100644 --- a/themes/TBDev/stdhead.php +++ b/themes/TBDev/stdhead.php @@ -88,6 +88,8 @@ function initSpoilers(context) {  • --> + •  +
    From 728d4bf16ea6de8d70a2d96bf9291505618772e3 Mon Sep 17 00:00:00 2001 From: Yuna Scatari Date: Fri, 28 Feb 2014 14:17:05 +0200 Subject: [PATCH 007/106] Force type of int --- announce.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/announce.php b/announce.php index 00b3fd2..d180125 100644 --- a/announce.php +++ b/announce.php @@ -45,7 +45,7 @@ } foreach (array('port','downloaded','uploaded','left') as $x) - $GLOBALS[$x] = 0 + $_GET[$x]; + $GLOBALS[$x] = intval($_GET[$x]); if (get_magic_quotes_gpc()) { $info_hash = stripslashes($info_hash); From 87a03887da853f049cf7fec6c8920e65cf895f6a Mon Sep 17 00:00:00 2001 From: yunasc Date: Mon, 3 Mar 2014 10:47:33 +0200 Subject: [PATCH 008/106] =?UTF-8?q?=D0=9C=D1=83=D0=BB=D1=8C=D1=82=D0=B8?= =?UTF-8?q?=D1=82=D1=80=D0=B5=D0=BA=D0=B5=D1=80=20=D1=81=20=D0=BF=D0=BE?= =?UTF-8?q?=D0=B4=D0=B4=D0=B5=D1=80=D0=B6=D0=BA=D0=BE=D0=B9=20UDP.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit До конца не готово. --- details.php | 13 +- download.php | 16 ++- edit.php | 4 - include/BDecode.php | 212 +++++++++++++++++++++++++++++++ include/BEncode.php | 119 +++++++++++++++++ include/functions.php | 2 +- include/scraper/httptscraper.php | 96 ++++++++++++++ include/scraper/lightbenc.php | 163 ++++++++++++++++++++++++ include/scraper/tscraper.php | 39 ++++++ include/scraper/udptscraper.php | 95 ++++++++++++++ install/database.sql | 21 +++ takeedit.php | 5 - takeupload.php | 127 ++++++++---------- update_multi.php | 39 ++++++ upgrade/from_2.1.14_2.1.15.sql | 2 +- upgrade/from_2.1.15_2.1.16.sql | 5 + 16 files changed, 866 insertions(+), 92 deletions(-) create mode 100644 include/BDecode.php create mode 100644 include/BEncode.php create mode 100644 include/scraper/httptscraper.php create mode 100644 include/scraper/lightbenc.php create mode 100644 include/scraper/tscraper.php create mode 100644 include/scraper/udptscraper.php create mode 100644 update_multi.php create mode 100644 upgrade/from_2.1.15_2.1.16.sql diff --git a/details.php b/details.php index af782b3..bb320c8 100644 --- a/details.php +++ b/details.php @@ -190,7 +190,7 @@ function dltable($name, $arr, $torrent) if (!isset($id) || !$id) die(); -$res = sql_query("SELECT t.keywords, t.description, t.free, t.seeders, t.banned, t.leechers, t.info_hash, t.filename, UNIX_TIMESTAMP() - UNIX_TIMESTAMP(t.last_action) AS lastseed, t.numratings, t.name, IF(t.numratings < $minvotes, NULL, ROUND(t.ratingsum / t.numratings, 1)) AS rating, t.owner, t.save_as, t.descr, t.visible, t.size, t.added, t.views, t.hits, t.times_completed, t.id, t.type, t.numfiles, t.image1, t.image2, t.image3, t.image4, t.image5, c.name AS cat_name, u.username FROM torrents AS t LEFT JOIN categories AS c ON t.category = c.id LEFT JOIN users AS u ON t.owner = u.id WHERE t.id = $id") +$res = sql_query("SELECT t.multitracker, t.keywords, t.description, t.free, t.seeders, t.banned, t.leechers, t.info_hash, t.filename, UNIX_TIMESTAMP() - UNIX_TIMESTAMP(t.last_action) AS lastseed, t.numratings, t.name, IF(t.numratings < $minvotes, NULL, ROUND(t.ratingsum / t.numratings, 1)) AS rating, t.owner, t.save_as, t.descr, t.visible, t.size, t.added, t.views, t.hits, t.times_completed, t.id, t.type, t.numfiles, t.image1, t.image2, t.image3, t.image4, t.image5, c.name AS cat_name, u.username FROM torrents AS t LEFT JOIN categories AS c ON t.category = c.id LEFT JOIN users AS u ON t.owner = u.id WHERE t.id = $id") or sqlerr(__FILE__, __LINE__); $row = mysql_fetch_array($res); @@ -439,6 +439,17 @@ function seed_sort($a,$b) { tr("".$tracker_lang['details_leeching']."
    [".$tracker_lang['close_list']."]", dltable($tracker_lang['details_leeching'], $downloaders, $row), 1); } + if ($row["multitracker"] == 'yes') { + $announces_r = sql_query('SELECT url, seeders, leechers, last_update, state, error FROM torrents_scrape WHERE tid = '.$id); + while ($announce = mysql_fetch_array($announces_r)) { + if ($announce['state'] == 'ok') + $anns[] = '
  • '.$announce['url'].' - ðàçäàþùèå: '.$announce['seeders'].', êà÷àþùèå: '.$announce['leechers'].''; + else + $anns[] = '
  • '.$announce['url'].' - íå ðàáîòàåò, îøèáêà: '.$announce['error'].''; + } + tr("Ìóëüòèòðåêåð", '
      '.implode($anns).'
    ', 1); + } + if ($row["times_completed"] > 0) { $res = sql_query("SELECT users.id, users.username, users.title, users.uploaded, users.downloaded, users.donor, users.enabled, users.warned, users.last_access, users.class, snatched.startdat, snatched.last_action, snatched.completedat, snatched.seeder, snatched.userid, snatched.uploaded AS sn_up, snatched.downloaded AS sn_dn FROM snatched INNER JOIN users ON snatched.userid = users.id WHERE snatched.finished='yes' AND snatched.torrent =" . sqlesc($id) . " ORDER BY users.class DESC $limit") or sqlerr(__FILE__,__LINE__); $snatched_full = "\n"; diff --git a/download.php b/download.php index c5e49d5..3a1812a 100644 --- a/download.php +++ b/download.php @@ -68,18 +68,22 @@ $name = str_replace(array(',', ';'), '', $name); -require_once "include/benc.php"; +require_once "include/BDecode.php"; +require_once "include/BEncode.php"; if (strlen($CURUSER['passkey']) != 32) { $CURUSER['passkey'] = md5($CURUSER['username'].get_date_time().$CURUSER['passhash']); sql_query("UPDATE users SET passkey=".sqlesc($CURUSER[passkey])." WHERE id=".sqlesc($CURUSER[id])); } -$dict = bdec_file($fn, $max_torrent_size); +$dict = bdecode(file_get_contents($fn)); -$dict['value']['announce']['value'] = $announce_urls[0]."?passkey=$CURUSER[passkey]";//"$DEFAULTBASEURL/announce.php?passkey=$CURUSER[passkey]"; -$dict['value']['announce']['string'] = strlen($dict['value']['announce']['value']).":".$dict['value']['announce']['value']; -$dict['value']['announce']['strlen'] = strlen($dict['value']['announce']['string']); +//$dict['announce'] = $announce_urls[0]."?passkey=$CURUSER[passkey]";//"$DEFAULTBASEURL/announce.php?passkey=$CURUSER[passkey]"; + +if (!empty($dict['announce-list'])) { + $dict['announce-list'][][0] = $announce_urls[0]."?passkey=$CURUSER[passkey]"; // Just add one tracker for multitrackers, we are the last +} else + $dict['announce'] = $announce_urls[0]."?passkey=$CURUSER[passkey]";//"$DEFAULTBASEURL/announce.php?passkey=$CURUSER[passkey]"; header ("Expires: Tue, 1 Jan 1980 00:00:00 GMT"); header ("Last-Modified: ".gmdate("D, d M Y H:i:s")." GMT"); @@ -94,6 +98,6 @@ header ("Content-Type: application/x-bittorrent"); ob_implicit_flush(true); -print(benc($dict)); +print(BEncode($dict)); ?> \ No newline at end of file diff --git a/edit.php b/edit.php index cbf7ef0..c5b3fcb 100644 --- a/edit.php +++ b/edit.php @@ -84,10 +84,6 @@ $s .= "\n"; tr("Òèï", $s, 1); - - tr('Keywords', '', 1); - tr('Description', '', 1); - tr("Âèäèìûé", " Âèäèìûé â òîððåíòàõ
    Îáðàòèòå âíèìàíèå, ÷òî òîððåíò àâòîìàòè÷åñêè ñòàíåò âèäèìûì êîãäà ïîÿâèòüñÿ ðàçäàþùèé è àâòîìàòè÷åñêè ïåðåñòàíåò áûòü âèäèìûì (ñòàíåò ìåðòâÿêîì) êîãäà íå áóäåò ðàçäàþùåãî íåêîòîðîå âðåìÿ. Èñïîëüçóéòå ýòîò ïåðåêëþ÷àòåëü äëÿ óñêîðåíèÿ ïðîöåñà. Òàêæå ó÷òèòå ÷òî íåâèäèìûå òîððåíòû (ìåðòâÿêè) âñå-ðàâíî ìîãóò áûòü ïðîñìîòðåíû è íàéäåíû, ýòî ïðîñòî íå ïî-óìîë÷àíèþ.
    ", 1); diff --git a/include/BDecode.php b/include/BDecode.php new file mode 100644 index 0000000..1509027 --- /dev/null +++ b/include/BDecode.php @@ -0,0 +1,212 @@ += '0' && $wholefile[$offset] <= '9') + { + + $ret[0] *= 10; + $ret[0] += ord($wholefile[$offset]) - ord("0"); + $offset++; + } + // Tolerate : or e because this is a multiuse function + else if ($wholefile[$offset] == 'e' || $wholefile[$offset] == ':') + { + $ret[1] = $offset+1; + if ($negative) + { + if ($ret[0] == 0) + return array(false); + $ret[0] = - $ret[0]; + } + return $ret; + } + else + return array(false); + } + +} + +function decodeEntry($wholefile, $offset=0) +{ + if ($wholefile[$offset] == 'd') + return $this->decodeDict($wholefile, $offset); + if ($wholefile[$offset] == 'l') + return $this->decodelist($wholefile, $offset); + if ($wholefile[$offset] == "i") + { + $offset++; + return $this->numberdecode($wholefile, $offset); + } + // String value: decode number, then grab substring + $info = $this->numberdecode($wholefile, $offset); + if ($info[0] === false) + return array(false); + $ret[0] = substr($wholefile, $info[1], $info[0]); + $ret[1] = $info[1]+strlen($ret[0]); + return $ret; +} + +function decodeList($wholefile, $start) +{ + $offset = $start+1; + $i = 0; + if ($wholefile[$start] != 'l') + return array(false); + $ret = array(); + while (true) + { + if ($wholefile[$offset] == 'e') + break; + $value = $this->decodeEntry($wholefile, $offset); + if ($value[0] === false) + return array(false); + $ret[$i] = $value[0]; + $offset = $value[1]; + $i ++; + } + + // The empy list is an empty array. Seems fine. + $final[0] = $ret; + $final[1] = $offset+1; + return $final; + +} + +// Tries to construct an array +function decodeDict($wholefile, $start=0) +{ + $offset = $start; + if ($wholefile[$offset] == 'l') + return $this->decodeList($wholefile, $start); + if ($wholefile[$offset] != 'd') + return false; + $ret = array(); + $offset++; + while (true) + { + if ($wholefile[$offset] == 'e') + { + $offset++; + break; + } + $left = $this->decodeEntry($wholefile, $offset); + if (!$left[0]) + return false; + $offset = $left[1]; + if ($wholefile[$offset] == 'd') + { + // Recurse + $value = $this->decodedict($wholefile, $offset); + if (!$value[0]) + return false; + $ret[addslashes($left[0])] = $value[0]; + $offset= $value[1]; + continue; + } + else if ($wholefile[$offset] == 'l') + { + $value = $this->decodeList($wholefile, $offset); + if (!$value[0] && is_bool($value[0])) + return false; + $ret[addslashes($left[0])] = $value[0]; + $offset = $value[1]; + } + else + { + $value = $this->decodeEntry($wholefile, $offset); + if ($value[0] === false) + return false; + $ret[addslashes($left[0])] = $value[0]; + $offset = $value[1]; + } + } + if (empty($ret)) + $final[0] = true; + else + $final[0] = $ret; + $final[1] = $offset; + return $final; + + +} + +} // End of class declaration. + +// Use this function. eg: BDecode("d8:announce44:http://www. ... e"); +function BDecode($wholefile) +{ + $decoder = new BDecode; + $return = $decoder->decodeEntry($wholefile); + return $return[0]; +} + +?> \ No newline at end of file diff --git a/include/BEncode.php b/include/BEncode.php new file mode 100644 index 0000000..8e9e95a --- /dev/null +++ b/include/BEncode.php @@ -0,0 +1,119 @@ + $value) + $keys[$i++] = stripslashes($key); + sort($keys); + for ($i=0 ; isset($keys[$i]); $i++) + $return[addslashes($keys[$i])] = $array[addslashes($keys[$i])]; + return $return; +} + +// Encodes strings, integers and empty dictionaries. +// $unstrip is set to true when decoding dictionary keys +function encodeEntry($entry, &$fd, $unstrip = false) +{ + if (is_bool($entry)) + { + $fd .= "de"; + return; + } + if (is_int($entry) || is_float($entry)) + { + $fd .= "i".$entry."e"; + return; + } + if ($unstrip) + $myentry = stripslashes($entry); + else + $myentry = $entry; + $length = strlen($myentry); + $fd .= $length.":".$myentry; + return; +} + +// Encodes lists +function encodeList($array, &$fd) +{ + $fd .= "l"; + + // The empty list is defined as array(); + if (empty($array)) + { + $fd .= "e"; + return; + } + for ($i = 0; isset($array[$i]); $i++) + $this->decideEncode($array[$i], $fd); + $fd .= "e"; +} + +// Passes lists and dictionaries accordingly, and has encodeEntry handle +// the strings and integers. +function decideEncode($unknown, &$fd) +{ + if (is_array($unknown)) + { + if (isset($unknown[0]) || empty($unknown)) + return $this->encodeList($unknown, $fd); + else + return $this->encodeDict($unknown, $fd); + } + $this->encodeEntry($unknown, $fd); +} + +// Encodes dictionaries +function encodeDict($array, &$fd) +{ + $fd .= "d"; + if (is_bool($array)) + { + $fd .= "e"; + return; + } + // NEED TO SORT! + $newarray = $this->makeSorted($array); + foreach($newarray as $left => $right) + { + $this->encodeEntry($left, $fd, true); + $this->decideEncode($right, $fd); + } + $fd .= "e"; + return; +} + + + +} // End of class declaration. + +// Use this function in your own code. +function BEncode($array) +{ + $string = ""; + $encoder = new BEncode; + $encoder->decideEncode($array, $string); + return $string; +} + + +?> \ No newline at end of file diff --git a/include/functions.php b/include/functions.php index f6c91c0..3c58fab 100644 --- a/include/functions.php +++ b/include/functions.php @@ -965,7 +965,7 @@ function parked() { //  ýòîé ñòðîêå çàáèò êîïèðàéò. Ïðè åãî óáèðàíèè ìîæåøü ïîïëàòèòüñÿ ðàáî÷èì òðåêåðîì ;)  äàííîì ñëó÷àå - óáèðàÿ ñòðî÷êè íèæå òû íå ñìîæåøü èñïîëüçîâàòü òðåêåð. define ('VERSION', ''); -define ('NUM_VERSION', '2.1.15'); +define ('NUM_VERSION', '2.1.16'); define ('TBVERSION', 'Powered by TBDev v'.NUM_VERSION.' Yuna Scatari Edition '.VERSION.' Copyright © 2001-'.date('Y')); function mysql_modified_rows () { diff --git a/include/scraper/httptscraper.php b/include/scraper/httptscraper.php new file mode 100644 index 0000000..37dddac --- /dev/null +++ b/include/scraper/httptscraper.php @@ -0,0 +1,96 @@ +scrape('http://tracker.tld:port/announce',array('0000000000000000000000000000000000000000')); + + print_r($ret); + }catch(ScraperException $e){ + echo('Error: ' . $e->getMessage() . "
    \n"); + echo('Connection error: ' . ($e->isConnectionError() ? 'yes' : 'no') . "
    \n"); + } + */ + + require_once(dirname(__FILE__) . '/tscraper.php'); + require_once(dirname(__FILE__) . '/lightbenc.php'); + + class httptscraper extends tscraper{ + protected $maxreadsize; + + public function __construct($timeout=2,$maxreadsize=4096){ + $this->maxreadsize = $maxreadsize; + parent::__construct($timeout); + } + + /* $url: Tracker url like: http://tracker.tld:port/announce or http://tracker.tld:port/scrape + $infohash: Infohash string or array. 40 char long infohash. + */ + public function scrape($url,$infohash){ + if(!is_array($infohash)){ $infohash = array($infohash); } + foreach($infohash as $hash){ + if(!preg_match('#^[a-f0-9]{40}$#i',$hash)){ throw new ScraperException('Invalid infohash: ' . $hash . '.'); } + } + $url = trim($url); + if (preg_match('%(http://.*?/)announce([^/]*)$%i', $url, $m)){ + $url = $m[1] . 'scrape' . $m[2]; + }else if (preg_match('%(http://.*?/)scrape([^/]*)$%i', $url, $m)){ + }else{ + throw new ScraperException('Invalid tracker url.'); + } + + $sep = preg_match ('/\?.{1,}?/i', $url) ? '&' : '?'; + $requesturl = $url; + foreach($infohash as $hash){ + $requesturl .= $sep . 'info_hash=' . rawurlencode(pack('H*', $hash)); + $sep = '&'; + } + + ini_set('default_socket_timeout',$this->timeout); + $rh = @fopen($requesturl,'r'); + if(!$rh){ throw new ScraperException('Could not open HTTP connection.',0,true); } + stream_set_timeout($rh, $this->timeout); + + $return = ''; + $pos = 0; + while (!feof($rh) && $pos < $this->maxreadsize){ + $return .= fread($rh,1024); + } + fclose($rh); + + if(!substr($return, 0, 1) == 'd'){ throw new ScraperException('Invalid scrape response.'); } + $arr_scrape_data = lightbenc::bdecode($return); + + $torrents = array(); + foreach($infohash as $hash){ + $ehash = pack('H*', $hash); + if (isset($arr_scrape_data['files'][$ehash])){ + $torrents[$hash] = array( 'infohash'=>$hash, + 'seeders'=>(int) $arr_scrape_data['files'][$ehash]['complete'], + 'completed'=>(int) $arr_scrape_data['files'][$ehash]['downloaded'], + 'leechers'=>(int) $arr_scrape_data['files'][$ehash]['incomplete'] + ); + }else{ + $torrents[$hash] = false; + } + } + + return($torrents); + } + } +?> \ No newline at end of file diff --git a/include/scraper/lightbenc.php b/include/scraper/lightbenc.php new file mode 100644 index 0000000..8464e6d --- /dev/null +++ b/include/scraper/lightbenc.php @@ -0,0 +1,163 @@ + + array(1) { + [0]=> + string(8) "a string" + } + ["oneInteger"]=> + int(34) + ["isDct"]=> + bool(true) +} + +The returned value is a nested data type with the following type of elements: + - ints (test type with is_integer($x)) + - strings (test type with is_string($x)) + - lists (test type with is_array($x) && !isset($x[isDct]) + - dicts (test type with is_array($x) && isset($x[isDct]) + +All elements have the native PHP type, except for the dictionary which is an array with an "isDct" key. +This is necessary since PHP makes no distinction between flat and associative arrays. Note that the isDct +key is allways set as a bool, so that even if the dictionary contains an actual "isDct" value, the +functions behave transparently, i.e. they don't strip out or overwrite actual "isDct" keys. + +As such, this implementation is not a drop-in replacement of the TBDev code, hence the new function names +For all practical purposes, it's just as flexible, and very easy to use. For example: + +// decode the torrent file +$dict= bdecode_file($torrentfilename); +// change announce url +$dict['announce']='http://inferno.demonoid.com'; +// add private tracker flag +$dict['info']['private']=1; +// compute infohash +$infohash = pack("H*", sha1(bencode($dict["info"]))); +// recreate the torrent file +$torrentfile=bencode($dict); + +After calling bencode(), the passed nested array will have all it's dictionaries sorted by key. +The bencoded data generated by bencode() will have sorted dictionaries, but bdecode() does not require +this in the input stream, and will keep the order unchanged. + +This implementation is hereby released under the GFYPL, version 1.00. + + + The Go Fuck Yourself Public License, version 1.00 + + Article 1 + You can go fuck yourself. + + END OF ALL TERMS AND CONDITIONS + +*/ +class lightbenc { + function bdecode($s, &$pos=0) { + if($pos>=strlen($s)) { + return null; + } + switch($s[$pos]){ + case 'd': + $pos++; + $retval=array(); + while ($s[$pos]!='e'){ + $key=self::bdecode($s, $pos); + $val=self::bdecode($s, $pos); + if ($key===null || $val===null) + break; + $retval[$key]=$val; + } + $retval["isDct"]=true; + $pos++; + return $retval; + + case 'l': + $pos++; + $retval=array(); + while ($s[$pos]!='e'){ + $val=self::bdecode($s, $pos); + if ($val===null) + break; + $retval[]=$val; + } + $pos++; + return $retval; + + case 'i': + $pos++; + $digits=strpos($s, 'e', $pos)-$pos; + $val=(int)substr($s, $pos, $digits); + $pos+=$digits+1; + return $val; + + // case "0": case "1": case "2": case "3": case "4": + // case "5": case "6": case "7": case "8": case "9": + default: + $digits=strpos($s, ':', $pos)-$pos; + if ($digits<0 || $digits >20) + return null; + $len=(int)substr($s, $pos, $digits); + $pos+=$digits+1; + $str=substr($s, $pos, $len); + $pos+=$len; + //echo "pos: $pos str: [$str] len: $len digits: $digits\n"; + return (string)$str; + } + return null; + } + + function bencode(&$d){ + if(is_array($d)){ + $ret="l"; + if($d["isDct"]){ + $isDict=1; + $ret="d"; + // this is required by the specs, and BitTornado actualy chokes on unsorted dictionaries + ksort($d, SORT_STRING); + } + foreach($d as $key=>$value) { + if($isDict){ + // skip the isDct element, only if it's set by us + if($key=="isDct" and is_bool($value)) continue; + $ret.=strlen($key).":".$key; + } + if (is_string($value)) { + $ret.=strlen($value).":".$value; + } elseif (is_int($value)){ + $ret.="i${value}e"; + } else { + $ret.=self::bencode ($value); + } + } + return $ret."e"; + } elseif (is_string($d)) // fallback if we're given a single bencoded string or int + return strlen($d).":".$d; + elseif (is_int($d)) + return "i${d}e"; + else + return null; + } + + function bdecode_file($filename){ + $f=file_get_contents($filename, FILE_BINARY); + return bdecode($f); + } +} +?> diff --git a/include/scraper/tscraper.php b/include/scraper/tscraper.php new file mode 100644 index 0000000..1acb4a1 --- /dev/null +++ b/include/scraper/tscraper.php @@ -0,0 +1,39 @@ +connectionerror = $connectionerror; + parent::__construct($message, $code); + } + + public function isConnectionError(){ + return($this->connectionerror); + } + } + + abstract class tscraper { + protected $timeout; + + public function __construct($timeout=2){ + $this->timeout = $timeout; + } + } + +?> \ No newline at end of file diff --git a/include/scraper/udptscraper.php b/include/scraper/udptscraper.php new file mode 100644 index 0000000..5bcb20c --- /dev/null +++ b/include/scraper/udptscraper.php @@ -0,0 +1,95 @@ +scrape('udp://tracker.tld:port',array('0000000000000000000000000000000000000000')); + + print_r($ret); + }catch(ScraperException $e){ + echo('Error: ' . $e->getMessage() . "
    \n"); + echo('Connection error: ' . ($e->isConnectionError() ? 'yes' : 'no') . "
    \n"); + } + */ + + require_once(dirname(__FILE__) . '/tscraper.php'); + + class udptscraper extends tscraper{ + + /* $url: Tracker url like: udp://tracker.tld:port or udp://tracker.tld:port/announce + $infohash: Infohash string or array (max 74 items). 40 char long infohash. + */ + public function scrape($url, $infohash){ + if(!is_array($infohash)){ $infohash = array($infohash); } + foreach($infohash as $hash){ + if(!preg_match('#^[a-f0-9]{40}$#i',$hash)){ throw new ScraperException('Invalid infohash: ' . $hash . '.'); } + } + if(count($infohash) > 74){ throw new ScraperException('Too many infohashes provided.'); } + if(!preg_match('%udp://([^:/]*)(?::([0-9]*))?(?:/)?%si', $url, $m)){ throw new ScraperException('Invalid tracker url.'); } + $tracker = 'udp://' . $m[1]; + $port = isset($m[2]) ? $m[2] : 80; + + $transaction_id = mt_rand(0,65535); + $fp = fsockopen($tracker, $port, $errno, $errstr); + if(!$fp){ throw new ScraperException('Could not open UDP connection: ' . $errno . ' - ' . $errstr,0,true); } + stream_set_timeout($fp, $this->timeout); + + $current_connid = "\x00\x00\x04\x17\x27\x10\x19\x80"; + + //Connection request + $packet = $current_connid . pack("N", 0) . pack("N", $transaction_id); + fwrite($fp,$packet); + + //Connection response + $ret = fread($fp, 16); + if(strlen($ret) < 1){ throw new ScraperException('No connection response.',0,true); } + if(strlen($ret) < 16){ throw new ScraperException('Too short connection response.'); } + $retd = unpack("Naction/Ntransid",$ret); + if($retd['action'] != 0 || $retd['transid'] != $transaction_id){ + throw new ScraperException('Invalid connection response.'); + } + $current_connid = substr($ret,8,8); + + //Scrape request + $hashes = ''; + foreach($infohash as $hash){ $hashes .= pack('H*', $hash); } + $packet = $current_connid . pack("N", 2) . pack("N", $transaction_id) . $hashes; + fwrite($fp,$packet); + + //Scrape response + $readlength = 8 + (12 * count($infohash)); + $ret = fread($fp, $readlength); + if(strlen($ret) < 1){ throw new ScraperException('No scrape response.',0,true); } + if(strlen($ret) < 8){ throw new ScraperException('Too short scrape response.'); } + $retd = unpack("Naction/Ntransid",$ret); + // Todo check for error string if response = 3 + if($retd['action'] != 2 || $retd['transid'] != $transaction_id){ + throw new ScraperException('Invalid scrape response.'); + } + if(strlen($ret) < $readlength){ throw new ScraperException('Too short scrape response.'); } + $torrents = array(); + $index = 8; + foreach($infohash as $hash){ + $retd = unpack("Nseeders/Ncompleted/Nleechers",substr($ret,$index,12)); + $retd['infohash'] = $hash; + $torrents[$hash] = $retd; + $index = $index + 12; + } + + return($torrents); + } + } +?> \ No newline at end of file diff --git a/install/database.sql b/install/database.sql index 40f867a..713f389 100644 --- a/install/database.sql +++ b/install/database.sql @@ -565,6 +565,7 @@ CREATE TABLE `torrents` ( `not_sticky` enum('yes','no') NOT NULL DEFAULT 'yes', `moderated` enum('yes','no') NOT NULL default 'no', `moderatedby` int(10) unsigned default '0', + `multitracker` enum('yes','no') NOT NULL DEFAULT 'no', PRIMARY KEY (`id`), UNIQUE KEY `info_hash` (`info_hash`), KEY `owner` (`owner`), @@ -573,6 +574,26 @@ CREATE TABLE `torrents` ( KEY `vnsi` (`visible`, `not_sticky`, `id`) ) ENGINE=MyISAM; +# +# Structure for the `torrents_scrape` table : +# + +DROP TABLE IF EXISTS `torrents_scrape`; + +CREATE TABLE `torrents_scrape` ( + `tid` int(10) unsigned NOT NULL DEFAULT '0', + `info_hash` varbinary(40) NOT NULL DEFAULT '', + `url` varchar(100) NOT NULL DEFAULT '', + `seeders` int(10) unsigned NOT NULL DEFAULT '0', + `leechers` int(10) unsigned NOT NULL DEFAULT '0', + `completed` int(10) unsigned NOT NULL DEFAULT '0', + `last_update` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + `state` enum('ok','error') NOT NULL DEFAULT 'ok', + `error` varchar(100) NOT NULL DEFAULT '', + PRIMARY KEY (`info_hash`,`url`) USING BTREE, + KEY `tid` (`tid`) +) ENGINE=MyISAM; + # # Structure for the `users` table : # diff --git a/takeedit.php b/takeedit.php index b361a29..a157df7 100644 --- a/takeedit.php +++ b/takeedit.php @@ -276,11 +276,6 @@ function dict_get($d, $k, $t) { if (!$descr) bark("Âû äîëæíû ââåñòè îïèñàíèå!"); -$keywords = htmlspecialchars_uni((string)$_POST["keywords"]); -$description = htmlspecialchars_uni((string)$_POST["description"]); - -$updateset[] = "keywords = " . sqlesc($keywords); -$updateset[] = "description = " . sqlesc($description); $updateset[] = "name = " . sqlesc($name); $updateset[] = "descr = " . sqlesc($descr); $updateset[] = "ori_descr = " . sqlesc($descr); diff --git a/takeupload.php b/takeupload.php index 09cbc1b..28ee295 100644 --- a/takeupload.php +++ b/takeupload.php @@ -26,7 +26,8 @@ // +--------------------------------------------------------------------------+ */ -require_once("include/benc.php"); +require_once("include/BDecode.php"); +require_once("include/BEncode.php"); require_once("include/bittorrent.php"); ini_set("upload_max_filesize",$max_torrent_size); @@ -63,7 +64,7 @@ function bark($msg) { $catid = intval($_POST["type"]); if (!is_valid_id($catid)) bark("Âû äîëæíû âûáðàòü êàòåãîðèþ, â êîòîðóþ ïîìåñòèòü òîððåíò!"); - + if (!validfilename($fname)) bark("Íåâåðíîå èìÿ ôàéëà!"); if (!preg_match('/^(.+)\.torrent$/si', $fname, $matches)) @@ -78,7 +79,7 @@ function bark($msg) { if (!filesize($tmpname)) bark("Ïóñòîé ôàéë!"); -$dict = bdec_file($tmpname, $max_torrent_size); +$dict = bdecode(file_get_contents($tmpname)); if (!isset($dict)) bark("×òî çà õðåíü òû çàãðóæàåøü? Ýòî íå áèíàðíî-êîäèðîâàíûé ôàéë!"); @@ -92,8 +93,8 @@ function bark($msg) { $not_sticky = "yes"; //SEO mods -$keywords = htmlspecialchars_uni((string)$_POST["keywords"]); -$description = htmlspecialchars_uni((string)$_POST["description"]); +$keywords = htmlspecialchars_uni(strval($_POST["keywords"])); +$description = htmlspecialchars_uni(strval($_POST["description"])); if (!$keywords) $keywords = ''; @@ -102,72 +103,36 @@ function bark($msg) { $description = ''; //SEO mods -function dict_check($d, $s) { - if ($d["type"] != "dictionary") - bark("not a dictionary"); - $a = explode(":", $s); - $dd = $d["value"]; - $ret = array(); - foreach ($a as $k) { - unset($t); - if (preg_match('/^(.*)\((.*)\)$/', $k, $m)) { - $k = $m[1]; - $t = $m[2]; - } - if (!isset($dd[$k])) - bark("dictionary is missing key(s)"); - if (isset($t)) { - if ($dd[$k]["type"] != $t) - bark("invalid entry in dictionary"); - $ret[] = $dd[$k]["value"]; - } - else - $ret[] = $dd[$k]; - } - return $ret; -} - -function dict_get($d, $k, $t) { - if ($d["type"] != "dictionary") - bark("not a dictionary"); - $dd = $d["value"]; - if (!isset($dd[$k])) - return; - $v = $dd[$k]; - if ($v["type"] != $t) - bark("invalid dictionary entry type"); - return $v["value"]; -} - -list($info) = dict_check($dict, "info"); -list($dname, $plen, $pieces) = dict_check($info, "name(string):piece length(integer):pieces(string)"); +$info = $dict['info']; +list($dname, $plen, $pieces, $totallen) = array($info['name'], $info['piece length'], $info['pieces'], $info['length']); /*if (!in_array($ann, $announce_urls, 1)) bark("Íåâåðíûé Announce URL! Äîëæåí áûòü ".$announce_urls[0]);*/ +$ret = sql_query("SHOW TABLE STATUS LIKE 'torrents'"); +$row = mysql_fetch_array($ret); +$next_id = $row['Auto_increment']; + if (strlen($pieces) % 20 != 0) bark("invalid pieces"); $filelist = array(); -$totallen = dict_get($info, "length", "integer"); if (isset($totallen)) { $filelist[] = array($dname, $totallen); $type = "single"; } else { - $flist = dict_get($info, "files", "list"); + $flist = $info['files']; if (!isset($flist)) bark("missing both length and files"); if (!count($flist)) bark("no files"); $totallen = 0; foreach ($flist as $fn) { - list($ll, $ff) = dict_check($fn, "length(integer):path(list)"); + list($ll, $ff) = array($fn['length'], $fn['path']); $totallen += $ll; $ffa = array(); foreach ($ff as $ffe) { - if ($ffe["type"] != "string") - bark("filename error"); - $ffa[] = $ffe["value"]; + $ffa[] = $ffe; } if (!count($ffa)) bark("filename error"); @@ -182,27 +147,40 @@ function dict_get($d, $k, $t) { $type = "multi"; } -$dict['value']['announce']=bdec(benc_str($announce_urls[0])); // change announce url to local -$dict['value']['info']['value']['private']=bdec('i1e'); // add private tracker flag -$dict['value']['info']['value']['source']=bdec(benc_str( "[$DEFAULTBASEURL] $SITENAME")); // add link for bitcomet users -unset($dict['value']['announce-list']); // remove multi-tracker capability -unset($dict['value']['nodes']); // remove cached peers (Bitcomet & Azareus) -unset($dict['value']['info']['value']['crc32']); // remove crc32 -unset($dict['value']['info']['value']['ed2k']); // remove ed2k -unset($dict['value']['info']['value']['md5sum']); // remove md5sum -unset($dict['value']['info']['value']['sha1']); // remove sha1 -unset($dict['value']['info']['value']['tiger']); // remove tiger -unset($dict['value']['azureus_properties']); // remove azureus properties -$dict=bdec(benc($dict)); // double up on the becoding solves the occassional misgenerated infohash -$dict['value']['comment']=bdec(benc_str( "Òîððåíò ñîçäàí äëÿ '$SITENAME'")); // change torrent comment -$dict['value']['created by']=bdec(benc_str( "$CURUSER[username]")); // change created by -$dict['value']['publisher']=bdec(benc_str( "$CURUSER[username]")); // change publisher -$dict['value']['publisher.utf-8']=bdec(benc_str( "$CURUSER[username]")); // change publisher.utf-8 -$dict['value']['publisher-url']=bdec(benc_str( "$DEFAULTBASEURL/userdetails.php?id=$CURUSER[id]")); // change publisher-url -$dict['value']['publisher-url.utf-8']=bdec(benc_str( "$DEFAULTBASEURL/userdetails.php?id=$CURUSER[id]")); // change publisher-url.utf-8 -list($info) = dict_check($dict, "info"); - -$infohash = sha1($info["string"]); +$multi_torrent = true; +if (!$multi_torrent) { + $dict['value']['announce']=bdec(benc_str($announce_urls[0])); // change announce url to local + $dict['info']['private']=bdec('i1e'); // add private tracker flag + $dict['info']['source']=bdec(benc_str( "[$DEFAULTBASEURL] $SITENAME")); // add link for bitcomet users + unset($dict['announce-list']); // remove multi-tracker capability + unset($dict['nodes']); // remove cached peers (Bitcomet & Azareus) + unset($dict['info']['crc32']); // remove crc32 + unset($dict['info']['ed2k']); // remove ed2k + unset($dict['info']['md5sum']); // remove md5sum + unset($dict['info']['sha1']); // remove sha1 + unset($dict['info']['tiger']); // remove tiger + unset($dict['azureus_properties']); // remove azureus properties +} + +$dict = BDecode(BEncode($dict)); // double up on the becoding solves the occassional misgenerated infohash +$dict['comment'] = "Òîððåíò ñîçäàí äëÿ '$SITENAME'"; // change torrent comment +$dict['created by'] = "$CURUSER[username]"; // change created by +$dict['publisher'] = "$CURUSER[username]"; // change publisher +$dict['publisher.utf-8'] = "$CURUSER[username]"; // change publisher.utf-8 +$dict['publisher-url'] = "$DEFAULTBASEURL/userdetails.php?id=$CURUSER[id]"; // change publisher-url +$dict['publisher-url.utf-8'] = "$DEFAULTBASEURL/userdetails.php?id=$CURUSER[id]"; // change publisher-url.utf-8 + +$infohash = sha1(BEncode($dict['info'])); + +if ($multi_torrent) { + if (!empty($dict['announce-list'])) { + foreach ($dict['announce-list'] as $al_url) + sql_query('INSERT INTO torrents_scrape (tid, info_hash, url) VALUES ('.implode(', ', array_map('sqlesc', array($next_id, $infohash, $al_url[0]))).')') or sqlerr(__FILE__,__LINE__); + } +} + +/*print_r($infohash); +die;*/ ////////////////////////////////////////////// //////////////Take Image Uploads////////////// @@ -242,9 +220,9 @@ function dict_get($d, $k, $t) { $ifile = $_FILES['image'.$x]['tmp_name']; // Calculate what the next torrent id will be - $ret = sql_query("SHOW TABLE STATUS LIKE 'torrents'"); + /*$ret = sql_query("SHOW TABLE STATUS LIKE 'torrents'"); $row = mysql_fetch_array($ret); - $next_id = $row['Auto_increment']; + $next_id = $row['Auto_increment'];*/ // By what filename should the tracker associate the image with? $ifilename = $next_id . $x . '.' . end(explode('.', $_FILES['image'.$x]['name'])); @@ -285,7 +263,8 @@ function dict_get($d, $k, $t) { $fp = fopen("$torrent_dir/$id.torrent", "w"); if ($fp) { - @fwrite($fp, benc($dict), strlen(benc($dict))); + $dict_str = BEncode($dict); + @fwrite($fp, $dict_str, strlen($dict_str)); fclose($fp); } diff --git a/update_multi.php b/update_multi.php new file mode 100644 index 0000000..a6fa137 --- /dev/null +++ b/update_multi.php @@ -0,0 +1,39 @@ +scrape($ann['url'], $ann['info_hash']); + $data = $data[$ann['info_hash']]; + sql_query('UPDATE torrents_scrape SET state = "ok", error = "", seeders = '.$data['seeders'].', leechers = '.$data['leechers'].' WHERE tid = '.$tid.' AND url = '.sqlesc($ann['url'])) or sqlerr(__FILE__,__LINE__); + } catch(ScraperException $e){ + /*echo('Error: ' . $e->getMessage() . "
    \n"); + echo('Connection error: ' . ($e->isConnectionError() ? 'yes' : 'no') . "
    \n");*/ + sql_query('UPDATE torrents_scrape SET state = "error", error = '.sqlesc($e->getMessage()).', seeders = 0, leechers = 0 WHERE tid = '.$tid.' AND url = '.sqlesc($ann['url'])) or sqlerr(__FILE__,__LINE__); + } + } else { + try { + $data = $http->scrape($ann['url'], $ann['info_hash']); + $data = $data[$ann['info_hash']]; + sql_query('UPDATE torrents_scrape SET state = "ok", error = "", seeders = '.$data['seeders'].', leechers = '.$data['leechers'].' WHERE tid = '.$tid.' AND url = '.sqlesc($ann['url'])) or sqlerr(__FILE__,__LINE__); + } catch(ScraperException $e){ + /*echo('Error: ' . $e->getMessage() . "
    \n"); + echo('Connection error: ' . ($e->isConnectionError() ? 'yes' : 'no') . "
    \n");*/ + sql_query('UPDATE torrents_scrape SET state = "error", error = '.sqlesc($e->getMessage()).', seeders = 0, leechers = 0 WHERE tid = '.$tid.' AND url = '.sqlesc($ann['url'])) or sqlerr(__FILE__,__LINE__); + } + } +} \ No newline at end of file diff --git a/upgrade/from_2.1.14_2.1.15.sql b/upgrade/from_2.1.14_2.1.15.sql index 3d435e7..99e8923 100644 --- a/upgrade/from_2.1.14_2.1.15.sql +++ b/upgrade/from_2.1.14_2.1.15.sql @@ -1,5 +1,5 @@ # -# SQL script to update from 2.12.14 version to 2.12.15 +# SQL script to update from 2.1.14 version to 2.1.15 # ALTER TABLE `torrents` ADD COLUMN `not_sticky` ENUM('yes','no') NOT NULL DEFAULT 'yes' AFTER `sticky`; diff --git a/upgrade/from_2.1.15_2.1.16.sql b/upgrade/from_2.1.15_2.1.16.sql new file mode 100644 index 0000000..e168e2b --- /dev/null +++ b/upgrade/from_2.1.15_2.1.16.sql @@ -0,0 +1,5 @@ +# +# SQL script to update from 2.1.15 version to 2.1.16 +# + +ALTER TABLE `torrents` ADD COLUMN `multitracker` enum('yes','no') NOT NULL DEFAULT 'no'; \ No newline at end of file From 7e69adc691db8676d1ae4f923a8b904edb7ee5cf Mon Sep 17 00:00:00 2001 From: Yuna Scatari Date: Mon, 3 Mar 2014 12:07:24 +0200 Subject: [PATCH 009/106] =?UTF-8?q?=D0=A0=D0=B0=D0=B7=D0=B2=D0=B8=D1=82?= =?UTF-8?q?=D0=B8=D0=B5=20=D0=B7=D0=B0=D0=BB=D0=B8=D0=B2=D0=BA=D0=B8,=20?= =?UTF-8?q?=D0=B3=D0=B0=D0=BB=D0=BE=D1=87=D0=BA=D0=B0=20=D0=BC=D1=83=D0=BB?= =?UTF-8?q?=D1=8C=D1=82=D0=B8=D1=82=D1=80=D0=B5=D0=BA=D0=B5=D1=80=D0=B0=20?= =?UTF-8?q?=D0=B8=D1=82=D0=B4.=20=D0=A3=D0=BB=D1=83=D1=87=D1=88=D0=B8?= =?UTF-8?q?=D0=BB=20=D1=81=D0=BA=D1=80=D0=B8=D0=BF=D1=82=20=D0=BE=D0=B1?= =?UTF-8?q?=D0=BD=D0=BE=D0=B2=D0=BB=D0=B5=D0=BD=D0=B8=D1=8F,=20=D0=B2?= =?UTF-8?q?=D1=8B=D0=B2=D0=B5=D0=BB=20=D0=BB=D0=B8=D0=BD=D0=BA=20=D0=BD?= =?UTF-8?q?=D0=B0=20=D0=BE=D0=B1=D0=BD=D0=BE=D0=B2=D0=BB=D1=8F=D1=82=D0=BE?= =?UTF-8?q?=D1=80=20=D0=B2=20=D0=B4=D0=B5=D1=82=D0=B0=D0=BB=D0=B8.=20?= =?UTF-8?q?=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2=D0=B8=D0=BB=20=D1=81=D0=BA=D1=80?= =?UTF-8?q?=D0=B8=D0=BF=D1=82=20=D0=B0=D0=BF=D0=B4=D0=B5=D0=B9=D1=82=D0=B0?= =?UTF-8?q?=20=D0=B1=D0=B0=D0=B7=D1=8B.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- browse.php | 2 +- details.php | 6 ++-- include/functions.php | 1 + takeupload.php | 12 ++++--- update_multi.php | 59 +++++++++++++++++++++++----------- upgrade/from_2.1.15_2.1.16.sql | 19 ++++++++++- upload.php | 3 ++ 7 files changed, 75 insertions(+), 27 deletions(-) diff --git a/browse.php b/browse.php index d1c91e2..f91c953 100644 --- a/browse.php +++ b/browse.php @@ -242,7 +242,7 @@ $addparam = $pagerlink; } list($pagertop, $pagerbottom, $limit) = pager($torrentsperpage, $count, "browse.php?" . $addparam); - $query = "SELECT t.id, t.moderated, t.moderatedby, t.category, t.leechers, t.seeders, t.free, t.name, t.times_completed, t.size, t.added, t.comments, t.numfiles, t.filename, t.not_sticky, t.owner," . "IF(t.numratings < $minvotes, NULL, ROUND(t.ratingsum / t.numratings, 1)) AS rating, c.name AS cat_name, c.image AS cat_pic, u.username, u.class" . ($CURUSER ? ", EXISTS(SELECT * FROM readtorrents WHERE readtorrents.userid = " . sqlesc($CURUSER["id"]) . " AND readtorrents.torrentid = t.id) AS readtorrent" : ", 1 AS readtorrent") . " FROM torrents AS t LEFT JOIN categories AS c ON t.category = c.id LEFT JOIN users AS u ON t.owner = u.id $where $orderby $limit"; + $query = "SELECT t.id, t.moderated, t.moderatedby, t.category, (t.leechers + t.remote_leechers) AS leechers, (t.seeders + t.remote_seeders) AS seeders, t.free, t.name, t.times_completed, t.size, t.added, t.comments, t.numfiles, t.filename, t.not_sticky, t.owner," . "IF(t.numratings < $minvotes, NULL, ROUND(t.ratingsum / t.numratings, 1)) AS rating, c.name AS cat_name, c.image AS cat_pic, u.username, u.class" . ($CURUSER ? ", EXISTS(SELECT * FROM readtorrents WHERE readtorrents.userid = " . sqlesc($CURUSER["id"]) . " AND readtorrents.torrentid = t.id) AS readtorrent" : ", 1 AS readtorrent") . " FROM torrents AS t LEFT JOIN categories AS c ON t.category = c.id LEFT JOIN users AS u ON t.owner = u.id $where $orderby $limit"; $res = sql_query($query) or die(mysql_error()); } else unset($res); diff --git a/details.php b/details.php index bb320c8..7007a23 100644 --- a/details.php +++ b/details.php @@ -190,7 +190,7 @@ function dltable($name, $arr, $torrent) if (!isset($id) || !$id) die(); -$res = sql_query("SELECT t.multitracker, t.keywords, t.description, t.free, t.seeders, t.banned, t.leechers, t.info_hash, t.filename, UNIX_TIMESTAMP() - UNIX_TIMESTAMP(t.last_action) AS lastseed, t.numratings, t.name, IF(t.numratings < $minvotes, NULL, ROUND(t.ratingsum / t.numratings, 1)) AS rating, t.owner, t.save_as, t.descr, t.visible, t.size, t.added, t.views, t.hits, t.times_completed, t.id, t.type, t.numfiles, t.image1, t.image2, t.image3, t.image4, t.image5, c.name AS cat_name, u.username FROM torrents AS t LEFT JOIN categories AS c ON t.category = c.id LEFT JOIN users AS u ON t.owner = u.id WHERE t.id = $id") +$res = sql_query("SELECT t.multitracker, t.last_mt_update, t.keywords, t.description, t.free, t.seeders, t.banned, t.leechers, t.info_hash, t.filename, UNIX_TIMESTAMP() - UNIX_TIMESTAMP(t.last_action) AS lastseed, t.numratings, t.name, IF(t.numratings < $minvotes, NULL, ROUND(t.ratingsum / t.numratings, 1)) AS rating, t.owner, t.save_as, t.descr, t.visible, t.size, t.added, t.views, t.hits, t.times_completed, t.id, t.type, t.numfiles, t.image1, t.image2, t.image3, t.image4, t.image5, c.name AS cat_name, u.username FROM torrents AS t LEFT JOIN categories AS c ON t.category = c.id LEFT JOIN users AS u ON t.owner = u.id WHERE t.id = $id") or sqlerr(__FILE__, __LINE__); $row = mysql_fetch_array($res); @@ -447,7 +447,9 @@ function seed_sort($a,$b) { else $anns[] = '
  • '.$announce['url'].' - íå ðàáîòàåò, îøèáêà: '.$announce['error'].''; } - tr("Ìóëüòèòðåêåð", '
      '.implode($anns).'
    ', 1); + if (strtotime($row['last_mt_update']) < (TIMENOW - 3600)) + $update_link = '
    Äàííûå ìîãëè óñòàðåòü. Îáíîâèòü ìóëüòèòðåêåð'; + tr("Ìóëüòèòðåêåð", '
      '.implode($anns).'
    '.$update_link, 1); } if ($row["times_completed"] > 0) { diff --git a/include/functions.php b/include/functions.php index 3c58fab..80144a1 100644 --- a/include/functions.php +++ b/include/functions.php @@ -778,6 +778,7 @@ function deletetorrent($id) { sql_query('DELETE FROM readtorrents WHERE torrentid = '.$id); foreach(explode('.','peers.files.comments.ratings') as $x) sql_query('DELETE FROM '.$x.' WHERE torrent = '.$id); + sql_query('DELETE FROM torrents_scrape WHERE tid = '.$id); unlink($torrent_dir.'/'.$id.'.torrent'); } diff --git a/takeupload.php b/takeupload.php index 28ee295..8a600a5 100644 --- a/takeupload.php +++ b/takeupload.php @@ -92,6 +92,11 @@ function bark($msg) { else $not_sticky = "yes"; +if ($_POST['multi'] == 'yes') + $multi_torrent = 'yes'; +else + $multi_torrent = 'no'; + //SEO mods $keywords = htmlspecialchars_uni(strval($_POST["keywords"])); $description = htmlspecialchars_uni(strval($_POST["description"])); @@ -147,8 +152,7 @@ function bark($msg) { $type = "multi"; } -$multi_torrent = true; -if (!$multi_torrent) { +if ($multi_torrent == 'no') { $dict['value']['announce']=bdec(benc_str($announce_urls[0])); // change announce url to local $dict['info']['private']=bdec('i1e'); // add private tracker flag $dict['info']['source']=bdec(benc_str( "[$DEFAULTBASEURL] $SITENAME")); // add link for bitcomet users @@ -172,7 +176,7 @@ function bark($msg) { $infohash = sha1(BEncode($dict['info'])); -if ($multi_torrent) { +if ($multi_torrent == 'yes') { if (!empty($dict['announce-list'])) { foreach ($dict['announce-list'] as $al_url) sql_query('INSERT INTO torrents_scrape (tid, info_hash, url) VALUES ('.implode(', ', array_map('sqlesc', array($next_id, $infohash, $al_url[0]))).')') or sqlerr(__FILE__,__LINE__); @@ -245,7 +249,7 @@ function bark($msg) { $torrent = htmlspecialchars_uni(str_replace("_", " ", $torrent)); -$ret = sql_query("INSERT INTO torrents (filename, owner, visible, not_sticky, info_hash, name, keywords, description, size, numfiles, type, descr, ori_descr, free, image1, image2, image3, image4, image5, category, save_as, added, last_action) VALUES (" . implode(",", array_map("sqlesc", array($fname, $CURUSER["id"], "no", $not_sticky, $infohash, $torrent, $keywords, $description, $totallen, count($filelist), $type, $descr, $descr, $free, $inames[0], $inames[1], $inames[2], $inames[3], $inames[4], 0 + $_POST["type"], $dname))) . ", '" . get_date_time() . "', '" . get_date_time() . "')"); +$ret = sql_query("INSERT INTO torrents (filename, owner, visible, not_sticky, info_hash, name, keywords, description, size, numfiles, type, descr, ori_descr, free, image1, image2, image3, image4, image5, category, save_as, added, last_action, multitracker) VALUES (" . implode(",", array_map("sqlesc", array($fname, $CURUSER["id"], "no", $not_sticky, $infohash, $torrent, $keywords, $description, $totallen, count($filelist), $type, $descr, $descr, $free, $inames[0], $inames[1], $inames[2], $inames[3], $inames[4], 0 + $_POST["type"], $dname))) . ", '" . get_date_time() . "', '" . get_date_time() . "', ".sqlesc($multi_torrent).")"); if (!$ret) { if (mysql_errno() == 1062) bark("torrent already uploaded!"); diff --git a/update_multi.php b/update_multi.php index a6fa137..eaef174 100644 --- a/update_multi.php +++ b/update_multi.php @@ -12,28 +12,49 @@ $http = new httptscraper($timeout); $tid = intval($_GET['id']); +if (!$tid) + die('WTF?!'); + +list($name, $cur_visible, $multitracker, $last_mt_update) = mysql_fetch_row(sql_query('SELECT name, visible, multitracker, last_mt_update FROM torrents WHERE id = '.$tid)); +if ($name == '' || $multitracker == 'no') + stderr($tracker_lang['error'], "Òàêîãî òîððåíòà íåò, èëè îí íå ìóëüòèòðåêåðíûé."); + +if (strtotime($last_mt_update) > (TIMENOW - 3600)) + stderr($tracker_lang['error'], "Âû ïûòàåòåñü îáíîâèòü ìóëüòèòðåêåð ñëèøêîì ÷àñòî. Ðàçðåøåíî ýòî äåëàòü íå ÷àùå 1 ðàçà â ÷àñ."); + $anns_r = sql_query('SELECT info_hash, url FROM torrents_scrape WHERE tid = '.$tid); +$s_sum = $l_sum = $errors = $success = 0; + while ($ann = mysql_fetch_array($anns_r)) { - if (substr($ann['url'], 0, 6) == 'udp://') { - try { + try { + if (substr($ann['url'], 0, 6) == 'udp://') $data = $udp->scrape($ann['url'], $ann['info_hash']); - $data = $data[$ann['info_hash']]; - sql_query('UPDATE torrents_scrape SET state = "ok", error = "", seeders = '.$data['seeders'].', leechers = '.$data['leechers'].' WHERE tid = '.$tid.' AND url = '.sqlesc($ann['url'])) or sqlerr(__FILE__,__LINE__); - } catch(ScraperException $e){ - /*echo('Error: ' . $e->getMessage() . "
    \n"); - echo('Connection error: ' . ($e->isConnectionError() ? 'yes' : 'no') . "
    \n");*/ - sql_query('UPDATE torrents_scrape SET state = "error", error = '.sqlesc($e->getMessage()).', seeders = 0, leechers = 0 WHERE tid = '.$tid.' AND url = '.sqlesc($ann['url'])) or sqlerr(__FILE__,__LINE__); - } - } else { - try { + else $data = $http->scrape($ann['url'], $ann['info_hash']); - $data = $data[$ann['info_hash']]; - sql_query('UPDATE torrents_scrape SET state = "ok", error = "", seeders = '.$data['seeders'].', leechers = '.$data['leechers'].' WHERE tid = '.$tid.' AND url = '.sqlesc($ann['url'])) or sqlerr(__FILE__,__LINE__); - } catch(ScraperException $e){ - /*echo('Error: ' . $e->getMessage() . "
    \n"); - echo('Connection error: ' . ($e->isConnectionError() ? 'yes' : 'no') . "
    \n");*/ - sql_query('UPDATE torrents_scrape SET state = "error", error = '.sqlesc($e->getMessage()).', seeders = 0, leechers = 0 WHERE tid = '.$tid.' AND url = '.sqlesc($ann['url'])) or sqlerr(__FILE__,__LINE__); - } + $data = $data[$ann['info_hash']]; + + sql_query('UPDATE torrents_scrape SET state = "ok", error = "", seeders = '.$data['seeders'].', leechers = '.$data['leechers'].' WHERE tid = '.$tid.' AND url = '.sqlesc($ann['url'])) or sqlerr(__FILE__,__LINE__); + $s_sum += $data['seeders']; + $l_sum += $data['leechers']; + $success++; + } catch (ScraperException $e) { + /*echo('Error: ' . $e->getMessage() . "
    \n"); + echo('Connection error: ' . ($e->isConnectionError() ? 'yes' : 'no') . "
    \n");*/ + sql_query('UPDATE torrents_scrape SET state = "error", error = '.sqlesc($e->getMessage()).', seeders = 0, leechers = 0 WHERE tid = '.$tid.' AND url = '.sqlesc($ann['url'])) or sqlerr(__FILE__,__LINE__); + $errors++; } -} \ No newline at end of file +} + +$visible = ($s_sum > 0); +if (!$visible && $cur_visible == 'no') + $visible = 'no'; +else + $visible = 'yes'; + +sql_query('UPDATE torrents SET remote_seeders = '.$s_sum.', remote_leechers = '.$l_sum.', last_action = NOW(), last_mt_update = NOW(), visible = '.sqlesc($visible).' WHERE id = '.$tid) or sqlerr(__FILE__,__LINE__); + +header('Refresh: 3;url=details.php?id='.$tid); +stderr($tracker_lang['success'], "Îáíîâëåíèå ìóëüòèòðåêåðà âûïîëíåíî óñïåøíî. Óñïåøíî: $success Îøèáîê: $errors"); + +?> \ No newline at end of file diff --git a/upgrade/from_2.1.15_2.1.16.sql b/upgrade/from_2.1.15_2.1.16.sql index e168e2b..307e2fa 100644 --- a/upgrade/from_2.1.15_2.1.16.sql +++ b/upgrade/from_2.1.15_2.1.16.sql @@ -2,4 +2,21 @@ # SQL script to update from 2.1.15 version to 2.1.16 # -ALTER TABLE `torrents` ADD COLUMN `multitracker` enum('yes','no') NOT NULL DEFAULT 'no'; \ No newline at end of file +CREATE TABLE `torrents_scrape` ( + `tid` int(10) unsigned NOT NULL DEFAULT '0', + `info_hash` varbinary(40) NOT NULL DEFAULT '', + `url` varchar(100) NOT NULL DEFAULT '', + `seeders` int(10) unsigned NOT NULL DEFAULT '0', + `leechers` int(10) unsigned NOT NULL DEFAULT '0', + `completed` int(10) unsigned NOT NULL DEFAULT '0', + `last_update` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + `state` enum('ok','error') NOT NULL DEFAULT 'ok', + `error` varchar(100) NOT NULL DEFAULT '', + PRIMARY KEY (`info_hash`,`url`) USING BTREE, + KEY `tid` (`tid`) +) ENGINE=MyISAM; + +ALTER TABLE `torrents` ADD COLUMN `multitracker` enum('yes','no') NOT NULL DEFAULT 'no'; +ALTER TABLE `torrents` ADD COLUMN `last_mt_update` datetime NOT NULL DEFAULT '0000-00-00 00:00:00' AFTER `last_action`; +ALTER TABLE `torrents` ADD COLUMN `remote_leechers` int(10) unsigned NOT NULL DEFAULT '0' AFTER `leechers`; +ALTER TABLE `torrents` ADD COLUMN `remote_seeders` int(10) unsigned NOT NULL DEFAULT '0' AFTER `seeders`; \ No newline at end of file diff --git a/upload.php b/upload.php index 67bbfd0..f3c1e1a 100644 --- a/upload.php +++ b/upload.php @@ -77,6 +77,9 @@ $s .= "\n"; tr($tracker_lang['type'], $s, 1); +tr('Ìóëüòèòðåêåð', ' +
    Âêëþ÷åíèå ýòîé îïöèè îòêëþ÷àåò óñòàíîâêó private-ôëàãà è óäàëåíèå äðóãèõ àííîíñåðîâ èç ôàéëà', 1); + tr('Keywords', '', 1); tr('Description', '', 1); From 0381053600049355929851e082716a62a3794258 Mon Sep 17 00:00:00 2001 From: Yuna Scatari Date: Mon, 3 Mar 2014 12:10:45 +0200 Subject: [PATCH 010/106] =?UTF-8?q?=D0=97=D0=B0=D0=BF=D1=80=D0=B5=D1=82=20?= =?UTF-8?q?=D0=BE=D0=B1=D0=BD=D0=BE=D0=B2=D0=BB=D0=B5=D0=BD=D0=B8=D1=8F=20?= =?UTF-8?q?=D1=82=D0=BE=D1=80=D1=80=D0=B5=D0=BD=D1=82=D0=B0,=20=D0=B5?= =?UTF-8?q?=D1=81=D0=BB=D0=B8=20=D0=BE=D0=BD=20=D0=BC=D1=83=D0=BB=D1=8C?= =?UTF-8?q?=D1=82=D0=B8=D1=82=D1=80=D0=B5=D0=BA=D0=B5=D1=80=D0=BD=D1=8B?= =?UTF-8?q?=D0=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- edit.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/edit.php b/edit.php index c5b3fcb..ff0264e 100644 --- a/edit.php +++ b/edit.php @@ -55,7 +55,8 @@ print("\n"); print("\n"); print(""); - tr($tracker_lang['torrent_file'], "\n", 1); + if ($row['multitracker'] == 'no') + tr($tracker_lang['torrent_file'], "\n", 1); // disable torrent update for multitracked ones tr($tracker_lang['torrent_name'], "", 1); tr($tracker_lang['img_poster'], "Îñòàâèòü ïîñòåð  "."Óäàëèòü ïîñòåð  "."Îáíîâèòü ïîñòåð
    Ïîñòåð:  ", 1); tr($tracker_lang['images'], From 5c8b52853cdc540dff14b907a9cb610b186757c1 Mon Sep 17 00:00:00 2001 From: Yuna Scatari Date: Mon, 3 Mar 2014 12:15:42 +0200 Subject: [PATCH 011/106] =?UTF-8?q?=D0=97=D0=B0=D0=BC=D0=B5=D1=82=D0=B0?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5=20=D0=BE=D1=88=D0=B8=D0=B1=D0=BE=D0=BA=20?= =?UTF-8?q?=D0=BF=D0=BE=D0=B4=20=D0=BA=D0=BE=D0=B2=D0=B5=D1=80...=20(annou?= =?UTF-8?q?nce.php=20E=5FSTRICT)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- include/core_announce.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/include/core_announce.php b/include/core_announce.php index fffb66d..17cdc46 100644 --- a/include/core_announce.php +++ b/include/core_announce.php @@ -30,8 +30,8 @@ if(!defined("IN_ANNOUNCE")) die("Hacking attempt!"); -@error_reporting(E_ALL & ~E_NOTICE); -@ini_set('error_reporting', E_ALL & ~E_NOTICE); +@error_reporting(E_ALL & ~E_NOTICE & ~E_STRICT); +@ini_set('error_reporting', E_ALL & ~E_NOTICE & ~E_STRICT); @ini_set('display_errors', '1'); @ini_set('display_startup_errors', '0'); @ini_set('ignore_repeated_errors', '1'); From 3dc03d901e20ad350edef407c24af3d3ab7f6f6b Mon Sep 17 00:00:00 2001 From: Yuna Scatari Date: Mon, 3 Mar 2014 12:18:16 +0200 Subject: [PATCH 012/106] database.sql new columns for clean install --- install/database.sql | 3 +++ 1 file changed, 3 insertions(+) diff --git a/install/database.sql b/install/database.sql index 713f389..257ebeb 100644 --- a/install/database.sql +++ b/install/database.sql @@ -553,8 +553,11 @@ CREATE TABLE `torrents` ( `hits` int(10) unsigned NOT NULL default '0', `times_completed` int(10) unsigned NOT NULL default '0', `leechers` int(10) unsigned NOT NULL default '0', + `remote_leechers` int(10) unsigned NOT NULL DEFAULT '0', `seeders` int(10) unsigned NOT NULL default '0', + `remote_seeders` int(10) unsigned NOT NULL DEFAULT '0', `last_action` datetime NOT NULL default '0000-00-00 00:00:00', + `last_mt_update` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', `last_reseed` datetime NOT NULL default '0000-00-00 00:00:00', `visible` enum('yes','no') NOT NULL default 'yes', `banned` enum('yes','no') NOT NULL default 'no', From f8923cf2fbe8f0e2760bbc62e44ee24d683815ad Mon Sep 17 00:00:00 2001 From: Yuna Scatari Date: Mon, 3 Mar 2014 13:27:05 +0200 Subject: [PATCH 013/106] Fixes in case or sqlerr for update_multi.php Didn't fixed E_STRICT in lightbenc.php Skip adding retracker.local in database, it's unique for each user - no need to scrape it. --- takeupload.php | 5 ++++- update_multi.php | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/takeupload.php b/takeupload.php index 8a600a5..2346b9d 100644 --- a/takeupload.php +++ b/takeupload.php @@ -178,8 +178,11 @@ function bark($msg) { if ($multi_torrent == 'yes') { if (!empty($dict['announce-list'])) { - foreach ($dict['announce-list'] as $al_url) + foreach ($dict['announce-list'] as $al_url) { + if ($al_url[0] == 'http://retracker.local/announce') + continue; sql_query('INSERT INTO torrents_scrape (tid, info_hash, url) VALUES ('.implode(', ', array_map('sqlesc', array($next_id, $infohash, $al_url[0]))).')') or sqlerr(__FILE__,__LINE__); + } } } diff --git a/update_multi.php b/update_multi.php index eaef174..0d4b947 100644 --- a/update_multi.php +++ b/update_multi.php @@ -34,7 +34,7 @@ $data = $http->scrape($ann['url'], $ann['info_hash']); $data = $data[$ann['info_hash']]; - sql_query('UPDATE torrents_scrape SET state = "ok", error = "", seeders = '.$data['seeders'].', leechers = '.$data['leechers'].' WHERE tid = '.$tid.' AND url = '.sqlesc($ann['url'])) or sqlerr(__FILE__,__LINE__); + sql_query('UPDATE torrents_scrape SET state = "ok", error = "", seeders = '.intval($data['seeders']).', leechers = '.intval($data['leechers']).' WHERE tid = '.$tid.' AND url = '.sqlesc($ann['url'])) or sqlerr(__FILE__,__LINE__); $s_sum += $data['seeders']; $l_sum += $data['leechers']; $success++; From 2ebe11caca6e78d87abfd25d5c1a5d3091713735 Mon Sep 17 00:00:00 2001 From: yunasc Date: Mon, 3 Mar 2014 21:38:22 +0200 Subject: [PATCH 014/106] Remove "USING BTREE" --- install/database.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install/database.sql b/install/database.sql index 257ebeb..d55c696 100644 --- a/install/database.sql +++ b/install/database.sql @@ -593,7 +593,7 @@ CREATE TABLE `torrents_scrape` ( `last_update` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, `state` enum('ok','error') NOT NULL DEFAULT 'ok', `error` varchar(100) NOT NULL DEFAULT '', - PRIMARY KEY (`info_hash`,`url`) USING BTREE, + PRIMARY KEY (`info_hash`,`url`), KEY `tid` (`tid`) ) ENGINE=MyISAM; From 08dfeb9d2316bf65f51a2c696373b71c630799ec Mon Sep 17 00:00:00 2001 From: yunasc Date: Mon, 3 Mar 2014 21:39:48 +0200 Subject: [PATCH 015/106] Add missing language var --- languages/lang_russian/lang_main.php | 1 + 1 file changed, 1 insertion(+) diff --git a/languages/lang_russian/lang_main.php b/languages/lang_russian/lang_main.php index 4618a46..64068b6 100644 --- a/languages/lang_russian/lang_main.php +++ b/languages/lang_russian/lang_main.php @@ -14,6 +14,7 @@ public function __construct() { 'add_user' => 'Äîáàâèòü ïîëüçîâàòåëÿ', 'added' => 'Äîáàâëåí', 'age' => 'Âîçðàñò', + 'contactus' => 'Ñâÿçàòüñÿ ñ íàìè', 'new_torrents_stats' => 'Ðàçäàþò: %d, Êà÷àþò: %d', 'help_seed' => 'Ñêà÷àë ñàì, äàé ñêà÷àòü äðóãîìó!!!', 'no_need_seeding' => 'Íåò òîððåíòîâ, êîòîðûì íóæíû ðàçäàþùèå', From e503a563e0394dca0af230d9e7df6013f0acd510 Mon Sep 17 00:00:00 2001 From: yunasc Date: Mon, 3 Mar 2014 21:40:38 +0200 Subject: [PATCH 016/106] Add missing language variable --- languages/lang_russian/lang_main.php | 1 + 1 file changed, 1 insertion(+) diff --git a/languages/lang_russian/lang_main.php b/languages/lang_russian/lang_main.php index 4618a46..64068b6 100644 --- a/languages/lang_russian/lang_main.php +++ b/languages/lang_russian/lang_main.php @@ -14,6 +14,7 @@ public function __construct() { 'add_user' => 'Äîáàâèòü ïîëüçîâàòåëÿ', 'added' => 'Äîáàâëåí', 'age' => 'Âîçðàñò', + 'contactus' => 'Ñâÿçàòüñÿ ñ íàìè', 'new_torrents_stats' => 'Ðàçäàþò: %d, Êà÷àþò: %d', 'help_seed' => 'Ñêà÷àë ñàì, äàé ñêà÷àòü äðóãîìó!!!', 'no_need_seeding' => 'Íåò òîððåíòîâ, êîòîðûì íóæíû ðàçäàþùèå', From c02aabf666d7e8c2aa3bdffae2a563258bf5911c Mon Sep 17 00:00:00 2001 From: yunasc Date: Tue, 4 Mar 2014 09:22:32 +0200 Subject: [PATCH 017/106] INSERT INTO -> REPLACE INTO @ takeupload.php @ torrents_scrape --- takeupload.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/takeupload.php b/takeupload.php index 2346b9d..42e8eca 100644 --- a/takeupload.php +++ b/takeupload.php @@ -181,7 +181,8 @@ function bark($msg) { foreach ($dict['announce-list'] as $al_url) { if ($al_url[0] == 'http://retracker.local/announce') continue; - sql_query('INSERT INTO torrents_scrape (tid, info_hash, url) VALUES ('.implode(', ', array_map('sqlesc', array($next_id, $infohash, $al_url[0]))).')') or sqlerr(__FILE__,__LINE__); + // À âäðóã â òîððåíòå äâà îäèíàêîâûõ àííîíñåðà? Ïîòîìó REPLACE INTO + sql_query('REPLACE INTO torrents_scrape (tid, info_hash, url) VALUES ('.implode(', ', array_map('sqlesc', array($next_id, $infohash, $al_url[0]))).')') or sqlerr(__FILE__,__LINE__); } } } From 3697401b393f092c435aea756adf35616d091aa5 Mon Sep 17 00:00:00 2001 From: yunasc Date: Tue, 4 Mar 2014 09:45:17 +0200 Subject: [PATCH 018/106] =?UTF-8?q?=D0=9F=D0=B5=D1=80=D0=B5=D0=B2=D0=BE?= =?UTF-8?q?=D0=B4=20=D1=81=D0=BE=D0=BE=D0=B1=D1=89=D0=B5=D0=BD=D0=B8=D1=8F?= =?UTF-8?q?=20=D0=BE=D0=B1=20=D0=BE=D1=88=D0=B8=D0=B1=D0=BA=D0=B5.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Пора-бы много что перенеÑти в Ñзыковые файлы... --- takeupload.php | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/takeupload.php b/takeupload.php index 42e8eca..f1d9cd5 100644 --- a/takeupload.php +++ b/takeupload.php @@ -205,7 +205,6 @@ function bark($msg) { ); for ($x=0; $x < 5; $x++) { - if (!($_FILES['image'.$x]['name'] == "")) { $y = $x + 1; @@ -218,7 +217,8 @@ function bark($msg) { // Is within allowed filesize? if ($_FILES['image'.$x]['size'] > $maxfilesize) - bark("Invalid file size! Image $y - Must be less than 500kb"); + bark("Ïðåâûøåí ðàçìåð ôàéëà! Êàðòèíêà $y - Äîëæíà áûòü ìåíüøå 500kb"); + //bark("Invalid file size! Image $y - Must be less than 500kb"); // Where to upload? // Update for your own server. Make sure the folder has chmod write permissions. Remember this director @@ -243,9 +243,7 @@ function bark($msg) { $inames[] = $ifilename; -} - -} +}} ////////////////////////////////////////////// @@ -261,23 +259,23 @@ function bark($msg) { } $id = mysql_insert_id(); sql_query("INSERT INTO checkcomm (checkid, userid, torrent) VALUES ($id, $CURUSER[id], 1)") or sqlerr(__FILE__,__LINE__); -@sql_query("DELETE FROM files WHERE torrent = $id"); +sql_query("DELETE FROM files WHERE torrent = $id"); foreach ($filelist as $file) { - @sql_query("INSERT INTO files (torrent, filename, size) VALUES ($id, ".sqlesc($file[0]).", ".$file[1].")"); + sql_query("INSERT INTO files (torrent, filename, size) VALUES ($id, ".sqlesc($file[0]).", ".$file[1].")"); } move_uploaded_file($tmpname, "$torrent_dir/$id.torrent"); $fp = fopen("$torrent_dir/$id.torrent", "w"); -if ($fp) -{ +if ($fp) { $dict_str = BEncode($dict); @fwrite($fp, $dict_str, strlen($dict_str)); fclose($fp); } -write_log("Òîððåíò íîìåð $id ($torrent) áûë çàëèò ïîëüçîâàòåëåì " . $CURUSER["username"],"5DDB6E","torrent"); +write_log("Òîððåíò íîìåð $id ($torrent) áûë çàëèò ïîëüçîâàòåëåì " . $CURUSER["username"], "5DDB6E", "torrent"); +// Ýòîé ôèãíåé âàùå êòî-òî ïîëüçóåòñÿ? /* Email notify */ /******************* From b70d33edc787812567e27d279767c6348a949446 Mon Sep 17 00:00:00 2001 From: Yuna Scatari Date: Tue, 4 Mar 2014 10:32:30 +0200 Subject: [PATCH 019/106] E_STRICT errors fix (making lightbenc.php methods static) --- include/scraper/lightbenc.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/include/scraper/lightbenc.php b/include/scraper/lightbenc.php index 8464e6d..6a690a1 100644 --- a/include/scraper/lightbenc.php +++ b/include/scraper/lightbenc.php @@ -69,7 +69,7 @@ functions behave transparently, i.e. they don't strip out or overwrite actual "i */ class lightbenc { - function bdecode($s, &$pos=0) { + static function bdecode($s, &$pos=0) { if($pos>=strlen($s)) { return null; } @@ -123,7 +123,7 @@ function bdecode($s, &$pos=0) { return null; } - function bencode(&$d){ + static function bencode(&$d){ if(is_array($d)){ $ret="l"; if($d["isDct"]){ @@ -155,7 +155,7 @@ function bencode(&$d){ return null; } - function bdecode_file($filename){ + static function bdecode_file($filename){ $f=file_get_contents($filename, FILE_BINARY); return bdecode($f); } From 3d1bee9f4bd446105c288d6dd8d38eecfd340da1 Mon Sep 17 00:00:00 2001 From: Yuna Scatari Date: Tue, 4 Mar 2014 14:05:26 +0200 Subject: [PATCH 020/106] =?UTF-8?q?$pic=5Fbase=5Furl=20-=20=D0=B8=D1=81?= =?UTF-8?q?=D0=BF=D1=80=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5,=20?= =?UTF-8?q?=D1=83=D0=B1=D1=80=D0=B0=D0=BB=20=D0=BB=D0=B8=D1=88=D0=BD=D0=B8?= =?UTF-8?q?=D0=B9=20/=20=D0=B8=20=D0=BF=D0=BE=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=B8=D0=BB=20=D0=B4=D0=BB=D1=8F=20=D1=8D=D1=82=D0=BE=D0=B3?= =?UTF-8?q?=D0=BE=20=D0=BA=D0=BE=D0=B4=20=D0=94=D0=BE=D0=B1=D0=B0=D0=B2?= =?UTF-8?q?=D0=B8=D0=BB=20=D0=B2=D1=8B=D0=B2=D0=BE=D0=B4=20=D0=BA=D0=B0?= =?UTF-8?q?=D1=80=D1=82=D0=B8=D0=BD=D0=BA=D0=B8=20=D0=BC=D1=83=D0=BB=D1=8C?= =?UTF-8?q?=D1=82=D0=B8=D1=82=D1=80=D0=B5=D0=BA=D0=B5=D1=80=D0=BD=D0=BE?= =?UTF-8?q?=D0=B3=D0=BE=20=D1=82=D0=BE=D1=80=D1=80=D0=B5=D0=BD=D1=82=D0=B0?= =?UTF-8?q?=20=D0=B2=20browse.php?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- admin/modules/faq.php | 4 ++-- blocks/block-releases.php | 2 +- browse.php | 2 +- details.php | 2 +- faq.php | 4 ++-- include/config.php | 2 +- include/functions.php | 2 +- include/functions_torrenttable.php | 13 ++++++++----- languages/lang_russian/lang_main.php | 1 + pic/multitracker.png | Bin 0 -> 792 bytes staff.php | 10 +++++----- userdetails.php | 6 +++--- users.php | 4 ++-- 13 files changed, 28 insertions(+), 24 deletions(-) create mode 100644 pic/multitracker.png diff --git a/admin/modules/faq.php b/admin/modules/faq.php index 614b18e..4c5524a 100644 --- a/admin/modules/faq.php +++ b/admin/modules/faq.php @@ -54,8 +54,8 @@ function FaqAdmin() { print(""); } if ($faq_categ[$id]["items"][$id2][flag] == "0") $status = "Ñêðûòî"; - elseif ($faq_categ[$id]["items"][$id2][flag] == "2") $status = "\"Updated\""; - elseif ($faq_categ[$id]["items"][$id2][flag] == "3") $status = "\"Íîâîå\""; + elseif ($faq_categ[$id]["items"][$id2][flag] == "2") $status = "\"Updated\""; + elseif ($faq_categ[$id]["items"][$id2][flag] == "3") $status = "\"Íîâîå\""; else $status = "Îáû÷íûé"; print("\n"); } diff --git a/blocks/block-releases.php b/blocks/block-releases.php index fadd558..88a4d1b 100644 --- a/blocks/block-releases.php +++ b/blocks/block-releases.php @@ -27,7 +27,7 @@ $content .= "
    Ðåäàêòèðîâàòü òîððåíò
    ". $faq_categ[$id]["items"][$id2]["question"] ."". $status ."E / D
    "; $content .= ""; $content .= ""; - $content .= ""; + $content .= ""; $content .= ""; $content .= "
    ".htmlspecialchars_uni($release["name"]).(get_user_class() >= UC_MODERATOR ? " - [Ðåäàêòèðîâàòü][Óäàëèòü]" : "")."
    ".(!empty($catname) ? "\"$catname\"" : "").format_comment($release["top"])."

    ".format_comment($release["center"])."

    ".format_comment($release["bottom"])."
    ".($release["imdb"] ? "[IMDB] " : "")."[Äåòàëè]
    ".(!empty($catimage) ? "\"$catname\"" : "$catname").format_comment($release["top"])."

    ".format_comment($release["center"])."

    ".format_comment($release["bottom"])."
    ".($release["imdb"] ? "[IMDB] " : "")."[Äåòàëè]
    "; $content .= "
  • ".get_user_class_color($arr["class"], $arr["username"])."".get_user_icons($arr)."$uploaded Îáùåãî
    $uploaded2 Òîððåíò
    $downloaded Îáùåãî
    $downloaded2 Òîððåíò
    $ratio Îáùåãî
    $ratio2 Òîððåíò
    " . $arr["startdat"] . "
    " . $arr["completedat"] . "
    " . $arr["last_action"] . "" . ($arr["seeder"] == "yes" ? "Äà" : "Íåò") . - "
    \n"; ?>". $faq_categ[$id][items][$id2][question] ."\n"); elseif ($faq_categ[$id][items][$id2][flag] == "2") - print("
  • ". $faq_categ[$id][items][$id2][question] ." \"Îáíîâëåíî\"
  • \n"); + print("
  • ". $faq_categ[$id][items][$id2][question] ." \"Îáíîâëåíî\"
  • \n"); elseif ($faq_categ[$id][items][$id2][flag] == "3") - print("
  • ". $faq_categ[$id][items][$id2][question] ." \"Íîâîå\"
  • \n"); + print("
  • ". $faq_categ[$id][items][$id2][question] ." \"Íîâîå\"
  • \n"); } } print("\n\n\n
    \n"); diff --git a/include/config.php b/include/config.php index a0e6e89..a9295cd 100644 --- a/include/config.php +++ b/include/config.php @@ -50,7 +50,7 @@ $SITENAME = 'TBDev Yuna Scatari Edition'; $autoclean_interval = 900; -$pic_base_url = './pic/'; +$pic_base_url = './pic'; // [BEGIN] Custom variables from Yuna Scatari // TTL diff --git a/include/functions.php b/include/functions.php index 80144a1..40d2fa3 100644 --- a/include/functions.php +++ b/include/functions.php @@ -913,7 +913,7 @@ function ratingpic($num) { $r = round($num * 2) / 2; if ($r < 1 || $r > 5) return; - return "\"".$tracker_lang['rating'].":"; + return "\"".$tracker_lang['rating'].":"; } function writecomment($userid, $comment) { diff --git a/include/functions_torrenttable.php b/include/functions_torrenttable.php index bee4687..eee3504 100644 --- a/include/functions_torrenttable.php +++ b/include/functions_torrenttable.php @@ -224,10 +224,10 @@ function torrenttable($res, $variant = "index") { $dispname = $row["name"]; switch ($row['free']) { case 'yes': - $freepic = "\"".$tracker_lang['golden']."\""; + $freepic = "\"".$tracker_lang['golden']."\""; break; case 'silver': - $freepic = "\"".$tracker_lang['silver']."\""; + $freepic = "\"".$tracker_lang['silver']."\""; break; case 'no': $freepic = ''; @@ -242,9 +242,12 @@ function torrenttable($res, $variant = "index") { print("\">$dispname $thisisfree\n"); if ($variant != "bookmarks" && $CURUSER) - print("\"".$tracker_lang['bookmark_this']."\"\n"); + print("\"".$tracker_lang['bookmark_this']."\"\n"); - print("\"".$tracker_lang['download']."\"\n"); + print("\"".$tracker_lang['download']."\"\n"); + + if ($row['multitracker'] == 'yes') + print("\"".$tracker_lang['external_torrent']."\"\n"); if ($CURUSER["id"] == $row["owner"] || get_user_class() >= UC_MODERATOR) $owned = 1; @@ -252,7 +255,7 @@ function torrenttable($res, $variant = "index") { $owned = 0; if ($owned) - print("\"".$tracker_lang['edit']."\"\n"); + print("\"".$tracker_lang['edit']."\"\n"); if ($row["readtorrent"] == 0 && $variant == "index") print ("[íîâûé]"); diff --git a/languages/lang_russian/lang_main.php b/languages/lang_russian/lang_main.php index 64068b6..5380138 100644 --- a/languages/lang_russian/lang_main.php +++ b/languages/lang_russian/lang_main.php @@ -15,6 +15,7 @@ public function __construct() { 'added' => 'Äîáàâëåí', 'age' => 'Âîçðàñò', 'contactus' => 'Ñâÿçàòüñÿ ñ íàìè', + 'external_torrent' => 'Ìóëüòèòðåêåðíûé òîððåíò', 'new_torrents_stats' => 'Ðàçäàþò: %d, Êà÷àþò: %d', 'help_seed' => 'Ñêà÷àë ñàì, äàé ñêà÷àòü äðóãîìó!!!', 'no_need_seeding' => 'Íåò òîððåíòîâ, êîòîðûì íóæíû ðàçäàþùèå', diff --git a/pic/multitracker.png b/pic/multitracker.png new file mode 100644 index 0000000000000000000000000000000000000000..06f1ee390a69aede315c33ab6ba8c085bcdd003e GIT binary patch literal 792 zcmV+z1LypSP)EC;hyLIe&>0f-+2gQ40f`JC2;i49PokwJkJAXv$+T%L5!V5v?59o z-w?z2?=wni%x1Io;&<@lt?E90n_wf)v1<)A_QSQ+_GV`(--u_#Sjh$FqRJJ@ z*sy6Boqq{jfy$Uq9{rZaI@uQCQm&Ff^^Q!Rstd zE@y#qguEY%O=BNEaXkMDV-Sw0cf*m@wyS6A<(~^_D65dbP}MB~O;yWwIe1Z1b@nBi zT0-@=C@^6t3gF(0XuENt32)AWAaYi@7N;l!Rn_ehmoN;v5}8kCOlnS0(?l`{f*=Gf zrye|=3jJdrA)$gmK9{@w;@z~o-DAp(5R&`QwvC#RB%coMFBj0N*B_=M1p!@Eag;@~0?~niK+Z!TD?Vdw{eS*KyP26sWCBTxu!rJWIOloF!%2c%h zoSU!>=O*2MeKP~J%&K{aa9lrCl$!YHWH*dXw&PioRRUrRF=#avZ%+L;jXPPt1sDL; W*<1`LTn4ZJ0000". -get_user_class_color($arr['class'],$arr['username'])." ".("'".$arr['last_access']."'">$dt?"\"online\"":"\"offline\"" )."". +get_user_class_color($arr['class'],$arr['username'])." ".("'".$arr['last_access']."'">$dt?"\"online\"":"\"offline\"" )."". "". -"". +"". " "; @@ -317,9 +317,9 @@ $land = sql_query("SELECT name,flagpic FROM countries WHERE id=$arr[country]") or sqlerr(__FILE__, __LINE__); $arr2 = mysql_fetch_assoc($land); $firstline .= "".$arr['username']." - ".("'".$arr['last_access']."'">$dt?"\"online\"":"\"offline\"" )."". -""."". -"". + ".("'".$arr['last_access']."'">$dt?"\"online\"":"\"offline\"" )."". +""."". +"". "".$arr['supportfor']."\n"; } diff --git a/userdetails.php b/userdetails.php index 1798f2e..3ae47ae 100644 --- a/userdetails.php +++ b/userdetails.php @@ -182,9 +182,9 @@ function maketable($res) //if ($user["donor"] == "yes") $donor = "Donor"; //if ($user["warned"] == "yes") $warned = "Warned"; -if ($user["gender"] == "1") $gender = "\"Ïàðåíü\""; -elseif ($user["gender"] == "2") $gender = "\"Äåâóøêà\""; -//elseif ($user["gender"] == "Í/Ä") $gender = "Í/Ä"; +if ($user["gender"] == "1") $gender = "\"Ïàðåíü\""; +elseif ($user["gender"] == "2") $gender = "\"Äåâóøêà\""; +//elseif ($user["gender"] == "Í/Ä") $gender = "Í/Ä"; $res = sql_query("SELECT torrent, added, uploaded, downloaded, torrents.name AS torrentname, categories.name AS catname, categories.id AS catid, size, image, category, seeders, leechers FROM peers LEFT JOIN torrents ON peers.torrent = torrents.id LEFT JOIN categories ON torrents.category = categories.id WHERE userid = $id AND seeder='no'") or sqlerr(__FILE__, __LINE__); if (mysql_num_rows($res) > 0) diff --git a/users.php b/users.php index e05f802..89d472a 100644 --- a/users.php +++ b/users.php @@ -180,8 +180,8 @@ else $ratio = "------"; -if ($arr["gender"] == "1") $gender = "\"Ïàðåíü\""; -elseif ($arr["gender"] == "2") $gender = "\"Äåâóøêà\""; +if ($arr["gender"] == "1") $gender = "\"Ïàðåíü\""; +elseif ($arr["gender"] == "2") $gender = "\"Äåâóøêà\""; print("".get_user_class_color($arr["class"], $arr["username"])."" .($arr["donated"] > 0 ? "\"Donor\"" : "")."" . "$arr[added]$arr[last_access]$ratio$gender". From 79bdfa211ddd8b14340b47223abe2dd46516cc6b Mon Sep 17 00:00:00 2001 From: Yuna Scatari Date: Tue, 4 Mar 2014 14:21:57 +0200 Subject: [PATCH 021/106] =?UTF-8?q?=D0=91=D0=BB=D0=BE=D0=BA=20=D1=81=D1=82?= =?UTF-8?q?=D0=B0=D1=82=D0=B8=D1=81=D1=82=D0=B8=D0=BA=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- blocks/block-stats.php | 4 ++++ languages/lang_russian/lang_main.php | 2 ++ 2 files changed, 6 insertions(+) diff --git a/blocks/block-stats.php b/blocks/block-stats.php index 1bcf880..93409ec 100644 --- a/blocks/block-stats.php +++ b/blocks/block-stats.php @@ -14,6 +14,7 @@ $dead = number_format(get_row_count("torrents", "WHERE visible='no'")); $seeders = get_row_count("peers", "WHERE seeder='yes'"); $leechers = get_row_count("peers", "WHERE seeder='no'"); +list($external_seeders, $external_leechers) = array_map('number_format', mysql_fetch_row(sql_query('SELECT SUM(seeders), SUM(leechers) FROM torrents_scrape'))); $warned_users = number_format(get_row_count("users", "WHERE warned = 'yes'")); $disabled = number_format(get_row_count("users", "WHERE enabled = 'no'")); $uploaders = number_format(get_row_count("users", "WHERE class = ".UC_UPLOADER)); @@ -51,6 +52,9 @@ ".$tracker_lang['tracker_seed_peer']."$ratio"; } +$content .= "".$tracker_lang['external_seeders']."  $external_seeders +".$tracker_lang['external_leechers']."  $external_leechers"; + $content .= " diff --git a/languages/lang_russian/lang_main.php b/languages/lang_russian/lang_main.php index 5380138..069c878 100644 --- a/languages/lang_russian/lang_main.php +++ b/languages/lang_russian/lang_main.php @@ -364,6 +364,8 @@ public function __construct() { 'tracker_seed_peer' => 'Ðàçäàþùèõ/Êà÷àþùèõ (%)', 'tracker_seeders' => 'Ðàçäàþùèõ', 'tracker_torrents' => 'Òîððåíòîâ', + 'external_seeders' => 'Âíåøíèõ Ðàçäàþùèõ', + 'external_leechers' => 'Âíåøíèõ Êà÷àþùèõ', 'ttl' => 'TTL', 'type' => 'Òèï', 'ul_speed' => 'Ðàçäà÷à', From 4232d224dad1749bda75d23c6c0d29f758bf234c Mon Sep 17 00:00:00 2001 From: Yuna Scatari Date: Tue, 4 Mar 2014 16:04:32 +0200 Subject: [PATCH 022/106] =?UTF-8?q?=D0=92=D1=8B=D0=B2=D0=BE=D0=B4=20=D0=B2?= =?UTF-8?q?=20=D0=BF=D1=80=D0=B0=D0=B2=D0=B8=D0=BB=D1=8C=D0=BD=D0=BE=D0=BC?= =?UTF-8?q?=20=D0=BC=D0=B5=D1=81=D1=82=D0=B5=20=D0=B8=D0=BC=D0=B5=D0=BD?= =?UTF-8?q?=D0=B8=20=D0=BA=D0=B0=D1=82=D0=B5=D0=B3=D0=BE=D1=80=D0=B8=D0=B8?= =?UTF-8?q?,=20=D0=B5=D1=81=D0=BB=D0=B8=20=D0=BD=D0=B5=D1=82=20=D0=BA?= =?UTF-8?q?=D0=B0=D1=80=D1=82=D0=B8=D0=BD=D0=BA=D0=B8=20=D0=BA=D0=B0=D1=82?= =?UTF-8?q?=D0=B5=D0=B3=D0=BE=D1=80=D0=B8=D0=B8=20(=D0=91=D0=BB=D0=BE?= =?UTF-8?q?=D0=BA=20=D0=A0=D0=B5=D0=BB=D0=B8=D0=B7=D1=8B)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- blocks/block-releases.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/blocks/block-releases.php b/blocks/block-releases.php index fadd558..88a4d1b 100644 --- a/blocks/block-releases.php +++ b/blocks/block-releases.php @@ -27,7 +27,7 @@ $content .= ""; $content .= ""; $content .= ""; - $content .= ""; + $content .= ""; $content .= ""; $content .= "
    ".htmlspecialchars_uni($release["name"]).(get_user_class() >= UC_MODERATOR ? " - [Ðåäàêòèðîâàòü][Óäàëèòü]" : "")."
    ".(!empty($catname) ? "\"$catname\"" : "").format_comment($release["top"])."

    ".format_comment($release["center"])."

    ".format_comment($release["bottom"])."
    ".($release["imdb"] ? "[IMDB] " : "")."[Äåòàëè]
    ".(!empty($catimage) ? "\"$catname\"" : "$catname").format_comment($release["top"])."

    ".format_comment($release["center"])."

    ".format_comment($release["bottom"])."
    ".($release["imdb"] ? "[IMDB] " : "")."[Äåòàëè]
    "; $content .= ""; From 26c35ae88a8917a0850627dac2ed5fbd8c3ac776 Mon Sep 17 00:00:00 2001 From: Yuna Scatari Date: Tue, 4 Mar 2014 16:29:19 +0200 Subject: [PATCH 023/106] =?UTF-8?q?=D0=9D=D0=B5=D0=B1=D0=BE=D0=BB=D1=8C?= =?UTF-8?q?=D1=88=D0=B8=D0=B5=20=D0=BF=D1=80=D0=B0=D0=B2=D0=BA=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- update_multi.php | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/update_multi.php b/update_multi.php index 0d4b947..e40845d 100644 --- a/update_multi.php +++ b/update_multi.php @@ -1,5 +1,33 @@ Date: Tue, 4 Mar 2014 16:31:01 +0200 Subject: [PATCH 024/106] =?UTF-8?q?=D0=98=20=D0=B5=D1=89=D0=B5=20=D1=87?= =?UTF-8?q?=D1=83=D1=82=D1=8C-=D1=87=D1=83=D1=82=D1=8C=20=D0=BF=D0=BE?= =?UTF-8?q?=D0=BF=D1=80=D0=B0=D0=B2=D0=BE=D0=BA...?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- contactus.php | 26 ++++++++++++++++++++++++++ install.php | 26 ++++++++++++++++++++++++++ suggest.php | 27 ++++++++++++++++++++++++++- switch_blocks.php | 26 ++++++++++++++++++++++++++ takeconfirm.php | 26 ++++++++++++++++++++++++++ takeinvite.php | 27 ++++++++++++++++++++++++++- testport.php | 28 ++++++++++++++++++++++++++++ 7 files changed, 184 insertions(+), 2 deletions(-) diff --git a/contactus.php b/contactus.php index bda3f01..7806175 100644 --- a/contactus.php +++ b/contactus.php @@ -1,5 +1,31 @@ Date: Wed, 5 Mar 2014 00:24:40 +0200 Subject: [PATCH 025/106] =?UTF-8?q?=D0=AD=D1=82=D0=BE=20=D0=BD=D0=B5=20?= =?UTF-8?q?=D1=8F,=20=D0=BE=D0=BD=D0=BE=20=D1=81=D0=B0=D0=BC=D0=BE...=20:-?= =?UTF-8?q?[?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- languages/lang_russian/lang_main.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/languages/lang_russian/lang_main.php b/languages/lang_russian/lang_main.php index 9552c0e..069c878 100644 --- a/languages/lang_russian/lang_main.php +++ b/languages/lang_russian/lang_main.php @@ -15,7 +15,8 @@ public function __construct() { 'added' => 'Äîáàâëåí', 'age' => 'Âîçðàñò', 'contactus' => 'Ñâÿçàòüñÿ ñ íàìè', - 'external_torrent' => 'Ìóëüòèòðåêåðíûé òîððåíò', 'new_torrents_stats' => 'Ðàçäàþò: %d, Êà÷àþò: %d', + 'external_torrent' => 'Ìóëüòèòðåêåðíûé òîððåíò', + 'new_torrents_stats' => 'Ðàçäàþò: %d, Êà÷àþò: %d', 'help_seed' => 'Ñêà÷àë ñàì, äàé ñêà÷àòü äðóãîìó!!!', 'no_need_seeding' => 'Íåò òîððåíòîâ, êîòîðûì íóæíû ðàçäàþùèå', 'signup_users_limit' => 'Òåêóùèé ëèìèò ïîëüçîâàòåëåé (%d) äîñòèãíóò. Íåàêòèâíûå ïîëüçîâàòåëè ïîñòîÿííî óäàëÿþòñÿ, ïîæàëóéñòà âåðíèòåñü ïîïîçæå...', From 2afc5dd3164baa147289edaa76f4e809b043d943 Mon Sep 17 00:00:00 2001 From: yunasc Date: Wed, 5 Mar 2014 00:48:00 +0200 Subject: [PATCH 026/106] rules.php color fix --- rules.php | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/rules.php b/rules.php index 3bf41f4..828abe4 100644 --- a/rules.php +++ b/rules.php @@ -104,11 +104,11 @@
    - + - + @@ -118,27 +118,27 @@ --> - + - + - + - + - + From 1fcef8cd4cc2fa5e112e66864ae81a29f3a1300f Mon Sep 17 00:00:00 2001 From: Yuna Scatari Date: Wed, 5 Mar 2014 11:19:21 +0200 Subject: [PATCH 027/106] SQL + XSS injection fix --- admin/modules/faq.php | 2 +- message.php | 2 +- usersearch.php | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/admin/modules/faq.php b/admin/modules/faq.php index 4c5524a..feb8239 100644 --- a/admin/modules/faq.php +++ b/admin/modules/faq.php @@ -90,7 +90,7 @@ function FaqAction() { global $admin_file; if ($_GET["action"] == "reorder") { foreach($_POST["order"] as $id => $position) - sql_query("UPDATE `faq` SET `order`='$position' WHERE id=".sqlesc((int)$id)) or sqlerr(__FILE__,__LINE__); + sql_query("UPDATE `faq` SET `order` = ".sqlesc($position)." WHERE id = ".sqlesc((int)$id)) or sqlerr(__FILE__,__LINE__); header("Location: $admin_file.php?op=FaqAdmin"); } diff --git a/message.php b/message.php index 1f1685d..56feed9 100644 --- a/message.php +++ b/message.php @@ -455,7 +455,7 @@ function check(field) { ?>
     Ïîëüçîâàòåëü  Ïîëüçîâàòåëü   Îáû÷íûé, íîðìàëüíûé ïîëüçîâàòåëü òðåêåðà
      Îïûòíûé ïîëüçîâàòåëü    Îïûòíûé ïîëüçîâàòåëü   Òðåêåð àâòîìàòè÷åñêè ïðèñâàèâàåò (è îòáèðàåò) ýòî çâàíèå ó ïîëüçîâàòåëåé, ÷åé àêêàóíò àêòèâåí íå ìåíåå 4 íåäåëü, êòî çàëèë áîëåå 25 GB è èìååò ðåéòèíã 1.05. Ìîäåðàòîð ìîæåò âðó÷íóþ ïðèñâîèòü ýòîò ñòàòóñ äî ñëåäóþùåãî àâòîìàòè÷åñêîãî èñïîëíåíèÿ ñêðèïòà.
    This status is given ONLY by Redbeard since he is the only one who can verify that they actually donated something.
      VIP  VIP   ×åëîâåê, îêàçûâàþùèé ôèíàíñîâóþ èëè äðóãóþ ïîìîùü ñàéòó
      Çàëèâàþùèé  Çàëèâàþùèé   Ïîëüçîâàòåëü ñ ïðàâîì ðàçäàâàòü íà . Ïðèñâàèâàåòñÿ Àäìèíèñòðàòîðàìè. Åñòü ïîäõîäÿùèå êàíäèäàòû? Ïèøèòå â ïðèâàò, íå ñòåñíÿéòåñü.
      Ìîäåðàòîð  Ìîäåðàòîð   Íàçíà÷àþòñÿ Àäìèíèñòðàöèåé è èìåþò ôóíêöèè ìîäåðàòîðîâ.
      Àäìèíèñòðàòîð  Àäìèíèñòðàòîð   Âàøå íåïîñðåäñòâåííîå íà÷àëüñòâî.
    @@ -239,28 +256,30 @@ function refrClock() if ($messages) { $message_in = " $inboxpic $messages " . sprintf($tracker_lang["new_pm"], $unread) . ""; if ($outmessages) - $message_out = " \"" $outmessages"; + $message_out = " \"" $outmessages"; else - $message_out = " \"" 0"; + $message_out = " \"" 0"; } else { - $message_in = " \"".$tracker_lang['inbox']."\" 0"; + $message_in = " \"{$tracker_lang['inbox']}\" 0"; if ($outmessages) - $message_out = " \"" $outmessages"; + $message_out = " \"" $outmessages"; else - $message_out = " \"" 0"; + $message_out = " \"" 0"; } if ($CURUSER) { - $userbar = "
    \"".$tracker_lang['avatar']."\"
    + $userbar = "
    \"{$tracker_lang['avatar']}\"

    {$tracker_lang['ratio']}: {$ratio}
    {$tracker_lang['uploaded']}: {$uped}
    {$tracker_lang['downloaded']}: {$downed}
    {$tracker_lang['bonus']}: $CURUSER[bonus]
    {$tracker_lang['pm']}: {$message_in} {$message_out}
    - {$tracker_lang['torrents']}: \"{$tracker_lang['seeding']}\" {$activeseed} \"{$tracker_lang['leeching']}\" {$activeleech}
    + {$tracker_lang['torrents']}:  + \"{$tracker_lang['seeding']}\" {$activeseed}  + \"{$tracker_lang['leeching']}\" {$activeleech}
    {$tracker_lang['clock']}: {$tracker_lang['loading']}... @@ -287,9 +306,9 @@ function refrClock2() refrClock2();
    - ".$tracker_lang['your_ip'].": " . $_SERVER["REMOTE_ADDR"] . "
    + " . $tracker_lang['your_ip'] . ": " . $_SERVER["REMOTE_ADDR"] . "

    -
     [".$tracker_lang['logout']."]
    +
     [{$tracker_lang['logout']}]
    "; } else { $userbar = '
    @@ -304,39 +323,40 @@ function refrClock2()
    '.$tracker_lang['signup'].'
    '; } -if ($CURUSER['override_class'] != 255) $usrclass = " .get_user_class_name($CURUSER['class']). "; - -elseif(get_user_class() >= UC_MODERATOR) $usrclass = " \"".get_user_class_name($CURUSER['class'])."\" "; +if ($CURUSER['override_class'] != 255) + $usrclass = "  . get_user_class_name($CURUSER['class']) .  "; +elseif (get_user_class() >= UC_MODERATOR) + $usrclass = " \"" "; blok_menu($tracker_lang['welcome_back'].( $CURUSER ? "" . $CURUSER["username"] . " ".$usrclass." " : "ãîñòü" ) . $medaldon . $warn , $userbar , "155"); - $mainmenu = " ".$tracker_lang['homepage']."" - ." ".$tracker_lang['browse']."" - ." ".$tracker_lang['log']."" - ." ".$tracker_lang['rules']."" - ." ".$tracker_lang['faq']."" - ." ".$tracker_lang['topten']."" - ." ".$tracker_lang['formats'].""; + $mainmenu = " {$tracker_lang['homepage']}" + ." {$tracker_lang['browse']}" + ." {$tracker_lang['log']}" + ." {$tracker_lang['rules']}" + ." {$tracker_lang['faq']}" + ." {$tracker_lang['topten']}" + ." {$tracker_lang['formats']}"; blok_menu($tracker_lang['main_menu'], $mainmenu , "155"); if ($CURUSER) { - $usermenu = " ".$tracker_lang['my']."" - ." ".$tracker_lang['profile']."" - ." ".$tracker_lang['bookmarks']."" - ." ".$tracker_lang['my_bonus']."" - ." ".$tracker_lang['invite']."" - ." ".$tracker_lang['users']."" - ." ".$tracker_lang['personal_lists']."" - ." ".$tracker_lang['neighbours']."" - ." ".$tracker_lang['my_torrents']."" - ." ".$tracker_lang['logout']."!"; + $usermenu = " {$tracker_lang['my']}" + ." {$tracker_lang['profile']}" + ." {$tracker_lang['bookmarks']}" + ." {$tracker_lang['my_bonus']}" + ." {$tracker_lang['invite']}" + ." {$tracker_lang['users']}" + ." {$tracker_lang['personal_lists']}" + ." {$tracker_lang['neighbours']}" + ." {$tracker_lang['my_torrents']}" + ." {$tracker_lang['logout']}!"; blok_menu($tracker_lang['user_menu'], $usermenu , "155"); - $messages = " ".$tracker_lang['inbox']."" - ." ".$tracker_lang['outbox'].""; + $messages = " {$tracker_lang['inbox']}" + ." {$tracker_lang['outbox']}"; blok_menu($tracker_lang['messages'], $messages , "155"); @@ -376,7 +396,7 @@ function refrClock2() if ($CURUSER['override_class'] != 255 && $CURUSER) { // Second condition needed so that this box isn't displayed for non members/logged out members. print("

    -
    name=message> + name=message> "> diff --git a/usersearch.php b/usersearch.php index a774708..4e8599b 100644 --- a/usersearch.php +++ b/usersearch.php @@ -97,7 +97,7 @@ function get_user_icons($arr, $big = false) ?> -> +> From b1b69da6ccac9390e09b8fc3b7668fe52ee650e1 Mon Sep 17 00:00:00 2001 From: yunasc Date: Thu, 6 Mar 2014 00:15:35 +0200 Subject: [PATCH 028/106] =?UTF-8?q?[BUGFIX]=20=D0=98=D1=81=D0=BF=D1=80?= =?UTF-8?q?=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=B4=D0=BE=D1=81?= =?UTF-8?q?=D0=B0=D0=B4=D0=BD=D0=BE=D0=B3=D0=BE=20=D0=B1=D0=B0=D0=B3=D0=B0?= =?UTF-8?q?=20=D1=81=20=D0=B7=D0=B0=D0=BB=D0=B8=D0=B2=D0=BA=D0=BE=D0=B9,?= =?UTF-8?q?=20=D0=BA=D0=BE=D1=82=D0=BE=D1=80=D0=B0=D1=8F=20=D0=BD=D0=B5=20?= =?UTF-8?q?=D0=BF=D0=BE=D0=B7=D0=B2=D0=BE=D0=BB=D1=8F=D0=BB=D0=B0=20=D0=B8?= =?UTF-8?q?=D1=81=D0=BF=D0=BE=D0=BB=D1=8C=D0=B7=D0=BE=D0=B2=D0=B0=D1=82?= =?UTF-8?q?=D1=8C=20=D0=B7=D0=B0=D0=BB=D0=B8=D0=B2=D0=BA=D1=83=20=D0=B2=20?= =?UTF-8?q?=D0=9D=D0=95=20=D0=BC=D1=83=D0=BB=D1=8C=D1=82=D0=B8=D1=82=D1=80?= =?UTF-8?q?=D0=B5=D0=BA=D0=B5=D1=80=D0=BD=D0=BE=D0=BC=20=D1=80=D0=B5=D0=B6?= =?UTF-8?q?=D0=B8=D0=BC=D0=B5.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- takeupload.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/takeupload.php b/takeupload.php index f1d9cd5..a0cd538 100644 --- a/takeupload.php +++ b/takeupload.php @@ -153,9 +153,9 @@ function bark($msg) { } if ($multi_torrent == 'no') { - $dict['value']['announce']=bdec(benc_str($announce_urls[0])); // change announce url to local - $dict['info']['private']=bdec('i1e'); // add private tracker flag - $dict['info']['source']=bdec(benc_str( "[$DEFAULTBASEURL] $SITENAME")); // add link for bitcomet users + $dict['value']['announce'] = $announce_urls[0]; // change announce url to local + $dict['info']['private'] = 1; // add private tracker flag + $dict['info']['source'] = "[$DEFAULTBASEURL] $SITENAME"; // add link for bitcomet users unset($dict['announce-list']); // remove multi-tracker capability unset($dict['nodes']); // remove cached peers (Bitcomet & Azareus) unset($dict['info']['crc32']); // remove crc32 From 999808c4d8e5684b4464185931a28b7b63b53efe Mon Sep 17 00:00:00 2001 From: Yuna Scatari Date: Thu, 6 Mar 2014 10:31:45 +0200 Subject: [PATCH 029/106] E_STRICT error fix in install --- install/mysql.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/install/mysql.php b/install/mysql.php index c299fd3..55f68c3 100644 --- a/install/mysql.php +++ b/install/mysql.php @@ -417,7 +417,7 @@ function MySQL($host, $port, $user, $passwd, $db_names, $charset = '') * @param array $connect_name èìÿ ïîäêëþ÷åíèÿ, ðàíåå îïðåäåëåííîå ñ ïîìîùüþ {@link config()} * @return object ññûëêà îáúåêò êëàññà */ - function &get_instance($connect_name = null) + static function &get_instance($connect_name = null) { static $instance; if (!isset($connect_name) || empty($connect_name)) { @@ -480,7 +480,7 @@ function &get_instance($connect_name = null) * èìåíà ÁÄ, íàçíà÷åííûå ýòèì ìåòîäîì. * @return array */ - function &config($connect_name, $connect_data = null) + static function &config($connect_name, $connect_data = null) { static $config = array(); if (!isset($config[$connect_name]) && is_array($connect_data)) { From cd38485bc6e6a35ce4ac519270ffea8c826503fa Mon Sep 17 00:00:00 2001 From: Yuna Scatari Date: Thu, 6 Mar 2014 11:42:56 +0200 Subject: [PATCH 030/106] =?UTF-8?q?=D0=9F=D0=BE=D0=BF=D1=8B=D1=82=D0=BA?= =?UTF-8?q?=D0=B0=20=D1=81=D0=B4=D0=B5=D0=BB=D0=B0=D1=82=D1=8C=20=D0=BC?= =?UTF-8?q?=D0=BD=D0=BE=D0=B3=D0=BE=D0=BF=D0=BE=D1=82=D0=BE=D1=87=D0=BD?= =?UTF-8?q?=D0=BE=D0=B5=20=D0=BE=D0=B1=D0=BD=D0=BE=D0=B2=D0=BB=D0=B5=D0=BD?= =?UTF-8?q?=D0=B8=D0=B5=20=D0=BC=D1=83=D0=BB=D1=8C=D1=82=D0=B8=D1=82=D1=80?= =?UTF-8?q?=D0=B5=D0=BA=D0=B5=D1=80=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- update_multi.php | 111 +++++++++++++++++++++++++++++++++++------------ 1 file changed, 83 insertions(+), 28 deletions(-) diff --git a/update_multi.php b/update_multi.php index e40845d..7a2253c 100644 --- a/update_multi.php +++ b/update_multi.php @@ -30,19 +30,56 @@ require_once('include/bittorrent.php'); dbconn(); -loggedinorreturn(); +if (!$_GET['token']) + loggedinorreturn(); // À âäðóã ãóãë ïðèéäåò íà òàêèå ñòðàíèöû? Íå íàäî... require_once('include/scraper/httptscraper.php'); require_once('include/scraper/udptscraper.php'); -$timeout = 2; -$udp = new udptscraper($timeout); -$http = new httptscraper($timeout); +function scrape($tid, $url, $info_hash) { + $timeout = 5; + $udp = new udptscraper($timeout); + $http = new httptscraper($timeout); + + try { + if (substr($url, 0, 6) == 'udp://') + $data = $udp->scrape($url, $info_hash); + else + $data = $http->scrape($url, $info_hash); + $data = $data[$info_hash]; + sql_query('UPDATE torrents_scrape SET state = "ok", error = "", seeders = '.intval($data['seeders']).', leechers = '.intval($data['leechers']).' WHERE tid = '.$tid.' AND url = '.sqlesc($url)) or print(mysql_error()."\n"); + return true; + } catch (ScraperException $e) { + sql_query('UPDATE torrents_scrape SET state = "error", error = '.sqlesc($e->getMessage()).', seeders = 0, leechers = 0 WHERE tid = '.$tid.' AND url = '.sqlesc($url)) or print(mysql_error()."\n"); + return false; + } +} + +function generate_token($tid, $url, $info_hash) { + return md5(implode('', array($tid, $url, $info_hash, COOKIE_SALT))); +} + +function check_token($token, $tid, $url, $info_hash) { + return $token === md5(implode('', array($tid, $url, $info_hash, COOKIE_SALT))); +} $tid = intval($_GET['id']); + if (!$tid) die('WTF?!'); +if ($_GET['info_hash'] && $_GET['url']) { + $token = strval($_GET['token']); + $url = strval($_GET['url']); + $info_hash = strval($_GET['info_hash']); + if (strlen($info_hash) != 40) + die('Invalid len info_hash supplied'); + if (!check_token($token, $tid, $url, $info_hash)) + die('Invalid token'); + echo scrape($tid, $url, $info_hash); + exit; +} + list($name, $cur_visible, $multitracker, $last_mt_update) = mysql_fetch_row(sql_query('SELECT name, visible, multitracker, last_mt_update FROM torrents WHERE id = '.$tid)); if ($name == '' || $multitracker == 'no') stderr($tracker_lang['error'], "Òàêîãî òîððåíòà íåò, èëè îí íå ìóëüòèòðåêåðíûé."); @@ -53,36 +90,54 @@ $anns_r = sql_query('SELECT info_hash, url FROM torrents_scrape WHERE tid = '.$tid); $s_sum = $l_sum = $errors = $success = 0; +$pids = $works = array(); -while ($ann = mysql_fetch_array($anns_r)) { - try { - if (substr($ann['url'], 0, 6) == 'udp://') - $data = $udp->scrape($ann['url'], $ann['info_hash']); - else - $data = $http->scrape($ann['url'], $ann['info_hash']); - $data = $data[$ann['info_hash']]; - - sql_query('UPDATE torrents_scrape SET state = "ok", error = "", seeders = '.intval($data['seeders']).', leechers = '.intval($data['leechers']).' WHERE tid = '.$tid.' AND url = '.sqlesc($ann['url'])) or sqlerr(__FILE__,__LINE__); - $s_sum += $data['seeders']; - $l_sum += $data['leechers']; - $success++; - } catch (ScraperException $e) { - /*echo('Error: ' . $e->getMessage() . "
    \n"); - echo('Connection error: ' . ($e->isConnectionError() ? 'yes' : 'no') . "
    \n");*/ - sql_query('UPDATE torrents_scrape SET state = "error", error = '.sqlesc($e->getMessage()).', seeders = 0, leechers = 0 WHERE tid = '.$tid.' AND url = '.sqlesc($ann['url'])) or sqlerr(__FILE__,__LINE__); - $errors++; - } +while ($ann = mysql_fetch_array($anns_r)) + $works[] = $ann; + +$multi = curl_multi_init(); +$channels = array(); + +foreach ($works as $work) { + $url = $work['url']; + $info_hash = $work['info_hash']; + $url = $DEFAULTBASEURL.'/update_multi.php?id='.$tid.'&url='.urlencode($url).'&info_hash='.urlencode($info_hash).'&token='.generate_token($tid, $url, $info_hash); + $ch = curl_init(); + curl_setopt($ch, CURLOPT_URL, $url); + curl_setopt($ch, CURLOPT_HEADER, false); + curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); + curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5); + curl_setopt($ch, CURLOPT_TIMEOUT_MS, 5000); + + curl_multi_add_handle($multi, $ch); + + $channels[$url] = $ch; } -$visible = ($s_sum > 0); -if (!$visible && $cur_visible == 'no') - $visible = 'no'; -else - $visible = 'yes'; +$running = null; +do { + while (CURLM_CALL_MULTI_PERFORM === curl_multi_exec($multi, $running)); + if (!$running) + break; + while (($res = curl_multi_select($multi)) === 0) + {}; + if ($res === false) { + echo "

    select error

    "; + break; + } +} while (true); + +$success = 0; +foreach ($channels as $url => $channel) { + $success += intval(curl_multi_getcontent($channel)); + curl_multi_remove_handle($multi, $channel); +} -sql_query('UPDATE torrents SET remote_seeders = '.$s_sum.', remote_leechers = '.$l_sum.', last_action = NOW(), last_mt_update = NOW(), visible = '.sqlesc($visible).' WHERE id = '.$tid) or sqlerr(__FILE__,__LINE__); +curl_multi_close($multi); +sql_query('UPDATE torrents AS t INNER JOIN (SELECT ts.tid, SUM(ts.seeders) AS sum_seeders, SUM(ts.leechers) AS sum_leechers FROM torrents_scrape AS ts WHERE ts.tid = '.$tid.' GROUP BY ts.tid) AS ts ON ts.tid = t.id SET t.remote_seeders = ts.sum_seeders, t.remote_leechers = ts.sum_leechers, t.last_action = NOW(), t.last_mt_update = NOW() WHERE t.id = '.$tid) or sqlerr(__FILE__,__LINE__); header('Refresh: 3;url=details.php?id='.$tid); +$errors = count($works) - $success; stderr($tracker_lang['success'], "Îáíîâëåíèå ìóëüòèòðåêåðà âûïîëíåíî óñïåøíî. Óñïåøíî: $success Îøèáîê: $errors"); ?> \ No newline at end of file From abcd4a0a01b4bb86b34828aa5e461fbadf5125fc Mon Sep 17 00:00:00 2001 From: Yuna Scatari Date: Thu, 6 Mar 2014 11:44:03 +0200 Subject: [PATCH 031/106] =?UTF-8?q?=D0=97=D0=B0=D0=BA=D1=80=D1=8B=D0=BB=20?= =?UTF-8?q?=D0=BE=D0=B1=D0=BD=D0=BE=D0=B2=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5=20?= =?UTF-8?q?=D0=BC=D1=83=D0=BB=D1=8C=D1=82=D0=B8=D1=82=D1=80=D0=B5=D0=BA?= =?UTF-8?q?=D0=B5=D1=80=D0=B0=20=D0=B3=D0=BE=D1=81=D1=82=D1=8F=D0=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- details.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/details.php b/details.php index efcb64e..a6339a6 100644 --- a/details.php +++ b/details.php @@ -447,7 +447,7 @@ function seed_sort($a,$b) { else $anns[] = '
  • '.$announce['url'].' - íå ðàáîòàåò, îøèáêà: '.$announce['error'].''; } - if (strtotime($row['last_mt_update']) < (TIMENOW - 3600)) + if (strtotime($row['last_mt_update']) < (TIMENOW - 3600) && $CURUSER) $update_link = '
    Äàííûå ìîãëè óñòàðåòü. Îáíîâèòü ìóëüòèòðåêåð'; tr("Ìóëüòèòðåêåð", '
      '.implode($anns).'
    '.$update_link, 1); } From 7e9d32962b9c0aff16b0b8d80abb0e9a52ba5a20 Mon Sep 17 00:00:00 2001 From: Yuna Scatari Date: Thu, 6 Mar 2014 12:49:39 +0200 Subject: [PATCH 032/106] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=B8=D0=BB=20=D1=81=D0=BE=D0=B7=D0=B4=D0=B0=D0=BD=D0=B8=D0=B5?= =?UTF-8?q?=20=D0=B8=20=D1=80=D0=B5=D0=B4=D0=B0=D0=BA=D1=82=D0=B8=D1=80?= =?UTF-8?q?=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8=D0=B5=20=D0=BD=D0=BE=D0=B2=D0=BE?= =?UTF-8?q?=D1=81=D1=82=D0=B5=D0=B9.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Ð’ news.php отÑутÑтвовало Ð¸Ð¼Ñ Ñ„Ð¾Ñ€Ð¼Ñ‹. --- news.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/news.php b/news.php index a675f1a..ce66342 100644 --- a/news.php +++ b/news.php @@ -116,7 +116,7 @@ $returnto = htmlentities($_GET['returnto']); stdhead("Ðåäàêòèðîâàíèå íîâîñòè"); - echo ''; + echo ''; echo '
  • '; echo ''; echo ''; @@ -137,7 +137,7 @@ if ($warning) echo '

    ('.$warning.')

    '; - echo ''; + echo ''; echo '
    Ðåäàêòèðîâàíèå íîâîñòè
    Òåìà:
    '; echo ''; echo ''; From 948ba9ba82300011ea21b80df60322f217579a08 Mon Sep 17 00:00:00 2001 From: Yuna Scatari Date: Thu, 6 Mar 2014 14:38:31 +0200 Subject: [PATCH 033/106] cURL multi check before start processing, and fallback to single mode --- update_multi.php | 76 +++++++++++++++++++++++++----------------------- 1 file changed, 39 insertions(+), 37 deletions(-) diff --git a/update_multi.php b/update_multi.php index 7a2253c..23ca887 100644 --- a/update_multi.php +++ b/update_multi.php @@ -95,45 +95,47 @@ function check_token($token, $tid, $url, $info_hash) { while ($ann = mysql_fetch_array($anns_r)) $works[] = $ann; -$multi = curl_multi_init(); -$channels = array(); - -foreach ($works as $work) { - $url = $work['url']; - $info_hash = $work['info_hash']; - $url = $DEFAULTBASEURL.'/update_multi.php?id='.$tid.'&url='.urlencode($url).'&info_hash='.urlencode($info_hash).'&token='.generate_token($tid, $url, $info_hash); - $ch = curl_init(); - curl_setopt($ch, CURLOPT_URL, $url); - curl_setopt($ch, CURLOPT_HEADER, false); - curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); - curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5); - curl_setopt($ch, CURLOPT_TIMEOUT_MS, 5000); - - curl_multi_add_handle($multi, $ch); - - $channels[$url] = $ch; -} +if (function_exists('curl_multi_init')) { + $multi = curl_multi_init(); + $channels = array(); + foreach ($works as $work) { + $url = $work['url']; + $info_hash = $work['info_hash']; + $url = $DEFAULTBASEURL.'/update_multi.php?id='.$tid.'&url='.urlencode($url).'&info_hash='.urlencode($info_hash).'&token='.generate_token($tid, $url, $info_hash); + $ch = curl_init(); + curl_setopt($ch, CURLOPT_URL, $url); + curl_setopt($ch, CURLOPT_HEADER, false); + curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); + curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5); + curl_setopt($ch, CURLOPT_TIMEOUT_MS, 5000); + curl_multi_add_handle($multi, $ch); + $channels[$url] = $ch; + } -$running = null; -do { - while (CURLM_CALL_MULTI_PERFORM === curl_multi_exec($multi, $running)); - if (!$running) - break; - while (($res = curl_multi_select($multi)) === 0) - {}; - if ($res === false) { - echo "

    select error

    "; - break; - } -} while (true); - -$success = 0; -foreach ($channels as $url => $channel) { - $success += intval(curl_multi_getcontent($channel)); - curl_multi_remove_handle($multi, $channel); -} + $running = null; + do { + while (CURLM_CALL_MULTI_PERFORM === curl_multi_exec($multi, $running)); + if (!$running) + break; + while (($res = curl_multi_select($multi)) === 0) + {}; + if ($res === false) { + echo "

    select error

    "; + break; + } + } while (true); + + $success = 0; + foreach ($channels as $url => $channel) { + $success += intval(curl_multi_getcontent($channel)); + curl_multi_remove_handle($multi, $channel); + } + + curl_multi_close($multi); +} else + foreach ($works as $work) + scrape($tid, $work['url'], $work['info_hash']); -curl_multi_close($multi); sql_query('UPDATE torrents AS t INNER JOIN (SELECT ts.tid, SUM(ts.seeders) AS sum_seeders, SUM(ts.leechers) AS sum_leechers FROM torrents_scrape AS ts WHERE ts.tid = '.$tid.' GROUP BY ts.tid) AS ts ON ts.tid = t.id SET t.remote_seeders = ts.sum_seeders, t.remote_leechers = ts.sum_leechers, t.last_action = NOW(), t.last_mt_update = NOW() WHERE t.id = '.$tid) or sqlerr(__FILE__,__LINE__); header('Refresh: 3;url=details.php?id='.$tid); From 50a562aca184df4e70825f56126c8bc9093f78f5 Mon Sep 17 00:00:00 2001 From: Yuna Scatari Date: Thu, 6 Mar 2014 16:03:35 +0200 Subject: [PATCH 034/106] [BUGFIX] 1. cleanup.php now not making multitracker torrents invisible 2. update_multi.php now making multitracker torrents visible IF remote_seeders is GT 0 --- include/cleanup.php | 2 +- update_multi.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/include/cleanup.php b/include/cleanup.php index a6ccf5f..2e0efb1 100644 --- a/include/cleanup.php +++ b/include/cleanup.php @@ -107,7 +107,7 @@ function docleanup() { sql_query("UPDATE snatched SET seeder = 'no' WHERE seeder = 'yes' AND last_action < FROM_UNIXTIME($deadtime)"); $deadtime -= $max_dead_torrent_time; - sql_query("UPDATE torrents SET visible='no' WHERE visible='yes' AND last_action < FROM_UNIXTIME($deadtime)") or sqlerr(__FILE__,__LINE__); + sql_query("UPDATE torrents SET visible='no' WHERE visible='yes' AND last_action < FROM_UNIXTIME($deadtime) AND multitracker = 'no'") or sqlerr(__FILE__,__LINE__); $torrents = array(); $res = sql_query("SELECT torrent, seeder, COUNT(*) AS c FROM peers GROUP BY torrent, seeder") or sqlerr(__FILE__,__LINE__); diff --git a/update_multi.php b/update_multi.php index 23ca887..8b7654e 100644 --- a/update_multi.php +++ b/update_multi.php @@ -136,7 +136,7 @@ function check_token($token, $tid, $url, $info_hash) { foreach ($works as $work) scrape($tid, $work['url'], $work['info_hash']); -sql_query('UPDATE torrents AS t INNER JOIN (SELECT ts.tid, SUM(ts.seeders) AS sum_seeders, SUM(ts.leechers) AS sum_leechers FROM torrents_scrape AS ts WHERE ts.tid = '.$tid.' GROUP BY ts.tid) AS ts ON ts.tid = t.id SET t.remote_seeders = ts.sum_seeders, t.remote_leechers = ts.sum_leechers, t.last_action = NOW(), t.last_mt_update = NOW() WHERE t.id = '.$tid) or sqlerr(__FILE__,__LINE__); +sql_query('UPDATE torrents AS t INNER JOIN (SELECT ts.tid, SUM(ts.seeders) AS sum_seeders, SUM(ts.leechers) AS sum_leechers FROM torrents_scrape AS ts WHERE ts.tid = '.$tid.' GROUP BY ts.tid) AS ts ON ts.tid = t.id SET t.remote_seeders = ts.sum_seeders, t.remote_leechers = ts.sum_leechers, t.last_action = NOW(), t.last_mt_update = NOW(), visible = IF(t.remote_seeders > 0, "yes", visible) WHERE t.id = '.$tid) or sqlerr(__FILE__,__LINE__); header('Refresh: 3;url=details.php?id='.$tid); $errors = count($works) - $success; From 3adb2ad902968d3657840b8ff722383e2b068025 Mon Sep 17 00:00:00 2001 From: yunasc Date: Thu, 6 Mar 2014 23:57:53 +0200 Subject: [PATCH 035/106] [BUGFIX] Dirty hack to prevent ghost Guests on website on multitracker update, if sessions are used --- update_multi.php | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/update_multi.php b/update_multi.php index 8b7654e..d06bb13 100644 --- a/update_multi.php +++ b/update_multi.php @@ -29,7 +29,13 @@ // Äà ïðîñòÿò ìåíÿ áîãè çà ýòè óðîäñòâà, íî ýòî âñ¸ ïèñàëîñü â 23:59 require_once('include/bittorrent.php'); + +// Dirty hack to prevent ghost Guests on website +$old_us = $use_sessions; +$use_sessions = 0; dbconn(); +$use_sessions = $old_us; + if (!$_GET['token']) loggedinorreturn(); // À âäðóã ãóãë ïðèéäåò íà òàêèå ñòðàíèöû? Íå íàäî... From b7cf51598a3a13ff0bdd99e53ec6a7cb3129ad2e Mon Sep 17 00:00:00 2001 From: Yuna Scatari Date: Fri, 7 Mar 2014 15:15:23 +0200 Subject: [PATCH 036/106] [ENHANCEMENT] browse.php link to update remote peers, if allowed by timer Link is invisible, unless you know it's there. Let's say, this is usability improvement :) --- browse.php | 2 +- include/functions_torrenttable.php | 9 +++++++-- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/browse.php b/browse.php index 481cd7f..990d5df 100644 --- a/browse.php +++ b/browse.php @@ -242,7 +242,7 @@ $addparam = $pagerlink; } list($pagertop, $pagerbottom, $limit) = pager($torrentsperpage, $count, "browse.php?" . $addparam); - $query = "SELECT t.id, t.moderated, t.moderatedby, t.category, (t.leechers + t.remote_leechers) AS leechers, (t.seeders + t.remote_seeders) AS seeders, t.multitracker, t.free, t.name, t.times_completed, t.size, t.added, t.comments, t.numfiles, t.filename, t.not_sticky, t.owner," . "IF(t.numratings < $minvotes, NULL, ROUND(t.ratingsum / t.numratings, 1)) AS rating, c.name AS cat_name, c.image AS cat_pic, u.username, u.class" . ($CURUSER ? ", EXISTS(SELECT * FROM readtorrents WHERE readtorrents.userid = " . sqlesc($CURUSER["id"]) . " AND readtorrents.torrentid = t.id) AS readtorrent" : ", 1 AS readtorrent") . " FROM torrents AS t LEFT JOIN categories AS c ON t.category = c.id LEFT JOIN users AS u ON t.owner = u.id $where $orderby $limit"; + $query = "SELECT t.id, t.moderated, t.moderatedby, t.category, (t.leechers + t.remote_leechers) AS leechers, (t.seeders + t.remote_seeders) AS seeders, t.multitracker, t.last_mt_update, t.free, t.name, t.times_completed, t.size, t.added, t.comments, t.numfiles, t.filename, t.not_sticky, t.owner," . "IF(t.numratings < $minvotes, NULL, ROUND(t.ratingsum / t.numratings, 1)) AS rating, c.name AS cat_name, c.image AS cat_pic, u.username, u.class" . ($CURUSER ? ", EXISTS(SELECT * FROM readtorrents WHERE readtorrents.userid = " . sqlesc($CURUSER["id"]) . " AND readtorrents.torrentid = t.id) AS readtorrent" : ", 1 AS readtorrent") . " FROM torrents AS t LEFT JOIN categories AS c ON t.category = c.id LEFT JOIN users AS u ON t.owner = u.id $where $orderby $limit"; $res = sql_query($query) or die(mysql_error()); } else unset($res); diff --git a/include/functions_torrenttable.php b/include/functions_torrenttable.php index eee3504..4e3d69f 100644 --- a/include/functions_torrenttable.php +++ b/include/functions_torrenttable.php @@ -246,8 +246,13 @@ function torrenttable($res, $variant = "index") { print("\"".$tracker_lang['download']."\"\n"); - if ($row['multitracker'] == 'yes') - print("\"".$tracker_lang['external_torrent']."\"\n"); + if ($row['multitracker'] == 'yes') { + $allow_update = (strtotime($row['last_mt_update']) < (TIMENOW - 3600)); + $multi_image = "\"".$tracker_lang['external_torrent']."\"\n"; + if ($allow_update) + $multi_image = "$multi_image\n"; + echo $multi_image; + } if ($CURUSER["id"] == $row["owner"] || get_user_class() >= UC_MODERATOR) $owned = 1; From 440e5e87bf1ece3e99168e9b33a188f6315fcccb Mon Sep 17 00:00:00 2001 From: Yuna Scatari Date: Fri, 7 Mar 2014 15:46:32 +0200 Subject: [PATCH 037/106] [ENHANCEMENT] Display time when was last multitracker update in details.php [ENHANCEMENT] Plurar forms for russian (<- please test this thing) --- details.php | 1 + include/functions_global.php | 29 ++++++++++++++++++++++++++++- 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/details.php b/details.php index a6339a6..ccf5a78 100644 --- a/details.php +++ b/details.php @@ -449,6 +449,7 @@ function seed_sort($a,$b) { } if (strtotime($row['last_mt_update']) < (TIMENOW - 3600) && $CURUSER) $update_link = '
    Äàííûå ìîãëè óñòàðåòü. Îáíîâèòü ìóëüòèòðåêåð'; + $update_link .= '
    Ïîñëåäíåå îáíîâëåíèå áûëî '.get_et(strtotime($row['last_mt_update'])).' íàçàä'; tr("Ìóëüòèòðåêåð", '
      '.implode($anns).'
    '.$update_link, 1); } diff --git a/include/functions_global.php b/include/functions_global.php index b70f811..cf11a5a 100644 --- a/include/functions_global.php +++ b/include/functions_global.php @@ -1097,8 +1097,35 @@ function write_log($text, $color = "transparent", $type = "tracker") { sql_query("INSERT INTO sitelog (added, color, txt, type) VALUES($added, $color, $text, $type)"); } +function getWord($number, $suffix) { + $keys = array(2, 0, 1, 1, 1, 2); + $mod = $number % 100; + $suffix_key = ($mod > 7 && $mod < 20) ? 2: $keys[min($mod % 10, 5)]; + return $suffix[$suffix_key]; +} + function get_et($ts) { - return get_elapsed_time($ts); + return get_elapsed_time_plural($ts); +} + +function get_elapsed_time_plural($ts) { + $mins = floor((time() - $ts) / 60); + $hours = floor($mins / 60); + $mins -= $hours * 60; + $days = floor($hours / 24); + $hours -= $days * 24; + $weeks = floor($days / 7); + $days -= $weeks * 7; + $t = ""; + if ($weeks > 0) + return "$weeks ".getWord($weeks, array("íåäåëþ", "íåäåëè", "íåäåëü")); + if ($days > 0) + return "$days ".getWord($days, array("äåíü", "äíÿ", "äíåé")); + if ($hours > 0) + return "$hours ".getWord($hours, array("÷àñ", "÷àñà", "÷àñîâ")); + if ($mins > 0) + return "$mins ".getWord($mins, array("ìèíóòó", "ìèíóòû", "ìèíóò")); + return "< 1 ìèíóòû"; } function get_elapsed_time($ts) { From 8809b84e5e747607d4d2f081c5cfeaafa197b484 Mon Sep 17 00:00:00 2001 From: Yuna Scatari Date: Fri, 7 Mar 2014 18:52:37 +0200 Subject: [PATCH 038/106] [ENHANCEMENT] Plural forms enhancement userdetails.php plurar test --- include/functions_global.php | 41 ++++++++++++++++++++---------------- userdetails.php | 4 ++-- 2 files changed, 25 insertions(+), 20 deletions(-) diff --git a/include/functions_global.php b/include/functions_global.php index cf11a5a..e13f102 100644 --- a/include/functions_global.php +++ b/include/functions_global.php @@ -1108,24 +1108,29 @@ function get_et($ts) { return get_elapsed_time_plural($ts); } -function get_elapsed_time_plural($ts) { - $mins = floor((time() - $ts) / 60); - $hours = floor($mins / 60); - $mins -= $hours * 60; - $days = floor($hours / 24); - $hours -= $days * 24; - $weeks = floor($days / 7); - $days -= $weeks * 7; - $t = ""; - if ($weeks > 0) - return "$weeks ".getWord($weeks, array("íåäåëþ", "íåäåëè", "íåäåëü")); - if ($days > 0) - return "$days ".getWord($days, array("äåíü", "äíÿ", "äíåé")); - if ($hours > 0) - return "$hours ".getWord($hours, array("÷àñ", "÷àñà", "÷àñîâ")); - if ($mins > 0) - return "$mins ".getWord($mins, array("ìèíóòó", "ìèíóòû", "ìèíóò")); - return "< 1 ìèíóòû"; +function get_elapsed_time_plural($time_start, $decimals = 0) { + $divider['years'] = (60 * 60 * 24 * 365); + $divider['months'] = (60 * 60 * 24 * 365 / 12); + $divider['weeks'] = (60 * 60 * 24 / 7); + $divider['days'] = (60 * 60 * 24); + $divider['hours'] = (60 * 60); + $divider['minutes'] = (60); + + $langs['years'] = array("ãîä", "ãîäà", "ëåò"); + $langs['months'] = array("ìåñÿö", "ìåñÿöà", "ìåñÿöåâ"); + $langs['weeks'] = array("íåäåëþ", "íåäåëè", "íåäåëü"); + $langs['days'] = array("äåíü", "äíÿ", "äíåé"); + $langs['hours'] = array("÷àñ", "÷àñà", "÷àñîâ"); + $langs['minutes'] = array("ìèíóòó", "ìèíóòû", "ìèíóò"); + + foreach ($divider as $unit => $div) { + ${'elapsed_time_'.$unit} = floor(((TIMENOW - $time_start) / $div)); + if (${'elapsed_time_'.$unit} >= 1) + break; + } + $elapsed_time = ${'elapsed_time_'.$unit} . ' ' . getWord(${'elapsed_time_'.$unit}, $langs[$unit]); + + return $elapsed_time; } function get_elapsed_time($ts) { diff --git a/userdetails.php b/userdetails.php index 3ae47ae..0708eea 100644 --- a/userdetails.php +++ b/userdetails.php @@ -158,12 +158,12 @@ function maketable($res) if ($user[added] == "0000-00-00 00:00:00") $joindate = 'N/A'; else - $joindate = "$user[added] (" . get_elapsed_time(sql_timestamp_to_unix_timestamp($user["added"])) . " ".$tracker_lang['ago'].")"; + $joindate = "$user[added] (" . get_et(sql_timestamp_to_unix_timestamp($user["added"])) . " ".$tracker_lang['ago'].")"; $lastseen = $user["last_access"]; if ($lastseen == "0000-00-00 00:00:00") $lastseen = $tracker_lang['never']; else { - $lastseen .= " (" . get_elapsed_time(sql_timestamp_to_unix_timestamp($lastseen)) . " ".$tracker_lang['ago'].")"; + $lastseen .= " (" . get_et(sql_timestamp_to_unix_timestamp($lastseen)) . " ".$tracker_lang['ago'].")"; } $res = sql_query("SELECT COUNT(*) FROM comments WHERE user = " . $user[id]) or sqlerr(__FILE__, __LINE__); $arr3 = mysql_fetch_row($res); From fd51685aa82932245c0fc0f5188417fb600cb3d6 Mon Sep 17 00:00:00 2001 From: Yuna Scatari Date: Fri, 7 Mar 2014 23:06:06 +0200 Subject: [PATCH 039/106] =?UTF-8?q?[TYPOFIX]=20=D0=A1=D0=B5=D1=80=D0=B5?= =?UTF-8?q?=D0=B1=D1=80=D1=8F=D0=BD=D0=BD=D1=8B=D0=B9=20->=20=D0=A1=D0=B5?= =?UTF-8?q?=D1=80=D0=B5=D0=B1=D1=80=D1=8F=D0=BD=D1=8B=D0=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- languages/lang_russian/lang_main.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/languages/lang_russian/lang_main.php b/languages/lang_russian/lang_main.php index 069c878..c989fef 100644 --- a/languages/lang_russian/lang_main.php +++ b/languages/lang_russian/lang_main.php @@ -202,7 +202,7 @@ public function __construct() { 'go_go_go' => 'Ïîåõàëè', 'go_to' => 'Ïåðåéòè', 'golden' => 'Çîëîòîé òîððåíò', - 'silver' => 'Ñåðåáðÿííûé òîððåíò', + 'silver' => 'Ñåðåáðÿíûé òîððåíò', 'golden_descr' => 'Çîëîòîé òîððåíò (ñ÷èòàåòñÿ òîëüêî ðàçäà÷à, çàêà÷êà íå ó÷èòûâàåòñÿ)', 'golden_torrents' => 'Çîëîòûå òîððåíòû', 'guests_online' => 'Âñåãî ãîñòåé', From fddaa67730d96ae2af44b9c3f2700d38c3a27406 Mon Sep 17 00:00:00 2001 From: Yuna Scatari Date: Fri, 7 Mar 2014 23:42:15 +0200 Subject: [PATCH 040/106] =?UTF-8?q?[TYPOFIX]=20=D0=A1=D0=B5=D1=80=D0=B5?= =?UTF-8?q?=D0=B1=D1=80=D1=8F=D0=BD=D0=BD=D1=8B=D0=B9=20->=20=D0=A1=D0=B5?= =?UTF-8?q?=D1=80=D0=B5=D0=B1=D1=80=D1=8F=D0=BD=D1=8B=D0=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- edit.php | 2 +- upload.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/edit.php b/edit.php index ff0264e..1a8eb0f 100644 --- a/edit.php +++ b/edit.php @@ -93,7 +93,7 @@ if(get_user_class() >= UC_ADMINISTRATOR) tr("Òèï ðàçäà÷è", "
    ". -"
    ". +"
    ". "
    " , 1); if(get_user_class() >= UC_ADMINISTRATOR) diff --git a/upload.php b/upload.php index f3c1e1a..853480e 100644 --- a/upload.php +++ b/upload.php @@ -86,7 +86,7 @@ if(get_user_class() >= UC_ADMINISTRATOR) tr("Òèï ðàçäà÷è", "
    ". - "
    ". + "
    ". "
    " , 1); From 033b761870ea210434b0a45fb12a63ff211e8909 Mon Sep 17 00:00:00 2001 From: Yuna Scatari Date: Sun, 9 Mar 2014 10:40:20 +0200 Subject: [PATCH 041/106] [ENHANCEMENT] mytorrents.php and bookmarks.php multitracker display and seeders/leechers correct count --- bookmarks.php | 2 +- languages/lang_russian/lang_main.php | 2 +- mytorrents.php | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/bookmarks.php b/bookmarks.php index 73a89dd..4c41e57 100644 --- a/bookmarks.php +++ b/bookmarks.php @@ -50,7 +50,7 @@ list($pagertop, $pagerbottom, $limit) = pager($perpage, $count, "bookmarks.php?"); -$res = sql_query("SELECT bookmarks.id AS bookmarkid, users.username, users.class, users.id AS owner, torrents.id, torrents.name, torrents.type, torrents.comments, torrents.leechers, torrents.seeders, IF(torrents.numratings < $minvotes, NULL, ROUND(torrents.ratingsum / torrents.numratings)) AS rating, categories.name AS cat_name, categories.image AS cat_pic, torrents.save_as, torrents.numfiles, torrents.added, torrents.filename, torrents.size, torrents.views, torrents.visible, torrents.free, torrents.hits, torrents.times_completed, torrents.category FROM bookmarks INNER JOIN torrents ON bookmarks.torrentid = torrents.id LEFT JOIN users ON torrents.owner = users.id LEFT JOIN categories ON torrents.category = categories.id WHERE bookmarks.userid = ".sqlesc($CURUSER["id"])." ORDER BY torrents.id DESC $limit") or sqlerr(__FILE__, __LINE__); +$res = sql_query("SELECT bookmarks.id AS bookmarkid, users.username, users.class, users.id AS owner, torrents.id, torrents.name, torrents.type, torrents.comments, (torrents.leechers + torrents.remote_leechers) AS leechers, (torrents.seeders + torrents.remote_seeders) AS seeders, torrents.multitracker, torrents.last_mt_update, IF(torrents.numratings < $minvotes, NULL, ROUND(torrents.ratingsum / torrents.numratings)) AS rating, categories.name AS cat_name, categories.image AS cat_pic, torrents.save_as, torrents.numfiles, torrents.added, torrents.filename, torrents.size, torrents.views, torrents.visible, torrents.free, torrents.hits, torrents.times_completed, torrents.category FROM bookmarks INNER JOIN torrents ON bookmarks.torrentid = torrents.id LEFT JOIN users ON torrents.owner = users.id LEFT JOIN categories ON torrents.category = categories.id WHERE bookmarks.userid = ".sqlesc($CURUSER["id"])." ORDER BY torrents.id DESC $limit") or sqlerr(__FILE__, __LINE__); print("
    -
    Äîáàâèòü íîâîñòü
    Òåìà:
    "); print($pagertop); diff --git a/languages/lang_russian/lang_main.php b/languages/lang_russian/lang_main.php index c989fef..7172623 100644 --- a/languages/lang_russian/lang_main.php +++ b/languages/lang_russian/lang_main.php @@ -202,7 +202,7 @@ public function __construct() { 'go_go_go' => 'Ïîåõàëè', 'go_to' => 'Ïåðåéòè', 'golden' => 'Çîëîòîé òîððåíò', - 'silver' => 'Ñåðåáðÿíûé òîððåíò', + 'silver' => 'Ñåðåáðÿíûé òîððåíò', 'golden_descr' => 'Çîëîòîé òîððåíò (ñ÷èòàåòñÿ òîëüêî ðàçäà÷à, çàêà÷êà íå ó÷èòûâàåòñÿ)', 'golden_torrents' => 'Çîëîòûå òîððåíòû', 'guests_online' => 'Âñåãî ãîñòåé', diff --git a/mytorrents.php b/mytorrents.php index 425963c..292202d 100644 --- a/mytorrents.php +++ b/mytorrents.php @@ -52,7 +52,7 @@ list($pagertop, $pagerbottom, $limit) = pager(20, $count, "mytorrents.php?"); - $res = sql_query("SELECT torrents.type, torrents.comments, torrents.leechers, torrents.seeders, IF(torrents.numratings < $minvotes, NULL, ROUND(torrents.ratingsum / torrents.numratings, 1)) AS rating, torrents.id, categories.name AS cat_name, categories.image AS cat_pic, torrents.name, save_as, filename, numfiles, added, size, views, visible, free, hits, times_completed, category FROM torrents LEFT JOIN categories ON torrents.category = categories.id $where ORDER BY id DESC $limit"); + $res = sql_query("SELECT torrents.type, torrents.comments, (torrents.leechers + torrents.remote_leechers) AS leechers, (torrents.seeders + torrents.remote_seeders) AS seeders, torrents.multitracker, torrents.last_mt_update, IF(torrents.numratings < $minvotes, NULL, ROUND(torrents.ratingsum / torrents.numratings, 1)) AS rating, torrents.id, categories.name AS cat_name, categories.image AS cat_pic, torrents.name, save_as, filename, numfiles, added, size, views, visible, free, hits, times_completed, category FROM torrents LEFT JOIN categories ON torrents.category = categories.id $where ORDER BY id DESC $limit"); print("
    "); print($pagertop); From b85760bd098ebb60e94c5b3d7863ca83cd5c2d6c Mon Sep 17 00:00:00 2001 From: Yuna Scatari Date: Tue, 11 Mar 2014 14:35:03 +0200 Subject: [PATCH 042/106] [ENHANCEMENT] Manget link --- bookmarks.php | 2 +- browse.php | 2 +- include/functions.php | 5 +++++ include/functions_torrenttable.php | 3 +++ mytorrents.php | 2 +- pic/magnet.png | Bin 0 -> 739 bytes 6 files changed, 11 insertions(+), 3 deletions(-) create mode 100644 pic/magnet.png diff --git a/bookmarks.php b/bookmarks.php index 4c41e57..701d9f1 100644 --- a/bookmarks.php +++ b/bookmarks.php @@ -50,7 +50,7 @@ list($pagertop, $pagerbottom, $limit) = pager($perpage, $count, "bookmarks.php?"); -$res = sql_query("SELECT bookmarks.id AS bookmarkid, users.username, users.class, users.id AS owner, torrents.id, torrents.name, torrents.type, torrents.comments, (torrents.leechers + torrents.remote_leechers) AS leechers, (torrents.seeders + torrents.remote_seeders) AS seeders, torrents.multitracker, torrents.last_mt_update, IF(torrents.numratings < $minvotes, NULL, ROUND(torrents.ratingsum / torrents.numratings)) AS rating, categories.name AS cat_name, categories.image AS cat_pic, torrents.save_as, torrents.numfiles, torrents.added, torrents.filename, torrents.size, torrents.views, torrents.visible, torrents.free, torrents.hits, torrents.times_completed, torrents.category FROM bookmarks INNER JOIN torrents ON bookmarks.torrentid = torrents.id LEFT JOIN users ON torrents.owner = users.id LEFT JOIN categories ON torrents.category = categories.id WHERE bookmarks.userid = ".sqlesc($CURUSER["id"])." ORDER BY torrents.id DESC $limit") or sqlerr(__FILE__, __LINE__); +$res = sql_query("SELECT bookmarks.id AS bookmarkid, users.username, users.class, users.id AS owner, torrents.id, torrents.name, torrents.info_hash, torrents.type, torrents.comments, (torrents.leechers + torrents.remote_leechers) AS leechers, (torrents.seeders + torrents.remote_seeders) AS seeders, torrents.multitracker, torrents.last_mt_update, IF(torrents.numratings < $minvotes, NULL, ROUND(torrents.ratingsum / torrents.numratings)) AS rating, categories.name AS cat_name, categories.image AS cat_pic, torrents.save_as, torrents.numfiles, torrents.added, torrents.filename, torrents.size, torrents.views, torrents.visible, torrents.free, torrents.hits, torrents.times_completed, torrents.category FROM bookmarks INNER JOIN torrents ON bookmarks.torrentid = torrents.id LEFT JOIN users ON torrents.owner = users.id LEFT JOIN categories ON torrents.category = categories.id WHERE bookmarks.userid = ".sqlesc($CURUSER["id"])." ORDER BY torrents.id DESC $limit") or sqlerr(__FILE__, __LINE__); print("
    "); print($pagertop); diff --git a/browse.php b/browse.php index 990d5df..8729396 100644 --- a/browse.php +++ b/browse.php @@ -242,7 +242,7 @@ $addparam = $pagerlink; } list($pagertop, $pagerbottom, $limit) = pager($torrentsperpage, $count, "browse.php?" . $addparam); - $query = "SELECT t.id, t.moderated, t.moderatedby, t.category, (t.leechers + t.remote_leechers) AS leechers, (t.seeders + t.remote_seeders) AS seeders, t.multitracker, t.last_mt_update, t.free, t.name, t.times_completed, t.size, t.added, t.comments, t.numfiles, t.filename, t.not_sticky, t.owner," . "IF(t.numratings < $minvotes, NULL, ROUND(t.ratingsum / t.numratings, 1)) AS rating, c.name AS cat_name, c.image AS cat_pic, u.username, u.class" . ($CURUSER ? ", EXISTS(SELECT * FROM readtorrents WHERE readtorrents.userid = " . sqlesc($CURUSER["id"]) . " AND readtorrents.torrentid = t.id) AS readtorrent" : ", 1 AS readtorrent") . " FROM torrents AS t LEFT JOIN categories AS c ON t.category = c.id LEFT JOIN users AS u ON t.owner = u.id $where $orderby $limit"; + $query = "SELECT t.id, t.moderated, t.moderatedby, t.category, (t.leechers + t.remote_leechers) AS leechers, (t.seeders + t.remote_seeders) AS seeders, t.multitracker, t.last_mt_update, t.free, t.name, t.info_hash, t.times_completed, t.size, t.added, t.comments, t.numfiles, t.filename, t.not_sticky, t.owner," . "IF(t.numratings < $minvotes, NULL, ROUND(t.ratingsum / t.numratings, 1)) AS rating, c.name AS cat_name, c.image AS cat_pic, u.username, u.class" . ($CURUSER ? ", EXISTS(SELECT * FROM readtorrents WHERE readtorrents.userid = " . sqlesc($CURUSER["id"]) . " AND readtorrents.torrentid = t.id) AS readtorrent" : ", 1 AS readtorrent") . " FROM torrents AS t LEFT JOIN categories AS c ON t.category = c.id LEFT JOIN users AS u ON t.owner = u.id $where $orderby $limit"; $res = sql_query($query) or die(mysql_error()); } else unset($res); diff --git a/include/functions.php b/include/functions.php index 40d2fa3..24f902e 100644 --- a/include/functions.php +++ b/include/functions.php @@ -964,6 +964,11 @@ function parked() { stderr($tracker_lang['error'], 'Âàø àêêàóíò ïðèïàðêîâàí.'); } +function magnet($html = true, $info_hash, $name, $size, $announces = array()) { + $ampersand = $html ? '&' : '&'; + return sprintf('magnet:?xt=urn:btih:%2$s%1$sdn=%3$s%1$sxl=%4$d%1$str=%5$s', $ampersand, $info_hash, urlencode($name), $size, implode($ampersand . 'tr=', $announces)); +} + //  ýòîé ñòðîêå çàáèò êîïèðàéò. Ïðè åãî óáèðàíèè ìîæåøü ïîïëàòèòüñÿ ðàáî÷èì òðåêåðîì ;)  äàííîì ñëó÷àå - óáèðàÿ ñòðî÷êè íèæå òû íå ñìîæåøü èñïîëüçîâàòü òðåêåð. define ('VERSION', ''); define ('NUM_VERSION', '2.1.16'); diff --git a/include/functions_torrenttable.php b/include/functions_torrenttable.php index 4e3d69f..89381f2 100644 --- a/include/functions_torrenttable.php +++ b/include/functions_torrenttable.php @@ -247,6 +247,9 @@ function torrenttable($res, $variant = "index") { print("\"".$tracker_lang['download']."\"\n"); if ($row['multitracker'] == 'yes') { + + print("\"\"\n"); + $allow_update = (strtotime($row['last_mt_update']) < (TIMENOW - 3600)); $multi_image = "\"".$tracker_lang['external_torrent']."\"\n"; if ($allow_update) diff --git a/mytorrents.php b/mytorrents.php index 292202d..097c8e0 100644 --- a/mytorrents.php +++ b/mytorrents.php @@ -52,7 +52,7 @@ list($pagertop, $pagerbottom, $limit) = pager(20, $count, "mytorrents.php?"); - $res = sql_query("SELECT torrents.type, torrents.comments, (torrents.leechers + torrents.remote_leechers) AS leechers, (torrents.seeders + torrents.remote_seeders) AS seeders, torrents.multitracker, torrents.last_mt_update, IF(torrents.numratings < $minvotes, NULL, ROUND(torrents.ratingsum / torrents.numratings, 1)) AS rating, torrents.id, categories.name AS cat_name, categories.image AS cat_pic, torrents.name, save_as, filename, numfiles, added, size, views, visible, free, hits, times_completed, category FROM torrents LEFT JOIN categories ON torrents.category = categories.id $where ORDER BY id DESC $limit"); + $res = sql_query("SELECT torrents.type, torrents.comments, (torrents.leechers + torrents.remote_leechers) AS leechers, (torrents.seeders + torrents.remote_seeders) AS seeders, torrents.multitracker, torrents.last_mt_update, IF(torrents.numratings < $minvotes, NULL, ROUND(torrents.ratingsum / torrents.numratings, 1)) AS rating, torrents.id, categories.name AS cat_name, categories.image AS cat_pic, torrents.name, torrents.info_hash, save_as, filename, numfiles, added, size, views, visible, free, hits, times_completed, category FROM torrents LEFT JOIN categories ON torrents.category = categories.id $where ORDER BY id DESC $limit"); print("
    "); print($pagertop); diff --git a/pic/magnet.png b/pic/magnet.png new file mode 100644 index 0000000000000000000000000000000000000000..ca433e47f2c6867614366cb42a51bf65979a51b1 GIT binary patch literal 739 zcmV<90v!E`P)FdErZv^S$TObI$E0lK{ZP7LVcpdI-QRe7%kuykD5w#^(y^Bl!LY z@V#ABu-~tL2J#B_7Xq?`kSDoomq!M!UP;S+iP+=gH~gIzZOyAoYs$iM+4ucN2w30C zncUCs0YaV??v0P;hKKu|`nG5{cgP!YfOFgJ=wL3BK9TB6{an`0;NBAIZveQ%O6dUZ z=0+|(%%0EpH&=A;o1$o+%H`UNC9+Np!-+`Icq-YOa6O3B>rD--_<=0}$GTy1vFB{z zV!BaXgLzfe7Zw+b2Bl-vpks?lrTG1;s_XhXTsU{SA3SfAB?kbvlguqpF)ZzWp>7p#lL43To^AmW6bJGv9v$}3V z!$7DFBD-1xv}<=OuP7yx2Y VJNcG^jZy#r002ovPDHLkV1nbhT;~7) literal 0 HcmV?d00001 From faca82079a228f66d13984a1389834ed0bc8b986 Mon Sep 17 00:00:00 2001 From: Yuna Scatari Date: Tue, 11 Mar 2014 14:43:42 +0200 Subject: [PATCH 043/106] [BUGFIX] Plural bugfix --- include/functions_global.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/functions_global.php b/include/functions_global.php index e13f102..5eb0db8 100644 --- a/include/functions_global.php +++ b/include/functions_global.php @@ -1111,7 +1111,7 @@ function get_et($ts) { function get_elapsed_time_plural($time_start, $decimals = 0) { $divider['years'] = (60 * 60 * 24 * 365); $divider['months'] = (60 * 60 * 24 * 365 / 12); - $divider['weeks'] = (60 * 60 * 24 / 7); + $divider['weeks'] = (60 * 60 * 24 * 7); $divider['days'] = (60 * 60 * 24); $divider['hours'] = (60 * 60); $divider['minutes'] = (60); From 1ac3477e6eac1e08583a2503a6498846a0f28e85 Mon Sep 17 00:00:00 2001 From: Yuna Scatari Date: Tue, 11 Mar 2014 22:56:41 +0200 Subject: [PATCH 044/106] [BUGFIX] block-online.php double users bugfix [ENHANCEMENT] details.php magnet link --- blocks/block-online.php | 7 +++---- details.php | 16 ++++++++++++---- include/functions_torrenttable.php | 4 ++-- languages/lang_russian/lang_main.php | 3 +++ 4 files changed, 20 insertions(+), 10 deletions(-) diff --git a/blocks/block-online.php b/blocks/block-online.php index 88cb961..88e556a 100644 --- a/blocks/block-online.php +++ b/blocks/block-online.php @@ -24,11 +24,10 @@ $users = $guests = $staff = $total = 0; -while (list($uid, $uname, $class) = mysql_fetch_row($result)) { - - $parsed = array(); - $parsed_id = array(); +$parsed = array(); +$parsed_id = array(); +while (list($uid, $uname, $class) = mysql_fetch_row($result)) { if (!empty($uname) && !in_array($uname, $parsed)) { $parsed[] = $uname; $title_who[] = "".get_user_class_color($class, $uname).""; diff --git a/details.php b/details.php index ccf5a78..0829abb 100644 --- a/details.php +++ b/details.php @@ -233,9 +233,7 @@ function dltable($name, $arr, $torrent) $owned = 0; $spacer = "       "; - - $prive = ""; - $s=$row["name"]; + $s = ""; print("\n"); print(""); @@ -246,8 +244,18 @@ function dltable($name, $arr, $torrent) $keepget .= $addthis; } $editlink = "a href=\"$url\" class=\"sublink\""; + $right_links = array(); + + $right_links[] = "\"{$tracker_lang['download']}\""; + if ($row['multitracker'] == 'yes') + $right_links[] = "\"{$tracker_lang['magnet']}\""; + $right_links[] = "\"{$tracker_lang['bookmark']}\""; + + if (count($right_links)) + $s .= ''.implode(' ', $right_links).''; + + $s .= "" . $row["name"] . ""; - $s = "" . $row["name"] . ""; if ($owned) $s .= " $spacer<$editlink>[".$tracker_lang['edit']."]"; diff --git a/include/functions_torrenttable.php b/include/functions_torrenttable.php index 89381f2..d9b39ed 100644 --- a/include/functions_torrenttable.php +++ b/include/functions_torrenttable.php @@ -248,10 +248,10 @@ function torrenttable($res, $variant = "index") { if ($row['multitracker'] == 'yes') { - print("\"\"\n"); + print("\"{$tracker_lang['magnet']}\"\n"); $allow_update = (strtotime($row['last_mt_update']) < (TIMENOW - 3600)); - $multi_image = "\"".$tracker_lang['external_torrent']."\"\n"; + $multi_image = "\"{$tracker_lang['external_torrent_update']}\"\n"; if ($allow_update) $multi_image = "$multi_image\n"; echo $multi_image; diff --git a/languages/lang_russian/lang_main.php b/languages/lang_russian/lang_main.php index 7172623..6813ed3 100644 --- a/languages/lang_russian/lang_main.php +++ b/languages/lang_russian/lang_main.php @@ -16,6 +16,7 @@ public function __construct() { 'age' => 'Âîçðàñò', 'contactus' => 'Ñâÿçàòüñÿ ñ íàìè', 'external_torrent' => 'Ìóëüòèòðåêåðíûé òîððåíò', + 'external_torrent_update' => 'Ìóëüòèòðåêåðíûé òîððåíò (îáíîâèòü èíôîðìàöèþ)', 'new_torrents_stats' => 'Ðàçäàþò: %d, Êà÷àþò: %d', 'help_seed' => 'Ñêà÷àë ñàì, äàé ñêà÷àòü äðóãîìó!!!', 'no_need_seeding' => 'Íåò òîððåíòîâ, êîòîðûì íóæíû ðàçäàþùèå', @@ -120,6 +121,7 @@ public function __construct() { 'block' => 'áëîêèðîâêó', 'blocked_list' => 'Ñïèñîê âðàãîâ', 'bookmark_this' => ' çàêëàäêè', + 'bookmark' => 'Äîáàâèòü â èçáðàííîå', 'bookmarked' => ' äîáàâëåí â çàêëàäêè.', 'bookmarks' => 'Çàêëàäêè', 'browse' => 'Òîððåíòû', @@ -161,6 +163,7 @@ public function __construct() { 'details_10_last_snatched_noone' => 'Åùå íèêòî íå ñêà÷àë ýòîò òîððåíò', 'dl_speed' => 'Çàêà÷êà', 'download' => 'Ñêà÷àòü', + 'magnet' => 'Ñêà÷àòü ÷åðåç magnet', 'downloaded' => 'Ñêà÷àë', 'downloading' => ' ðàçäà÷å', 'dox' => 'Ôàéëî-ïîìîéêà', From 5185ff1cbad12fdbaf5b4286719fa5671cf34ebc Mon Sep 17 00:00:00 2001 From: Yuna Scatari Date: Wed, 12 Mar 2014 00:20:07 +0200 Subject: [PATCH 045/106] [BUGFIX] functions_torrenttable.php tooltip fix for update mt --- include/functions_torrenttable.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/include/functions_torrenttable.php b/include/functions_torrenttable.php index d9b39ed..7a3ec65 100644 --- a/include/functions_torrenttable.php +++ b/include/functions_torrenttable.php @@ -251,7 +251,9 @@ function torrenttable($res, $variant = "index") { print("\"{$tracker_lang['magnet']}\"\n"); $allow_update = (strtotime($row['last_mt_update']) < (TIMENOW - 3600)); - $multi_image = "\"{$tracker_lang['external_torrent_update']}\"\n"; + if ($allow_update) + $suffix = '_update'; + $multi_image = "\"{$tracker_lang['external_torrent'\n"; if ($allow_update) $multi_image = "$multi_image\n"; echo $multi_image; From 4ce5ec16052b8e44adb137955c8d629a3113a328 Mon Sep 17 00:00:00 2001 From: Yuna Scatari Date: Wed, 12 Mar 2014 13:46:57 +0200 Subject: [PATCH 046/106] Little cleanup --- details.php | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/details.php b/details.php index 0829abb..f347de7 100644 --- a/details.php +++ b/details.php @@ -261,10 +261,10 @@ function dltable($name, $arr, $torrent) switch ($row['free']) { case 'yes': - $freepic = "\"".$tracker_lang['golden']."\" "; + $freepic = "\"".$tracker_lang['golden']."\" "; break; case 'silver': - $freepic = "\"".$tracker_lang['silver']."\" "; + $freepic = "\"".$tracker_lang['silver']."\" "; break; case 'no': $freepic = ''; @@ -280,7 +280,7 @@ function hex_esc($matches) { if ($row["image1"] != "") { if ($row["image1"] != "") - $img1 = ""; + $img1 = ""; tr('Ïîñòåð', $img1, 1); } @@ -375,25 +375,25 @@ function hex_esc($matches) { $uprow .= " $spacer<$editlink>[".$tracker_lang['edit']."]"; */ - tr($tracker_lang['uploaded'], $uprow.' '.$tracker_lang['respect'].'  '.$tracker_lang['antirespect'].'', 1); + tr($tracker_lang['uploaded'], $uprow.' '.$tracker_lang['respect'].'  '.$tracker_lang['antirespect'].'', 1); if ($row["type"] == "multi") { if (!$_GET["filelist"]) - tr($tracker_lang['files']."
    [".$tracker_lang['open_list']."]", $row["numfiles"] . " ".$tracker_lang['files_l'], 1); + tr($tracker_lang['files'] . "
    [{$tracker_lang['open_list']}]", $row["numfiles"] . " " . $tracker_lang['files_l'], 1); else { tr($tracker_lang['files'], $row["numfiles"] . " ".$tracker_lang['files_l'], 1); $s = "
    :: ".$tracker_lang['torrent_details']."
    \n"; $subres = sql_query("SELECT * FROM files WHERE torrent = $id ORDER BY id"); - $s.="\n"; + $s.="\n"; while ($subrow = mysql_fetch_array($subres)) { $s .= "\n"; } $s .= "
    ".$tracker_lang['path']."".$tracker_lang['size']."
    {$tracker_lang['path']}{$tracker_lang['size']}
    " . $subrow["filename"] . "" . mksize($subrow["size"]) . "
    \n"; - tr("".$tracker_lang['file_list']."
    [".$tracker_lang['close_list']."]", $s, 1); + tr("{$tracker_lang['file_list']}
    [{$tracker_lang['close_list']}]", $s, 1); } } @@ -421,7 +421,8 @@ function hex_esc($matches) { } function leech_sort($a,$b) { - if ( isset( $_GET["usort"] ) ) return seed_sort($a,$b); + if (isset($_GET["usort"])) + return seed_sort($a, $b); $x = $a["to_go"]; $y = $b["to_go"]; if ($x == $y) @@ -501,7 +502,7 @@ function seed_sort($a,$b) { if ($row["seeders"] == 0 || ($row["leechers"] / $row["seeders"] >= 2)) $reseed_button = ""; if (!$_GET["snatched"]==1) - tr("Ñêà÷àâøèå
    [Ïîñìîòðåòü ñïèñîê]", '', 1); + tr("Ñêà÷àâøèå
    [Ïîñìîòðåòü ñïèñîê]", '', 1); else tr("Ñêà÷àâøèå
    [Cïðÿòàòü ñïèñîê]", $snatched_full,1); } @@ -557,7 +558,7 @@ function send() { Date: Thu, 13 Mar 2014 09:32:03 +0200 Subject: [PATCH 047/106] block-stats.php code cleanup + move text to lang file --- blocks/block-stats.php | 39 ++++++++++++++++------------ languages/lang_russian/lang_main.php | 5 ++++ 2 files changed, 27 insertions(+), 17 deletions(-) diff --git a/blocks/block-stats.php b/blocks/block-stats.php index 93409ec..3aa0192 100644 --- a/blocks/block-stats.php +++ b/blocks/block-stats.php @@ -1,10 +1,15 @@
    - - - - - - - + + + + + + +
    ".$tracker_lang['users_registered']."\"Ïàðíè\"$male\"Äåâóøêè\"$female
    ".$tracker_lang['total'].": $registered
    Ìåñò íà òðåêåðå$maxusers
    ".$tracker_lang['users_unconfirmed']."$unverified
    ".$tracker_lang['users_warned']." $warned_users
    ".$tracker_lang['users_disabled']." $disabled
    ".$tracker_lang['users_uploaders']."$uploaders
    ".$tracker_lang['users_vips']."$vip
    {$tracker_lang['users_registered']}\"{$tracker_lang['stats_male']}\"$male\"{$tracker_lang['stats_female']}\"$female
    {$tracker_lang['total']}: {$registered}
    {$tracker_lang['stats_maxusers']}{$maxusers}
    {$tracker_lang['users_unconfirmed']}{$unverified}
    {$tracker_lang['users_warned']} {$warned_users}
    {$tracker_lang['users_disabled']} {$disabled}
    {$tracker_lang['users_uploaders']}{$uploaders}
    {$tracker_lang['users_vips']}{$vip}
    - - -"; + diff --git a/languages/lang_russian/lang_main.php b/languages/lang_russian/lang_main.php index 6813ed3..4c482a8 100644 --- a/languages/lang_russian/lang_main.php +++ b/languages/lang_russian/lang_main.php @@ -409,6 +409,11 @@ public function __construct() { 'you_have_voted_for_this_torrent' => 'âû îöåíèëè ýòîò òîððåíò êàê', 'you_want_to_delete_x_click_here' => 'Âû õîòèòå óäàëèòü %s. Íàæìèòå ñþäà åñëè âû óâåðåíû.', 'your_ip' => 'Âàø IP', + + 'stats_female' => 'Äåâóøêè', + 'stats_male' => 'Ïàðíè', + 'stats_maxusers' => 'Ìåñò íà òðåêåðå', + ); } From d585ac6aeea287d1aae0afb435260700735dc544 Mon Sep 17 00:00:00 2001 From: Yuna Scatari Date: Thu, 13 Mar 2014 10:35:55 +0200 Subject: [PATCH 048/106] Code cleanup and reformat --- details.php | 1088 +++++++++++++------------- languages/lang_russian/lang_main.php | 12 + mybonus.php | 2 +- 3 files changed, 546 insertions(+), 556 deletions(-) diff --git a/details.php b/details.php index f347de7..ec8bc89 100644 --- a/details.php +++ b/details.php @@ -31,167 +31,164 @@ loggedinorreturn(); function getagent($httpagent, $peer_id = "") { - if (preg_match("/^Azureus ([0-9]+\.[0-9]+\.[0-9]+\.[0-9]\_B([0-9][0-9|*])(.+)$)/", $httpagent, $matches)) - return "Azureus/$matches[1]"; - elseif (preg_match("/^Azureus ([0-9]+\.[0-9]+\.[0-9]+\.[0-9]\_CVS)/", $httpagent, $matches)) - return "Azureus/$matches[1]"; - elseif (preg_match("/^Java\/([0-9]+\.[0-9]+\.[0-9]+)/", $httpagent, $matches)) - return "Azureus/<2.0.7.0"; - elseif (preg_match("/^Azureus ([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)/", $httpagent, $matches)) - return "Azureus/$matches[1]"; - elseif (preg_match("/BitTorrent\/S-([0-9]+\.[0-9]+(\.[0-9]+)*)/", $httpagent, $matches)) - return "Shadow's/$matches[1]"; - elseif (preg_match("/BitTorrent\/U-([0-9]+\.[0-9]+\.[0-9]+)/", $httpagent, $matches)) - return "UPnP/$matches[1]"; - elseif (preg_match("/^BitTor(rent|nado)\\/T-(.+)$/", $httpagent, $matches)) - return "BitTornado/$matches[2]"; - elseif (preg_match("/^BitTornado\\/T-(.+)$/", $httpagent, $matches)) - return "BitTornado/$matches[1]"; - elseif (preg_match("/^BitTorrent\/ABC-([0-9]+\.[0-9]+(\.[0-9]+)*)/", $httpagent, $matches)) - return "ABC/$matches[1]"; - elseif (preg_match("/^ABC ([0-9]+\.[0-9]+(\.[0-9]+)*)\/ABC-([0-9]+\.[0-9]+(\.[0-9]+)*)/", $httpagent, $matches)) - return "ABC/$matches[1]"; - elseif (preg_match("/^Python-urllib\/.+?, BitTorrent\/([0-9]+\.[0-9]+(\.[0-9]+)*)/", $httpagent, $matches)) - return "BitTorrent/$matches[1]"; - elseif (preg_match("/^BitTorrent\/brst(.+)/", $httpagent, $matches)) - return "Burst"; - elseif (preg_match("/^RAZA (.+)$/", $httpagent, $matches)) - return "Shareaza/$matches[1]"; - elseif (preg_match("/Rufus\/([0-9]+\.[0-9]+\.[0-9]+)/", $httpagent, $matches)) - return "Rufus/$matches[1]"; - elseif (preg_match("/^Python-urllib\\/([0-9]+\\.[0-9]+(\\.[0-9]+)*)/", $httpagent, $matches)) - return "G3 Torrent"; - elseif (preg_match("/MLDonkey\/([0-9]+).([0-9]+).([0-9]+)*/", $httpagent, $matches)) - return "MLDonkey/$matches[1].$matches[2].$matches[3]"; - elseif (preg_match("/ed2k_plugin v([0-9]+\\.[0-9]+).*/", $httpagent, $matches)) - return "eDonkey/$matches[1]"; - elseif (preg_match("/uTorrent\/([0-9]+)([0-9]+)([0-9]+)([0-9A-Z]+)/", $httpagent, $matches)) - return "µTorrent/$matches[1].$matches[2].$matches[3].$matches[4]"; - elseif (preg_match("/CT([0-9]+)([0-9]+)([0-9]+)([0-9]+)/", $peer_id, $matches)) - return "cTorrent/$matches[1].$matches[2].$matches[3].$matches[4]"; - elseif (preg_match("/Transmission\/([0-9]+).([0-9]+)/", $httpagent, $matches)) - return "Transmission/$matches[1].$matches[2]"; - elseif (preg_match("/KT([0-9]+)([0-9]+)([0-9]+)([0-9]+)/", $peer_id, $matches)) - return "KTorrent/$matches[1].$matches[2].$matches[3].$matches[4]"; - elseif (preg_match("/rtorrent\/([0-9]+\\.[0-9]+(\\.[0-9]+)*)/", $httpagent, $matches)) - return "rTorrent/$matches[1]"; - elseif (preg_match("/^ABC\/Tribler_ABC-([0-9]+\.[0-9]+(\.[0-9]+)*)/", $httpagent, $matches)) - return "Tribler/$matches[1]"; - elseif (preg_match("/^BitsOnWheels( |\/)([0-9]+\\.[0-9]+).*/", $httpagent, $matches)) - return "BitsOnWheels/$matches[2]"; - elseif (preg_match("/BitTorrentPlus\/(.+)$/", $httpagent, $matches)) - return "BitTorrent Plus!/$matches[1]"; - elseif (preg_match("/^Deadman Walking/", $httpagent)) - return "Deadman Walking"; - elseif (preg_match("/^eXeem( |\/)([0-9]+\\.[0-9]+).*/", $httpagent, $matches)) - return "eXeem$matches[1]$matches[2]"; - elseif (preg_match("/^libtorrent\/(.+)$/", $httpagent, $matches)) - return "libtorrent/$matches[1]"; - elseif (substr($peer_id, 0, 12) == "d0c") - return "Mainline"; - elseif (substr($peer_id, 0, 1) == "M") - return "Mainline/Decoded"; - elseif (substr($peer_id, 0, 3) == "-BB") - return "BitBuddy"; - elseif (substr($peer_id, 0, 8) == "-AR1001-") - return "Arctic Torrent/1.2.3"; - elseif (substr($peer_id, 0, 6) == "exbc\08") - return "BitComet/0.56"; - elseif (substr($peer_id, 0, 6) == "exbc\09") - return "BitComet/0.57"; - elseif (substr($peer_id, 0, 6) == "exbc\0:") - return "BitComet/0.58"; - elseif (substr($peer_id, 0, 4) == "-BC0") - return "BitComet/0.".substr($peer_id, 5, 2); - elseif (substr($peer_id, 0, 7) == "exbc\0L") - return "BitLord/1.0"; - elseif (substr($peer_id, 0, 7) == "exbcL") - return "BitLord/1.1"; - elseif (substr($peer_id, 0, 3) == "346") - return "TorrenTopia"; - elseif (substr($peer_id, 0, 8) == "-MP130n-") - return "MooPolice"; - elseif (substr($peer_id, 0, 8) == "-SZ2210-") - return "Shareaza/2.2.1.0"; - elseif (preg_match("/^0P3R4H/", $httpagent)) - return "Opera BT Client"; - elseif (substr($peer_id, 0, 6) == "A310--") - return "ABC/3.1"; - elseif (preg_match("/^XBT Client/", $httpagent)) - return "XBT Client"; - elseif (preg_match("/^BitTorrent\/BitSpirit$/", $httpagent)) - return "BitSpirit"; - elseif (preg_match("/^DansClient/", $httpagent)) - return "XanTorrent"; - else - return "Unknown"; + if (preg_match("/^Azureus ([0-9]+\.[0-9]+\.[0-9]+\.[0-9]\_B([0-9][0-9|*])(.+)$)/", $httpagent, $matches)) + return "Azureus/$matches[1]"; + elseif (preg_match("/^Azureus ([0-9]+\.[0-9]+\.[0-9]+\.[0-9]\_CVS)/", $httpagent, $matches)) + return "Azureus/$matches[1]"; + elseif (preg_match("/^Java\/([0-9]+\.[0-9]+\.[0-9]+)/", $httpagent, $matches)) + return "Azureus/<2.0.7.0"; + elseif (preg_match("/^Azureus ([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)/", $httpagent, $matches)) + return "Azureus/$matches[1]"; + elseif (preg_match("/BitTorrent\/S-([0-9]+\.[0-9]+(\.[0-9]+)*)/", $httpagent, $matches)) + return "Shadow's/$matches[1]"; + elseif (preg_match("/BitTorrent\/U-([0-9]+\.[0-9]+\.[0-9]+)/", $httpagent, $matches)) + return "UPnP/$matches[1]"; + elseif (preg_match("/^BitTor(rent|nado)\\/T-(.+)$/", $httpagent, $matches)) + return "BitTornado/$matches[2]"; + elseif (preg_match("/^BitTornado\\/T-(.+)$/", $httpagent, $matches)) + return "BitTornado/$matches[1]"; + elseif (preg_match("/^BitTorrent\/ABC-([0-9]+\.[0-9]+(\.[0-9]+)*)/", $httpagent, $matches)) + return "ABC/$matches[1]"; + elseif (preg_match("/^ABC ([0-9]+\.[0-9]+(\.[0-9]+)*)\/ABC-([0-9]+\.[0-9]+(\.[0-9]+)*)/", $httpagent, $matches)) + return "ABC/$matches[1]"; + elseif (preg_match("/^Python-urllib\/.+?, BitTorrent\/([0-9]+\.[0-9]+(\.[0-9]+)*)/", $httpagent, $matches)) + return "BitTorrent/$matches[1]"; + elseif (preg_match("/^BitTorrent\/brst(.+)/", $httpagent, $matches)) + return "Burst"; + elseif (preg_match("/^RAZA (.+)$/", $httpagent, $matches)) + return "Shareaza/$matches[1]"; + elseif (preg_match("/Rufus\/([0-9]+\.[0-9]+\.[0-9]+)/", $httpagent, $matches)) + return "Rufus/$matches[1]"; + elseif (preg_match("/^Python-urllib\\/([0-9]+\\.[0-9]+(\\.[0-9]+)*)/", $httpagent, $matches)) + return "G3 Torrent"; + elseif (preg_match("/MLDonkey\/([0-9]+).([0-9]+).([0-9]+)*/", $httpagent, $matches)) + return "MLDonkey/$matches[1].$matches[2].$matches[3]"; + elseif (preg_match("/ed2k_plugin v([0-9]+\\.[0-9]+).*/", $httpagent, $matches)) + return "eDonkey/$matches[1]"; + elseif (preg_match("/uTorrent\/([0-9]+)([0-9]+)([0-9]+)([0-9A-Z]+)/", $httpagent, $matches)) + return "µTorrent/$matches[1].$matches[2].$matches[3].$matches[4]"; + elseif (preg_match("/CT([0-9]+)([0-9]+)([0-9]+)([0-9]+)/", $peer_id, $matches)) + return "cTorrent/$matches[1].$matches[2].$matches[3].$matches[4]"; + elseif (preg_match("/Transmission\/([0-9]+).([0-9]+)/", $httpagent, $matches)) + return "Transmission/$matches[1].$matches[2]"; + elseif (preg_match("/KT([0-9]+)([0-9]+)([0-9]+)([0-9]+)/", $peer_id, $matches)) + return "KTorrent/$matches[1].$matches[2].$matches[3].$matches[4]"; + elseif (preg_match("/rtorrent\/([0-9]+\\.[0-9]+(\\.[0-9]+)*)/", $httpagent, $matches)) + return "rTorrent/$matches[1]"; + elseif (preg_match("/^ABC\/Tribler_ABC-([0-9]+\.[0-9]+(\.[0-9]+)*)/", $httpagent, $matches)) + return "Tribler/$matches[1]"; + elseif (preg_match("/^BitsOnWheels( |\/)([0-9]+\\.[0-9]+).*/", $httpagent, $matches)) + return "BitsOnWheels/$matches[2]"; + elseif (preg_match("/BitTorrentPlus\/(.+)$/", $httpagent, $matches)) + return "BitTorrent Plus!/$matches[1]"; + elseif (preg_match("/^Deadman Walking/", $httpagent)) + return "Deadman Walking"; + elseif (preg_match("/^eXeem( |\/)([0-9]+\\.[0-9]+).*/", $httpagent, $matches)) + return "eXeem$matches[1]$matches[2]"; + elseif (preg_match("/^libtorrent\/(.+)$/", $httpagent, $matches)) + return "libtorrent/$matches[1]"; + elseif (substr($peer_id, 0, 12) == "d0c") + return "Mainline"; + elseif (substr($peer_id, 0, 1) == "M") + return "Mainline/Decoded"; + elseif (substr($peer_id, 0, 3) == "-BB") + return "BitBuddy"; + elseif (substr($peer_id, 0, 8) == "-AR1001-") + return "Arctic Torrent/1.2.3"; + elseif (substr($peer_id, 0, 6) == "exbc\08") + return "BitComet/0.56"; + elseif (substr($peer_id, 0, 6) == "exbc\09") + return "BitComet/0.57"; + elseif (substr($peer_id, 0, 6) == "exbc\0:") + return "BitComet/0.58"; + elseif (substr($peer_id, 0, 4) == "-BC0") + return "BitComet/0." . substr($peer_id, 5, 2); + elseif (substr($peer_id, 0, 7) == "exbc\0L") + return "BitLord/1.0"; + elseif (substr($peer_id, 0, 7) == "exbcL") + return "BitLord/1.1"; + elseif (substr($peer_id, 0, 3) == "346") + return "TorrenTopia"; + elseif (substr($peer_id, 0, 8) == "-MP130n-") + return "MooPolice"; + elseif (substr($peer_id, 0, 8) == "-SZ2210-") + return "Shareaza/2.2.1.0"; + elseif (preg_match("/^0P3R4H/", $httpagent)) + return "Opera BT Client"; + elseif (substr($peer_id, 0, 6) == "A310--") + return "ABC/3.1"; + elseif (preg_match("/^XBT Client/", $httpagent)) + return "XBT Client"; + elseif (preg_match("/^BitTorrent\/BitSpirit$/", $httpagent)) + return "BitSpirit"; + elseif (preg_match("/^DansClient/", $httpagent)) + return "XanTorrent"; + else + return "Unknown"; } -function dltable($name, $arr, $torrent) -{ - - global $tracker_lang; - $s = "" . count($arr) . " $name\n"; - if (!count($arr)) - return $s; - $s .= "\n"; - $s .= "
    ".$tracker_lang['tracker_torrents']."$torrents
    ".$tracker_lang['tracker_dead_torrents']."$dead
    ".$tracker_lang['tracker_peers']."$peers
    + + +"; if (isset($peers)) { -$content .= " - -"; +$content .= " + +"; } -$content .= " -"; +$content .= " +"; $content .= "
    {$tracker_lang['tracker_torrents']}{$torrents}
    {$tracker_lang['tracker_dead_torrents']}{$dead}
    {$tracker_lang['tracker_peers']}{$peers}
    ".$tracker_lang['tracker_seeders']."  $seeders
    ".$tracker_lang['tracker_leechers']."  $leechers
    ".$tracker_lang['tracker_seed_peer']."$ratio
    {$tracker_lang['tracker_seeders']}  {$seeders}
    {$tracker_lang['tracker_leechers']}  {$leechers}
    {$tracker_lang['tracker_seed_peer']}{$ratio}
    ".$tracker_lang['external_seeders']."  $external_seeders
    ".$tracker_lang['external_leechers']."  $external_leechers
    {$tracker_lang['external_seeders']}  {$external_seeders}
    {$tracker_lang['external_leechers']}  {$external_leechers}
    \n"; - $s .= "" . - "". - "". - "". - "" . - "" . - "" . - "" . - "" . - "" . - "\n"; - $now = time(); - //$moderator = (isset($CURUSER) && get_user_class() >= UC_MODERATOR); // Redundant - $mod = (get_user_class() >= UC_MODERATOR); - foreach ($arr as $e) { - // user/ip/port - // check if anyone has this ip - $s .= "\n"; - if ($e["username"]) - $s .= "\n"; - else - $s .= "\n"; - $secs = max(10, ($e["la"]) - $e["pa"]); - $s .= "\n"; - $s .= "\n"; - $s .= "\n"; - $s .= "\n"; - //if ($e["seeder"] == "no") - $s .= "\n"; - /*else - $s .= "\n";*/ - if ($e["downloaded"]) { - $ratio = floor(($e["uploaded"] / $e["downloaded"]) * 1000) / 1000; - $s .= "\n"; - } else - if ($e["uploaded"]) - $s .= "\n"; - else - $s .= "\n"; - $s .= "\n"; - $s .= "\n"; - $s .= "\n"; - $s .= "\n"; - $s .= "\n"; - } - $s .= "
    ".$tracker_lang['user']."".$tracker_lang['port_open']."".$tracker_lang['uploaded']."".$tracker_lang['ul_speed']."".$tracker_lang['downloaded']."".$tracker_lang['dl_speed']."".$tracker_lang['ratio']."".$tracker_lang['completed']."".$tracker_lang['connected']."".$tracker_lang['idle']."".$tracker_lang['client']."
    ".get_user_class_color($e["class"], $e["username"])."".($mod ? " [IP]" : "")."" . ($mod ? $e["ip"] : preg_replace('/\.\d+$/', ".xxx", $e["ip"])) . "" . ($e['connectable'] == "yes" ? "".$tracker_lang['yes']."" : "".$tracker_lang['no']."") . "" . mksize($e["uploaded"]) . "" . mksize($e["uploadoffset"] / $secs) . "/s" . mksize($e["downloaded"]) . "" . mksize($e["downloadoffset"] / $secs) . "/s" . mksize($e["downloadoffset"] / max(1, $e["finishedat"] - $e["st"])) . "/s" . number_format($ratio, 3) . "Inf.---" . sprintf("%.2f%%", 100 * (1 - ($e["to_go"] / $torrent["size"]))) . "" . mkprettytime($now - $e["st"]) . "" . mkprettytime($now - $e["la"]) . "" . htmlspecialchars_uni(getagent($e["agent"], $e["peer_id"])) . "
    \n"; - return $s; +function dltable($name, $arr, $torrent) { + global $tracker_lang; + $s = "" . count($arr) . " $name\n"; + if (!count($arr)) + return $s; + $s .= "\n"; + $s .= "\n"; + $s .= "" . + "". + "". + "". + "" . + "" . + "" . + "" . + "" . + "" . + "\n"; + $now = time(); + //$moderator = (isset($CURUSER) && get_user_class() >= UC_MODERATOR); // Redundant + $mod = (get_user_class() >= UC_MODERATOR); + foreach ($arr as $e) { + // user/ip/port + // check if anyone has this ip + $s .= "\n"; + if ($e["username"]) + $s .= "\n"; + else + $s .= "\n"; + $secs = max(10, ($e["la"]) - $e["pa"]); + $s .= "\n"; + $s .= "\n"; + $s .= "\n"; + $s .= "\n"; + //if ($e["seeder"] == "no") + $s .= "\n"; + /*else + $s .= "\n";*/ + if ($e["downloaded"]) { + $ratio = floor(($e["uploaded"] / $e["downloaded"]) * 1000) / 1000; + $s .= "\n"; + } else + if ($e["uploaded"]) + $s .= "\n"; + else + $s .= "\n"; + $s .= "\n"; + $s .= "\n"; + $s .= "\n"; + $s .= "\n"; + $s .= "\n"; + } + $s .= "
    ".$tracker_lang['user']."".$tracker_lang['port_open']."".$tracker_lang['uploaded']."".$tracker_lang['ul_speed']."".$tracker_lang['downloaded']."".$tracker_lang['dl_speed']."".$tracker_lang['ratio']."".$tracker_lang['completed']."".$tracker_lang['connected']."".$tracker_lang['idle']."".$tracker_lang['client']."
    ".get_user_class_color($e["class"], $e["username"])."".($mod ? " [IP]" : "")."" . ($mod ? $e["ip"] : preg_replace('/\.\d+$/', ".xxx", $e["ip"])) . "" . ($e['connectable'] == "yes" ? "{$tracker_lang['yes']}" : "{$tracker_lang['no']}") . "" . mksize($e["uploaded"]) . "" . mksize($e["uploadoffset"] / $secs) . "/s" . mksize($e["downloaded"]) . "" . mksize($e["downloadoffset"] / $secs) . "/s" . mksize($e["downloadoffset"] / max(1, $e["finishedat"] - $e["st"])) . "/s" . number_format($ratio, 3) . "Inf.---" . sprintf("%.2f%%", 100 * (1 - ($e["to_go"] / $torrent["size"]))) . "" . mkprettytime($now - $e["st"]) . "" . mkprettytime($now - $e["la"]) . "" . htmlspecialchars_uni(getagent($e["agent"], $e["peer_id"])) . "
    \n"; + return $s; } $id = intval($_GET["id"]); if (!isset($id) || !$id) - die(); + die(); -$res = sql_query("SELECT t.multitracker, t.last_mt_update, t.keywords, t.description, t.free, t.seeders, t.banned, t.leechers, t.info_hash, t.filename, UNIX_TIMESTAMP() - UNIX_TIMESTAMP(t.last_action) AS lastseed, t.numratings, t.name, IF(t.numratings < $minvotes, NULL, ROUND(t.ratingsum / t.numratings, 1)) AS rating, t.owner, t.save_as, t.descr, t.visible, t.size, t.added, t.views, t.hits, t.times_completed, t.id, t.type, t.numfiles, t.image1, t.image2, t.image3, t.image4, t.image5, c.name AS cat_name, u.username FROM torrents AS t LEFT JOIN categories AS c ON t.category = c.id LEFT JOIN users AS u ON t.owner = u.id WHERE t.id = $id") - or sqlerr(__FILE__, __LINE__); +$res = sql_query("SELECT t.multitracker, t.last_mt_update, t.keywords, t.description, t.free, t.seeders, t.banned, t.leechers, t.info_hash, t.filename, UNIX_TIMESTAMP() - UNIX_TIMESTAMP(t.last_action) AS lastseed, t.numratings, t.name, IF(t.numratings < $minvotes, NULL, ROUND(t.ratingsum / t.numratings, 1)) AS rating, t.owner, t.save_as, t.descr, t.visible, t.size, t.added, t.views, t.hits, t.times_completed, t.id, t.type, t.numfiles, t.image1, t.image2, t.image3, t.image4, t.image5, c.name AS cat_name, u.username FROM torrents AS t LEFT JOIN categories AS c ON t.category = c.id LEFT JOIN users AS u ON t.owner = u.id WHERE t.id = $id") or sqlerr(__FILE__, __LINE__); $row = mysql_fetch_array($res); $keywords = $row['keywords']; @@ -200,314 +197,303 @@ function dltable($name, $arr, $torrent) sql_query("INSERT INTO readtorrents (userid, torrentid) VALUES (".sqlesc($CURUSER["id"]).", ".sqlesc($id).")")/* or sqlerr(__FILE__,__LINE__)*/; $owned = $moderator = 0; - if (get_user_class() >= UC_MODERATOR) - $owned = $moderator = 1; - elseif ($CURUSER["id"] == $row["owner"]) - $owned = 1; +if (get_user_class() >= UC_MODERATOR) + $owned = $moderator = 1; +elseif ($CURUSER["id"] == $row["owner"]) + $owned = 1; //} if (!$row || ($row["banned"] == "yes" && !$moderator)) stderr($tracker_lang['error'], $tracker_lang['no_torrent_with_such_id']); -else { - if (isset($_GET["hit"])) { - sql_query("UPDATE torrents SET views = views + 1 WHERE id = $id"); - if (isset($_GET["tocomm"])) - header("Location: $DEFAULTBASEURL/details.php?id=$id&page=0#startcomments"); - elseif (isset($_GET["filelist"])) - header("Location: $DEFAULTBASEURL/details.php?id=$id&filelist=1#filelist"); - elseif (isset($_GET["toseeders"])) - header("Location: $DEFAULTBASEURL/details.php?id=$id&dllist=1#seeders"); - elseif (isset($_GET["todlers"])) - header("Location: $DEFAULTBASEURL/details.php?id=$id&dllist=1#leechers"); - else - header("Location: $DEFAULTBASEURL/details.php?id=$id"); - exit(); - } - - if (!isset($_GET["page"])) { - stdhead($tracker_lang['torrent_details']." \"" . $row["name"] . "\""); - - if ($CURUSER["id"] == $row["owner"] || get_user_class() >= UC_MODERATOR) - $owned = 1; - else - $owned = 0; - - $spacer = "       "; - $s = ""; - - print("\n"); - print(""); - $url = "edit.php?id=" . $row["id"]; - if (isset($_GET["returnto"])) { - $addthis = "&returnto=" . urlencode($_GET["returnto"]); - $url .= $addthis; - $keepget .= $addthis; - } - $editlink = "a href=\"$url\" class=\"sublink\""; - $right_links = array(); - - $right_links[] = "\"{$tracker_lang['download']}\""; - if ($row['multitracker'] == 'yes') - $right_links[] = "\"{$tracker_lang['magnet']}\""; - $right_links[] = "\"{$tracker_lang['bookmark']}\""; - - if (count($right_links)) - $s .= ''.implode(' ', $right_links).''; - - $s .= "" . $row["name"] . ""; - - if ($owned) - $s .= " $spacer<$editlink>[".$tracker_lang['edit']."]"; - - switch ($row['free']) { - case 'yes': - $freepic = "\"".$tracker_lang['golden']."\" "; - break; - case 'silver': - $freepic = "\"".$tracker_lang['silver']."\" "; - break; - case 'no': - $freepic = ''; - } - - tr ("{$row["cat_name"]}", $freepic.$s, 1, 1, "10%"); - - function hex_esc($matches) { - return sprintf("%02x", ord($matches[0])); - } - - tr($tracker_lang['info_hash'], $row["info_hash"]); - - if ($row["image1"] != "") { - if ($row["image1"] != "") - $img1 = ""; - tr('Ïîñòåð', $img1, 1); - } - - if (!empty($row["descr"])) - tr($tracker_lang['description'], format_comment($row["descr"]), 1, 1); - $images = array(); +if (isset($_GET["hit"])) { + sql_query("UPDATE torrents SET views = views + 1 WHERE id = $id"); + if (isset($_GET["tocomm"])) + header("Location: $DEFAULTBASEURL/details.php?id=$id&page=0#startcomments"); + elseif (isset($_GET["filelist"])) + header("Location: $DEFAULTBASEURL/details.php?id=$id&filelist=1#filelist"); + elseif (isset($_GET["toseeders"])) + header("Location: $DEFAULTBASEURL/details.php?id=$id&dllist=1#seeders"); + elseif (isset($_GET["todlers"])) + header("Location: $DEFAULTBASEURL/details.php?id=$id&dllist=1#leechers"); + else + header("Location: $DEFAULTBASEURL/details.php?id=$id"); + exit(); +} - for ($i = 2; $i <= 5; $i++) { - if ($row['image'.$i]) - $images[] = ''; +if (!isset($_GET["page"])) { + stdhead($tracker_lang['torrent_details']." \"" . $row["name"] . "\""); + + if ($CURUSER["id"] == $row["owner"] || get_user_class() >= UC_MODERATOR) + $owned = 1; + else + $owned = 0; + + $spacer = "       "; + $s = ""; + + print("
    :: ".$tracker_lang['torrent_details']."
    \n"); + print(""); + $url = "edit.php?id=" . $row["id"]; + if (isset($_GET["returnto"])) { + $addthis = "&returnto=" . urlencode($_GET["returnto"]); + $url .= $addthis; + $keepget .= $addthis; + } + $editlink = "a href=\"$url\" class=\"sublink\""; + $right_links = array(); + + $right_links[] = "\"{$tracker_lang['download']}\""; + if ($row['multitracker'] == 'yes') + $right_links[] = "\"{$tracker_lang['magnet']}\""; + $right_links[] = "\"{$tracker_lang['bookmark']}\""; + + if (count($right_links)) + $s .= ''.implode(' ', $right_links).''; + + $s .= "" . $row["name"] . ""; + + if ($owned) + $s .= " $spacer<$editlink>[".$tracker_lang['edit']."]"; + + switch ($row['free']) { + case 'yes': + $freepic = "\"".$tracker_lang['golden']."\" "; + break; + case 'silver': + $freepic = "\"".$tracker_lang['silver']."\" "; + break; + case 'no': + $freepic = ''; + } + + tr ("{$row["cat_name"]}", $freepic.$s, 1, 1, "10%"); + + function hex_esc($matches) { + return sprintf("%02x", ord($matches[0])); + } + + tr($tracker_lang['info_hash'], $row["info_hash"]); + + if ($row["image1"] != "") { + if ($row["image1"] != "") + $img1 = ""; + tr($tracker_lang['details_poster'], $img1, 1); + } + + if (!empty($row["descr"])) + tr($tracker_lang['description'], format_comment($row["descr"]), 1, 1); + + $images = array(); + + for ($i = 2; $i <= 5; $i++) { + if ($row['image'.$i]) + $images[] = ''; + } + if (count($images)) + tr($tracker_lang['images'], implode('  ', $images), 1); + + if ($row["visible"] == "no") + tr($tracker_lang['visible'], "".$tracker_lang['no']." (".$tracker_lang['dead'].")", 1); + if ($moderator) + tr($tracker_lang['banned'], ($row["banned"] == 'no' ? $tracker_lang['no'] : $tracker_lang['yes']) ); + + if (isset($row["cat_name"])) + tr($tracker_lang['type'], $row["cat_name"]); + else + tr($tracker_lang['type'], "(".$tracker_lang['no_choose'].")"); + + tr($tracker_lang['seeder'], $tracker_lang['seeder_last_seen']." ".mkprettytime($row["lastseed"]) . " ".$tracker_lang['ago']); + tr($tracker_lang['size'],mksize($row["size"]) . " (" . number_format($row["size"]) . " ".$tracker_lang['bytes'].")"); + + $s = ""; + $s .= "
    :: ".$tracker_lang['torrent_details']."
    "; + if (!isset($row["rating"])) { + if ($minvotes > 1) { + $s .= sprintf($tracker_lang['not_enough_votes'], $minvotes); + if ($row["numratings"]) + $s .= sprintf($tracker_lang['only_votes'], $row["numratings"]); + else + $s .= $tracker_lang['none_voted']; + $s .= ")"; + } else + $s .= $tracker_lang['no_votes']; + } else { + $rpic = ratingpic($row["rating"]); + if (!isset($rpic)) + $s .= "invalid?"; + else + $s .= "$rpic (" . $row["rating"] . " ".$tracker_lang['from']." 5 ".$tracker_lang['with']." " . $row["numratings"] . " ".$tracker_lang['votes'].")"; + } + $s .= "\n"; + $s .= "$spacer"; + if (!isset($CURUSER)) + $s .= "(Log in to rate it)"; + else { + $ratings = array( + 5 => $tracker_lang['vote_5'], + 4 => $tracker_lang['vote_4'], + 3 => $tracker_lang['vote_3'], + 2 => $tracker_lang['vote_2'], + 1 => $tracker_lang['vote_1'], + ); + if (!$owned || $moderator) { + $xres = sql_query("SELECT rating, added FROM ratings WHERE torrent = $id AND user = " . $CURUSER["id"]); + $xrow = mysql_fetch_array($xres); + if ($xrow) + $s .= "(".$tracker_lang['you_have_voted_for_this_torrent']." \"" . $xrow["rating"] . " - " . $ratings[$xrow["rating"]] . "\")"; + else { + $s .= "
    \n"; + $s .= "
    "; - if (!isset($row["rating"])) { - if ($minvotes > 1) { - $s .= sprintf($tracker_lang['not_enough_votes'], $minvotes); - if ($row["numratings"]) - $s .= sprintf($tracker_lang['only_votes'], $row["numratings"]); - else - $s .= $tracker_lang['none_voted']; - $s .= ")"; - } - else - $s .= $tracker_lang['no_votes']; - } - else { - $rpic = ratingpic($row["rating"]); - if (!isset($rpic)) - $s .= "invalid?"; - else - $s .= "$rpic (" . $row["rating"] . " ".$tracker_lang['from']." 5 ".$tracker_lang['with']." " . $row["numratings"] . " ".$tracker_lang['votes'].")"; - } - $s .= "\n"; - $s .= "$spacer"; - if (!isset($CURUSER)) - $s .= "(Log in to rate it)"; - else { - $ratings = array( - 5 => $tracker_lang['vote_5'], - 4 => $tracker_lang['vote_4'], - 3 => $tracker_lang['vote_3'], - 2 => $tracker_lang['vote_2'], - 1 => $tracker_lang['vote_1'], - ); - if (!$owned || $moderator) { - $xres = sql_query("SELECT rating, added FROM ratings WHERE torrent = $id AND user = " . $CURUSER["id"]); - $xrow = mysql_fetch_array($xres); - if ($xrow) - $s .= "(".$tracker_lang['you_have_voted_for_this_torrent']." \"" . $xrow["rating"] . " - " . $ratings[$xrow["rating"]] . "\")"; - else { - $s .= "\n"; - $s .= "\n"; - $s .= ""; - $s .= "\n"; - } - } - } - $s .= "
    "; - tr($tracker_lang['rating'], $s, 1); - - tr($tracker_lang['added'], $row["added"]); - tr($tracker_lang['views'], $row["views"]); - tr($tracker_lang['hits'], $row["hits"]); - tr($tracker_lang['snatched'], $row["times_completed"] . " ".$tracker_lang['times']); - - $keepget = ""; - $uprow = (isset($row["username"]) ? ("" . htmlspecialchars_uni($row["username"]) . "") : "Àíîíèì"); + $s .= "\n"; + $s .= ""; + $s .= "\n"; + } + } + } + $s .= "
    "; + tr($tracker_lang['rating'], $s, 1); + + tr($tracker_lang['added'], $row["added"]); + tr($tracker_lang['views'], $row["views"]); + tr($tracker_lang['hits'], $row["hits"]); + tr($tracker_lang['snatched'], $row["times_completed"] . " ".$tracker_lang['times']); + + $keepget = ""; + $uprow = (isset($row["username"]) ? ("" . htmlspecialchars_uni($row["username"]) . "") : "{$tracker_lang['details_anonymous']}"); /* - if ($owned) - $uprow .= " $spacer<$editlink>[".$tracker_lang['edit']."]"; +if ($owned) + $uprow .= " $spacer<$editlink>[".$tracker_lang['edit']."]"; */ - tr($tracker_lang['uploaded'], $uprow.' '.$tracker_lang['respect'].'  '.$tracker_lang['antirespect'].'', 1); - - if ($row["type"] == "multi") { - if (!$_GET["filelist"]) - tr($tracker_lang['files'] . "
    [{$tracker_lang['open_list']}]", $row["numfiles"] . " " . $tracker_lang['files_l'], 1); - else { - tr($tracker_lang['files'], $row["numfiles"] . " ".$tracker_lang['files_l'], 1); - - $s = "\n"; - - $subres = sql_query("SELECT * FROM files WHERE torrent = $id ORDER BY id"); - $s.="\n"; - while ($subrow = mysql_fetch_array($subres)) { - $s .= "\n"; - } - - $s .= "
    {$tracker_lang['path']}{$tracker_lang['size']}
    " . $subrow["filename"] . - "" . mksize($subrow["size"]) . "
    \n"; - tr("{$tracker_lang['file_list']}
    [{$tracker_lang['close_list']}]", $s, 1); - } - } - - if (!isset($_GET["dllist"])) { - /* - $subres = sql_query("SELECT seeder, COUNT(*) FROM peers WHERE torrent = $id GROUP BY seeder"); - $resarr = array(yes => 0, no => 0); - $sum = 0; - while ($subrow = mysql_fetch_array($subres)) { - $resarr[$subrow[0]] = $subrow[1]; - $sum += $subrow[1]; - } - tr("Peers
    [See full list]", $resarr["yes"] . " seeder(s), " . $resarr["no"] . " leecher(s) = $sum peer(s) total", 1); - */ - tr($tracker_lang['downloading']."
    [".$tracker_lang['open_list']."]", $row["seeders"] . " ".$tracker_lang['seeders_l'].", " . $row["leechers"] . " ".$tracker_lang['leechers_l']." = " . ($row["seeders"] + $row["leechers"]) . " ".$tracker_lang['peers_l'], 1); - } else { - $downloaders = array(); - $seeders = array(); - $subres = sql_query("SELECT seeder, finishedat, downloadoffset, uploadoffset, peers.ip, port, peers.uploaded, peers.downloaded, to_go, UNIX_TIMESTAMP(started) AS st, connectable, agent, peer_id, UNIX_TIMESTAMP(last_action) AS la, UNIX_TIMESTAMP(prev_action) AS pa, userid, users.username, users.class FROM peers INNER JOIN users ON peers.userid = users.id WHERE torrent = $id") or sqlerr(__FILE__, __LINE__); - while ($subrow = mysql_fetch_array($subres)) { - if ($subrow["seeder"] == "yes") - $seeders[] = $subrow; - else - $downloaders[] = $subrow; - } - - function leech_sort($a,$b) { - if (isset($_GET["usort"])) - return seed_sort($a, $b); - $x = $a["to_go"]; - $y = $b["to_go"]; - if ($x == $y) - return 0; - if ($x < $y) - return -1; - return 1; - } - function seed_sort($a,$b) { - $x = $a["uploaded"]; - $y = $b["uploaded"]; - if ($x == $y) - return 0; - if ($x < $y) - return 1; - return -1; - } - - usort($seeders, "seed_sort"); - usort($downloaders, "leech_sort"); - - tr("".$tracker_lang['details_seeding']."
    [".$tracker_lang['close_list']."]", dltable($tracker_lang['details_seeding'], $seeders, $row), 1); - tr("".$tracker_lang['details_leeching']."
    [".$tracker_lang['close_list']."]", dltable($tracker_lang['details_leeching'], $downloaders, $row), 1); - } - - if ($row["multitracker"] == 'yes') { - $announces_r = sql_query('SELECT url, seeders, leechers, last_update, state, error FROM torrents_scrape WHERE tid = '.$id); - while ($announce = mysql_fetch_array($announces_r)) { - if ($announce['state'] == 'ok') - $anns[] = '
  • '.$announce['url'].' - ðàçäàþùèå: '.$announce['seeders'].', êà÷àþùèå: '.$announce['leechers'].''; - else - $anns[] = '
  • '.$announce['url'].' - íå ðàáîòàåò, îøèáêà: '.$announce['error'].''; - } - if (strtotime($row['last_mt_update']) < (TIMENOW - 3600) && $CURUSER) - $update_link = '
    Äàííûå ìîãëè óñòàðåòü. Îáíîâèòü ìóëüòèòðåêåð'; - $update_link .= '
    Ïîñëåäíåå îáíîâëåíèå áûëî '.get_et(strtotime($row['last_mt_update'])).' íàçàä'; - tr("Ìóëüòèòðåêåð", '
      '.implode($anns).'
    '.$update_link, 1); - } +tr($tracker_lang['uploaded'], $uprow.' '.$tracker_lang['respect'].'  '.$tracker_lang['antirespect'].'', 1); - if ($row["times_completed"] > 0) { - $res = sql_query("SELECT users.id, users.username, users.title, users.uploaded, users.downloaded, users.donor, users.enabled, users.warned, users.last_access, users.class, snatched.startdat, snatched.last_action, snatched.completedat, snatched.seeder, snatched.userid, snatched.uploaded AS sn_up, snatched.downloaded AS sn_dn FROM snatched INNER JOIN users ON snatched.userid = users.id WHERE snatched.finished='yes' AND snatched.torrent =" . sqlesc($id) . " ORDER BY users.class DESC $limit") or sqlerr(__FILE__,__LINE__); - $snatched_full = "\n"; - $snatched_full .= ""; - - while ($arr = mysql_fetch_assoc($res)) { - //start Global - if ($arr["downloaded"] > 0) { - $ratio = number_format($arr["uploaded"] / $arr["downloaded"], 2); - // $ratio = "$ratio"; - } - else if ($arr["uploaded"] > 0) - $ratio = "Inf."; - else - $ratio = "---"; - $uploaded = mksize($arr["uploaded"]); - $downloaded = mksize($arr["downloaded"]); - //start torrent - if ($arr["sn_dn"] > 0) { - $ratio2 = number_format($arr["sn_up"] / $arr["sn_dn"], 2); - $ratio2 = "$ratio2"; - } - else - if ($arr["sn_up"] > 0) - $ratio2 = "Inf."; - else - $ratio2 = "---"; - $uploaded2 = mksize($arr["sn_up"]); - $downloaded2 = mksize($arr["sn_dn"]); - //end - //$highlight = $CURUSER["id"] == $arr["id"] ? " bgcolor=#00A527" : "";; - $snatched_small[] = "".get_user_class_color($arr["class"], $arr["username"])." ($ratio)"; - $snatched_full .= "\n"; - } - $snatched_full .= "
    ÞçåðÐàçäàëÑêà÷àëÐåéòèíãÍà÷àë / Çàêîí÷èëÄåéñòâèåÑèäèðóåòËÑ
    ".get_user_class_color($arr["class"], $arr["username"])."".get_user_icons($arr)."$uploaded Îáùåãî
    $uploaded2 Òîððåíò
    $downloaded Îáùåãî
    $downloaded2 Òîððåíò
    $ratio Îáùåãî
    $ratio2 Òîððåíò
    " . $arr["startdat"] . "
    " . $arr["completedat"] . "
    " . $arr["last_action"] . "" . ($arr["seeder"] == "yes" ? "Äà" : "Íåò") . - "
    \n"; - ?>= 2)) - $reseed_button = "
    "; - if (!$_GET["snatched"]==1) - tr("Ñêà÷àâøèå
    [Ïîñìîòðåòü ñïèñîê]", '', 1); - else - tr("Ñêà÷àâøèå
    [Cïðÿòàòü ñïèñîê]", $snatched_full,1); - } +if ($row["type"] == "multi") { + if (!$_GET["filelist"]) + tr($tracker_lang['files'] . "
    [{$tracker_lang['open_list']}]", $row["numfiles"] . " " . $tracker_lang['files_l'], 1); + else { + tr($tracker_lang['files'], $row["numfiles"] . " ".$tracker_lang['files_l'], 1); - tr($tracker_lang['torrent_info'], "".$tracker_lang['show_data']."", 1); + $s = "\n"; + + $subres = sql_query("SELECT * FROM files WHERE torrent = $id ORDER BY id"); + $s.="\n"; + while ($subrow = mysql_fetch_array($subres)) { + $s .= "\n"; + } + + $s .= "
    {$tracker_lang['path']}{$tracker_lang['size']}
    " . $subrow["filename"] . + "" . mksize($subrow["size"]) . "
    \n"; + tr("{$tracker_lang['file_list']}
    [{$tracker_lang['close_list']}]", $s, 1); + } +} + +if (!isset($_GET["dllist"])) { + tr($tracker_lang['downloading']."
    [".$tracker_lang['open_list']."]", $row["seeders"] . " ".$tracker_lang['seeders_l'].", " . $row["leechers"] . " ".$tracker_lang['leechers_l']." = " . ($row["seeders"] + $row["leechers"]) . " ".$tracker_lang['peers_l'], 1); +} else { + $downloaders = array(); + $seeders = array(); + $subres = sql_query("SELECT seeder, finishedat, downloadoffset, uploadoffset, peers.ip, port, peers.uploaded, peers.downloaded, to_go, UNIX_TIMESTAMP(started) AS st, connectable, agent, peer_id, UNIX_TIMESTAMP(last_action) AS la, UNIX_TIMESTAMP(prev_action) AS pa, userid, users.username, users.class FROM peers INNER JOIN users ON peers.userid = users.id WHERE torrent = $id") or sqlerr(__FILE__, __LINE__); + while ($subrow = mysql_fetch_array($subres)) { + if ($subrow["seeder"] == "yes") + $seeders[] = $subrow; + else + $downloaders[] = $subrow; + } + + function leech_sort($a, $b) { + if (isset($_GET["usort"])) + return seed_sort($a, $b); + $x = $a["to_go"]; + $y = $b["to_go"]; + if ($x == $y) + return 0; + if ($x < $y) + return -1; + return 1; + } + + function seed_sort($a, $b) { + $x = $a["uploaded"]; + $y = $b["uploaded"]; + if ($x == $y) + return 0; + if ($x < $y) + return 1; + return -1; + } + + usort($seeders, "seed_sort"); + usort($downloaders, "leech_sort"); + + tr("".$tracker_lang['details_seeding']."
    [".$tracker_lang['close_list']."]", dltable($tracker_lang['details_seeding'], $seeders, $row), 1); + tr("".$tracker_lang['details_leeching']."
    [".$tracker_lang['close_list']."]", dltable($tracker_lang['details_leeching'], $downloaders, $row), 1); +} + +if ($row["multitracker"] == 'yes') { + $announces_r = sql_query('SELECT url, seeders, leechers, last_update, state, error FROM torrents_scrape WHERE tid = '.$id); + while ($announce = mysql_fetch_array($announces_r)) { + if ($announce['state'] == 'ok') + $anns[] = '
  • '.$announce['url'].' - ðàçäàþùèå: '.$announce['seeders'].', êà÷àþùèå: '.$announce['leechers'].''; + else + $anns[] = '
  • '.$announce['url'].' - íå ðàáîòàåò, îøèáêà: '.$announce['error'].''; + } + if (strtotime($row['last_mt_update']) < (TIMENOW - 3600) && $CURUSER) + $update_link = '
    Äàííûå ìîãëè óñòàðåòü. Îáíîâèòü ìóëüòèòðåêåð'; + $update_link .= '
    Ïîñëåäíåå îáíîâëåíèå áûëî '.get_et(strtotime($row['last_mt_update'])).' íàçàä'; + tr("Ìóëüòèòðåêåð", '
      '.implode($anns).'
    '.$update_link, 1); +} + +if ($row["times_completed"] > 0) { + $res = sql_query("SELECT users.id, users.username, users.title, users.uploaded, users.downloaded, users.donor, users.enabled, users.warned, users.last_access, users.class, snatched.startdat, snatched.last_action, snatched.completedat, snatched.seeder, snatched.userid, snatched.uploaded AS sn_up, snatched.downloaded AS sn_dn FROM snatched INNER JOIN users ON snatched.userid = users.id WHERE snatched.finished='yes' AND snatched.torrent =" . sqlesc($id) . " ORDER BY users.class DESC $limit") or sqlerr(__FILE__,__LINE__); + $snatched_full = "\n"; + $snatched_full .= ""; + + while ($arr = mysql_fetch_assoc($res)) { + //start Global + if ($arr["downloaded"] > 0) { + $ratio = number_format($arr["uploaded"] / $arr["downloaded"], 2); + // $ratio = "$ratio"; + } + else if ($arr["uploaded"] > 0) + $ratio = "Inf."; + else + $ratio = "---"; + $uploaded = mksize($arr["uploaded"]); + $downloaded = mksize($arr["downloaded"]); + //start torrent + if ($arr["sn_dn"] > 0) { + $ratio2 = number_format($arr["sn_up"] / $arr["sn_dn"], 2); + $ratio2 = "$ratio2"; + } + else + if ($arr["sn_up"] > 0) + $ratio2 = "Inf."; + else + $ratio2 = "---"; + $uploaded2 = mksize($arr["sn_up"]); + $downloaded2 = mksize($arr["sn_dn"]); + //end + //$highlight = $CURUSER["id"] == $arr["id"] ? " bgcolor=#00A527" : "";; + $snatched_small[] = "".get_user_class_color($arr["class"], $arr["username"])." ($ratio)"; + $snatched_full .= "\n"; + } + $snatched_full .= "
    ÞçåðÐàçäàëÑêà÷àëÐåéòèíãÍà÷àë / Çàêîí÷èëÄåéñòâèåÑèäèðóåòËÑ
    ".get_user_class_color($arr["class"], $arr["username"])."".get_user_icons($arr)."$uploaded Îáùåãî
    $uploaded2 Òîððåíò
    $downloaded Îáùåãî
    $downloaded2 Òîððåíò
    $ratio Îáùåãî
    $ratio2 Òîððåíò
    " . $arr["startdat"] . "
    " . $arr["completedat"] . "
    " . $arr["last_action"] . "" . ($arr["seeder"] == "yes" ? "Äà" : "Íåò") . + "
    \n"; + ?>= 2)) + $reseed_button = "
    "; + if (!$_GET["snatched"]==1) + tr("Ñêà÷àâøèå
    [{$tracker_lang['open_list']}]", '', 1); + else + tr("Ñêà÷àâøèå
    [{$tracker_lang['close_list']}]", $snatched_full,1); +} + +tr($tracker_lang['torrent_info'], "".$tracker_lang['show_data']."", 1); $torrentid = (int) $_GET["id"]; @@ -519,23 +505,23 @@ function seed_sort($a,$b) { $count = mysql_num_rows($thanked_sql); if ($count == 0) { - $thanksby = $tracker_lang['none_yet']; + $thanksby = $tracker_lang['none_yet']; } else { - //$thanked_sql = sql_query("SELECT thanks.userid, users.username FROM thanks INNER JOIN users ON thanks.userid = users.id WHERE thanks.torrentid = $torrentid"); - $thanksby = array(); - while ($thanked_row = mysql_fetch_assoc($thanked_sql)) { - if ($thanked_row["userid"] == $CURUSER["id"]) - $can_not_thanks = true; - $userid = $thanked_row["userid"]; - $username = $thanked_row["username"]; - $class = $thanked_row["class"]; - $thanksby[] = "".get_user_class_color($class, $username).""; - } - if ($thanksby) - $thanksby = implode(', ', $thanksby); + //$thanked_sql = sql_query("SELECT thanks.userid, users.username FROM thanks INNER JOIN users ON thanks.userid = users.id WHERE thanks.torrentid = $torrentid"); + $thanksby = array(); + while ($thanked_row = mysql_fetch_assoc($thanked_sql)) { + if ($thanked_row["userid"] == $CURUSER["id"]) + $can_not_thanks = true; + $userid = $thanked_row["userid"]; + $username = $thanked_row["username"]; + $class = $thanked_row["class"]; + $thanksby[] = "".get_user_class_color($class, $username).""; + } + if ($thanksby) + $thanksby = implode(', ', $thanksby); } if ($row["owner"] == $CURUSER["id"]) - $can_not_thanks = true; + $can_not_thanks = true; $thanksby = "
    ".$thanksby." @@ -544,112 +530,104 @@ function seed_sort($a,$b) {

    \n"); + print("
  • \n"); - } else { - stdhead($tracker_lang['comments_for']." \"" . $row["name"] . "\""); - print("

    ".$tracker_lang['comments_for']." " . $row["name"] . "

    \n"); - } + } else { + stdhead($tracker_lang['comments_for']." \"" . $row["name"] . "\""); + print("

    ".$tracker_lang['comments_for']." " . $row["name"] . "

    \n"); + } - print("

    \n"); + print("

    \n"); - $subres = sql_query("SELECT COUNT(*) FROM comments WHERE torrent = $id"); - $subrow = mysql_fetch_array($subres); - $count = $subrow[0]; + $subres = sql_query("SELECT COUNT(*) FROM comments WHERE torrent = $id"); + $subrow = mysql_fetch_array($subres); + $count = $subrow[0]; - $limited = 10; + $limited = 10; if (!$count) { - - print(""); - print("
    "); - print("
    :: Ñïèñîê êîììåíòàðèåâ
    "); - print(""); - print("
    "); - print("Êîììåíòàðèåâ íåò. Æåëàåòå äîáàâèòü?"); - print("

    "); - - print(""); - print(""); - print("
     :: Áåç êîììåíòàðèåâ
    "); - //print("Âàøå èìÿ: "); - //print("".$CURUSER['username']."

    "); - print(""); - print("

    "); - textbbcode("comment","text",""); - print("
    "); - print("
    "); - print(""); - print(""); - print("
    "); - - } - else { - list($pagertop, $pagerbottom, $limit) = pager($limited, $count, "details.php?id=$id&", array('lastpagedefault' => 1)); - - $subres = sql_query("SELECT c.id, c.ip, c.text, c.user, c.added, c.editedby, c.editedat, u.avatar, u.warned, ". - "u.username, u.title, u.class, u.donor, u.downloaded, u.uploaded, u.gender, u.last_access, e.username AS editedbyname FROM comments AS c LEFT JOIN users AS u ON c.user = u.id LEFT JOIN users AS e ON c.editedby = e.id WHERE torrent = " . - "$id ORDER BY c.id $limit") or sqlerr(__FILE__, __LINE__); - $allrows = array(); - while ($subrow = mysql_fetch_array($subres)) - $allrows[] = $subrow; - - - print(""); - print(""); - - print(""); - print(""); - print(""); - print("
    "); - print("
    :: Ñïèñîê êîììåíòàðèåâ
    "); - print(""); - print("
    "); - print($pagertop); - print("
    "); - commenttable($allrows); - print("
    "); - print($pagerbottom); - print("
    "); - - - - print(""); - print(""); - print("
     :: Äîáàâèòü êîììåíòàðèé ê òîððåíòó
    "); - //print("Âàøå èìÿ: "); - //print("".$CURUSER['username']."

    "); - print("

    "); - print("
    "); - print("
    ". textbbcode("comment","text","", 1) ."
    "); - print("
    "); - print("
    "); - print(""); - print(""); - print("
    "); - - } - + print(""); + print("
    "); + print("
    :: {$tracker_lang['comments_list']}
    "); + print(""); + print("
    "); + print("Êîììåíòàðèåâ íåò. Æåëàåòå äîáàâèòü?"); + print("

    "); + + print(""); + print(""); + print("
     :: Áåç êîììåíòàðèåâ
    "); + //print("Âàøå èìÿ: "); + //print("".$CURUSER['username']."

    "); + print("

    "); + print("
    "); + textbbcode("comment","text",""); + print("
    "); + print("
    "); + print(""); + print(""); + print("
    "); +} else { + list($pagertop, $pagerbottom, $limit) = pager($limited, $count, "details.php?id=$id&", array('lastpagedefault' => 1)); + + $subres = sql_query("SELECT c.id, c.ip, c.text, c.user, c.added, c.editedby, c.editedat, u.avatar, u.warned, ". + "u.username, u.title, u.class, u.donor, u.downloaded, u.uploaded, u.gender, u.last_access, e.username AS editedbyname FROM comments AS c LEFT JOIN users AS u ON c.user = u.id LEFT JOIN users AS e ON c.editedby = e.id WHERE torrent = " . + "$id ORDER BY c.id $limit") or sqlerr(__FILE__, __LINE__); + $allrows = array(); + while ($subrow = mysql_fetch_array($subres)) + $allrows[] = $subrow; + + + print(""); + print(""); + + print(""); + print(""); + print(""); + print("
    "); + print("
    :: {$tracker_lang['comments_list']}
    "); + print(""); + print("
    "); + print($pagertop); + print("
    "); + commenttable($allrows); + print("
    "); + print($pagerbottom); + print("
    "); + + print(""); + print(""); + print("
     :: Äîáàâèòü êîììåíòàðèé ê òîððåíòó
    "); + //print("Âàøå èìÿ: "); + //print("".$CURUSER['username']."

    "); + print("

    "); + print("
    "); + print("
    ". textbbcode("comment","text","", 1) ."
    "); + print("
    "); + print("
    "); + print(""); + print(""); + print("
    "); } stdfoot(); diff --git a/languages/lang_russian/lang_main.php b/languages/lang_russian/lang_main.php index 4c482a8..5427eb7 100644 --- a/languages/lang_russian/lang_main.php +++ b/languages/lang_russian/lang_main.php @@ -414,6 +414,18 @@ public function __construct() { 'stats_male' => 'Ïàðíè', 'stats_maxusers' => 'Ìåñò íà òðåêåðå', + 'peertable_port_open' => 'Ïîðò îòêðûò. Ýòîò ïèð ìîæåò ïîäêëþ÷àòñÿ ê ëþáîìó ïèðó.', + 'peertable_port_closed' => 'Ïîðò çàêðûò. Ðåêîìåíäîâàíî ïðîâåðèòü íàñòðîéêè Firwewall\'à.', + + 'details_poster' => 'Ïîñòåð', + 'details_screenshot' => 'Ñêðèíøîò', + 'details_anonymous' => 'Àíîíèì', + + 'ajax_loading' => 'Çàãðóçêà. Ïîæàëóéñòà, ïîäîæäèòå...', + + 'comments_list' => 'Ñïèñîê êîììåíòàðèåâ', + 'comments_add' => 'Äîáàâèòü êîììåíòàðèé', + ); } diff --git a/mybonus.php b/mybonus.php index 5e479c4..25e56bd 100644 --- a/mybonus.php +++ b/mybonus.php @@ -97,7 +97,7 @@ function send(){ }
    From f3dbdfd2e7d06c6e312c3ab56d819995ff82ab77 Mon Sep 17 00:00:00 2001 From: Yuna Scatari Date: Thu, 13 Mar 2014 11:18:46 +0200 Subject: [PATCH 049/106] [ENHANCEMENT] Language system improvement [BUGFIX] stdhead.php logs.php link -> $tracker_lang [BUGFIX] stdhead.php bonus.php link -> $tracker_lang --- languages/lang_russian/lang_constants.php | 428 +++++++++++++++++++++ languages/lang_russian/lang_main.php | 431 +--------------------- themes/Gray/stdhead.php | 16 +- themes/TBDev/stdhead.php | 16 +- 4 files changed, 449 insertions(+), 442 deletions(-) create mode 100644 languages/lang_russian/lang_constants.php diff --git a/languages/lang_russian/lang_constants.php b/languages/lang_russian/lang_constants.php new file mode 100644 index 0000000..45ffcb2 --- /dev/null +++ b/languages/lang_russian/lang_constants.php @@ -0,0 +1,428 @@ + 'windows-1251', + 'page_generated' => "Page generated in %f seconds with %d queries (%s%% PHP / %s%% MySQL)", + 'unknown' => 'Íåèçâåñòíî', + 'access_denied' => 'Äîñòóï çàïðåùåí.', + 'account_activated' => 'Àêêàóíò àêòèâèðîâàí', + 'active' => 'Àêòèâíûå', + 'add_comment' => 'Äîáàâèòü êîììåíòàðèé', + 'add_user' => 'Äîáàâèòü ïîëüçîâàòåëÿ', + 'added' => 'Äîáàâëåí', + 'age' => 'Âîçðàñò', + 'contactus' => 'Ñâÿçàòüñÿ ñ íàìè', + 'external_torrent' => 'Ìóëüòèòðåêåðíûé òîððåíò', + 'external_torrent_update' => 'Ìóëüòèòðåêåðíûé òîððåíò (îáíîâèòü èíôîðìàöèþ)', + 'new_torrents_stats' => 'Ðàçäàþò: %d, Êà÷àþò: %d', + 'help_seed' => 'Ñêà÷àë ñàì, äàé ñêà÷àòü äðóãîìó!!!', + 'no_need_seeding' => 'Íåò òîððåíòîâ, êîòîðûì íóæíû ðàçäàþùèå', + 'signup_users_limit' => 'Òåêóùèé ëèìèò ïîëüçîâàòåëåé (%d) äîñòèãíóò. Íåàêòèâíûå ïîëüçîâàòåëè ïîñòîÿííî óäàëÿþòñÿ, ïîæàëóéñòà âåðíèòåñü ïîïîçæå...', + 'signup_signup' => 'Ðåãèñòðàöèÿ', + 'signup_already_registered' => 'Âû óæå çàðåãèñòðèðîâàííûé ïîëüçîâàòåëü %s!', + 'signup_not_selected' => '---- Íå âûáðàíî ----', + 'signup_use_cookies' => 'Äëÿ ïðàâèëüíîé ðåãèñòðàöèè àêòèâèçèðóéòå cookies.', + 'signup_username' => 'Ïîëüçîâàòåëü', + 'signup_password' => 'Ïàðîëü', + 'signup_password_again' => 'Ïîâòîðèòå ïàðîëü', + 'signup_email' => 'Email', + 'signup_email_must_be_valid' => 'Email àäðåñ äîëæåí áûòü âåðíûì. Âàì ïðèéäåò ïîäòâåðæäàþùåå ïèñüìî, íà êîòîðîå âû äîëæíû îòðåàãèðîâàòü. Âàø email áîëüøå íå áóäåò èñïîëüçîâàí.', + 'signup_gender' => 'Ïîë', + 'signup_male' => 'Ïàðåíü', + 'signup_female' => 'Äåâóøêà', + 'signup_contact' => 'Êîíòàêòû', + 'signup_i_have_read_rules' => 'ß ïðî÷èòàë(à) ïðàâèëà', + 'signup_i_will_read_faq' => 'ß áóäó ÷èòàòü ×àÂî ïðåæäå ÷åì çàäàâàòü âîïðîñû', + 'signup_i_am_13_years_old_or_more' => 'Ìíå 13 ëåò èëè áîëüøå', + 'signup_disabled' => 'Èçâèíèòå, íî ðåãèñòðàöèÿ îòêëþ÷åíà àäìèíèñòðàöèåé', + 'dad' => 'Ïðÿìîé äîñòóï ê ýòîìó ôàéëó íå ðàçðåøåí', + 'news_added' => 'Äîáàâëåíà', + 'news_poster' => 'Àâòîð', + 'my_my' => 'Ïàíåëü óïðàâëåíèÿ', + 'my_updated' => 'Ïðîôèëü îáíîâë¸í!', + 'my_mail_sent' => 'Ïîäòâåðæäàþùåå ïèñüìî îòïðàâëåíî!', + 'my_mail_updated' => 'E-mail àäðåñ îáíîâëåí!', + 'my_torrents' => 'Ìîè òîððåíòû', + 'my_unset' => 'Íå âûáðàíî', + 'my_allow_pm_from' => 'Ðàçðåøèòü ËÑ îò', + 'my_parked' => 'Àêêàóíò ïðèïàðêîâàí', + 'my_you_can_park' => 'Âû ìîæåòå ïðèïàðêîâàòü âàø àêêàóíò âî èçáåæàíèÿ óäàëåíèÿ èç-çà íåàêòèâíîñòè, íàïðèìåð åñëè âû óåäåòå îòäûõàòü. Íî êîãäà âàø àêêàóíò ïðèïàðêîâàí, âàì áóäóò íåäîñòóïíû íåêîòîðûå ôóíêöèè, íàïðèìåð ïðîñìîòð èëè êà÷àíèå òîððåíòîâ', + 'my_delete_after_reply' => 'Óäàëÿòü ËÑ ïðè îòâåòå', + 'my_sentbox' => 'Ñîõðàíÿòü îòïðàâëåííûå ËÑ', + 'my_email_notify' => 'Óâåäîìëåíèå ïî email', + 'my_default_browse' => 'Êàòåãîðèè ïðîñìîòðà ïî óìîë÷àíèþ', + 'my_style' => 'Âèä èíòåðôåéñà', + 'my_country' => 'Ñòðàíà', + 'my_language' => 'ßçûê', + 'my_avatar_url' => 'Àäðåñ àâàòàðû', + 'my_gender' => 'Ïîë', + 'my_gender_male' => 'Ïàðåíü', + 'my_gender_female' => 'Äåâóøêà', + 'my_year' => 'Ãîä', + 'my_month' => 'Ìåñÿö', + 'my_day' => 'Äåíü', + 'my_months_january' => 'ßíâàðü', + 'my_months_february' => 'Ôåâðàëü', + 'my_months_march' => 'Ìàðò', + 'my_months_april' => 'Àïðåëü', + 'my_months_may' => 'Ìàé', + 'my_months_june' => 'Èþíü', + 'my_months_jule' => 'Èþëü', + 'my_months_august' => 'Àâãóñò', + 'my_months_september' => 'Ñåíòÿáðü', + 'my_months_october' => 'Îêòÿáðü', + 'my_months_november' => 'Íîÿáðü', + 'my_months_december' => 'Äåêàáðü', + 'my_birthdate' => 'Äàòà ðîæäåíèÿ', + 'my_contact' => 'Ñèñòåìà ìãíîâåííûõ ñîîáùåíèé', + 'my_contact_descr' => 'Åñëè âû õîòèòå, ÷òîáû äðóãèå ïîñåòèòåëè ìîãëè áûñòðî ñâÿçàòüñÿ ñ âàìè, óêàæèòå ñâîè äàííûå â ñëåäóþùèõ ñèñòåìàõ áûñòðûõ ñîîáùåíèé', + 'my_contact_icq' => 'Íîìåð ICQ', + 'my_contact_aim' => 'Èìÿ â AIM', + 'my_contact_msn' => 'Âàø MSN', + 'my_contact_yahoo' => 'Èìÿ â Yahoo!', + 'my_contact_skype' => 'Èìÿ â Skype', + 'my_contact_mirc' => 'Èìÿ â mIRC!', + 'my_website' => 'Ñàéò', + 'my_torrents_per_page' => 'Òîððåíòîâ íà ñòðàíèöó', + 'my_topics_per_page' => 'Òåì íà ñòðàíèöó', + 'my_messages_per_page' => 'Ñîîáùåíèé íà ñòðàíèöó', + 'my_show_avatars' => 'Ïîêàçûâàòü àâàòàðû', + 'my_info' => 'Èíôîðìàöèÿ', + 'my_userbar' => 'Þçåðáàð', + 'my_userbar_descr' => 'Ýòî òâîé þçåðáàð. Òû ìîæåøü ïîñòàâèòü åãî â ïîäïèñè íà ôîðóìå.
    Ïîëüçîâàòåëÿì ôîðóìà áóäåò âèäåí òâîé ðåéòèíã íà íàøåì òðåêåðå, à åñëè òû åùå ïîñòàâèøü è ññûëêó íà íàø òðåêåð - îíè ñìîãóò ïîïàñòü íà íàø òðåêåð ïðîñòî íàæàâ íà êàðòèíêó.

    Âîò òâîé BB-êîä äëÿ âñòàâêè â ïîäïèñü íà ôîðóìàõ', + 'my_mail' => 'Email', + 'ago' => 'íàçàä', + 'all_types' => 'Âñå òèïû', + 'already_bookmarked' => ' óæå â çàêëàäêàõ.', + 'announce_invalid' => 'Íåâåðíûé', + 'unknown_passkey' => 'Íåèçâåñòíûé ïàññêåé!', + 'announce_invalid_passkey' => 'Íåâåðíûé ïàññêåé! Ïåðåêà÷àéòå òîððåíò .torrent ñ $DEFAULTBASEURL', + 'announce_invalid_port' => 'Íåâåðíûé ïîðò', + 'announce_missing_parameter' => 'Îòñóòñòâóåò ïàðàìåòð', + 'announce_not_authorized' => 'Íå àâòîðèçèðîâàíû', + 'announce_read_faq' => '×èòàéòå ×àÂî', + 'announce_torrent_not_registered' => 'Òîððåíò íå çàðåãèñòðèðîâàí íà òðåêåðå', + 'announce_url' => 'Announce URL òðåêåðà', + 'announce_you_can_leech_only_from_one_place' => 'Ëèìèò ñîåäèíåíèé ïðåâûøåí! Âû ìîæåòå êà÷àòü òîëüêî ñ îäíîãî ìåñòà.', + 'antirespect' => 'Àíòèðåñïåêò', + 'at' => 'â', + 'avatar' => 'Àâàòàð', + 'avatar_adress_invalid' => 'Íåâåðíûé àäðåñ àâàòàðû.', + 'avatar_is_too_big' => 'Ðàçìåðû âàøåé àâàòàðû ïðåâûøàþò %dx%d ïèñêåëåé, óìåíüøèòå åå â ëþáîì ãðàôè÷åñêîì ðåäàêòîðå!', + 'avialable_formats' => 'Äîïóñòèìûå ôîðìàòû', + 'back' => 'Íàçàä', + 'banned' => 'Çàáàíåí', + 'bans' => 'Áàíû', + 'bitbucket' => 'Çàêà÷àòü êàðòèíêó', + 'blank_vote' => 'Ïóñòîé ãîëîñ (ß ïðîñòî õî÷ó óâèäåòü ðåçóëüòàòû!)', + 'block' => 'áëîêèðîâêó', + 'blocked_list' => 'Ñïèñîê âðàãîâ', + 'bookmark_this' => ' çàêëàäêè', + 'bookmark' => 'Äîáàâèòü â èçáðàííîå', + 'bookmarked' => ' äîáàâëåí â çàêëàäêè.', + 'bookmarks' => 'Çàêëàäêè', + 'browse' => 'Òîððåíòû', + 'bytes' => 'áàéò', + 'change' => 'Èçìåíèòü', + 'choose' => 'Âûáåðèòå', + 'class_administrator' => 'Àäìèíèñòðàòîð', + 'class_moderator' => 'Ìîäåðàòîð', + 'class_power_user' => 'Îïûòíûé ïîëüçîâàòåëü', + 'class_sysop' => 'Äèðåêòîð', + 'class_uploader' => 'Àïëîàäåð', + 'class_user' => 'Ïîëüçîâàòåëü', + 'class_vip' => 'VIP', + 'client' => 'Êëèåíò', + 'clients_recomened_by_us' => 'Êëèåíòû ðåêîìåíäóåìûå íàìè', + 'clock' => 'Âðåìÿ', + 'close_list' => 'Çàêðûòü ñïèñîê', + 'comment' => 'êîììåíòàðèé', + 'comment_cant_be_empty' => 'Êîììåíòàðèé íå ìîæåò áûòü ïóñòûì!', + 'comments' => 'Êîìì.', + 'comments_for' => 'Êîììåíòàðèè ê', + 'comms' => 'Êîììåíòàðèåâ: %d', + 'community' => 'Ñîîáùåñòâî', + 'completed' => 'Çàêîí÷èë', + 'confirmation_mail_sent' => 'Ïîäòâåðæäàþùåå ïèñüìî îòïðàâëåíî íà óêàçàíûé âàìè àäðåñ (%s). Âàì íåîáõîäèìî ïðî÷èòàòü è îòðåàãèðîâàòü íà ïèñüìî ïðåæäå ÷åì âû ñìîæåòå èñïîëüçîâàòü âàø àêêàóíò. Åñëè âû ýòîãî íå ñäåëàåòå, íîâûé àêêàóíò áóäåò àâòîìàòè÷åñêè óäàëåí ÷åðåç íåñêîëüêî äíåé.', + 'connected' => ' ðàçäà÷å', + 'connection_limit_exceeded' => 'Ëèìèò ñîåäèíåíèé ïðåâûøåí!', + 'create' => 'Ñîçäàòü', + 'date' => 'Äàòà', + 'dead' => 'ìåðòâûé', + 'delete' => 'Óäàëèòü', + 'delete_marked_messages' => 'Óäàëèòü âûäåëåíûå ñîîáùåíèÿ', + 'deleted' => 'Óäàëåí', + 'description' => 'Îïèñàíèå', + 'design' => 'Ñòèëü', + 'details_leeching' => 'Êà÷àþùèå', + 'details_seeding' => 'Ðàçäàþùèå', + 'details_10_last_snatched' => '10 ïîñëåäíèõ ñêà÷àâøèõ', + 'details_10_last_snatched_noone' => 'Åùå íèêòî íå ñêà÷àë ýòîò òîððåíò', + 'dl_speed' => 'Çàêà÷êà', + 'download' => 'Ñêà÷àòü', + 'magnet' => 'Ñêà÷àòü ÷åðåç magnet', + 'downloaded' => 'Ñêà÷àë', + 'downloading' => ' ðàçäà÷å', + 'dox' => 'Ôàéëî-ïîìîéêà', + 'dox_called_already_exists' => 'Ôàéë íàçâàíûé %s óæå ñóùåñòâóåò!', + 'dox_cannot_delete' => 'Íå ìîãó óäàëèòü ôàéë: %s. Âû äîëæíû ñîîáùèòü àäìèíèñòðàòîðó îá îøèáêå.', + 'dox_cannot_move' => 'Íå ìîãó ïåðåìåñòèòü ôàéë. Âû äîëæíû ñîîáùèòü àäìèíèñòðàòîðó îá îøèáêå.', + 'dox_date' => 'Äàòà', + 'dox_downloaded' => 'Ñêà÷àëè', + 'dox_file_already_exists' => 'Ôàéë ñ èìåíåì %s óæå ñóùåñòâóåò!', + 'dox_filename' => 'Íàçâàíèå', + 'dox_no_files' => 'Ôàéëîâ íå íàéäåíî.', + 'dox_nothing_received' => 'Íè÷åãî íå ïîëó÷åíî! Âîçìîæíî ôàéë êîòîðûé âû ïûòàëèñü çàãðèçèòü - ñëèøêîì áîëüøîé.', + 'dox_size' => 'Ðàçìåð', + 'dox_time' => 'Âðåìÿ', + 'dox_title' => 'Ôàéëî-ïîìîéêà', + 'dox_upload' => 'Çàãðóçèòü', + 'dox_upload_file' => 'Çàãðóçèòü ôàéë', + 'dox_uploader' => 'Çàãðóçèë', + 'dox_warning' => 'Âíèìàíèå', + 'edit' => 'Ðåäàêòèðîâàòü', + 'edited' => 'Óñïåøíîå ðåäàêòèðîâàíèå!', + 'error' => 'Îøèáêà', + 'faq' => '×àÂî', + 'file_list' => 'Ñïèñîê ôàéëîâ', + 'files' => 'Ôàéëîâ', + 'files_l' => 'ôàéëîâ', + 'filled' => 'Âûïîëíåí?', + 'filled_by' => 'Âûïîëíèë', + 'formats' => 'Ôîðìàòû ôàéëîâ', + 'forum' => 'Ôîðóì', + 'friend' => 'äðóãà', + 'friends_list' => 'Ñïèñîê äðóçåé', + 'from' => 'èç', + 'from_system' => 'Ñèñòåìíîå', + 'gender' => 'Ïîë', + 'getdox_file_not_found' => 'Ôàéë íå íàéäåí', + 'getdox_no_file' => 'Íåò èìåíè ôàéëà', + 'go' => 'Âïåðåä', + 'go_go_go' => 'Ïîåõàëè', + 'go_to' => 'Ïåðåéòè', + 'golden' => 'Çîëîòîé òîððåíò', + 'silver' => 'Ñåðåáðÿíûé òîððåíò', + 'golden_descr' => 'Çîëîòîé òîððåíò (ñ÷èòàåòñÿ òîëüêî ðàçäà÷à, çàêà÷êà íå ó÷èòûâàåòñÿ)', + 'golden_torrents' => 'Çîëîòûå òîððåíòû', + 'guests_online' => 'Âñåãî ãîñòåé', + 'hide_filled' => 'Ñïðÿòàòü âûïîëíåííûå', + 'hits' => 'Âçÿò', + 'homepage' => 'Ãëàâíàÿ', + 'idle' => 'Áåçäåéñòâèå', + 'image' => 'Êàðòèíêà', + 'images' => 'Ñêðèíøîòû', + 'img_poster' => 'Ïîñòåð', + 'in' => 'â', + 'inbox' => 'Âõîäÿùèå', + 'including_dead' => 'Âêëþ÷àÿ ìåðòâûå', + 'info_hash' => 'Õýø ðåëèçà', + 'invalid_id' => 'Íåâåðíûé èäåíòèôèêàòîð.', + 'invalid_ip' => 'Íåâåðíûé IP àäðåñ.', + 'invite' => 'Ïðèãëàñèòü', + 'is' => 'â', + 'last_registered_user' => 'Ïîñëåäíèé çàðåãèñòðèðîâàííûé ïîëüçîâàòåëü', + 'last_seen' => 'Ïîñëåäíèé ðàç áûë â ñåòè ', + 'leechers' => 'Ëè÷', + 'leechers_l' => 'êà÷àþùèõ', + 'leeching' => 'Êà÷àåò', + 'loading' => 'Çàãðóçêà...', + 'log' => 'Æóðíàë', + 'login' => 'Âõîä', + 'logout' => 'Âûõîä', + 'lower_class' => 'Âû ðàáîòàåòå ïîä áîëåå íèçêèì êëàññîì. Íàæìèòå ñþäà äëÿ âîçâðàòà.', + 'mail_read' => 'Ïðî÷èòàííîå', + 'mail_read_desc' => 'Ïðî÷èòàííûå ñîîáùåíèÿ', + 'mail_unread_desc' => 'Íåïðî÷èòàííûå ñîîáùåíèÿ', + 'main_menu' => 'Ãëàâíîå Ìåíþ', + 'make_request' => 'Ñäåëàòü çàïðîñ', + 'mark' => 'Âûäåëèòü', + 'mark_all' => 'Âûäåëèòü âñå', + 'mark_as_read' => 'Îòìåòèòü âûäåëåííûå ñîîáùåíèÿ êàê ïðî÷èòàííûå', + 'mark_read' => 'Ïðî÷èòàòü', + 'max_avatar_size' => 'Ðàçìåðû àâàòàðêè äîëæíû áûòü íå áîëåå %dx%d ïèêñåëåé.', + 'max_file_size' => 'Ìàêñèìàëüíûé ðàçìåð ôàéëà', + 'messages' => 'Ñîîáùåíèÿ', + 'missing_form_data' => 'Çàïîëíèòå âñå ïîëÿ ôîðìû.', + 'monitor_comments' => 'Ñëåäèòü çà êîììåíòàðèÿìè', + 'monitor_comments_disable' => 'Îòêëþ÷èòü ñëåæåíèå', + 'my' => 'Ïàíåëü óïðàâëåíèÿ', + 'my_bonus' => 'Ìîé áîíóñ', + 'my_torrents' => 'Ìîè òîððåíòû', + 'name' => 'Íàçâàíèå', + 'need_seeds' => 'Ðåëèçû, êîòîðûì íóæíû ðàçäàþùèå', + 'neighbours' => 'Ñîñåäè', + 'never' => 'íèêîãäà', + 'new_offers' => 'Íîâûå ïðåäëîæåíèÿ', + 'new_pm' => '(%d íîâûõ)', + 'new_pms' => 'Ó âàñ %d íîâîå(ûõ) ñîîáùåíèå(èé)!', + 'new_torrents' => 'Íîâûå òîððåíòû', + 'news' => 'Íîâîñòè', + 'next' => 'Âïåðåä', + 'no' => 'Íåò', + 'no_blocked' => 'Ó âàñ íåò âðàãîâ', + 'no_choose' => 'Íå âûáðàíî', + 'no_comments' => 'Íåò êîììåíòàðèåâ', + 'no_fields_blank' => 'Íå îñòàâëÿéòå ïóñòûõ ïîëåé.', + 'no_friends' => 'Ó âàñ íåò äðóçåé', + 'no_messages' => 'Íåò ñîîáùåíèé', + 'no_offers' => 'Íåò ïðåäëîæåíèé', + 'no_online_users' => 'Íå áûëî àêòèâíûõ ïîëüçîâàòåëåé çà ïîñëåäíèå 15 ìèíóò.', + 'no_polls' => 'Íåò îïðîñîâ', + 'no_news' => 'Íåò íîâîñòåé', + 'no_seeds' => 'Áåç ñèäîâ', + 'no_subject' => 'Áåç òåìû', + 'no_torrent_with_such_id' => 'Íåò òîððåíòà ñ òàêèì ID.', + 'no_torrents' => 'Íåò òîððåíòîâ', + 'no_votes' => 'Íåò ãîëîñîâ', + 'none_voted' => 'íåò ãîëîñîâ', + 'none_yet' => 'Íèêòî', + 'not_enough_votes' => 'Åùå íåò (íóæíî õîòÿ-áû %d ãîëîñîâ. Ñîáðàíî: ', + 'nothing_found' => 'Íè÷åãî íå íàéäåíî', + 'now' => 'ñåé÷àñ', + 'offers' => 'Ïðåäëîæåíèÿ', + 'official' => 'Îôèöèàëüíûé', + 'offline' => 'îôôëàéíå', + 'old_polls' => 'Ïðîøëûå îïðîñû', + 'online' => 'îíëàéíå', + 'online_users' => 'Âñåãî Îíëàéí', + 'only_dead' => 'Òîëüêî ìåðòâûå', + 'only_votes' => 'òîëüêî %d ãîëîñîâ', + 'open_list' => 'Ïîñìîòðåòü ñïèñîê', + 'optional' => 'Íå îáÿçàòåëüíî.', + 'outbox' => 'Îòïðàâëåííûå', + 'password' => 'Ïàðîëü', + 'password_mismatch' => 'Ïàðîëè íå ñîâïàäàþò.', + 'path' => 'Ïóòü', + 'peers_l' => 'ïèðîâ', + 'personal_lists' => 'Ìîè äðóçüÿ', + 'pm' => 'ËÑ', + 'poll' => 'Îïðîñ', + 'port_open' => 'NAT', + 'prev' => 'Íàçàä', + 'profile' => 'Ïðîôèëü', + 'rating' => 'Îöåíêà', + 'ratio' => 'Ðåéòèíã', + 'receiver' => 'Ïîëó÷àòåëü', + 'repeat_password' => 'Ïîâòîð ïàðîëÿ', + 'request' => 'Çàïðîñ', + 'requester' => 'Çàïðîñèë', + 'requests' => 'Çàïðîñû', + 'requests_section' => 'Ñåêöèÿ çàïðîñîâ', + 'respect' => 'Ðåñïåêò', + 'rules' => 'Ïðàâèëà', + 'said_thanks' => 'Ñêàçàëè ñïàñèáî', + 'search' => 'Ïîèñê', + 'search_btn' => 'Èñêàòü', + 'search_requests' => 'Èñêàòü çàïðîñû', + 'search_results_for' => 'Ðåçóëüòàòû ïîèñêà äëÿ', + 'seeder' => 'Ðàçäàþùèé', + 'seeder_last_seen' => 'Ïîñëåäíèé ðàç áûë çäåñü', + 'seeders_l' => 'ðàçäàþùèõ', + 'seeding' => 'Ñèäèðóåò', + 'seeds' => 'Ñèä', + 'sender' => 'Îòïðàâèòåëü', + 'server_load' => 'Íàãðóçêà íà ñåðâåð', + 'show_all' => 'Ïîêàçàòü âñå', + 'show_data' => 'Ïîêàçàòü äàííûå', + 'show_my_requests' => 'Ïîñìîòðåòü ìîè çàïðîñû', + 'signup' => 'Ðåãèñòðàöèÿ', + 'signup_successful' => 'Óñïåøíàÿ ðåãèñòðàöèÿ', + 'size' => 'Ðàçìåð', + 'snatched' => 'Ñêà÷àí', + 'staff' => 'Àäìèíèñòðàöèÿ', + 'statistic' => 'Ñòàòèñòèêà', + 'subject' => 'Òåìà', + 'subscribe_last_comment' => 'Ïîñëåäíåå ñîîáùåíèå', + 'subscribe_list' => 'Ëèñò ïîäïèñêè', + 'subscribe_no' => 'Íåò íîâûõ êîììåòàðèåâ â òåìàõ, íà êîòîðûå âû ïîäïèñàíû.', + 'success' => 'Óñïåøíî', + 'successful_upload' => 'Óñïåøíàÿ çàëèâêà!', + 'sure_mark_delete' => 'Âû óâåðåíû, ÷òî õîòèòå óäàëèòü âûáðàííûå ñîîáùåíèÿ?', + 'sure_mark_read' => 'Âû óâåðåíû, ÷òî õîòèòå ïîìåòèòü âûáðàííûå ñîîáùåíèÿ êàê ïðî÷èòàííûå?', + 'sysop_account_activated' => 'Âàø àêêàóíò àêòèâèðîâàí! Âû àâòîìàòè÷åñêè âîøëè. Òåïåðü âû ìîæåòå ïåðåéòè íà ãëàâíóþ è íà÷àòü èñïîëüçîâàòü âàø àêêàóíò.', + 'sysop_activated' => 'Àêêàóíò àäìèíèñòðàòîðà óñïåøíî àêòèâèðîâàí', + 'taken_from_torrent' => 'Áåðåòñÿ èç òîððåíòà. Ïîæàëóéñòà, èñïîëüçóéòå ïîíÿòíûå èìåíà.', + 'thanks' => 'Ñïàñèáî', + 'thanks_added' => 'Ñïàñèáî äîáàâëåíî!', + 'thanks_for_registering' => 'Ñïàñèáî ÷òî çàðåãèñòðèðîâàëèñü íà %s! Òåïåðü âû ìîæåòå âîéòè â ñèñòåìó.', + 'this_account_activated' => 'Ýòîò àêêàóíò óæå àêòèâèðîâàí. Âû ìîæåòå âîéòè ñ íèì.', + 'times' => 'ðàç', + 'topten' => 'Òîï 10', + 'torrent' => 'Òîððåíò', + 'torrent_clients' => 'Òîððåíò Êëèåíòû', + 'torrent_details' => 'Äåòàëè òîððåíòà', + 'torrent_file' => 'Torrent ôàéë', + 'torrent_info' => 'Äàííûå î òîððåíòå', + 'torrent_name' => 'Íàçâàíèå', + 'torrent_not_selected' => 'Òîððåíò íå âûáðàí!', + 'torrents' => 'Òîððåíòû', + 'total' => 'Âñåãî', + 'tracker_dead_torrents' => 'Ìåðòâûõ Òîððåíòîâ', + 'tracker_leechers' => 'Êà÷àþùèõ', + 'tracker_peers' => 'Àêòèâíûõ ïîäêëþ÷åíèé', + 'tracker_seed_peer' => 'Ðàçäàþùèõ/Êà÷àþùèõ (%)', + 'tracker_seeders' => 'Ðàçäàþùèõ', + 'tracker_torrents' => 'Òîððåíòîâ', + 'external_seeders' => 'Âíåøíèõ Ðàçäàþùèõ', + 'external_leechers' => 'Âíåøíèõ Êà÷àþùèõ', + 'ttl' => 'TTL', + 'type' => 'Òèï', + 'ul_speed' => 'Ðàçäà÷à', + 'unable_to_create_account' => 'Íåâîçìîæíî ñîçäàòü àêêàóíò. Âîçìîæíî èìÿ ïîëüçîâàòåëÿ óæå çàíÿòî.', + 'unable_to_read_torrent' => 'Íåâîçìîæíî ïðî÷èòàòü òîððåíò ôàéë.', + 'upload' => 'Çàãðóçèòü', + 'upload_torrent' => 'Çàãðóçèòü òîððåíò', + 'uploaded' => 'Ðàçäàë', + 'uploadeder' => 'Ðàçäàåò', + 'user' => 'Þçåð', + 'user_menu' => 'Ïåðñîíàëüíîå Ìåíþ', + 'username' => 'Ëîãèí', + 'users' => 'Ïîëüçîâàòåëè', + 'users_disabled' => 'Îòêëþ÷åííûõ', + 'users_registered' => 'Çàðåãèñòðèðîâàííûõ', + 'users_unconfirmed' => 'Íåïîäòâåðæäåííûõ', + 'users_uploaders' => 'Àïëîàäåðîâ', + 'users_vips' => 'VIP', + 'users_warned' => 'Ïðåäóïðåæä¸ííûõ', + 'views' => 'Ïðîñìîòðîâ', + 'visible' => 'Âèäèìûé', + 'vote' => 'Ïðîãîëîñîâàòü', + 'vote_1' => 'Óæàñíî!', + 'vote_2' => 'Ïëîõî', + 'vote_3' => 'Íîðìàëüíî', + 'vote_4' => 'Õîðîøî', + 'vote_5' => 'Îòëè÷íî!', + 'voted' => 'Ãîëîñ äîáàâëåí!', + 'votes' => 'Ãîëîñîâ', + 'wait' => 'Îæèäàíèå', + 'welcome_back' => 'Ïðèâåò, ', + 'whos_online' => 'Êòî Îíëàéí', + 'with' => 'ñ', + 'wrote_at' => 'Ïèñàë â', + 'yes' => 'Äà', + 'you_can_start_seeding' => 'Âû ìîæåòå íà÷èíàòü ðàçäà÷ó. Ó÷òèòå ÷òî òîððåíò íå áóäåò âèäåí ïîêà âû íå íà÷íåòå ðàçäàâàòü!', + 'you_have_no_bookmarks' => 'Ó âàñ íåò çàêëàäîê!', + 'you_have_voted_for_this_torrent' => 'âû îöåíèëè ýòîò òîððåíò êàê', + 'you_want_to_delete_x_click_here' => 'Âû õîòèòå óäàëèòü %s. Íàæìèòå ñþäà åñëè âû óâåðåíû.', + 'your_ip' => 'Âàø IP', + + 'stats_female' => 'Äåâóøêè', + 'stats_male' => 'Ïàðíè', + 'stats_maxusers' => 'Ìåñò íà òðåêåðå', + + 'peertable_port_open' => 'Ïîðò îòêðûò. Ýòîò ïèð ìîæåò ïîäêëþ÷àòñÿ ê ëþáîìó ïèðó.', + 'peertable_port_closed' => 'Ïîðò çàêðûò. Ðåêîìåíäîâàíî ïðîâåðèòü íàñòðîéêè Firwewall\'à.', + + 'details_poster' => 'Ïîñòåð', + 'details_screenshot' => 'Ñêðèíøîò', + 'details_anonymous' => 'Àíîíèì', + + 'ajax_loading' => 'Çàãðóçêà. Ïîæàëóéñòà, ïîäîæäèòå...', + + 'comments_list' => 'Ñïèñîê êîììåíòàðèåâ', + 'comments_add' => 'Äîáàâèòü êîììåíòàðèé', + + 'logs' => 'Æóðíàë', + 'bonus' => 'Áîíóñ', +); diff --git a/languages/lang_russian/lang_main.php b/languages/lang_russian/lang_main.php index 5427eb7..2084d4c 100644 --- a/languages/lang_russian/lang_main.php +++ b/languages/lang_russian/lang_main.php @@ -1,435 +1,14 @@ tlr = array( - 'language_charset' => 'windows-1251', - 'page_generated' => "Page generated in %f seconds with %d queries (%s%% PHP / %s%% MySQL)", - 'unknown' => 'Íåèçâåñòíî', - 'access_denied' => 'Äîñòóï çàïðåùåí.', - 'account_activated' => 'Àêêàóíò àêòèâèðîâàí', - 'active' => 'Àêòèâíûå', - 'add_comment' => 'Äîáàâèòü êîììåíòàðèé', - 'add_user' => 'Äîáàâèòü ïîëüçîâàòåëÿ', - 'added' => 'Äîáàâëåí', - 'age' => 'Âîçðàñò', - 'contactus' => 'Ñâÿçàòüñÿ ñ íàìè', - 'external_torrent' => 'Ìóëüòèòðåêåðíûé òîððåíò', - 'external_torrent_update' => 'Ìóëüòèòðåêåðíûé òîððåíò (îáíîâèòü èíôîðìàöèþ)', - 'new_torrents_stats' => 'Ðàçäàþò: %d, Êà÷àþò: %d', - 'help_seed' => 'Ñêà÷àë ñàì, äàé ñêà÷àòü äðóãîìó!!!', - 'no_need_seeding' => 'Íåò òîððåíòîâ, êîòîðûì íóæíû ðàçäàþùèå', - 'signup_users_limit' => 'Òåêóùèé ëèìèò ïîëüçîâàòåëåé (%d) äîñòèãíóò. Íåàêòèâíûå ïîëüçîâàòåëè ïîñòîÿííî óäàëÿþòñÿ, ïîæàëóéñòà âåðíèòåñü ïîïîçæå...', - 'signup_signup' => 'Ðåãèñòðàöèÿ', - 'signup_already_registered' => 'Âû óæå çàðåãèñòðèðîâàííûé ïîëüçîâàòåëü %s!', - 'signup_not_selected' => '---- Íå âûáðàíî ----', - 'signup_use_cookies' => 'Äëÿ ïðàâèëüíîé ðåãèñòðàöèè àêòèâèçèðóéòå cookies.', - 'signup_username' => 'Ïîëüçîâàòåëü', - 'signup_password' => 'Ïàðîëü', - 'signup_password_again' => 'Ïîâòîðèòå ïàðîëü', - 'signup_email' => 'Email', - 'signup_email_must_be_valid' => 'Email àäðåñ äîëæåí áûòü âåðíûì. Âàì ïðèéäåò ïîäòâåðæäàþùåå ïèñüìî, íà êîòîðîå âû äîëæíû îòðåàãèðîâàòü. Âàø email áîëüøå íå áóäåò èñïîëüçîâàí.', - 'signup_gender' => 'Ïîë', - 'signup_male' => 'Ïàðåíü', - 'signup_female' => 'Äåâóøêà', - 'signup_contact' => 'Êîíòàêòû', - 'signup_i_have_read_rules' => 'ß ïðî÷èòàë(à) ïðàâèëà', - 'signup_i_will_read_faq' => 'ß áóäó ÷èòàòü ×àÂî ïðåæäå ÷åì çàäàâàòü âîïðîñû', - 'signup_i_am_13_years_old_or_more' => 'Ìíå 13 ëåò èëè áîëüøå', - 'signup_disabled' => 'Èçâèíèòå, íî ðåãèñòðàöèÿ îòêëþ÷åíà àäìèíèñòðàöèåé', - 'dad' => 'Ïðÿìîé äîñòóï ê ýòîìó ôàéëó íå ðàçðåøåí', - 'news_added' => 'Äîáàâëåíà', - 'news_poster' => 'Àâòîð', - 'my_my' => 'Ïàíåëü óïðàâëåíèÿ', - 'my_updated' => 'Ïðîôèëü îáíîâë¸í!', - 'my_mail_sent' => 'Ïîäòâåðæäàþùåå ïèñüìî îòïðàâëåíî!', - 'my_mail_updated' => 'E-mail àäðåñ îáíîâëåí!', - 'my_torrents' => 'Ìîè òîððåíòû', - 'my_unset' => 'Íå âûáðàíî', - 'my_allow_pm_from' => 'Ðàçðåøèòü ËÑ îò', - 'my_parked' => 'Àêêàóíò ïðèïàðêîâàí', - 'my_you_can_park' => 'Âû ìîæåòå ïðèïàðêîâàòü âàø àêêàóíò âî èçáåæàíèÿ óäàëåíèÿ èç-çà íåàêòèâíîñòè, íàïðèìåð åñëè âû óåäåòå îòäûõàòü. Íî êîãäà âàø àêêàóíò ïðèïàðêîâàí, âàì áóäóò íåäîñòóïíû íåêîòîðûå ôóíêöèè, íàïðèìåð ïðîñìîòð èëè êà÷àíèå òîððåíòîâ', - 'my_delete_after_reply' => 'Óäàëÿòü ËÑ ïðè îòâåòå', - 'my_sentbox' => 'Ñîõðàíÿòü îòïðàâëåííûå ËÑ', - 'my_email_notify' => 'Óâåäîìëåíèå ïî email', - 'my_default_browse' => 'Êàòåãîðèè ïðîñìîòðà ïî óìîë÷àíèþ', - 'my_style' => 'Âèä èíòåðôåéñà', - 'my_country' => 'Ñòðàíà', - 'my_language' => 'ßçûê', - 'my_avatar_url' => 'Àäðåñ àâàòàðû', - 'my_gender' => 'Ïîë', - 'my_gender_male' => 'Ïàðåíü', - 'my_gender_female' => 'Äåâóøêà', - 'my_year' => 'Ãîä', - 'my_month' => 'Ìåñÿö', - 'my_day' => 'Äåíü', - 'my_months_january' => 'ßíâàðü', - 'my_months_february' => 'Ôåâðàëü', - 'my_months_march' => 'Ìàðò', - 'my_months_april' => 'Àïðåëü', - 'my_months_may' => 'Ìàé', - 'my_months_june' => 'Èþíü', - 'my_months_jule' => 'Èþëü', - 'my_months_august' => 'Àâãóñò', - 'my_months_september' => 'Ñåíòÿáðü', - 'my_months_october' => 'Îêòÿáðü', - 'my_months_november' => 'Íîÿáðü', - 'my_months_december' => 'Äåêàáðü', - 'my_birthdate' => 'Äàòà ðîæäåíèÿ', - 'my_contact' => 'Ñèñòåìà ìãíîâåííûõ ñîîáùåíèé', - 'my_contact_descr' => 'Åñëè âû õîòèòå, ÷òîáû äðóãèå ïîñåòèòåëè ìîãëè áûñòðî ñâÿçàòüñÿ ñ âàìè, óêàæèòå ñâîè äàííûå â ñëåäóþùèõ ñèñòåìàõ áûñòðûõ ñîîáùåíèé', - 'my_contact_icq' => 'Íîìåð ICQ', - 'my_contact_aim' => 'Èìÿ â AIM', - 'my_contact_msn' => 'Âàø MSN', - 'my_contact_yahoo' => 'Èìÿ â Yahoo!', - 'my_contact_skype' => 'Èìÿ â Skype', - 'my_contact_mirc' => 'Èìÿ â mIRC!', - 'my_website' => 'Ñàéò', - 'my_torrents_per_page' => 'Òîððåíòîâ íà ñòðàíèöó', - 'my_topics_per_page' => 'Òåì íà ñòðàíèöó', - 'my_messages_per_page' => 'Ñîîáùåíèé íà ñòðàíèöó', - 'my_show_avatars' => 'Ïîêàçûâàòü àâàòàðû', - 'my_info' => 'Èíôîðìàöèÿ', - 'my_userbar' => 'Þçåðáàð', - 'my_userbar_descr' => 'Ýòî òâîé þçåðáàð. Òû ìîæåøü ïîñòàâèòü åãî â ïîäïèñè íà ôîðóìå.
    Ïîëüçîâàòåëÿì ôîðóìà áóäåò âèäåí òâîé ðåéòèíã íà íàøåì òðåêåðå, à åñëè òû åùå ïîñòàâèøü è ññûëêó íà íàø òðåêåð - îíè ñìîãóò ïîïàñòü íà íàø òðåêåð ïðîñòî íàæàâ íà êàðòèíêó.

    Âîò òâîé BB-êîä äëÿ âñòàâêè â ïîäïèñü íà ôîðóìàõ', - 'my_mail' => 'Email', - 'ago' => 'íàçàä', - 'all_types' => 'Âñå òèïû', - 'already_bookmarked' => ' óæå â çàêëàäêàõ.', - 'announce_invalid' => 'Íåâåðíûé', - 'unknown_passkey' => 'Íåèçâåñòíûé ïàññêåé!', - 'announce_invalid_passkey' => 'Íåâåðíûé ïàññêåé! Ïåðåêà÷àéòå òîððåíò .torrent ñ $DEFAULTBASEURL', - 'announce_invalid_port' => 'Íåâåðíûé ïîðò', - 'announce_missing_parameter' => 'Îòñóòñòâóåò ïàðàìåòð', - 'announce_not_authorized' => 'Íå àâòîðèçèðîâàíû', - 'announce_read_faq' => '×èòàéòå ×àÂî', - 'announce_torrent_not_registered' => 'Òîððåíò íå çàðåãèñòðèðîâàí íà òðåêåðå', - 'announce_url' => 'Announce URL òðåêåðà', - 'announce_you_can_leech_only_from_one_place' => 'Ëèìèò ñîåäèíåíèé ïðåâûøåí! Âû ìîæåòå êà÷àòü òîëüêî ñ îäíîãî ìåñòà.', - 'antirespect' => 'Àíòèðåñïåêò', - 'at' => 'â', - 'avatar' => 'Àâàòàð', - 'avatar_adress_invalid' => 'Íåâåðíûé àäðåñ àâàòàðû.', - 'avatar_is_too_big' => 'Ðàçìåðû âàøåé àâàòàðû ïðåâûøàþò %dx%d ïèñêåëåé, óìåíüøèòå åå â ëþáîì ãðàôè÷åñêîì ðåäàêòîðå!', - 'avialable_formats' => 'Äîïóñòèìûå ôîðìàòû', - 'back' => 'Íàçàä', - 'banned' => 'Çàáàíåí', - 'bans' => 'Áàíû', - 'bitbucket' => 'Çàêà÷àòü êàðòèíêó', - 'blank_vote' => 'Ïóñòîé ãîëîñ (ß ïðîñòî õî÷ó óâèäåòü ðåçóëüòàòû!)', - 'block' => 'áëîêèðîâêó', - 'blocked_list' => 'Ñïèñîê âðàãîâ', - 'bookmark_this' => ' çàêëàäêè', - 'bookmark' => 'Äîáàâèòü â èçáðàííîå', - 'bookmarked' => ' äîáàâëåí â çàêëàäêè.', - 'bookmarks' => 'Çàêëàäêè', - 'browse' => 'Òîððåíòû', - 'bytes' => 'áàéò', - 'change' => 'Èçìåíèòü', - 'choose' => 'Âûáåðèòå', - 'class_administrator' => 'Àäìèíèñòðàòîð', - 'class_moderator' => 'Ìîäåðàòîð', - 'class_power_user' => 'Îïûòíûé ïîëüçîâàòåëü', - 'class_sysop' => 'Äèðåêòîð', - 'class_uploader' => 'Àïëîàäåð', - 'class_user' => 'Ïîëüçîâàòåëü', - 'class_vip' => 'VIP', - 'client' => 'Êëèåíò', - 'clients_recomened_by_us' => 'Êëèåíòû ðåêîìåíäóåìûå íàìè', - 'clock' => 'Âðåìÿ', - 'close_list' => 'Çàêðûòü ñïèñîê', - 'comment' => 'êîììåíòàðèé', - 'comment_cant_be_empty' => 'Êîììåíòàðèé íå ìîæåò áûòü ïóñòûì!', - 'comments' => 'Êîìì.', - 'comments_for' => 'Êîììåíòàðèè ê', - 'comms' => 'Êîììåíòàðèåâ: %d', - 'community' => 'Ñîîáùåñòâî', - 'completed' => 'Çàêîí÷èë', - 'confirmation_mail_sent' => 'Ïîäòâåðæäàþùåå ïèñüìî îòïðàâëåíî íà óêàçàíûé âàìè àäðåñ (%s). Âàì íåîáõîäèìî ïðî÷èòàòü è îòðåàãèðîâàòü íà ïèñüìî ïðåæäå ÷åì âû ñìîæåòå èñïîëüçîâàòü âàø àêêàóíò. Åñëè âû ýòîãî íå ñäåëàåòå, íîâûé àêêàóíò áóäåò àâòîìàòè÷åñêè óäàëåí ÷åðåç íåñêîëüêî äíåé.', - 'connected' => ' ðàçäà÷å', - 'connection_limit_exceeded' => 'Ëèìèò ñîåäèíåíèé ïðåâûøåí!', - 'create' => 'Ñîçäàòü', - 'date' => 'Äàòà', - 'dead' => 'ìåðòâûé', - 'delete' => 'Óäàëèòü', - 'delete_marked_messages' => 'Óäàëèòü âûäåëåíûå ñîîáùåíèÿ', - 'deleted' => 'Óäàëåí', - 'description' => 'Îïèñàíèå', - 'design' => 'Ñòèëü', - 'details_leeching' => 'Êà÷àþùèå', - 'details_seeding' => 'Ðàçäàþùèå', - 'details_10_last_snatched' => '10 ïîñëåäíèõ ñêà÷àâøèõ', - 'details_10_last_snatched_noone' => 'Åùå íèêòî íå ñêà÷àë ýòîò òîððåíò', - 'dl_speed' => 'Çàêà÷êà', - 'download' => 'Ñêà÷àòü', - 'magnet' => 'Ñêà÷àòü ÷åðåç magnet', - 'downloaded' => 'Ñêà÷àë', - 'downloading' => ' ðàçäà÷å', - 'dox' => 'Ôàéëî-ïîìîéêà', - 'dox_called_already_exists' => 'Ôàéë íàçâàíûé %s óæå ñóùåñòâóåò!', - 'dox_cannot_delete' => 'Íå ìîãó óäàëèòü ôàéë: %s. Âû äîëæíû ñîîáùèòü àäìèíèñòðàòîðó îá îøèáêå.', - 'dox_cannot_move' => 'Íå ìîãó ïåðåìåñòèòü ôàéë. Âû äîëæíû ñîîáùèòü àäìèíèñòðàòîðó îá îøèáêå.', - 'dox_date' => 'Äàòà', - 'dox_downloaded' => 'Ñêà÷àëè', - 'dox_file_already_exists' => 'Ôàéë ñ èìåíåì %s óæå ñóùåñòâóåò!', - 'dox_filename' => 'Íàçâàíèå', - 'dox_no_files' => 'Ôàéëîâ íå íàéäåíî.', - 'dox_nothing_received' => 'Íè÷åãî íå ïîëó÷åíî! Âîçìîæíî ôàéë êîòîðûé âû ïûòàëèñü çàãðèçèòü - ñëèøêîì áîëüøîé.', - 'dox_size' => 'Ðàçìåð', - 'dox_time' => 'Âðåìÿ', - 'dox_title' => 'Ôàéëî-ïîìîéêà', - 'dox_upload' => 'Çàãðóçèòü', - 'dox_upload_file' => 'Çàãðóçèòü ôàéë', - 'dox_uploader' => 'Çàãðóçèë', - 'dox_warning' => 'Âíèìàíèå', - 'edit' => 'Ðåäàêòèðîâàòü', - 'edited' => 'Óñïåøíîå ðåäàêòèðîâàíèå!', - 'error' => 'Îøèáêà', - 'faq' => '×àÂî', - 'file_list' => 'Ñïèñîê ôàéëîâ', - 'files' => 'Ôàéëîâ', - 'files_l' => 'ôàéëîâ', - 'filled' => 'Âûïîëíåí?', - 'filled_by' => 'Âûïîëíèë', - 'formats' => 'Ôîðìàòû ôàéëîâ', - 'forum' => 'Ôîðóì', - 'friend' => 'äðóãà', - 'friends_list' => 'Ñïèñîê äðóçåé', - 'from' => 'èç', - 'from_system' => 'Ñèñòåìíîå', - 'gender' => 'Ïîë', - 'getdox_file_not_found' => 'Ôàéë íå íàéäåí', - 'getdox_no_file' => 'Íåò èìåíè ôàéëà', - 'go' => 'Âïåðåä', - 'go_go_go' => 'Ïîåõàëè', - 'go_to' => 'Ïåðåéòè', - 'golden' => 'Çîëîòîé òîððåíò', - 'silver' => 'Ñåðåáðÿíûé òîððåíò', - 'golden_descr' => 'Çîëîòîé òîððåíò (ñ÷èòàåòñÿ òîëüêî ðàçäà÷à, çàêà÷êà íå ó÷èòûâàåòñÿ)', - 'golden_torrents' => 'Çîëîòûå òîððåíòû', - 'guests_online' => 'Âñåãî ãîñòåé', - 'hide_filled' => 'Ñïðÿòàòü âûïîëíåííûå', - 'hits' => 'Âçÿò', - 'homepage' => 'Ãëàâíàÿ', - 'idle' => 'Áåçäåéñòâèå', - 'image' => 'Êàðòèíêà', - 'images' => 'Ñêðèíøîòû', - 'img_poster' => 'Ïîñòåð', - 'in' => 'â', - 'inbox' => 'Âõîäÿùèå', - 'including_dead' => 'Âêëþ÷àÿ ìåðòâûå', - 'info_hash' => 'Õýø ðåëèçà', - 'invalid_id' => 'Íåâåðíûé èäåíòèôèêàòîð.', - 'invalid_ip' => 'Íåâåðíûé IP àäðåñ.', - 'invite' => 'Ïðèãëàñèòü', - 'is' => 'â', - 'last_registered_user' => 'Ïîñëåäíèé çàðåãèñòðèðîâàííûé ïîëüçîâàòåëü', - 'last_seen' => 'Ïîñëåäíèé ðàç áûë â ñåòè ', - 'leechers' => 'Ëè÷', - 'leechers_l' => 'êà÷àþùèõ', - 'leeching' => 'Êà÷àåò', - 'loading' => 'Çàãðóçêà...', - 'log' => 'Æóðíàë', - 'login' => 'Âõîä', - 'logout' => 'Âûõîä', - 'lower_class' => 'Âû ðàáîòàåòå ïîä áîëåå íèçêèì êëàññîì. Íàæìèòå ñþäà äëÿ âîçâðàòà.', - 'mail_read' => 'Ïðî÷èòàííîå', - 'mail_read_desc' => 'Ïðî÷èòàííûå ñîîáùåíèÿ', - 'mail_unread_desc' => 'Íåïðî÷èòàííûå ñîîáùåíèÿ', - 'main_menu' => 'Ãëàâíîå Ìåíþ', - 'make_request' => 'Ñäåëàòü çàïðîñ', - 'mark' => 'Âûäåëèòü', - 'mark_all' => 'Âûäåëèòü âñå', - 'mark_as_read' => 'Îòìåòèòü âûäåëåííûå ñîîáùåíèÿ êàê ïðî÷èòàííûå', - 'mark_read' => 'Ïðî÷èòàòü', - 'max_avatar_size' => 'Ðàçìåðû àâàòàðêè äîëæíû áûòü íå áîëåå %dx%d ïèêñåëåé.', - 'max_file_size' => 'Ìàêñèìàëüíûé ðàçìåð ôàéëà', - 'messages' => 'Ñîîáùåíèÿ', - 'missing_form_data' => 'Çàïîëíèòå âñå ïîëÿ ôîðìû.', - 'monitor_comments' => 'Ñëåäèòü çà êîììåíòàðèÿìè', - 'monitor_comments_disable' => 'Îòêëþ÷èòü ñëåæåíèå', - 'my' => 'Ïàíåëü óïðàâëåíèÿ', - 'my_bonus' => 'Ìîé áîíóñ', - 'my_torrents' => 'Ìîè òîððåíòû', - 'name' => 'Íàçâàíèå', - 'need_seeds' => 'Ðåëèçû, êîòîðûì íóæíû ðàçäàþùèå', - 'neighbours' => 'Ñîñåäè', - 'never' => 'íèêîãäà', - 'new_offers' => 'Íîâûå ïðåäëîæåíèÿ', - 'new_pm' => '(%d íîâûõ)', - 'new_pms' => 'Ó âàñ %d íîâîå(ûõ) ñîîáùåíèå(èé)!', - 'new_torrents' => 'Íîâûå òîððåíòû', - 'news' => 'Íîâîñòè', - 'next' => 'Âïåðåä', - 'no' => 'Íåò', - 'no_blocked' => 'Ó âàñ íåò âðàãîâ', - 'no_choose' => 'Íå âûáðàíî', - 'no_comments' => 'Íåò êîììåíòàðèåâ', - 'no_fields_blank' => 'Íå îñòàâëÿéòå ïóñòûõ ïîëåé.', - 'no_friends' => 'Ó âàñ íåò äðóçåé', - 'no_messages' => 'Íåò ñîîáùåíèé', - 'no_offers' => 'Íåò ïðåäëîæåíèé', - 'no_online_users' => 'Íå áûëî àêòèâíûõ ïîëüçîâàòåëåé çà ïîñëåäíèå 15 ìèíóò.', - 'no_polls' => 'Íåò îïðîñîâ', - 'no_news' => 'Íåò íîâîñòåé', - 'no_seeds' => 'Áåç ñèäîâ', - 'no_subject' => 'Áåç òåìû', - 'no_torrent_with_such_id' => 'Íåò òîððåíòà ñ òàêèì ID.', - 'no_torrents' => 'Íåò òîððåíòîâ', - 'no_votes' => 'Íåò ãîëîñîâ', - 'none_voted' => 'íåò ãîëîñîâ', - 'none_yet' => 'Íèêòî', - 'not_enough_votes' => 'Åùå íåò (íóæíî õîòÿ-áû %d ãîëîñîâ. Ñîáðàíî: ', - 'nothing_found' => 'Íè÷åãî íå íàéäåíî', - 'now' => 'ñåé÷àñ', - 'offers' => 'Ïðåäëîæåíèÿ', - 'official' => 'Îôèöèàëüíûé', - 'offline' => 'îôôëàéíå', - 'old_polls' => 'Ïðîøëûå îïðîñû', - 'online' => 'îíëàéíå', - 'online_users' => 'Âñåãî Îíëàéí', - 'only_dead' => 'Òîëüêî ìåðòâûå', - 'only_votes' => 'òîëüêî %d ãîëîñîâ', - 'open_list' => 'Ïîñìîòðåòü ñïèñîê', - 'optional' => 'Íå îáÿçàòåëüíî.', - 'outbox' => 'Îòïðàâëåííûå', - 'password' => 'Ïàðîëü', - 'password_mismatch' => 'Ïàðîëè íå ñîâïàäàþò.', - 'path' => 'Ïóòü', - 'peers_l' => 'ïèðîâ', - 'personal_lists' => 'Ìîè äðóçüÿ', - 'pm' => 'ËÑ', - 'poll' => 'Îïðîñ', - 'port_open' => 'NAT', - 'prev' => 'Íàçàä', - 'profile' => 'Ïðîôèëü', - 'rating' => 'Îöåíêà', - 'ratio' => 'Ðåéòèíã', - 'receiver' => 'Ïîëó÷àòåëü', - 'repeat_password' => 'Ïîâòîð ïàðîëÿ', - 'request' => 'Çàïðîñ', - 'requester' => 'Çàïðîñèë', - 'requests' => 'Çàïðîñû', - 'requests_section' => 'Ñåêöèÿ çàïðîñîâ', - 'respect' => 'Ðåñïåêò', - 'rules' => 'Ïðàâèëà', - 'said_thanks' => 'Ñêàçàëè ñïàñèáî', - 'search' => 'Ïîèñê', - 'search_btn' => 'Èñêàòü', - 'search_requests' => 'Èñêàòü çàïðîñû', - 'search_results_for' => 'Ðåçóëüòàòû ïîèñêà äëÿ', - 'seeder' => 'Ðàçäàþùèé', - 'seeder_last_seen' => 'Ïîñëåäíèé ðàç áûë çäåñü', - 'seeders_l' => 'ðàçäàþùèõ', - 'seeding' => 'Ñèäèðóåò', - 'seeds' => 'Ñèä', - 'sender' => 'Îòïðàâèòåëü', - 'server_load' => 'Íàãðóçêà íà ñåðâåð', - 'show_all' => 'Ïîêàçàòü âñå', - 'show_data' => 'Ïîêàçàòü äàííûå', - 'show_my_requests' => 'Ïîñìîòðåòü ìîè çàïðîñû', - 'signup' => 'Ðåãèñòðàöèÿ', - 'signup_successful' => 'Óñïåøíàÿ ðåãèñòðàöèÿ', - 'size' => 'Ðàçìåð', - 'snatched' => 'Ñêà÷àí', - 'staff' => 'Àäìèíèñòðàöèÿ', - 'statistic' => 'Ñòàòèñòèêà', - 'subject' => 'Òåìà', - 'subscribe_last_comment' => 'Ïîñëåäíåå ñîîáùåíèå', - 'subscribe_list' => 'Ëèñò ïîäïèñêè', - 'subscribe_no' => 'Íåò íîâûõ êîììåòàðèåâ â òåìàõ, íà êîòîðûå âû ïîäïèñàíû.', - 'success' => 'Óñïåøíî', - 'successful_upload' => 'Óñïåøíàÿ çàëèâêà!', - 'sure_mark_delete' => 'Âû óâåðåíû, ÷òî õîòèòå óäàëèòü âûáðàííûå ñîîáùåíèÿ?', - 'sure_mark_read' => 'Âû óâåðåíû, ÷òî õîòèòå ïîìåòèòü âûáðàííûå ñîîáùåíèÿ êàê ïðî÷èòàííûå?', - 'sysop_account_activated' => 'Âàø àêêàóíò àêòèâèðîâàí! Âû àâòîìàòè÷åñêè âîøëè. Òåïåðü âû ìîæåòå ïåðåéòè íà ãëàâíóþ è íà÷àòü èñïîëüçîâàòü âàø àêêàóíò.', - 'sysop_activated' => 'Àêêàóíò àäìèíèñòðàòîðà óñïåøíî àêòèâèðîâàí', - 'taken_from_torrent' => 'Áåðåòñÿ èç òîððåíòà. Ïîæàëóéñòà, èñïîëüçóéòå ïîíÿòíûå èìåíà.', - 'thanks' => 'Ñïàñèáî', - 'thanks_added' => 'Ñïàñèáî äîáàâëåíî!', - 'thanks_for_registering' => 'Ñïàñèáî ÷òî çàðåãèñòðèðîâàëèñü íà %s! Òåïåðü âû ìîæåòå âîéòè â ñèñòåìó.', - 'this_account_activated' => 'Ýòîò àêêàóíò óæå àêòèâèðîâàí. Âû ìîæåòå âîéòè ñ íèì.', - 'times' => 'ðàç', - 'topten' => 'Òîï 10', - 'torrent' => 'Òîððåíò', - 'torrent_clients' => 'Òîððåíò Êëèåíòû', - 'torrent_details' => 'Äåòàëè òîððåíòà', - 'torrent_file' => 'Torrent ôàéë', - 'torrent_info' => 'Äàííûå î òîððåíòå', - 'torrent_name' => 'Íàçâàíèå', - 'torrent_not_selected' => 'Òîððåíò íå âûáðàí!', - 'torrents' => 'Òîððåíòû', - 'total' => 'Âñåãî', - 'tracker_dead_torrents' => 'Ìåðòâûõ Òîððåíòîâ', - 'tracker_leechers' => 'Êà÷àþùèõ', - 'tracker_peers' => 'Àêòèâíûõ ïîäêëþ÷åíèé', - 'tracker_seed_peer' => 'Ðàçäàþùèõ/Êà÷àþùèõ (%)', - 'tracker_seeders' => 'Ðàçäàþùèõ', - 'tracker_torrents' => 'Òîððåíòîâ', - 'external_seeders' => 'Âíåøíèõ Ðàçäàþùèõ', - 'external_leechers' => 'Âíåøíèõ Êà÷àþùèõ', - 'ttl' => 'TTL', - 'type' => 'Òèï', - 'ul_speed' => 'Ðàçäà÷à', - 'unable_to_create_account' => 'Íåâîçìîæíî ñîçäàòü àêêàóíò. Âîçìîæíî èìÿ ïîëüçîâàòåëÿ óæå çàíÿòî.', - 'unable_to_read_torrent' => 'Íåâîçìîæíî ïðî÷èòàòü òîððåíò ôàéë.', - 'upload' => 'Çàãðóçèòü', - 'upload_torrent' => 'Çàãðóçèòü òîððåíò', - 'uploaded' => 'Ðàçäàë', - 'uploadeder' => 'Ðàçäàåò', - 'user' => 'Þçåð', - 'user_menu' => 'Ïåðñîíàëüíîå Ìåíþ', - 'username' => 'Ëîãèí', - 'users' => 'Ïîëüçîâàòåëè', - 'users_disabled' => 'Îòêëþ÷åííûõ', - 'users_registered' => 'Çàðåãèñòðèðîâàííûõ', - 'users_unconfirmed' => 'Íåïîäòâåðæäåííûõ', - 'users_uploaders' => 'Àïëîàäåðîâ', - 'users_vips' => 'VIP', - 'users_warned' => 'Ïðåäóïðåæä¸ííûõ', - 'views' => 'Ïðîñìîòðîâ', - 'visible' => 'Âèäèìûé', - 'vote' => 'Ïðîãîëîñîâàòü', - 'vote_1' => 'Óæàñíî!', - 'vote_2' => 'Ïëîõî', - 'vote_3' => 'Íîðìàëüíî', - 'vote_4' => 'Õîðîøî', - 'vote_5' => 'Îòëè÷íî!', - 'voted' => 'Ãîëîñ äîáàâëåí!', - 'votes' => 'Ãîëîñîâ', - 'wait' => 'Îæèäàíèå', - 'welcome_back' => 'Ïðèâåò, ', - 'whos_online' => 'Êòî Îíëàéí', - 'with' => 'ñ', - 'wrote_at' => 'Ïèñàë â', - 'yes' => 'Äà', - 'you_can_start_seeding' => 'Âû ìîæåòå íà÷èíàòü ðàçäà÷ó. Ó÷òèòå ÷òî òîððåíò íå áóäåò âèäåí ïîêà âû íå íà÷íåòå ðàçäàâàòü!', - 'you_have_no_bookmarks' => 'Ó âàñ íåò çàêëàäîê!', - 'you_have_voted_for_this_torrent' => 'âû îöåíèëè ýòîò òîððåíò êàê', - 'you_want_to_delete_x_click_here' => 'Âû õîòèòå óäàëèòü %s. Íàæìèòå ñþäà åñëè âû óâåðåíû.', - 'your_ip' => 'Âàø IP', - - 'stats_female' => 'Äåâóøêè', - 'stats_male' => 'Ïàðíè', - 'stats_maxusers' => 'Ìåñò íà òðåêåðå', - - 'peertable_port_open' => 'Ïîðò îòêðûò. Ýòîò ïèð ìîæåò ïîäêëþ÷àòñÿ ê ëþáîìó ïèðó.', - 'peertable_port_closed' => 'Ïîðò çàêðûò. Ðåêîìåíäîâàíî ïðîâåðèòü íàñòðîéêè Firwewall\'à.', - - 'details_poster' => 'Ïîñòåð', - 'details_screenshot' => 'Ñêðèíøîò', - 'details_anonymous' => 'Àíîíèì', - - 'ajax_loading' => 'Çàãðóçêà. Ïîæàëóéñòà, ïîäîæäèòå...', - - 'comments_list' => 'Ñïèñîê êîììåíòàðèåâ', - 'comments_add' => 'Äîáàâèòü êîììåíòàðèé', - - ); + $this->tlr = (array) require_once('lang_constants.php'); } public function offsetSet($offset, $value) { + if ($this->offsetExists($offset)) + die('Changing already existing values is prohibitied'); $this->tlr[$offset] = $value; } public function offsetExists($offset) { @@ -443,6 +22,6 @@ public function offsetGet($offset) { } } -$tracker_lang = new lang; +$tracker_lang = new Language; ?> \ No newline at end of file diff --git a/themes/Gray/stdhead.php b/themes/Gray/stdhead.php index ed9e51e..437ac68 100644 --- a/themes/Gray/stdhead.php +++ b/themes/Gray/stdhead.php @@ -75,7 +75,7 @@ function initSpoilers(context) {  •  -Æóðíàë +  •  @@ -253,13 +253,13 @@ function refrClock() $userbar = "
    \"".$tracker_lang['avatar']."\"

    - ".$tracker_lang['ratio'].": $ratio
    - ".$tracker_lang['uploaded'].": $uped
    - ".$tracker_lang['downloaded'].": $downed
    - Áîíóñ: $CURUSER[bonus]
    - ".$tracker_lang['pm'].": $message_in $message_out
    - ".$tracker_lang['torrents'].": \"".$tracker_lang['seeding']."\" $activeseed \"".$tracker_lang['leeching']."\" $activeleech
    - ".$tracker_lang['clock'].": ".$tracker_lang['loading']."... + {$tracker_lang['ratio']}: {$ratio}
    + {$tracker_lang['uploaded']}: {$uped}
    + {$tracker_lang['downloaded']}: {$downed}
    + {$tracker_lang['bonus']}: $CURUSER[bonus]
    + {$tracker_lang['pm']}: {$message_in} {$message_out}
    + {$tracker_lang['torrents']}: \"{$tracker_lang['seeding']}\" {$activeseed} \"{$tracker_lang['leeching']}\" {$activeleech}
    + {$tracker_lang['clock']}: {$tracker_lang['loading']}... $inboxpic $messages ($unread íîâûõ)"); -if ($outmessages) -print("  Îòïðàâëåíûå $outmessages"); -else -print("  Îòïðàâëåíûå 0"); -} -else -{ -print("Ïîëó÷åííûå 0"); -if ($outmessages) -print("  Îòïðàâëåíûå $outmessages"); -else -print("  Îòïðàâëåíûå 0"); +if ($messages) { + print("$inboxpic $messages ($unread íîâûõ)"); + if ($outmessages) + print("  Îòïðàâëåíûå $outmessages"); + else + print("  Îòïðàâëåíûå 0"); +} else { + print("Ïîëó÷åííûå 0"); + if ($outmessages) + print("  Îòïðàâëåíûå $outmessages"); + else + print("  Îòïðàâëåíûå 0"); } -print(" Äðóçüÿ"); -print(" RSS"); +print(" Äðóçüÿ"); +print(" RSS"); ?>
    \n"); - print("".$tracker_lang['lower_class'].""); + print("{$tracker_lang['lower_class']}"); print("

    \n"); } From efbd942c503214bf43b2cfd46fdef8da8e44d5ce Mon Sep 17 00:00:00 2001 From: Yuna Scatari Date: Thu, 13 Mar 2014 12:42:17 +0200 Subject: [PATCH 051/106] [BUGFIX] details.php magnet announce URLs --- details.php | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/details.php b/details.php index ec8bc89..d60a43f 100644 --- a/details.php +++ b/details.php @@ -225,9 +225,19 @@ function dltable($name, $arr, $torrent) { stdhead($tracker_lang['torrent_details']." \"" . $row["name"] . "\""); if ($CURUSER["id"] == $row["owner"] || get_user_class() >= UC_MODERATOR) - $owned = 1; + $owned = 1; else - $owned = 0; + $owned = 0; + + if ($row['multitracker'] == 'yes') { + $announces_a = $announces_urls = array(); + $announces_r = sql_query('SELECT url, seeders, leechers, last_update, state, error FROM torrents_scrape WHERE tid = '.$id); + while ($announce = mysql_fetch_array($announces_r)) { + $announces_a[] = $announce; + $announces_urls[] = $announce['url']; + } + unset($announce); + } $spacer = "       "; $s = ""; @@ -245,7 +255,7 @@ function dltable($name, $arr, $torrent) { $right_links[] = "\"{$tracker_lang['download']}\""; if ($row['multitracker'] == 'yes') - $right_links[] = "\"{$tracker_lang['magnet']}\""; + $right_links[] = "\"{$tracker_lang['magnet']}\""; $right_links[] = "\"{$tracker_lang['bookmark']}\""; if (count($right_links)) @@ -435,8 +445,7 @@ function seed_sort($a, $b) { } if ($row["multitracker"] == 'yes') { - $announces_r = sql_query('SELECT url, seeders, leechers, last_update, state, error FROM torrents_scrape WHERE tid = '.$id); - while ($announce = mysql_fetch_array($announces_r)) { + foreach ($announces_a as $announce) { if ($announce['state'] == 'ok') $anns[] = '
  • '.$announce['url'].' - ðàçäàþùèå: '.$announce['seeders'].', êà÷àþùèå: '.$announce['leechers'].''; else From 1d03802a90b8859746c7ca91b74d1a480fe5d662 Mon Sep 17 00:00:00 2001 From: Yuna Scatari Date: Thu, 13 Mar 2014 13:08:56 +0200 Subject: [PATCH 052/106] [ENHANCEMENT] Even more code cleanup + title & bugfix --- details.php | 101 +++++++++++++++++++++++++--------------------------- 1 file changed, 48 insertions(+), 53 deletions(-) diff --git a/details.php b/details.php index d60a43f..7776df7 100644 --- a/details.php +++ b/details.php @@ -134,17 +134,17 @@ function dltable($name, $arr, $torrent) { return $s; $s .= "\n"; $s .= "\n"; - $s .= "" . - "". - "". - "". - "" . - "" . - "" . - "" . - "" . - "" . - "\n"; + $s .= "" . + "". + "". + "". + "" . + "" . + "" . + "" . + "" . + "" . + "\n"; $now = time(); //$moderator = (isset($CURUSER) && get_user_class() >= UC_MODERATOR); // Redundant $mod = (get_user_class() >= UC_MODERATOR); @@ -222,7 +222,7 @@ function dltable($name, $arr, $torrent) { } if (!isset($_GET["page"])) { - stdhead($tracker_lang['torrent_details']." \"" . $row["name"] . "\""); + stdhead($tracker_lang['torrent_details']." \"".htmlspecialchars_decode($row["name"])."\""); if ($CURUSER["id"] == $row["owner"] || get_user_class() >= UC_MODERATOR) $owned = 1; @@ -243,7 +243,7 @@ function dltable($name, $arr, $torrent) { $s = ""; print("
    ".$tracker_lang['user']."".$tracker_lang['port_open']."".$tracker_lang['uploaded']."".$tracker_lang['ul_speed']."".$tracker_lang['downloaded']."".$tracker_lang['dl_speed']."".$tracker_lang['ratio']."".$tracker_lang['completed']."".$tracker_lang['connected']."".$tracker_lang['idle']."".$tracker_lang['client']."
    {$tracker_lang['user']}{$tracker_lang['port_open']}{$tracker_lang['uploaded']}{$tracker_lang['ul_speed']}{$tracker_lang['downloaded']}{$tracker_lang['dl_speed']}{$tracker_lang['ratio']}{$tracker_lang['completed']}{$tracker_lang['connected']}{$tracker_lang['idle']}{$tracker_lang['client']}
    \n"); - print(""); + print(""); $url = "edit.php?id=" . $row["id"]; if (isset($_GET["returnto"])) { $addthis = "&returnto=" . urlencode($_GET["returnto"]); @@ -261,17 +261,17 @@ function dltable($name, $arr, $torrent) { if (count($right_links)) $s .= ''.implode(' ', $right_links).''; - $s .= "" . $row["name"] . ""; + $s .= "{$row["name"]}"; if ($owned) - $s .= " $spacer<$editlink>[".$tracker_lang['edit']."]"; + $s .= " $spacer<$editlink>[{$tracker_lang['edit']}]"; switch ($row['free']) { case 'yes': - $freepic = "\"".$tracker_lang['golden']."\" "; + $freepic = "\"{$tracker_lang['golden']}\" "; break; case 'silver': - $freepic = "\"".$tracker_lang['silver']."\" "; + $freepic = "\"{$tracker_lang['silver']}\" "; break; case 'no': $freepic = ''; @@ -304,17 +304,17 @@ function hex_esc($matches) { tr($tracker_lang['images'], implode('  ', $images), 1); if ($row["visible"] == "no") - tr($tracker_lang['visible'], "".$tracker_lang['no']." (".$tracker_lang['dead'].")", 1); + tr($tracker_lang['visible'], "{$tracker_lang['no']} ({$tracker_lang['dead']})", 1); if ($moderator) - tr($tracker_lang['banned'], ($row["banned"] == 'no' ? $tracker_lang['no'] : $tracker_lang['yes']) ); + tr($tracker_lang['banned'], ($row["banned"] == 'no' ? $tracker_lang['no'] : $tracker_lang['yes']) ); if (isset($row["cat_name"])) - tr($tracker_lang['type'], $row["cat_name"]); + tr($tracker_lang['type'], $row["cat_name"]); else - tr($tracker_lang['type'], "(".$tracker_lang['no_choose'].")"); + tr($tracker_lang['type'], "({$tracker_lang['no_choose']})"); - tr($tracker_lang['seeder'], $tracker_lang['seeder_last_seen']." ".mkprettytime($row["lastseed"]) . " ".$tracker_lang['ago']); - tr($tracker_lang['size'],mksize($row["size"]) . " (" . number_format($row["size"]) . " ".$tracker_lang['bytes'].")"); + tr($tracker_lang['seeder'], "{$tracker_lang['seeder_last_seen']} " . mkprettytime($row['lastseed']) . " {$tracker_lang['ago']}"); + tr($tracker_lang['size'], mksize($row['size']) . " (" . number_format($row['size']) . " {$tracker_lang['bytes']})"); $s = ""; $s .= "
    :: ".$tracker_lang['torrent_details']."
    :: {$tracker_lang['torrent_details']}
    \n"; while ($subrow = mysql_fetch_array($subres)) { - $s .= "\n"; + $s .= "\n"; } $s .= "
    "; @@ -333,34 +333,30 @@ function hex_esc($matches) { if (!isset($rpic)) $s .= "invalid?"; else - $s .= "$rpic (" . $row["rating"] . " ".$tracker_lang['from']." 5 ".$tracker_lang['with']." " . $row["numratings"] . " ".$tracker_lang['votes'].")"; + $s .= "$rpic ({$row["rating"]} {$tracker_lang['from']} 5 {$tracker_lang['with']} {$row["numratings"]} {$tracker_lang['votes']})"; } $s .= "\n"; $s .= "$spacer"; if (!isset($CURUSER)) - $s .= "(Log in to rate it)"; - else { - $ratings = array( - 5 => $tracker_lang['vote_5'], - 4 => $tracker_lang['vote_4'], - 3 => $tracker_lang['vote_3'], - 2 => $tracker_lang['vote_2'], - 1 => $tracker_lang['vote_1'], - ); + $s .= "(Log in to rate it)"; else { + $ratings = array(5 => $tracker_lang['vote_5'], + 4 => $tracker_lang['vote_4'], + 3 => $tracker_lang['vote_3'], + 2 => $tracker_lang['vote_2'], + 1 => $tracker_lang['vote_1'],); if (!$owned || $moderator) { $xres = sql_query("SELECT rating, added FROM ratings WHERE torrent = $id AND user = " . $CURUSER["id"]); $xrow = mysql_fetch_array($xres); if ($xrow) - $s .= "(".$tracker_lang['you_have_voted_for_this_torrent']." \"" . $xrow["rating"] . " - " . $ratings[$xrow["rating"]] . "\")"; - else { + $s .= "({$tracker_lang['you_have_voted_for_this_torrent']} \"{$xrow["rating"]} - {$ratings[$xrow["rating"]]}\")"; else { $s .= "\n"; $s .= "\n"; - $s .= ""; + $s .= ""; $s .= "\n"; } } @@ -374,10 +370,10 @@ function hex_esc($matches) { tr($tracker_lang['snatched'], $row["times_completed"] . " ".$tracker_lang['times']); $keepget = ""; - $uprow = (isset($row["username"]) ? ("" . htmlspecialchars_uni($row["username"]) . "") : "{$tracker_lang['details_anonymous']}"); + $uprow = (isset($row["username"]) ? ("" . htmlspecialchars_uni($row["username"]) . "") : "{$tracker_lang['details_anonymous']}"); /* if ($owned) - $uprow .= " $spacer<$editlink>[".$tracker_lang['edit']."]"; + $uprow .= " $spacer<$editlink>[{$tracker_lang['edit']}]"; */ tr($tracker_lang['uploaded'], $uprow.' '.$tracker_lang['respect'].'  '.$tracker_lang['antirespect'].'', 1); @@ -393,8 +389,7 @@ function hex_esc($matches) { $subres = sql_query("SELECT * FROM files WHERE torrent = $id ORDER BY id"); $s.="
    {$tracker_lang['path']}{$tracker_lang['size']}
    " . $subrow["filename"] . - "" . mksize($subrow["size"]) . "
    {$subrow["filename"]}" . mksize($subrow["size"]) . "
    \n"; @@ -403,7 +398,7 @@ function hex_esc($matches) { } if (!isset($_GET["dllist"])) { - tr($tracker_lang['downloading']."
    [".$tracker_lang['open_list']."]", $row["seeders"] . " ".$tracker_lang['seeders_l'].", " . $row["leechers"] . " ".$tracker_lang['leechers_l']." = " . ($row["seeders"] + $row["leechers"]) . " ".$tracker_lang['peers_l'], 1); + tr($tracker_lang['downloading']."
    [{$tracker_lang['open_list']}]", $row["seeders"] . " {$tracker_lang['seeders_l']}, {$row["leechers"]} {$tracker_lang['leechers_l']} = " . ($row["seeders"] + $row["leechers"]) . " ".$tracker_lang['peers_l'], 1); } else { $downloaders = array(); $seeders = array(); @@ -440,8 +435,8 @@ function seed_sort($a, $b) { usort($seeders, "seed_sort"); usort($downloaders, "leech_sort"); - tr("".$tracker_lang['details_seeding']."
    [".$tracker_lang['close_list']."]", dltable($tracker_lang['details_seeding'], $seeders, $row), 1); - tr("".$tracker_lang['details_leeching']."
    [".$tracker_lang['close_list']."]", dltable($tracker_lang['details_leeching'], $downloaders, $row), 1); + tr("{$tracker_lang['details_seeding']}
    [{$tracker_lang['close_list']}]", dltable($tracker_lang['details_seeding'], $seeders, $row), 1); + tr("{$tracker_lang['details_leeching']}
    [{$tracker_lang['close_list']}]", dltable($tracker_lang['details_leeching'], $downloaders, $row), 1); } if ($row["multitracker"] == 'yes') { @@ -489,7 +484,7 @@ function seed_sort($a, $b) { //end //$highlight = $CURUSER["id"] == $arr["id"] ? " bgcolor=#00A527" : "";; $snatched_small[] = "".get_user_class_color($arr["class"], $arr["username"])." ($ratio)"; - $snatched_full .= "".get_user_class_color($arr["class"], $arr["username"])."".get_user_icons($arr)."$uploaded Îáùåãî
    $uploaded2 Òîððåíò
    $downloaded Îáùåãî
    $downloaded2 Òîððåíò
    $ratio Îáùåãî
    $ratio2 Òîððåíò
    " . $arr["startdat"] . "
    " . $arr["completedat"] . "
    " . $arr["last_action"] . "" . ($arr["seeder"] == "yes" ? "Äà" : "Íåò") . + $snatched_full .= "".get_user_class_color($arr["class"], $arr["username"])."".get_user_icons($arr)."$uploaded Îáùåãî
    $uploaded2 Òîððåíò
    $downloaded Îáùåãî
    $downloaded2 Òîððåíò
    $ratio Îáùåãî
    $ratio2 Òîððåíò
    {$arr["startdat"]}
    {$arr["completedat"]}
    {$arr["last_action"]}" . ($arr["seeder"] == "yes" ? "Äà" : "Íåò") . "\n"; } $snatched_full .= "\n"; @@ -502,7 +497,7 @@ function seed_sort($a, $b) { tr("Ñêà÷àâøèå
    [{$tracker_lang['close_list']}]", $snatched_full,1); } -tr($tracker_lang['torrent_info'], "".$tracker_lang['show_data']."", 1); +tr($tracker_lang['torrent_info'], "{$tracker_lang['show_data']}", 1); $torrentid = (int) $_GET["id"]; @@ -524,7 +519,7 @@ function seed_sort($a, $b) { $userid = $thanked_row["userid"]; $username = $thanked_row["username"]; $class = $thanked_row["class"]; - $thanksby[] = "".get_user_class_color($class, $username).""; + $thanksby[] = "".get_user_class_color($class, $username).""; } if ($thanksby) $thanksby = implode(', ', $thanksby); @@ -532,8 +527,8 @@ function seed_sort($a, $b) { if ($row["owner"] == $CURUSER["id"]) $can_not_thanks = true; $thanksby = "
    - -".$thanksby." + +{$thanksby}
    "; ?> @@ -562,8 +557,8 @@ function send() { print("

    \n"); } else { - stdhead($tracker_lang['comments_for']." \"" . $row["name"] . "\""); - print("

    ".$tracker_lang['comments_for']." " . $row["name"] . "

    \n"); + stdhead($tracker_lang['comments_for']." \"".htmlspecialchars_decode($row["name"])."\""); + print("

    {$tracker_lang['comments_for']} {$row["name"]}

    \n"); } print("

    \n"); @@ -587,7 +582,7 @@ function send() { print("  :: Áåç êîììåíòàðèåâ"); print(""); //print("Âàøå èìÿ: "); - //print("".$CURUSER['username']."

    "); + //print("{$CURUSER['username']}

    "); print("

    "); print("
    "); textbbcode("comment","text",""); @@ -628,7 +623,7 @@ function send() { print("  :: Äîáàâèòü êîììåíòàðèé ê òîððåíòó"); print(""); //print("Âàøå èìÿ: "); - //print("".$CURUSER['username']."

    "); + //print("{$CURUSER['username']}

    "); print(""); print("

    \s*$/g,rb={option:[1,""],legend:[1,"
    ","
    "],area:[1,"",""],param:[1,"",""],thead:[1,"
    "); print("
    ". textbbcode("comment","text","", 1) ."
    "); From 8df8d5657ede2f5054bf9d3d5f95d60bf344c164 Mon Sep 17 00:00:00 2001 From: Yuna Scatari Date: Thu, 13 Mar 2014 16:58:17 +0200 Subject: [PATCH 053/106] [TYPO] Fix typo --- languages/lang_russian/lang_main.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/languages/lang_russian/lang_main.php b/languages/lang_russian/lang_main.php index 2084d4c..2c3dc9b 100644 --- a/languages/lang_russian/lang_main.php +++ b/languages/lang_russian/lang_main.php @@ -8,7 +8,7 @@ public function __construct() { public function offsetSet($offset, $value) { if ($this->offsetExists($offset)) - die('Changing already existing values is prohibitied'); + die('Changing already existing values is prohibited'); $this->tlr[$offset] = $value; } public function offsetExists($offset) { From fdd7f865cf71e3e6e2b5d489c442ffa2c9ccf753 Mon Sep 17 00:00:00 2001 From: Yuna Scatari Date: Thu, 13 Mar 2014 17:55:04 +0200 Subject: [PATCH 054/106] [ENHANCEMENT] Language system update + blocks working with $tracker_lang --- blocks/block-online.php | 4 +- blocks/block-search.php | 2 + details.php | 23 +- languages/lang_russian/lang_constants.php | 847 +++++++++++----------- themes/TBDev/stdhead.php | 6 +- 5 files changed, 442 insertions(+), 440 deletions(-) diff --git a/blocks/block-online.php b/blocks/block-online.php index 88e556a..535b4d4 100644 --- a/blocks/block-online.php +++ b/blocks/block-online.php @@ -4,7 +4,9 @@ exit; } -global $CURUSER, $use_sessions; +global $CURUSER, $use_sessions, $tracker_lang; + +$blocktitle = $tracker_lang['whos_online']; $a = mysql_fetch_array(sql_query("SELECT id, username FROM users WHERE status='confirmed' ORDER BY id DESC LIMIT 1")); diff --git a/blocks/block-search.php b/blocks/block-search.php index 041c957..4ddcafa 100644 --- a/blocks/block-search.php +++ b/blocks/block-search.php @@ -6,6 +6,8 @@ global $tracker_lang; +$blocktitle = $tracker_lang['search']; + $content = ' - - > + > > - - + + > - > + > - > + > > - > + > - > + > > - + - + @@ -187,9 +187,9 @@ function get_user_icons($arr, $big = false) ?> - + - + > - + - + > - + - + @@ -412,7 +412,7 @@ function haswildcard($text){ $n = substr($mask, 1, strlen($mask) - 1); if (!is_numeric($n) or $n < 0 or $n > 32) { - stdmsg($tracker_lang['error'], "Íåâåðíàÿ ìàêñà ïîäñåòè."); + stdmsg($tracker_lang['error'], "Íåâåðíàÿ ìàñêà ïîäñåòè."); stdfoot(); die(); } @@ -421,7 +421,7 @@ function haswildcard($text){ } elseif (!preg_match($regex, $mask)) { - stdmsg($tracker_lang['error'], "Íåâåðíàÿ ìàêñà ïîäñåòè."); + stdmsg($tracker_lang['error'], "Íåâåðíàÿ ìàñêà ïîäñåòè."); stdfoot(); die(); } From bc4e9fba58d7c71445a7211bbd4f3d34fe49ac00 Mon Sep 17 00:00:00 2001 From: Yuna Scatari Date: Mon, 9 Jun 2014 09:21:44 +0300 Subject: [PATCH 081/106] [BUGFIX] Fix after security --- usersearch.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/usersearch.php b/usersearch.php index 0c4f2c8..e313ddb 100644 --- a/usersearch.php +++ b/usersearch.php @@ -213,9 +213,9 @@ function get_user_icons($arr, $big = false) ?> - + - + > @@ -598,24 +599,27 @@ function update_multi() { print("
     '.$tracker_lang['torrents'].' diff --git a/details.php b/details.php index 7776df7..67d2b1d 100644 --- a/details.php +++ b/details.php @@ -440,16 +440,19 @@ function seed_sort($a, $b) { } if ($row["multitracker"] == 'yes') { - foreach ($announces_a as $announce) { - if ($announce['state'] == 'ok') - $anns[] = '
  • '.$announce['url'].' - ðàçäàþùèå: '.$announce['seeders'].', êà÷àþùèå: '.$announce['leechers'].''; - else - $anns[] = '
  • '.$announce['url'].' - íå ðàáîòàåò, îøèáêà: '.$announce['error'].''; - } - if (strtotime($row['last_mt_update']) < (TIMENOW - 3600) && $CURUSER) - $update_link = '
    Äàííûå ìîãëè óñòàðåòü. Îáíîâèòü ìóëüòèòðåêåð'; - $update_link .= '
    Ïîñëåäíåå îáíîâëåíèå áûëî '.get_et(strtotime($row['last_mt_update'])).' íàçàä'; - tr("Ìóëüòèòðåêåð", '
      '.implode($anns).'
    '.$update_link, 1); + if (count($announces_a)) { + foreach ($announces_a as $announce) { + if ($announce['state'] == 'ok') + $anns[] = '
  • ' . $announce['url'] . ' - ðàçäàþùèå: ' . $announce['seeders'] . ', êà÷àþùèå: ' . $announce['leechers'] . ''; + else + $anns[] = '
  • ' . $announce['url'] . ' - íå ðàáîòàåò, îøèáêà: ' . $announce['error'] . ''; + } + if (strtotime($row['last_mt_update']) < (TIMENOW - 3600) && $CURUSER) + $update_link = '
    Äàííûå ìîãëè óñòàðåòü. ' . $tracker_lang['details_update_multitracker'] . ''; + $update_link .= '
    ' . $tracker_lang['details_update_last_mt_update'] . ' ' . get_et(strtotime($row['last_mt_update'])) . ' ' . $tracker_lang['ago']; + tr($tracker_lang['details_multitracker'], '
      ' . implode($anns) . '
    ' . $update_link, 1); + } else + tr($tracker_lang['details_multitracker'], 'WTF? Multitracker = YES, but no announces', 1); } if ($row["times_completed"] > 0) { diff --git a/languages/lang_russian/lang_constants.php b/languages/lang_russian/lang_constants.php index 45ffcb2..b961e14 100644 --- a/languages/lang_russian/lang_constants.php +++ b/languages/lang_russian/lang_constants.php @@ -1,428 +1,423 @@ 'windows-1251', - 'page_generated' => "Page generated in %f seconds with %d queries (%s%% PHP / %s%% MySQL)", - 'unknown' => 'Íåèçâåñòíî', - 'access_denied' => 'Äîñòóï çàïðåùåí.', - 'account_activated' => 'Àêêàóíò àêòèâèðîâàí', - 'active' => 'Àêòèâíûå', - 'add_comment' => 'Äîáàâèòü êîììåíòàðèé', - 'add_user' => 'Äîáàâèòü ïîëüçîâàòåëÿ', - 'added' => 'Äîáàâëåí', - 'age' => 'Âîçðàñò', - 'contactus' => 'Ñâÿçàòüñÿ ñ íàìè', - 'external_torrent' => 'Ìóëüòèòðåêåðíûé òîððåíò', - 'external_torrent_update' => 'Ìóëüòèòðåêåðíûé òîððåíò (îáíîâèòü èíôîðìàöèþ)', - 'new_torrents_stats' => 'Ðàçäàþò: %d, Êà÷àþò: %d', - 'help_seed' => 'Ñêà÷àë ñàì, äàé ñêà÷àòü äðóãîìó!!!', - 'no_need_seeding' => 'Íåò òîððåíòîâ, êîòîðûì íóæíû ðàçäàþùèå', - 'signup_users_limit' => 'Òåêóùèé ëèìèò ïîëüçîâàòåëåé (%d) äîñòèãíóò. Íåàêòèâíûå ïîëüçîâàòåëè ïîñòîÿííî óäàëÿþòñÿ, ïîæàëóéñòà âåðíèòåñü ïîïîçæå...', - 'signup_signup' => 'Ðåãèñòðàöèÿ', - 'signup_already_registered' => 'Âû óæå çàðåãèñòðèðîâàííûé ïîëüçîâàòåëü %s!', - 'signup_not_selected' => '---- Íå âûáðàíî ----', - 'signup_use_cookies' => 'Äëÿ ïðàâèëüíîé ðåãèñòðàöèè àêòèâèçèðóéòå cookies.', - 'signup_username' => 'Ïîëüçîâàòåëü', - 'signup_password' => 'Ïàðîëü', - 'signup_password_again' => 'Ïîâòîðèòå ïàðîëü', - 'signup_email' => 'Email', - 'signup_email_must_be_valid' => 'Email àäðåñ äîëæåí áûòü âåðíûì. Âàì ïðèéäåò ïîäòâåðæäàþùåå ïèñüìî, íà êîòîðîå âû äîëæíû îòðåàãèðîâàòü. Âàø email áîëüøå íå áóäåò èñïîëüçîâàí.', - 'signup_gender' => 'Ïîë', - 'signup_male' => 'Ïàðåíü', - 'signup_female' => 'Äåâóøêà', - 'signup_contact' => 'Êîíòàêòû', - 'signup_i_have_read_rules' => 'ß ïðî÷èòàë(à) ïðàâèëà', - 'signup_i_will_read_faq' => 'ß áóäó ÷èòàòü ×àÂî ïðåæäå ÷åì çàäàâàòü âîïðîñû', - 'signup_i_am_13_years_old_or_more' => 'Ìíå 13 ëåò èëè áîëüøå', - 'signup_disabled' => 'Èçâèíèòå, íî ðåãèñòðàöèÿ îòêëþ÷åíà àäìèíèñòðàöèåé', - 'dad' => 'Ïðÿìîé äîñòóï ê ýòîìó ôàéëó íå ðàçðåøåí', - 'news_added' => 'Äîáàâëåíà', - 'news_poster' => 'Àâòîð', - 'my_my' => 'Ïàíåëü óïðàâëåíèÿ', - 'my_updated' => 'Ïðîôèëü îáíîâë¸í!', - 'my_mail_sent' => 'Ïîäòâåðæäàþùåå ïèñüìî îòïðàâëåíî!', - 'my_mail_updated' => 'E-mail àäðåñ îáíîâëåí!', - 'my_torrents' => 'Ìîè òîððåíòû', - 'my_unset' => 'Íå âûáðàíî', - 'my_allow_pm_from' => 'Ðàçðåøèòü ËÑ îò', - 'my_parked' => 'Àêêàóíò ïðèïàðêîâàí', - 'my_you_can_park' => 'Âû ìîæåòå ïðèïàðêîâàòü âàø àêêàóíò âî èçáåæàíèÿ óäàëåíèÿ èç-çà íåàêòèâíîñòè, íàïðèìåð åñëè âû óåäåòå îòäûõàòü. Íî êîãäà âàø àêêàóíò ïðèïàðêîâàí, âàì áóäóò íåäîñòóïíû íåêîòîðûå ôóíêöèè, íàïðèìåð ïðîñìîòð èëè êà÷àíèå òîððåíòîâ', - 'my_delete_after_reply' => 'Óäàëÿòü ËÑ ïðè îòâåòå', - 'my_sentbox' => 'Ñîõðàíÿòü îòïðàâëåííûå ËÑ', - 'my_email_notify' => 'Óâåäîìëåíèå ïî email', - 'my_default_browse' => 'Êàòåãîðèè ïðîñìîòðà ïî óìîë÷àíèþ', - 'my_style' => 'Âèä èíòåðôåéñà', - 'my_country' => 'Ñòðàíà', - 'my_language' => 'ßçûê', - 'my_avatar_url' => 'Àäðåñ àâàòàðû', - 'my_gender' => 'Ïîë', - 'my_gender_male' => 'Ïàðåíü', - 'my_gender_female' => 'Äåâóøêà', - 'my_year' => 'Ãîä', - 'my_month' => 'Ìåñÿö', - 'my_day' => 'Äåíü', - 'my_months_january' => 'ßíâàðü', - 'my_months_february' => 'Ôåâðàëü', - 'my_months_march' => 'Ìàðò', - 'my_months_april' => 'Àïðåëü', - 'my_months_may' => 'Ìàé', - 'my_months_june' => 'Èþíü', - 'my_months_jule' => 'Èþëü', - 'my_months_august' => 'Àâãóñò', - 'my_months_september' => 'Ñåíòÿáðü', - 'my_months_october' => 'Îêòÿáðü', - 'my_months_november' => 'Íîÿáðü', - 'my_months_december' => 'Äåêàáðü', - 'my_birthdate' => 'Äàòà ðîæäåíèÿ', - 'my_contact' => 'Ñèñòåìà ìãíîâåííûõ ñîîáùåíèé', - 'my_contact_descr' => 'Åñëè âû õîòèòå, ÷òîáû äðóãèå ïîñåòèòåëè ìîãëè áûñòðî ñâÿçàòüñÿ ñ âàìè, óêàæèòå ñâîè äàííûå â ñëåäóþùèõ ñèñòåìàõ áûñòðûõ ñîîáùåíèé', - 'my_contact_icq' => 'Íîìåð ICQ', - 'my_contact_aim' => 'Èìÿ â AIM', - 'my_contact_msn' => 'Âàø MSN', - 'my_contact_yahoo' => 'Èìÿ â Yahoo!', - 'my_contact_skype' => 'Èìÿ â Skype', - 'my_contact_mirc' => 'Èìÿ â mIRC!', - 'my_website' => 'Ñàéò', - 'my_torrents_per_page' => 'Òîððåíòîâ íà ñòðàíèöó', - 'my_topics_per_page' => 'Òåì íà ñòðàíèöó', - 'my_messages_per_page' => 'Ñîîáùåíèé íà ñòðàíèöó', - 'my_show_avatars' => 'Ïîêàçûâàòü àâàòàðû', - 'my_info' => 'Èíôîðìàöèÿ', - 'my_userbar' => 'Þçåðáàð', - 'my_userbar_descr' => 'Ýòî òâîé þçåðáàð. Òû ìîæåøü ïîñòàâèòü åãî â ïîäïèñè íà ôîðóìå.
    Ïîëüçîâàòåëÿì ôîðóìà áóäåò âèäåí òâîé ðåéòèíã íà íàøåì òðåêåðå, à åñëè òû åùå ïîñòàâèøü è ññûëêó íà íàø òðåêåð - îíè ñìîãóò ïîïàñòü íà íàø òðåêåð ïðîñòî íàæàâ íà êàðòèíêó.

    Âîò òâîé BB-êîä äëÿ âñòàâêè â ïîäïèñü íà ôîðóìàõ', - 'my_mail' => 'Email', - 'ago' => 'íàçàä', - 'all_types' => 'Âñå òèïû', - 'already_bookmarked' => ' óæå â çàêëàäêàõ.', - 'announce_invalid' => 'Íåâåðíûé', - 'unknown_passkey' => 'Íåèçâåñòíûé ïàññêåé!', - 'announce_invalid_passkey' => 'Íåâåðíûé ïàññêåé! Ïåðåêà÷àéòå òîððåíò .torrent ñ $DEFAULTBASEURL', - 'announce_invalid_port' => 'Íåâåðíûé ïîðò', - 'announce_missing_parameter' => 'Îòñóòñòâóåò ïàðàìåòð', - 'announce_not_authorized' => 'Íå àâòîðèçèðîâàíû', - 'announce_read_faq' => '×èòàéòå ×àÂî', - 'announce_torrent_not_registered' => 'Òîððåíò íå çàðåãèñòðèðîâàí íà òðåêåðå', - 'announce_url' => 'Announce URL òðåêåðà', - 'announce_you_can_leech_only_from_one_place' => 'Ëèìèò ñîåäèíåíèé ïðåâûøåí! Âû ìîæåòå êà÷àòü òîëüêî ñ îäíîãî ìåñòà.', - 'antirespect' => 'Àíòèðåñïåêò', - 'at' => 'â', - 'avatar' => 'Àâàòàð', - 'avatar_adress_invalid' => 'Íåâåðíûé àäðåñ àâàòàðû.', - 'avatar_is_too_big' => 'Ðàçìåðû âàøåé àâàòàðû ïðåâûøàþò %dx%d ïèñêåëåé, óìåíüøèòå åå â ëþáîì ãðàôè÷åñêîì ðåäàêòîðå!', - 'avialable_formats' => 'Äîïóñòèìûå ôîðìàòû', - 'back' => 'Íàçàä', - 'banned' => 'Çàáàíåí', - 'bans' => 'Áàíû', - 'bitbucket' => 'Çàêà÷àòü êàðòèíêó', - 'blank_vote' => 'Ïóñòîé ãîëîñ (ß ïðîñòî õî÷ó óâèäåòü ðåçóëüòàòû!)', - 'block' => 'áëîêèðîâêó', - 'blocked_list' => 'Ñïèñîê âðàãîâ', - 'bookmark_this' => ' çàêëàäêè', - 'bookmark' => 'Äîáàâèòü â èçáðàííîå', - 'bookmarked' => ' äîáàâëåí â çàêëàäêè.', - 'bookmarks' => 'Çàêëàäêè', - 'browse' => 'Òîððåíòû', - 'bytes' => 'áàéò', - 'change' => 'Èçìåíèòü', - 'choose' => 'Âûáåðèòå', - 'class_administrator' => 'Àäìèíèñòðàòîð', - 'class_moderator' => 'Ìîäåðàòîð', - 'class_power_user' => 'Îïûòíûé ïîëüçîâàòåëü', - 'class_sysop' => 'Äèðåêòîð', - 'class_uploader' => 'Àïëîàäåð', - 'class_user' => 'Ïîëüçîâàòåëü', - 'class_vip' => 'VIP', - 'client' => 'Êëèåíò', - 'clients_recomened_by_us' => 'Êëèåíòû ðåêîìåíäóåìûå íàìè', - 'clock' => 'Âðåìÿ', - 'close_list' => 'Çàêðûòü ñïèñîê', - 'comment' => 'êîììåíòàðèé', - 'comment_cant_be_empty' => 'Êîììåíòàðèé íå ìîæåò áûòü ïóñòûì!', - 'comments' => 'Êîìì.', - 'comments_for' => 'Êîììåíòàðèè ê', - 'comms' => 'Êîììåíòàðèåâ: %d', - 'community' => 'Ñîîáùåñòâî', - 'completed' => 'Çàêîí÷èë', - 'confirmation_mail_sent' => 'Ïîäòâåðæäàþùåå ïèñüìî îòïðàâëåíî íà óêàçàíûé âàìè àäðåñ (%s). Âàì íåîáõîäèìî ïðî÷èòàòü è îòðåàãèðîâàòü íà ïèñüìî ïðåæäå ÷åì âû ñìîæåòå èñïîëüçîâàòü âàø àêêàóíò. Åñëè âû ýòîãî íå ñäåëàåòå, íîâûé àêêàóíò áóäåò àâòîìàòè÷åñêè óäàëåí ÷åðåç íåñêîëüêî äíåé.', - 'connected' => ' ðàçäà÷å', - 'connection_limit_exceeded' => 'Ëèìèò ñîåäèíåíèé ïðåâûøåí!', - 'create' => 'Ñîçäàòü', - 'date' => 'Äàòà', - 'dead' => 'ìåðòâûé', - 'delete' => 'Óäàëèòü', - 'delete_marked_messages' => 'Óäàëèòü âûäåëåíûå ñîîáùåíèÿ', - 'deleted' => 'Óäàëåí', - 'description' => 'Îïèñàíèå', - 'design' => 'Ñòèëü', - 'details_leeching' => 'Êà÷àþùèå', - 'details_seeding' => 'Ðàçäàþùèå', - 'details_10_last_snatched' => '10 ïîñëåäíèõ ñêà÷àâøèõ', - 'details_10_last_snatched_noone' => 'Åùå íèêòî íå ñêà÷àë ýòîò òîððåíò', - 'dl_speed' => 'Çàêà÷êà', - 'download' => 'Ñêà÷àòü', - 'magnet' => 'Ñêà÷àòü ÷åðåç magnet', - 'downloaded' => 'Ñêà÷àë', - 'downloading' => ' ðàçäà÷å', - 'dox' => 'Ôàéëî-ïîìîéêà', - 'dox_called_already_exists' => 'Ôàéë íàçâàíûé %s óæå ñóùåñòâóåò!', - 'dox_cannot_delete' => 'Íå ìîãó óäàëèòü ôàéë: %s. Âû äîëæíû ñîîáùèòü àäìèíèñòðàòîðó îá îøèáêå.', - 'dox_cannot_move' => 'Íå ìîãó ïåðåìåñòèòü ôàéë. Âû äîëæíû ñîîáùèòü àäìèíèñòðàòîðó îá îøèáêå.', - 'dox_date' => 'Äàòà', - 'dox_downloaded' => 'Ñêà÷àëè', - 'dox_file_already_exists' => 'Ôàéë ñ èìåíåì %s óæå ñóùåñòâóåò!', - 'dox_filename' => 'Íàçâàíèå', - 'dox_no_files' => 'Ôàéëîâ íå íàéäåíî.', - 'dox_nothing_received' => 'Íè÷åãî íå ïîëó÷åíî! Âîçìîæíî ôàéë êîòîðûé âû ïûòàëèñü çàãðèçèòü - ñëèøêîì áîëüøîé.', - 'dox_size' => 'Ðàçìåð', - 'dox_time' => 'Âðåìÿ', - 'dox_title' => 'Ôàéëî-ïîìîéêà', - 'dox_upload' => 'Çàãðóçèòü', - 'dox_upload_file' => 'Çàãðóçèòü ôàéë', - 'dox_uploader' => 'Çàãðóçèë', - 'dox_warning' => 'Âíèìàíèå', - 'edit' => 'Ðåäàêòèðîâàòü', - 'edited' => 'Óñïåøíîå ðåäàêòèðîâàíèå!', - 'error' => 'Îøèáêà', - 'faq' => '×àÂî', - 'file_list' => 'Ñïèñîê ôàéëîâ', - 'files' => 'Ôàéëîâ', - 'files_l' => 'ôàéëîâ', - 'filled' => 'Âûïîëíåí?', - 'filled_by' => 'Âûïîëíèë', - 'formats' => 'Ôîðìàòû ôàéëîâ', - 'forum' => 'Ôîðóì', - 'friend' => 'äðóãà', - 'friends_list' => 'Ñïèñîê äðóçåé', - 'from' => 'èç', - 'from_system' => 'Ñèñòåìíîå', - 'gender' => 'Ïîë', - 'getdox_file_not_found' => 'Ôàéë íå íàéäåí', - 'getdox_no_file' => 'Íåò èìåíè ôàéëà', - 'go' => 'Âïåðåä', - 'go_go_go' => 'Ïîåõàëè', - 'go_to' => 'Ïåðåéòè', - 'golden' => 'Çîëîòîé òîððåíò', - 'silver' => 'Ñåðåáðÿíûé òîððåíò', - 'golden_descr' => 'Çîëîòîé òîððåíò (ñ÷èòàåòñÿ òîëüêî ðàçäà÷à, çàêà÷êà íå ó÷èòûâàåòñÿ)', - 'golden_torrents' => 'Çîëîòûå òîððåíòû', - 'guests_online' => 'Âñåãî ãîñòåé', - 'hide_filled' => 'Ñïðÿòàòü âûïîëíåííûå', - 'hits' => 'Âçÿò', - 'homepage' => 'Ãëàâíàÿ', - 'idle' => 'Áåçäåéñòâèå', - 'image' => 'Êàðòèíêà', - 'images' => 'Ñêðèíøîòû', - 'img_poster' => 'Ïîñòåð', - 'in' => 'â', - 'inbox' => 'Âõîäÿùèå', - 'including_dead' => 'Âêëþ÷àÿ ìåðòâûå', - 'info_hash' => 'Õýø ðåëèçà', - 'invalid_id' => 'Íåâåðíûé èäåíòèôèêàòîð.', - 'invalid_ip' => 'Íåâåðíûé IP àäðåñ.', - 'invite' => 'Ïðèãëàñèòü', - 'is' => 'â', - 'last_registered_user' => 'Ïîñëåäíèé çàðåãèñòðèðîâàííûé ïîëüçîâàòåëü', - 'last_seen' => 'Ïîñëåäíèé ðàç áûë â ñåòè ', - 'leechers' => 'Ëè÷', - 'leechers_l' => 'êà÷àþùèõ', - 'leeching' => 'Êà÷àåò', - 'loading' => 'Çàãðóçêà...', - 'log' => 'Æóðíàë', - 'login' => 'Âõîä', - 'logout' => 'Âûõîä', - 'lower_class' => 'Âû ðàáîòàåòå ïîä áîëåå íèçêèì êëàññîì. Íàæìèòå ñþäà äëÿ âîçâðàòà.', - 'mail_read' => 'Ïðî÷èòàííîå', - 'mail_read_desc' => 'Ïðî÷èòàííûå ñîîáùåíèÿ', - 'mail_unread_desc' => 'Íåïðî÷èòàííûå ñîîáùåíèÿ', - 'main_menu' => 'Ãëàâíîå Ìåíþ', - 'make_request' => 'Ñäåëàòü çàïðîñ', - 'mark' => 'Âûäåëèòü', - 'mark_all' => 'Âûäåëèòü âñå', - 'mark_as_read' => 'Îòìåòèòü âûäåëåííûå ñîîáùåíèÿ êàê ïðî÷èòàííûå', - 'mark_read' => 'Ïðî÷èòàòü', - 'max_avatar_size' => 'Ðàçìåðû àâàòàðêè äîëæíû áûòü íå áîëåå %dx%d ïèêñåëåé.', - 'max_file_size' => 'Ìàêñèìàëüíûé ðàçìåð ôàéëà', - 'messages' => 'Ñîîáùåíèÿ', - 'missing_form_data' => 'Çàïîëíèòå âñå ïîëÿ ôîðìû.', - 'monitor_comments' => 'Ñëåäèòü çà êîììåíòàðèÿìè', - 'monitor_comments_disable' => 'Îòêëþ÷èòü ñëåæåíèå', - 'my' => 'Ïàíåëü óïðàâëåíèÿ', - 'my_bonus' => 'Ìîé áîíóñ', - 'my_torrents' => 'Ìîè òîððåíòû', - 'name' => 'Íàçâàíèå', - 'need_seeds' => 'Ðåëèçû, êîòîðûì íóæíû ðàçäàþùèå', - 'neighbours' => 'Ñîñåäè', - 'never' => 'íèêîãäà', - 'new_offers' => 'Íîâûå ïðåäëîæåíèÿ', - 'new_pm' => '(%d íîâûõ)', - 'new_pms' => 'Ó âàñ %d íîâîå(ûõ) ñîîáùåíèå(èé)!', - 'new_torrents' => 'Íîâûå òîððåíòû', - 'news' => 'Íîâîñòè', - 'next' => 'Âïåðåä', - 'no' => 'Íåò', - 'no_blocked' => 'Ó âàñ íåò âðàãîâ', - 'no_choose' => 'Íå âûáðàíî', - 'no_comments' => 'Íåò êîììåíòàðèåâ', - 'no_fields_blank' => 'Íå îñòàâëÿéòå ïóñòûõ ïîëåé.', - 'no_friends' => 'Ó âàñ íåò äðóçåé', - 'no_messages' => 'Íåò ñîîáùåíèé', - 'no_offers' => 'Íåò ïðåäëîæåíèé', - 'no_online_users' => 'Íå áûëî àêòèâíûõ ïîëüçîâàòåëåé çà ïîñëåäíèå 15 ìèíóò.', - 'no_polls' => 'Íåò îïðîñîâ', - 'no_news' => 'Íåò íîâîñòåé', - 'no_seeds' => 'Áåç ñèäîâ', - 'no_subject' => 'Áåç òåìû', - 'no_torrent_with_such_id' => 'Íåò òîððåíòà ñ òàêèì ID.', - 'no_torrents' => 'Íåò òîððåíòîâ', - 'no_votes' => 'Íåò ãîëîñîâ', - 'none_voted' => 'íåò ãîëîñîâ', - 'none_yet' => 'Íèêòî', - 'not_enough_votes' => 'Åùå íåò (íóæíî õîòÿ-áû %d ãîëîñîâ. Ñîáðàíî: ', - 'nothing_found' => 'Íè÷åãî íå íàéäåíî', - 'now' => 'ñåé÷àñ', - 'offers' => 'Ïðåäëîæåíèÿ', - 'official' => 'Îôèöèàëüíûé', - 'offline' => 'îôôëàéíå', - 'old_polls' => 'Ïðîøëûå îïðîñû', - 'online' => 'îíëàéíå', - 'online_users' => 'Âñåãî Îíëàéí', - 'only_dead' => 'Òîëüêî ìåðòâûå', - 'only_votes' => 'òîëüêî %d ãîëîñîâ', - 'open_list' => 'Ïîñìîòðåòü ñïèñîê', - 'optional' => 'Íå îáÿçàòåëüíî.', - 'outbox' => 'Îòïðàâëåííûå', - 'password' => 'Ïàðîëü', - 'password_mismatch' => 'Ïàðîëè íå ñîâïàäàþò.', - 'path' => 'Ïóòü', - 'peers_l' => 'ïèðîâ', - 'personal_lists' => 'Ìîè äðóçüÿ', - 'pm' => 'ËÑ', - 'poll' => 'Îïðîñ', - 'port_open' => 'NAT', - 'prev' => 'Íàçàä', - 'profile' => 'Ïðîôèëü', - 'rating' => 'Îöåíêà', - 'ratio' => 'Ðåéòèíã', - 'receiver' => 'Ïîëó÷àòåëü', - 'repeat_password' => 'Ïîâòîð ïàðîëÿ', - 'request' => 'Çàïðîñ', - 'requester' => 'Çàïðîñèë', - 'requests' => 'Çàïðîñû', - 'requests_section' => 'Ñåêöèÿ çàïðîñîâ', - 'respect' => 'Ðåñïåêò', - 'rules' => 'Ïðàâèëà', - 'said_thanks' => 'Ñêàçàëè ñïàñèáî', - 'search' => 'Ïîèñê', - 'search_btn' => 'Èñêàòü', - 'search_requests' => 'Èñêàòü çàïðîñû', - 'search_results_for' => 'Ðåçóëüòàòû ïîèñêà äëÿ', - 'seeder' => 'Ðàçäàþùèé', - 'seeder_last_seen' => 'Ïîñëåäíèé ðàç áûë çäåñü', - 'seeders_l' => 'ðàçäàþùèõ', - 'seeding' => 'Ñèäèðóåò', - 'seeds' => 'Ñèä', - 'sender' => 'Îòïðàâèòåëü', - 'server_load' => 'Íàãðóçêà íà ñåðâåð', - 'show_all' => 'Ïîêàçàòü âñå', - 'show_data' => 'Ïîêàçàòü äàííûå', - 'show_my_requests' => 'Ïîñìîòðåòü ìîè çàïðîñû', - 'signup' => 'Ðåãèñòðàöèÿ', - 'signup_successful' => 'Óñïåøíàÿ ðåãèñòðàöèÿ', - 'size' => 'Ðàçìåð', - 'snatched' => 'Ñêà÷àí', - 'staff' => 'Àäìèíèñòðàöèÿ', - 'statistic' => 'Ñòàòèñòèêà', - 'subject' => 'Òåìà', - 'subscribe_last_comment' => 'Ïîñëåäíåå ñîîáùåíèå', - 'subscribe_list' => 'Ëèñò ïîäïèñêè', - 'subscribe_no' => 'Íåò íîâûõ êîììåòàðèåâ â òåìàõ, íà êîòîðûå âû ïîäïèñàíû.', - 'success' => 'Óñïåøíî', - 'successful_upload' => 'Óñïåøíàÿ çàëèâêà!', - 'sure_mark_delete' => 'Âû óâåðåíû, ÷òî õîòèòå óäàëèòü âûáðàííûå ñîîáùåíèÿ?', - 'sure_mark_read' => 'Âû óâåðåíû, ÷òî õîòèòå ïîìåòèòü âûáðàííûå ñîîáùåíèÿ êàê ïðî÷èòàííûå?', - 'sysop_account_activated' => 'Âàø àêêàóíò àêòèâèðîâàí! Âû àâòîìàòè÷åñêè âîøëè. Òåïåðü âû ìîæåòå ïåðåéòè íà ãëàâíóþ è íà÷àòü èñïîëüçîâàòü âàø àêêàóíò.', - 'sysop_activated' => 'Àêêàóíò àäìèíèñòðàòîðà óñïåøíî àêòèâèðîâàí', - 'taken_from_torrent' => 'Áåðåòñÿ èç òîððåíòà. Ïîæàëóéñòà, èñïîëüçóéòå ïîíÿòíûå èìåíà.', - 'thanks' => 'Ñïàñèáî', - 'thanks_added' => 'Ñïàñèáî äîáàâëåíî!', - 'thanks_for_registering' => 'Ñïàñèáî ÷òî çàðåãèñòðèðîâàëèñü íà %s! Òåïåðü âû ìîæåòå âîéòè â ñèñòåìó.', - 'this_account_activated' => 'Ýòîò àêêàóíò óæå àêòèâèðîâàí. Âû ìîæåòå âîéòè ñ íèì.', - 'times' => 'ðàç', - 'topten' => 'Òîï 10', - 'torrent' => 'Òîððåíò', - 'torrent_clients' => 'Òîððåíò Êëèåíòû', - 'torrent_details' => 'Äåòàëè òîððåíòà', - 'torrent_file' => 'Torrent ôàéë', - 'torrent_info' => 'Äàííûå î òîððåíòå', - 'torrent_name' => 'Íàçâàíèå', - 'torrent_not_selected' => 'Òîððåíò íå âûáðàí!', - 'torrents' => 'Òîððåíòû', - 'total' => 'Âñåãî', - 'tracker_dead_torrents' => 'Ìåðòâûõ Òîððåíòîâ', - 'tracker_leechers' => 'Êà÷àþùèõ', - 'tracker_peers' => 'Àêòèâíûõ ïîäêëþ÷åíèé', - 'tracker_seed_peer' => 'Ðàçäàþùèõ/Êà÷àþùèõ (%)', - 'tracker_seeders' => 'Ðàçäàþùèõ', - 'tracker_torrents' => 'Òîððåíòîâ', - 'external_seeders' => 'Âíåøíèõ Ðàçäàþùèõ', - 'external_leechers' => 'Âíåøíèõ Êà÷àþùèõ', - 'ttl' => 'TTL', - 'type' => 'Òèï', - 'ul_speed' => 'Ðàçäà÷à', - 'unable_to_create_account' => 'Íåâîçìîæíî ñîçäàòü àêêàóíò. Âîçìîæíî èìÿ ïîëüçîâàòåëÿ óæå çàíÿòî.', - 'unable_to_read_torrent' => 'Íåâîçìîæíî ïðî÷èòàòü òîððåíò ôàéë.', - 'upload' => 'Çàãðóçèòü', - 'upload_torrent' => 'Çàãðóçèòü òîððåíò', - 'uploaded' => 'Ðàçäàë', - 'uploadeder' => 'Ðàçäàåò', - 'user' => 'Þçåð', - 'user_menu' => 'Ïåðñîíàëüíîå Ìåíþ', - 'username' => 'Ëîãèí', - 'users' => 'Ïîëüçîâàòåëè', - 'users_disabled' => 'Îòêëþ÷åííûõ', - 'users_registered' => 'Çàðåãèñòðèðîâàííûõ', - 'users_unconfirmed' => 'Íåïîäòâåðæäåííûõ', - 'users_uploaders' => 'Àïëîàäåðîâ', - 'users_vips' => 'VIP', - 'users_warned' => 'Ïðåäóïðåæä¸ííûõ', - 'views' => 'Ïðîñìîòðîâ', - 'visible' => 'Âèäèìûé', - 'vote' => 'Ïðîãîëîñîâàòü', - 'vote_1' => 'Óæàñíî!', - 'vote_2' => 'Ïëîõî', - 'vote_3' => 'Íîðìàëüíî', - 'vote_4' => 'Õîðîøî', - 'vote_5' => 'Îòëè÷íî!', - 'voted' => 'Ãîëîñ äîáàâëåí!', - 'votes' => 'Ãîëîñîâ', - 'wait' => 'Îæèäàíèå', - 'welcome_back' => 'Ïðèâåò, ', - 'whos_online' => 'Êòî Îíëàéí', - 'with' => 'ñ', - 'wrote_at' => 'Ïèñàë â', - 'yes' => 'Äà', - 'you_can_start_seeding' => 'Âû ìîæåòå íà÷èíàòü ðàçäà÷ó. Ó÷òèòå ÷òî òîððåíò íå áóäåò âèäåí ïîêà âû íå íà÷íåòå ðàçäàâàòü!', - 'you_have_no_bookmarks' => 'Ó âàñ íåò çàêëàäîê!', - 'you_have_voted_for_this_torrent' => 'âû îöåíèëè ýòîò òîððåíò êàê', - 'you_want_to_delete_x_click_here' => 'Âû õîòèòå óäàëèòü %s. Íàæìèòå ñþäà åñëè âû óâåðåíû.', - 'your_ip' => 'Âàø IP', - - 'stats_female' => 'Äåâóøêè', - 'stats_male' => 'Ïàðíè', - 'stats_maxusers' => 'Ìåñò íà òðåêåðå', - - 'peertable_port_open' => 'Ïîðò îòêðûò. Ýòîò ïèð ìîæåò ïîäêëþ÷àòñÿ ê ëþáîìó ïèðó.', - 'peertable_port_closed' => 'Ïîðò çàêðûò. Ðåêîìåíäîâàíî ïðîâåðèòü íàñòðîéêè Firwewall\'à.', - - 'details_poster' => 'Ïîñòåð', - 'details_screenshot' => 'Ñêðèíøîò', - 'details_anonymous' => 'Àíîíèì', - - 'ajax_loading' => 'Çàãðóçêà. Ïîæàëóéñòà, ïîäîæäèòå...', - - 'comments_list' => 'Ñïèñîê êîììåíòàðèåâ', - 'comments_add' => 'Äîáàâèòü êîììåíòàðèé', - - 'logs' => 'Æóðíàë', - 'bonus' => 'Áîíóñ', -); +return array('language_charset' => 'windows-1251', + 'page_generated' => "Page generated in %f seconds with %d queries (%s%% PHP / %s%% MySQL)", + 'unknown' => 'Íåèçâåñòíî', + 'access_denied' => 'Äîñòóï çàïðåùåí.', + 'account_activated' => 'Àêêàóíò àêòèâèðîâàí', + 'active' => 'Àêòèâíûå', + 'add_comment' => 'Äîáàâèòü êîììåíòàðèé', + 'add_user' => 'Äîáàâèòü ïîëüçîâàòåëÿ', + 'added' => 'Äîáàâëåí', + 'age' => 'Âîçðàñò', + 'contactus' => 'Ñâÿçàòüñÿ ñ íàìè', + 'external_torrent' => 'Ìóëüòèòðåêåðíûé òîððåíò', + 'external_torrent_update' => 'Ìóëüòèòðåêåðíûé òîððåíò (îáíîâèòü èíôîðìàöèþ)', + 'new_torrents_stats' => 'Ðàçäàþò: %d, Êà÷àþò: %d', + 'help_seed' => 'Ñêà÷àë ñàì, äàé ñêà÷àòü äðóãîìó!!!', + 'no_need_seeding' => 'Íåò òîððåíòîâ, êîòîðûì íóæíû ðàçäàþùèå', + 'signup_users_limit' => 'Òåêóùèé ëèìèò ïîëüçîâàòåëåé (%d) äîñòèãíóò. Íåàêòèâíûå ïîëüçîâàòåëè ïîñòîÿííî óäàëÿþòñÿ, ïîæàëóéñòà âåðíèòåñü ïîïîçæå...', + 'signup_signup' => 'Ðåãèñòðàöèÿ', + 'signup_already_registered' => 'Âû óæå çàðåãèñòðèðîâàííûé ïîëüçîâàòåëü %s!', + 'signup_not_selected' => '---- Íå âûáðàíî ----', + 'signup_use_cookies' => 'Äëÿ ïðàâèëüíîé ðåãèñòðàöèè àêòèâèçèðóéòå cookies.', + 'signup_username' => 'Ïîëüçîâàòåëü', + 'signup_password' => 'Ïàðîëü', + 'signup_password_again' => 'Ïîâòîðèòå ïàðîëü', + 'signup_email' => 'Email', + 'signup_email_must_be_valid' => 'Email àäðåñ äîëæåí áûòü âåðíûì. Âàì ïðèéäåò ïîäòâåðæäàþùåå ïèñüìî, íà êîòîðîå âû äîëæíû îòðåàãèðîâàòü. Âàø email áîëüøå íå áóäåò èñïîëüçîâàí.', + 'signup_gender' => 'Ïîë', + 'signup_male' => 'Ïàðåíü', + 'signup_female' => 'Äåâóøêà', + 'signup_contact' => 'Êîíòàêòû', + 'signup_i_have_read_rules' => 'ß ïðî÷èòàë(à) ïðàâèëà', + 'signup_i_will_read_faq' => 'ß áóäó ÷èòàòü ×àÂî ïðåæäå ÷åì çàäàâàòü âîïðîñû', + 'signup_i_am_13_years_old_or_more' => 'Ìíå 13 ëåò èëè áîëüøå', + 'signup_disabled' => 'Èçâèíèòå, íî ðåãèñòðàöèÿ îòêëþ÷åíà àäìèíèñòðàöèåé', + 'dad' => 'Ïðÿìîé äîñòóï ê ýòîìó ôàéëó íå ðàçðåøåí', + 'news_added' => 'Äîáàâëåíà', + 'news_poster' => 'Àâòîð', + 'my_my' => 'Ïàíåëü óïðàâëåíèÿ', + 'my_updated' => 'Ïðîôèëü îáíîâë¸í!', + 'my_mail_sent' => 'Ïîäòâåðæäàþùåå ïèñüìî îòïðàâëåíî!', + 'my_mail_updated' => 'E-mail àäðåñ îáíîâëåí!', + 'my_torrents' => 'Ìîè òîððåíòû', + 'my_unset' => 'Íå âûáðàíî', + 'my_allow_pm_from' => 'Ðàçðåøèòü ËÑ îò', + 'my_parked' => 'Àêêàóíò ïðèïàðêîâàí', + 'my_you_can_park' => 'Âû ìîæåòå ïðèïàðêîâàòü âàø àêêàóíò âî èçáåæàíèÿ óäàëåíèÿ èç-çà íåàêòèâíîñòè, íàïðèìåð åñëè âû óåäåòå îòäûõàòü. Íî êîãäà âàø àêêàóíò ïðèïàðêîâàí, âàì áóäóò íåäîñòóïíû íåêîòîðûå ôóíêöèè, íàïðèìåð ïðîñìîòð èëè êà÷àíèå òîððåíòîâ', + 'my_delete_after_reply' => 'Óäàëÿòü ËÑ ïðè îòâåòå', + 'my_sentbox' => 'Ñîõðàíÿòü îòïðàâëåííûå ËÑ', + 'my_email_notify' => 'Óâåäîìëåíèå ïî email', + 'my_default_browse' => 'Êàòåãîðèè ïðîñìîòðà ïî óìîë÷àíèþ', + 'my_style' => 'Âèä èíòåðôåéñà', + 'my_country' => 'Ñòðàíà', + 'my_language' => 'ßçûê', + 'my_avatar_url' => 'Àäðåñ àâàòàðû', + 'my_gender' => 'Ïîë', + 'my_gender_male' => 'Ïàðåíü', + 'my_gender_female' => 'Äåâóøêà', + 'my_year' => 'Ãîä', + 'my_month' => 'Ìåñÿö', + 'my_day' => 'Äåíü', + 'my_months_january' => 'ßíâàðü', + 'my_months_february' => 'Ôåâðàëü', + 'my_months_march' => 'Ìàðò', + 'my_months_april' => 'Àïðåëü', + 'my_months_may' => 'Ìàé', + 'my_months_june' => 'Èþíü', + 'my_months_jule' => 'Èþëü', + 'my_months_august' => 'Àâãóñò', + 'my_months_september' => 'Ñåíòÿáðü', + 'my_months_october' => 'Îêòÿáðü', + 'my_months_november' => 'Íîÿáðü', + 'my_months_december' => 'Äåêàáðü', + 'my_birthdate' => 'Äàòà ðîæäåíèÿ', + 'my_contact' => 'Ñèñòåìà ìãíîâåííûõ ñîîáùåíèé', + 'my_contact_descr' => 'Åñëè âû õîòèòå, ÷òîáû äðóãèå ïîñåòèòåëè ìîãëè áûñòðî ñâÿçàòüñÿ ñ âàìè, óêàæèòå ñâîè äàííûå â ñëåäóþùèõ ñèñòåìàõ áûñòðûõ ñîîáùåíèé', + 'my_contact_icq' => 'Íîìåð ICQ', + 'my_contact_aim' => 'Èìÿ â AIM', + 'my_contact_msn' => 'Âàø MSN', + 'my_contact_yahoo' => 'Èìÿ â Yahoo!', + 'my_contact_skype' => 'Èìÿ â Skype', + 'my_contact_mirc' => 'Èìÿ â mIRC!', + 'my_website' => 'Ñàéò', + 'my_torrents_per_page' => 'Òîððåíòîâ íà ñòðàíèöó', + 'my_topics_per_page' => 'Òåì íà ñòðàíèöó', + 'my_messages_per_page' => 'Ñîîáùåíèé íà ñòðàíèöó', + 'my_show_avatars' => 'Ïîêàçûâàòü àâàòàðû', + 'my_info' => 'Èíôîðìàöèÿ', + 'my_userbar' => 'Þçåðáàð', + 'my_userbar_descr' => 'Ýòî òâîé þçåðáàð. Òû ìîæåøü ïîñòàâèòü åãî â ïîäïèñè íà ôîðóìå.
    Ïîëüçîâàòåëÿì ôîðóìà áóäåò âèäåí òâîé ðåéòèíã íà íàøåì òðåêåðå, à åñëè òû åùå ïîñòàâèøü è ññûëêó íà íàø òðåêåð - îíè ñìîãóò ïîïàñòü íà íàø òðåêåð ïðîñòî íàæàâ íà êàðòèíêó.

    Âîò òâîé BB-êîä äëÿ âñòàâêè â ïîäïèñü íà ôîðóìàõ', + 'my_mail' => 'Email', + 'ago' => 'íàçàä', + 'all_types' => 'Âñå òèïû', + 'already_bookmarked' => ' óæå â çàêëàäêàõ.', + 'announce_invalid' => 'Íåâåðíûé', + 'unknown_passkey' => 'Íåèçâåñòíûé ïàññêåé!', + 'announce_invalid_passkey' => 'Íåâåðíûé ïàññêåé! Ïåðåêà÷àéòå òîððåíò .torrent ñ $DEFAULTBASEURL', + 'announce_invalid_port' => 'Íåâåðíûé ïîðò', + 'announce_missing_parameter' => 'Îòñóòñòâóåò ïàðàìåòð', + 'announce_not_authorized' => 'Íå àâòîðèçèðîâàíû', + 'announce_read_faq' => '×èòàéòå ×àÂî', + 'announce_torrent_not_registered' => 'Òîððåíò íå çàðåãèñòðèðîâàí íà òðåêåðå', + 'announce_url' => 'Announce URL òðåêåðà', + 'announce_you_can_leech_only_from_one_place' => 'Ëèìèò ñîåäèíåíèé ïðåâûøåí! Âû ìîæåòå êà÷àòü òîëüêî ñ îäíîãî ìåñòà.', + 'antirespect' => 'Àíòèðåñïåêò', + 'at' => 'â', + 'avatar' => 'Àâàòàð', + 'avatar_adress_invalid' => 'Íåâåðíûé àäðåñ àâàòàðû.', + 'avatar_is_too_big' => 'Ðàçìåðû âàøåé àâàòàðû ïðåâûøàþò %dx%d ïèñêåëåé, óìåíüøèòå åå â ëþáîì ãðàôè÷åñêîì ðåäàêòîðå!', + 'avialable_formats' => 'Äîïóñòèìûå ôîðìàòû', + 'back' => 'Íàçàä', + 'banned' => 'Çàáàíåí', + 'bans' => 'Áàíû', + 'bitbucket' => 'Çàêà÷àòü êàðòèíêó', + 'blank_vote' => 'Ïóñòîé ãîëîñ (ß ïðîñòî õî÷ó óâèäåòü ðåçóëüòàòû!)', + 'block' => 'áëîêèðîâêó', + 'blocked_list' => 'Ñïèñîê âðàãîâ', + 'bookmark_this' => ' çàêëàäêè', + 'bookmark' => 'Äîáàâèòü â èçáðàííîå', + 'bookmarked' => ' äîáàâëåí â çàêëàäêè.', + 'bookmarks' => 'Çàêëàäêè', + 'browse' => 'Òîððåíòû', + 'bytes' => 'áàéò', + 'change' => 'Èçìåíèòü', + 'choose' => 'Âûáåðèòå', + 'class_administrator' => 'Àäìèíèñòðàòîð', + 'class_moderator' => 'Ìîäåðàòîð', + 'class_power_user' => 'Îïûòíûé ïîëüçîâàòåëü', + 'class_sysop' => 'Äèðåêòîð', + 'class_uploader' => 'Àïëîàäåð', + 'class_user' => 'Ïîëüçîâàòåëü', + 'class_vip' => 'VIP', + 'client' => 'Êëèåíò', + 'clients_recomened_by_us' => 'Êëèåíòû ðåêîìåíäóåìûå íàìè', + 'clock' => 'Âðåìÿ', + 'close_list' => 'Çàêðûòü ñïèñîê', + 'comment' => 'êîììåíòàðèé', + 'comment_cant_be_empty' => 'Êîììåíòàðèé íå ìîæåò áûòü ïóñòûì!', + 'comments' => 'Êîìì.', + 'comments_for' => 'Êîììåíòàðèè ê', + 'comms' => 'Êîììåíòàðèåâ: %d', + 'community' => 'Ñîîáùåñòâî', + 'completed' => 'Çàêîí÷èë', + 'confirmation_mail_sent' => 'Ïîäòâåðæäàþùåå ïèñüìî îòïðàâëåíî íà óêàçàíûé âàìè àäðåñ (%s). Âàì íåîáõîäèìî ïðî÷èòàòü è îòðåàãèðîâàòü íà ïèñüìî ïðåæäå ÷åì âû ñìîæåòå èñïîëüçîâàòü âàø àêêàóíò. Åñëè âû ýòîãî íå ñäåëàåòå, íîâûé àêêàóíò áóäåò àâòîìàòè÷åñêè óäàëåí ÷åðåç íåñêîëüêî äíåé.', + 'connected' => ' ðàçäà÷å', + 'connection_limit_exceeded' => 'Ëèìèò ñîåäèíåíèé ïðåâûøåí!', + 'create' => 'Ñîçäàòü', + 'date' => 'Äàòà', + 'dead' => 'ìåðòâûé', + 'delete' => 'Óäàëèòü', + 'delete_marked_messages' => 'Óäàëèòü âûäåëåíûå ñîîáùåíèÿ', + 'deleted' => 'Óäàëåí', + 'description' => 'Îïèñàíèå', + 'design' => 'Ñòèëü', + 'details_leeching' => 'Êà÷àþùèå', + 'details_seeding' => 'Ðàçäàþùèå', + 'details_10_last_snatched' => '10 ïîñëåäíèõ ñêà÷àâøèõ', + 'details_10_last_snatched_noone' => 'Åùå íèêòî íå ñêà÷àë ýòîò òîððåíò', + 'dl_speed' => 'Çàêà÷êà', + 'download' => 'Ñêà÷àòü', + 'magnet' => 'Ñêà÷àòü ÷åðåç magnet', + 'downloaded' => 'Ñêà÷àë', + 'downloading' => ' ðàçäà÷å', + 'dox' => 'Ôàéëî-ïîìîéêà', + 'dox_called_already_exists' => 'Ôàéë íàçâàíûé %s óæå ñóùåñòâóåò!', + 'dox_cannot_delete' => 'Íå ìîãó óäàëèòü ôàéë: %s. Âû äîëæíû ñîîáùèòü àäìèíèñòðàòîðó îá îøèáêå.', + 'dox_cannot_move' => 'Íå ìîãó ïåðåìåñòèòü ôàéë. Âû äîëæíû ñîîáùèòü àäìèíèñòðàòîðó îá îøèáêå.', + 'dox_date' => 'Äàòà', + 'dox_downloaded' => 'Ñêà÷àëè', + 'dox_file_already_exists' => 'Ôàéë ñ èìåíåì %s óæå ñóùåñòâóåò!', + 'dox_filename' => 'Íàçâàíèå', + 'dox_no_files' => 'Ôàéëîâ íå íàéäåíî.', + 'dox_nothing_received' => 'Íè÷åãî íå ïîëó÷åíî! Âîçìîæíî ôàéë êîòîðûé âû ïûòàëèñü çàãðèçèòü - ñëèøêîì áîëüøîé.', + 'dox_size' => 'Ðàçìåð', + 'dox_time' => 'Âðåìÿ', + 'dox_title' => 'Ôàéëî-ïîìîéêà', + 'dox_upload' => 'Çàãðóçèòü', + 'dox_upload_file' => 'Çàãðóçèòü ôàéë', + 'dox_uploader' => 'Çàãðóçèë', + 'dox_warning' => 'Âíèìàíèå', + 'edit' => 'Ðåäàêòèðîâàòü', + 'edited' => 'Óñïåøíîå ðåäàêòèðîâàíèå!', + 'error' => 'Îøèáêà', + 'faq' => '×àÂî', + 'file_list' => 'Ñïèñîê ôàéëîâ', + 'files' => 'Ôàéëîâ', + 'files_l' => 'ôàéëîâ', + 'filled' => 'Âûïîëíåí?', + 'filled_by' => 'Âûïîëíèë', + 'formats' => 'Ôîðìàòû ôàéëîâ', + 'forum' => 'Ôîðóì', + 'friend' => 'äðóãà', + 'friends_list' => 'Ñïèñîê äðóçåé', + 'from' => 'èç', + 'from_system' => 'Ñèñòåìíîå', + 'gender' => 'Ïîë', + 'getdox_file_not_found' => 'Ôàéë íå íàéäåí', + 'getdox_no_file' => 'Íåò èìåíè ôàéëà', + 'go' => 'Âïåðåä', + 'go_go_go' => 'Ïîåõàëè', + 'go_to' => 'Ïåðåéòè', + 'golden' => 'Çîëîòîé òîððåíò', + 'silver' => 'Ñåðåáðÿíûé òîððåíò', + 'golden_descr' => 'Çîëîòîé òîððåíò (ñ÷èòàåòñÿ òîëüêî ðàçäà÷à, çàêà÷êà íå ó÷èòûâàåòñÿ)', + 'golden_torrents' => 'Çîëîòûå òîððåíòû', + 'guests_online' => 'Âñåãî ãîñòåé', + 'hide_filled' => 'Ñïðÿòàòü âûïîëíåííûå', + 'hits' => 'Âçÿò', + 'homepage' => 'Ãëàâíàÿ', + 'idle' => 'Áåçäåéñòâèå', + 'image' => 'Êàðòèíêà', + 'images' => 'Ñêðèíøîòû', + 'img_poster' => 'Ïîñòåð', + 'in' => 'â', + 'inbox' => 'Âõîäÿùèå', + 'including_dead' => 'Âêëþ÷àÿ ìåðòâûå', + 'info_hash' => 'Õýø ðåëèçà', + 'invalid_id' => 'Íåâåðíûé èäåíòèôèêàòîð.', + 'invalid_ip' => 'Íåâåðíûé IP àäðåñ.', + 'invite' => 'Ïðèãëàñèòü', + 'is' => 'â', + 'last_registered_user' => 'Ïîñëåäíèé çàðåãèñòðèðîâàííûé ïîëüçîâàòåëü', + 'last_seen' => 'Ïîñëåäíèé ðàç áûë â ñåòè ', + 'leechers' => 'Ëè÷', + 'leechers_l' => 'êà÷àþùèõ', + 'leeching' => 'Êà÷àåò', + 'loading' => 'Çàãðóçêà...', + 'log' => 'Æóðíàë', + 'login' => 'Âõîä', + 'logout' => 'Âûõîä', + 'lower_class' => 'Âû ðàáîòàåòå ïîä áîëåå íèçêèì êëàññîì. Íàæìèòå ñþäà äëÿ âîçâðàòà.', + 'mail_read' => 'Ïðî÷èòàííîå', + 'mail_read_desc' => 'Ïðî÷èòàííûå ñîîáùåíèÿ', + 'mail_unread_desc' => 'Íåïðî÷èòàííûå ñîîáùåíèÿ', + 'main_menu' => 'Ãëàâíîå Ìåíþ', + 'make_request' => 'Ñäåëàòü çàïðîñ', + 'mark' => 'Âûäåëèòü', + 'mark_all' => 'Âûäåëèòü âñå', + 'mark_as_read' => 'Îòìåòèòü âûäåëåííûå ñîîáùåíèÿ êàê ïðî÷èòàííûå', + 'mark_read' => 'Ïðî÷èòàòü', + 'max_avatar_size' => 'Ðàçìåðû àâàòàðêè äîëæíû áûòü íå áîëåå %dx%d ïèêñåëåé.', + 'max_file_size' => 'Ìàêñèìàëüíûé ðàçìåð ôàéëà', + 'messages' => 'Ñîîáùåíèÿ', + 'missing_form_data' => 'Çàïîëíèòå âñå ïîëÿ ôîðìû.', + 'monitor_comments' => 'Ñëåäèòü çà êîììåíòàðèÿìè', + 'monitor_comments_disable' => 'Îòêëþ÷èòü ñëåæåíèå', + 'my' => 'Ïàíåëü óïðàâëåíèÿ', + 'my_bonus' => 'Ìîé áîíóñ', + 'my_torrents' => 'Ìîè òîððåíòû', + 'name' => 'Íàçâàíèå', + 'need_seeds' => 'Ðåëèçû, êîòîðûì íóæíû ðàçäàþùèå', + 'neighbours' => 'Ñîñåäè', + 'never' => 'íèêîãäà', + 'new_offers' => 'Íîâûå ïðåäëîæåíèÿ', + 'new_pm' => '(%d íîâûõ)', + 'new_pms' => 'Ó âàñ %d íîâîå(ûõ) ñîîáùåíèå(èé)!', + 'new_torrents' => 'Íîâûå òîððåíòû', + 'news' => 'Íîâîñòè', + 'next' => 'Âïåðåä', + 'no' => 'Íåò', + 'no_blocked' => 'Ó âàñ íåò âðàãîâ', + 'no_choose' => 'Íå âûáðàíî', + 'no_comments' => 'Íåò êîììåíòàðèåâ', + 'no_fields_blank' => 'Íå îñòàâëÿéòå ïóñòûõ ïîëåé.', + 'no_friends' => 'Ó âàñ íåò äðóçåé', + 'no_messages' => 'Íåò ñîîáùåíèé', + 'no_offers' => 'Íåò ïðåäëîæåíèé', + 'no_online_users' => 'Íå áûëî àêòèâíûõ ïîëüçîâàòåëåé çà ïîñëåäíèå 15 ìèíóò.', + 'no_polls' => 'Íåò îïðîñîâ', + 'no_news' => 'Íåò íîâîñòåé', + 'no_seeds' => 'Áåç ñèäîâ', + 'no_subject' => 'Áåç òåìû', + 'no_torrent_with_such_id' => 'Íåò òîððåíòà ñ òàêèì ID.', + 'no_torrents' => 'Íåò òîððåíòîâ', + 'no_votes' => 'Íåò ãîëîñîâ', + 'none_voted' => 'íåò ãîëîñîâ', + 'none_yet' => 'Íèêòî', + 'not_enough_votes' => 'Åùå íåò (íóæíî õîòÿ-áû %d ãîëîñîâ. Ñîáðàíî: ', + 'nothing_found' => 'Íè÷åãî íå íàéäåíî', + 'now' => 'ñåé÷àñ', + 'offers' => 'Ïðåäëîæåíèÿ', + 'official' => 'Îôèöèàëüíûé', + 'offline' => 'îôôëàéíå', + 'old_polls' => 'Ïðîøëûå îïðîñû', + 'online' => 'îíëàéíå', + 'online_users' => 'Âñåãî Îíëàéí', + 'only_dead' => 'Òîëüêî ìåðòâûå', + 'only_votes' => 'òîëüêî %d ãîëîñîâ', + 'open_list' => 'Ïîñìîòðåòü ñïèñîê', + 'optional' => 'Íå îáÿçàòåëüíî.', + 'outbox' => 'Îòïðàâëåííûå', + 'password' => 'Ïàðîëü', + 'password_mismatch' => 'Ïàðîëè íå ñîâïàäàþò.', + 'path' => 'Ïóòü', + 'peers_l' => 'ïèðîâ', + 'personal_lists' => 'Ìîè äðóçüÿ', + 'pm' => 'ËÑ', + 'poll' => 'Îïðîñ', + 'port_open' => 'NAT', + 'prev' => 'Íàçàä', + 'profile' => 'Ïðîôèëü', + 'rating' => 'Îöåíêà', + 'ratio' => 'Ðåéòèíã', + 'receiver' => 'Ïîëó÷àòåëü', + 'repeat_password' => 'Ïîâòîð ïàðîëÿ', + 'request' => 'Çàïðîñ', + 'requester' => 'Çàïðîñèë', + 'requests' => 'Çàïðîñû', + 'requests_section' => 'Ñåêöèÿ çàïðîñîâ', + 'respect' => 'Ðåñïåêò', + 'rules' => 'Ïðàâèëà', + 'said_thanks' => 'Ñêàçàëè ñïàñèáî', + 'search' => 'Ïîèñê', + 'search_btn' => 'Èñêàòü', + 'search_requests' => 'Èñêàòü çàïðîñû', + 'search_results_for' => 'Ðåçóëüòàòû ïîèñêà äëÿ', + 'seeder' => 'Ðàçäàþùèé', + 'seeder_last_seen' => 'Ïîñëåäíèé ðàç áûë çäåñü', + 'seeders_l' => 'ðàçäàþùèõ', + 'seeding' => 'Ñèäèðóåò', + 'seeds' => 'Ñèä', + 'sender' => 'Îòïðàâèòåëü', + 'server_load' => 'Íàãðóçêà íà ñåðâåð', + 'show_all' => 'Ïîêàçàòü âñå', + 'show_data' => 'Ïîêàçàòü äàííûå', + 'show_my_requests' => 'Ïîñìîòðåòü ìîè çàïðîñû', + 'signup' => 'Ðåãèñòðàöèÿ', + 'signup_successful' => 'Óñïåøíàÿ ðåãèñòðàöèÿ', + 'size' => 'Ðàçìåð', + 'snatched' => 'Ñêà÷àí', + 'staff' => 'Àäìèíèñòðàöèÿ', + 'statistic' => 'Ñòàòèñòèêà', + 'subject' => 'Òåìà', + 'subscribe_last_comment' => 'Ïîñëåäíåå ñîîáùåíèå', + 'subscribe_list' => 'Ëèñò ïîäïèñêè', + 'subscribe_no' => 'Íåò íîâûõ êîììåòàðèåâ â òåìàõ, íà êîòîðûå âû ïîäïèñàíû.', + 'success' => 'Óñïåøíî', + 'successful_upload' => 'Óñïåøíàÿ çàëèâêà!', + 'sure_mark_delete' => 'Âû óâåðåíû, ÷òî õîòèòå óäàëèòü âûáðàííûå ñîîáùåíèÿ?', + 'sure_mark_read' => 'Âû óâåðåíû, ÷òî õîòèòå ïîìåòèòü âûáðàííûå ñîîáùåíèÿ êàê ïðî÷èòàííûå?', + 'sysop_account_activated' => 'Âàø àêêàóíò àêòèâèðîâàí! Âû àâòîìàòè÷åñêè âîøëè. Òåïåðü âû ìîæåòå ïåðåéòè íà ãëàâíóþ è íà÷àòü èñïîëüçîâàòü âàø àêêàóíò.', + 'sysop_activated' => 'Àêêàóíò àäìèíèñòðàòîðà óñïåøíî àêòèâèðîâàí', + 'taken_from_torrent' => 'Áåðåòñÿ èç òîððåíòà. Ïîæàëóéñòà, èñïîëüçóéòå ïîíÿòíûå èìåíà.', + 'thanks' => 'Ñïàñèáî', + 'thanks_added' => 'Ñïàñèáî äîáàâëåíî!', + 'thanks_for_registering' => 'Ñïàñèáî ÷òî çàðåãèñòðèðîâàëèñü íà %s! Òåïåðü âû ìîæåòå âîéòè â ñèñòåìó.', + 'this_account_activated' => 'Ýòîò àêêàóíò óæå àêòèâèðîâàí. Âû ìîæåòå âîéòè ñ íèì.', + 'times' => 'ðàç', + 'topten' => 'Òîï 10', + 'torrent' => 'Òîððåíò', + 'torrent_clients' => 'Òîððåíò Êëèåíòû', + 'torrent_details' => 'Äåòàëè òîððåíòà', + 'torrent_file' => 'Torrent ôàéë', + 'torrent_info' => 'Äàííûå î òîððåíòå', + 'torrent_name' => 'Íàçâàíèå', + 'torrent_not_selected' => 'Òîððåíò íå âûáðàí!', + 'torrents' => 'Òîððåíòû', + 'total' => 'Âñåãî', + 'tracker_dead_torrents' => 'Ìåðòâûõ Òîððåíòîâ', + 'tracker_leechers' => 'Êà÷àþùèõ', + 'tracker_peers' => 'Àêòèâíûõ ïîäêëþ÷åíèé', + 'tracker_seed_peer' => 'Ðàçäàþùèõ/Êà÷àþùèõ (%)', + 'tracker_seeders' => 'Ðàçäàþùèõ', + 'tracker_torrents' => 'Òîððåíòîâ', + 'external_seeders' => 'Âíåøíèõ Ðàçäàþùèõ', + 'external_leechers' => 'Âíåøíèõ Êà÷àþùèõ', + 'ttl' => 'TTL', + 'type' => 'Òèï', + 'ul_speed' => 'Ðàçäà÷à', + 'unable_to_create_account' => 'Íåâîçìîæíî ñîçäàòü àêêàóíò. Âîçìîæíî èìÿ ïîëüçîâàòåëÿ óæå çàíÿòî.', + 'unable_to_read_torrent' => 'Íåâîçìîæíî ïðî÷èòàòü òîððåíò ôàéë.', + 'upload' => 'Çàãðóçèòü', + 'upload_torrent' => 'Çàãðóçèòü òîððåíò', + 'uploaded' => 'Ðàçäàë', + 'uploadeder' => 'Ðàçäàåò', + 'user' => 'Þçåð', + 'user_menu' => 'Ïåðñîíàëüíîå Ìåíþ', + 'username' => 'Ëîãèí', + 'users' => 'Ïîëüçîâàòåëè', + 'users_disabled' => 'Îòêëþ÷åííûõ', + 'users_registered' => 'Çàðåãèñòðèðîâàííûõ', + 'users_unconfirmed' => 'Íåïîäòâåðæäåííûõ', + 'users_uploaders' => 'Àïëîàäåðîâ', + 'users_vips' => 'VIP', + 'users_warned' => 'Ïðåäóïðåæä¸ííûõ', + 'views' => 'Ïðîñìîòðîâ', + 'visible' => 'Âèäèìûé', + 'vote' => 'Ïðîãîëîñîâàòü', + 'vote_1' => 'Óæàñíî!', + 'vote_2' => 'Ïëîõî', + 'vote_3' => 'Íîðìàëüíî', + 'vote_4' => 'Õîðîøî', + 'vote_5' => 'Îòëè÷íî!', + 'voted' => 'Ãîëîñ äîáàâëåí!', + 'votes' => 'Ãîëîñîâ', + 'wait' => 'Îæèäàíèå', + 'welcome_back' => 'Ïðèâåò, ', + 'whos_online' => 'Ïîëüçîâàòåëè', + 'with' => 'ñ', + 'wrote_at' => 'Ïèñàë â', + 'yes' => 'Äà', + 'you_can_start_seeding' => 'Âû ìîæåòå íà÷èíàòü ðàçäà÷ó. Ó÷òèòå ÷òî òîððåíò íå áóäåò âèäåí ïîêà âû íå íà÷íåòå ðàçäàâàòü!', + 'you_have_no_bookmarks' => 'Ó âàñ íåò çàêëàäîê!', + 'you_have_voted_for_this_torrent' => 'âû îöåíèëè ýòîò òîððåíò êàê', + 'you_want_to_delete_x_click_here' => 'Âû õîòèòå óäàëèòü %s. Íàæìèòå ñþäà åñëè âû óâåðåíû.', + 'your_ip' => 'Âàø IP', + 'stats_female' => 'Äåâóøêè', + 'stats_male' => 'Ïàðíè', + 'stats_maxusers' => 'Ìåñò íà òðåêåðå', + 'peertable_port_open' => 'Ïîðò îòêðûò. Ýòîò ïèð ìîæåò ïîäêëþ÷àòñÿ ê ëþáîìó ïèðó.', + 'peertable_port_closed' => 'Ïîðò çàêðûò. Ðåêîìåíäîâàíî ïðîâåðèòü íàñòðîéêè Firwewall\'à.', + 'details_poster' => 'Ïîñòåð', + 'details_screenshot' => 'Ñêðèíøîò', + 'details_anonymous' => 'Àíîíèì', + 'details_multitracker' => 'Ìóëüòèòðåêåð', + 'details_update_multitracker' => 'Îáíîâèòü ìóëüòèòðåêåð', + 'details_update_last_mt_update' => 'Ïîñëåäíåå îáíîâëåíèå áûëî', + 'ajax_loading' => 'Çàãðóçêà. Ïîæàëóéñòà, ïîäîæäèòå...', + 'comments_list' => 'Ñïèñîê êîììåíòàðèåâ', + 'comments_add' => 'Äîáàâèòü êîììåíòàðèé', + 'logs' => 'Æóðíàë', + 'bonus' => 'Áîíóñ',); diff --git a/themes/TBDev/stdhead.php b/themes/TBDev/stdhead.php index 7ba2ba4..68dd056 100644 --- a/themes/TBDev/stdhead.php +++ b/themes/TBDev/stdhead.php @@ -170,13 +170,13 @@ function initSpoilers(context) { color=black>  :   Òîððåíòû:  + color=black>   <?=$tracker_lang['seeding'];?>   <?=$tracker_lang['leeching'];?> 
  • Òåêóùåå âðåìÿ: Çàãðóçêà... + : ... + +
    Èìÿ:Ðåéòèíã: Ñòàòóñ:
    Email:IP:Îòêëþ÷åí:
    Êîììåíòàðèé:Ìàñêà:Êëàññ: Ðàçäàë: Äîíîð: Ñêà÷àë: Ïðåäóïðåæäåí:Ñêà÷àë:
    "); print("
    "); print("
    :: {$tracker_lang['comments_list']}
    "); - print(""); + if ($CURUSER) + print(""); print("
    "); - print("Êîììåíòàðèåâ íåò. Æåëàåòå äîáàâèòü?"); + print("Êîììåíòàðèåâ íåò.".($CURUSER ? " Æåëàåòå äîáàâèòü?" : "")); print("

    "); - print(""); - print(""); - print("
     :: Áåç êîììåíòàðèåâ
    "); - //print("Âàøå èìÿ: "); - //print("{$CURUSER['username']}

    "); - print(""); - print("

    "); - textbbcode("comment","text",""); - print("
    "); - print("
    "); - print(""); - print(""); - print("
    "); + if ($CURUSER) { + print(""); + print(""); + print("
     :: Áåç êîììåíòàðèåâ
    "); + //print("Âàøå èìÿ: "); + //print("{$CURUSER['username']}

    "); + print("

    "); + print("
    "); + textbbcode("comment","text",""); + print("
    "); + print("
    "); + print(""); + print(""); + print("
    "); + } } else { list($pagertop, $pagerbottom, $limit) = pager($limited, $count, "details.php?id=$id&", array('lastpagedefault' => 1)); @@ -630,7 +634,8 @@ function update_multi() { print(""); print(""); print(""); print("
    "); print("
    :: {$tracker_lang['comments_list']}
    "); - print(""); + if ($CURUSER) + print(""); print("
    "); @@ -644,19 +649,21 @@ function update_multi() { print("
    "); - print(""); - print(""); - print("
     :: Äîáàâèòü êîììåíòàðèé ê òîððåíòó
    "); - //print("Âàøå èìÿ: "); - //print("{$CURUSER['username']}

    "); - print("

    "); - print("
    "); - print("
    ". textbbcode("comment","text","", 1) ."
    "); - print("
    "); - print("
    "); - print(""); - print(""); - print("
    "); + if ($CURUSER) { + print(""); + print(""); + print("
     :: Äîáàâèòü êîììåíòàðèé ê òîððåíòó
    "); + //print("Âàøå èìÿ: "); + //print("{$CURUSER['username']}

    "); + print("

    "); + print("
    "); + print("
    ". textbbcode("comment","text","", 1) ."
    "); + print("
    "); + print("
    "); + print(""); + print(""); + print("
    "); + } } stdfoot(); diff --git a/include/config.php b/include/config.php index 83f8bd6..5afae55 100644 --- a/include/config.php +++ b/include/config.php @@ -79,6 +79,7 @@ $check_for_working_mta = true; // Ïðîâåðÿòü ðàáîòó ïî÷òîâîãî MTA ïðè ðåãèñòðàöèè ïîëüçîâàòåëÿ (TCP connect @ domain:25) $force_private_tracker = true; // Yet not working $max_image_size = 1024*1024; // 1mb +$allow_guests_details = false; // Ðàçðåøèòü ãîñòÿì äîñòóï ê ñòðàíèöå äåòàëåé òîððåíòà $admin_email = 'admin@'.$_SERVER['HTTP_HOST']; // Ïî÷òà àäìèíèñòðàòîðà òðåêåðà, äëÿ ôîðìû îáðàòíîé ñâÿçè $website_name = 'TBDev'; // Êðàòêîå èìÿ ñàéòà, äëÿ ôîðìû îáðàòíîé ñâÿçè From 9c7f630595dc042b56b13a0a6b302a076fecbb2f Mon Sep 17 00:00:00 2001 From: Yuna Scatari Date: Fri, 11 Jul 2014 16:07:36 +0300 Subject: [PATCH 087/106] =?UTF-8?q?[BUGFIX]=20=D0=98=D1=81=D0=BF=D1=80?= =?UTF-8?q?=D0=B0=D0=B2=D0=B8=D0=BB=20=D0=BD=D0=B5=D0=B2=D0=B5=D1=80=D0=BD?= =?UTF-8?q?=D1=83=D1=8E=20=D1=83=D1=81=D1=82=D0=B0=D0=BD=D0=BE=D0=B2=D0=BA?= =?UTF-8?q?=D1=83=20=D0=BF=D0=B5=D1=80=D0=B2=D0=B8=D1=87=D0=BD=D0=BE=D0=B3?= =?UTF-8?q?=D0=BE=20announce=20[BUGFIX]=20=D0=98=D1=81=D0=BF=D1=80=D0=B0?= =?UTF-8?q?=D0=B2=D0=B8=D0=BB=20=D0=BD=D0=B5=D0=B1=D0=BE=D0=BB=D1=8C=D1=88?= =?UTF-8?q?=D1=83=D1=8E=20=D0=BF=D1=80=D0=BE=D0=B1=D0=BB=D0=B5=D0=BC=D1=83?= =?UTF-8?q?=20=D0=BE=D0=B1=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D0=BA=D0=B8=20?= =?UTF-8?q?=D1=82=D0=BE=D1=80=D1=80=D0=B5=D0=BD=D1=82-=D1=84=D0=B0=D0=B9?= =?UTF-8?q?=D0=BB=D0=B0,=20=D0=BF=D1=80=D0=B8=20=D0=B2=D0=BA=D0=BB=D1=8E?= =?UTF-8?q?=D1=87=D0=B5=D0=BD=D0=BD=D0=BE=D0=BC=20MT=20=D1=80=D0=B5=D0=B6?= =?UTF-8?q?=D0=B8=D0=BC=D0=B5,=20=D0=B8=20=D0=BE=D1=82=D1=81=D1=83=D1=82?= =?UTF-8?q?=D1=81=D1=82=D0=B2=D0=B8=D0=B8=20=D0=B2=20=D1=82=D0=BE=D1=80?= =?UTF-8?q?=D1=80=D0=B5=D0=BD=D1=82-=D1=84=D0=B0=D0=B9=D0=BB=D0=B5=20?= =?UTF-8?q?=D0=BF=D0=BE=D0=BB=D1=8F=20announce-list=20(=D0=B2=20=D1=82?= =?UTF-8?q?=D0=B0=D0=BA=D0=BE=D0=BC=20=D1=81=D0=BB=D1=83=D1=87=D0=B0=D0=B5?= =?UTF-8?q?=20=D1=81=D0=BE=D0=B7=D0=B4=D0=B0=D0=B5=D1=82=D1=81=D1=8F=20ann?= =?UTF-8?q?ounce-list=20=D0=B8=20=D1=83=D1=81=D1=82=D0=B0=D0=BD=D0=B0?= =?UTF-8?q?=D0=B2=D0=BB=D0=B8=D0=B2=D0=B0=D0=B5=D1=82=D1=81=D1=8F=20=D0=B0?= =?UTF-8?q?=D0=B4=D1=80=D0=B5=D1=81=D0=BE=D0=BC=20=D1=82=D1=80=D0=B5=D0=BA?= =?UTF-8?q?=D0=B5=D1=80=D0=B0=20=D0=BE=D0=B1=D1=8B=D1=87=D0=BD=D1=8B=D0=B9?= =?UTF-8?q?=20announce)=20[ENHANCEMENT]=20=D0=95=D1=81=D0=BB=D0=B8-=D0=B6?= =?UTF-8?q?=D0=B5=20=D0=BD=D0=B5=D1=82=20announce=20=D0=B8=20announce-list?= =?UTF-8?q?,=20=D0=B2=D1=8B=D0=B2=D0=BE=D0=B4=D0=B8=D1=82=D1=81=D1=8F=20?= =?UTF-8?q?=D1=81=D0=BE=D0=BE=D0=B1=D1=89=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=BE?= =?UTF-8?q?=20=D0=BD=D0=B5=D0=B4=D0=BE=D0=BF=D1=83=D1=81=D1=82=D0=B8=D0=BC?= =?UTF-8?q?=D0=BE=D1=81=D1=82=D0=B8=20=D1=82=D0=B0=D0=BA=D0=BE=D0=B3=D0=BE?= =?UTF-8?q?=20=D1=82=D0=BE=D1=80=D1=80=D0=B5=D0=BD=D1=82-=D1=84=D0=B0?= =?UTF-8?q?=D0=B9=D0=BB=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- takeupload.php | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/takeupload.php b/takeupload.php index 9f23b08..aa67ab1 100644 --- a/takeupload.php +++ b/takeupload.php @@ -153,7 +153,7 @@ function bark($msg) { } if ($multi_torrent == 'no') { - $dict['value']['announce'] = $announce_urls[0]; // change announce url to local + $dict['announce'] = $announce_urls[0]; // change announce url to local $dict['info']['private'] = 1; // add private tracker flag $dict['info']['source'] = "[$DEFAULTBASEURL] $SITENAME"; // add link for bitcomet users unset($dict['announce-list']); // remove multi-tracker capability @@ -177,6 +177,8 @@ function bark($msg) { $infohash = sha1(BEncode($dict['info'])); if ($multi_torrent == 'yes') { + if (empty($dict['announce-list']) && !empty($dict['announce'])) + $dict['announce-list'][] = array($dict['announce']); if (!empty($dict['announce-list'])) { $parsed_urls = array(); foreach ($dict['announce-list'] as $al_url) { @@ -194,7 +196,8 @@ function bark($msg) { // À âäðóã â òîððåíòå äâà îäèíàêîâûõ àííîíñåðà? Ïîòîìó REPLACE INTO sql_query('REPLACE INTO torrents_scrape (tid, info_hash, url) VALUES ('.implode(', ', array_map('sqlesc', array($next_id, $infohash, $al_url[0]))).')') or sqlerr(__FILE__,__LINE__); } - } + } else + stderr($tracker_lang['error'], "Â òîððåíò ôàéëå íåò announce-list è íå óêàçàí announce. Òàêîé ìóëüòèòðåêåðíûé òîððåíò èñïîëüçîâàòü íåëüçÿ."); } /*print_r($infohash); From dd1cfd9edec433fb5e9281d8c2813bf3a53a9f46 Mon Sep 17 00:00:00 2001 From: Yuna Scatari Date: Fri, 11 Jul 2014 16:24:58 +0300 Subject: [PATCH 088/106] =?UTF-8?q?[ENHANCEMENT]=20=D0=9F=D0=B5=D1=80?= =?UTF-8?q?=D0=B5=D0=B2=D0=BE=D0=B4=20takeedit.php=20=D0=BD=D0=B0=20=D0=BD?= =?UTF-8?q?=D0=BE=D0=B2=D1=83=D1=8E=20=D0=B1=D0=B8=D0=B1=D0=BB=D0=B8=D0=BE?= =?UTF-8?q?=D1=82=D0=B5=D0=BA=D1=83=20=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D1=8B?= =?UTF-8?q?=20=D1=81=20=D1=82=D0=BE=D1=80=D1=80=D0=B5=D0=BD=D1=82-=D1=84?= =?UTF-8?q?=D0=B0=D0=B9=D0=BB=D0=BE=D0=B2=20=D0=B8=20=D0=BF=D0=BE=D0=B4?= =?UTF-8?q?=D0=B3=D0=BE=D1=82=D0=BE=D0=B2=D0=BA=D0=B0=20=D0=B4=D0=BB=D1=8F?= =?UTF-8?q?=20=D0=BE=D1=81=D1=83=D1=89=D0=B5=D1=81=D1=82=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D1=8F=20=D0=BF=D0=B5=D1=80=D0=B5=D0=B7=D0=B0=D0=BB?= =?UTF-8?q?=D0=B8=D0=B2=D0=BA=D0=B8=20=D1=82=D0=BE=D1=80=D1=80=D0=B5=D0=BD?= =?UTF-8?q?=D1=82-=D1=84=D0=B0=D0=B9=D0=BB=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- takeedit.php | 62 +++++++++++++++++++++++++--------------------------- 1 file changed, 30 insertions(+), 32 deletions(-) diff --git a/takeedit.php b/takeedit.php index 7d6fc80..143bad5 100644 --- a/takeedit.php +++ b/takeedit.php @@ -26,7 +26,8 @@ // +--------------------------------------------------------------------------+ */ -require_once("include/benc.php"); +require_once("include/BDecode.php"); +require_once("include/BEncode.php"); require_once("include/bittorrent.php"); function bark($msg) { @@ -185,34 +186,31 @@ function dict_get($d, $k, $t) { bark("eek"); if (!filesize($tmpname)) bark("Ïóñòîé ôàéë!"); - $dict = bdec_file($tmpname, $max_torrent_size); + $dict = bdecode(file_get_contents($tmpname)); if (!isset($dict)) bark("×òî çà õðåíü òû çàãðóæàåøü? Ýòî íå áèíàðíî-êîäèðîâàíûé ôàéë!"); - list($info) = dict_check($dict, "info"); - list($dname, $plen, $pieces) = dict_check($info, "name(string):piece length(integer):pieces(string)"); + $info = $dict['info']; + list($dname, $plen, $pieces, $totallen) = array($info['name'], $info['piece length'], $info['pieces'], $info['length']); if (strlen($pieces) % 20 != 0) bark("invalid pieces"); $filelist = array(); - $totallen = dict_get($info, "length", "integer"); if (isset($totallen)) { $filelist[] = array($dname, $totallen); $torrent_type = "single"; } else { - $flist = dict_get($info, "files", "list"); + $flist = $info['files']; if (!isset($flist)) bark("missing both length and files"); if (!count($flist)) bark("no files"); $totallen = 0; foreach ($flist as $fn) { - list($ll, $ff) = dict_check($fn, "length(integer):path(list)"); + list($ll, $ff) = array($fn['length'], $fn['path']); $totallen += $ll; $ffa = array(); foreach ($ff as $ffe) { - if ($ffe["type"] != "string") - bark("filename error"); - $ffa[] = $ffe["value"]; + $ffa[] = $ffe; } if (!count($ffa)) bark("filename error"); @@ -227,32 +225,32 @@ function dict_get($d, $k, $t) { $torrent_type = "multi"; } - $dict['value']['announce']=bdec(benc_str($announce_urls[0])); // change announce url to local - $dict['value']['info']['value']['private']=bdec('i1e'); // add private tracker flag - $dict['value']['info']['value']['source']=bdec(benc_str( "[$DEFAULTBASEURL] $SITENAME")); // add link for bitcomet users - unset($dict['value']['announce-list']); // remove multi-tracker capability - unset($dict['value']['nodes']); // remove cached peers (Bitcomet & Azareus) - unset($dict['value']['info']['value']['crc32']); // remove crc32 - unset($dict['value']['info']['value']['ed2k']); // remove ed2k - unset($dict['value']['info']['value']['md5sum']); // remove md5sum - unset($dict['value']['info']['value']['sha1']); // remove sha1 - unset($dict['value']['info']['value']['tiger']); // remove tiger - unset($dict['value']['azureus_properties']); // remove azureus properties - $dict=bdec(benc($dict)); // double up on the becoding solves the occassional misgenerated infohash - $dict['value']['comment']=bdec(benc_str( "Òîððåíò ñîçäàí äëÿ '$SITENAME'")); // change torrent comment - $dict['value']['created by']=bdec(benc_str( "$CURUSER[username]")); // change created by - $dict['value']['publisher']=bdec(benc_str( "$CURUSER[username]")); // change publisher - $dict['value']['publisher.utf-8']=bdec(benc_str( "$CURUSER[username]")); // change publisher.utf-8 - $dict['value']['publisher-url']=bdec(benc_str( "$DEFAULTBASEURL/userdetails.php?id=$CURUSER[id]")); // change publisher-url - $dict['value']['publisher-url.utf-8']=bdec(benc_str( "$DEFAULTBASEURL/userdetails.php?id=$CURUSER[id]")); // change publisher-url.utf-8 - list($info) = dict_check($dict, "info"); - - $infohash = sha1($info["string"]); + $dict['announce'] = $announce_urls[0]; // change announce url to local + $dict['info']['private'] = 1; // add private tracker flag + $dict['info']['source'] = "[$DEFAULTBASEURL] $SITENAME"; // add link for bitcomet users + unset($dict['announce-list']); // remove multi-tracker capability + unset($dict['nodes']); // remove cached peers (Bitcomet & Azareus) + unset($dict['info']['crc32']); // remove crc32 + unset($dict['info']['ed2k']); // remove ed2k + unset($dict['info']['md5sum']); // remove md5sum + unset($dict['info']['sha1']); // remove sha1 + unset($dict['info']['tiger']); // remove tiger + unset($dict['azureus_properties']); // remove azureus properties + $dict = BDecode(BEncode($dict)); // double up on the becoding solves the occassional misgenerated infohash + $dict['comment'] = "Òîððåíò ñîçäàí äëÿ '$SITENAME'"; // change torrent comment + $dict['created by'] = "$CURUSER[username]"; // change created by + $dict['publisher'] = "$CURUSER[username]"; // change publisher + $dict['publisher.utf-8'] = "$CURUSER[username]"; // change publisher.utf-8 + $dict['publisher-url'] = "$DEFAULTBASEURL/userdetails.php?id=$CURUSER[id]"; // change publisher-url + $dict['publisher-url.utf-8'] = "$DEFAULTBASEURL/userdetails.php?id=$CURUSER[id]"; // change publisher-url.utf-8 + $infohash = sha1(BEncode($dict['info'])); + move_uploaded_file($tmpname, "$torrent_dir/$id.torrent"); $fp = fopen("$torrent_dir/$id.torrent", "w"); if ($fp) { - @fwrite($fp, benc($dict), strlen(benc($dict))); + $dict_str = BEncode($dict); + @fwrite($fp, $dict_str, strlen($dict_str)); fclose($fp); } From 9a9c1c2b04a343b9339055e4cff0b9ed14bedf59 Mon Sep 17 00:00:00 2001 From: Yuna Scatari Date: Mon, 14 Jul 2014 10:21:27 +0300 Subject: [PATCH 089/106] [BUGFIX] IE 11 compatibility fixes --- include/functions_global.php | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/include/functions_global.php b/include/functions_global.php index c1a3f14..f2972a9 100644 --- a/include/functions_global.php +++ b/include/functions_global.php @@ -103,13 +103,17 @@ function RowsTextarea(n, w) { var is_mac = (clientPC.indexOf("mac") != -1); function StoreCaret(text) { - if (text.createTextRange) { + if (document.selection) { text.caretPos = document.selection.createRange().duplicate(); + } else if (document.getSelection) { + text.caretPos = document.getSelection(); } } function FieldName(text, which) { - if (text.createTextRange) { + if (document.selection) { text.caretPos = document.selection.createRange().duplicate(); + } else if (document.getSelection) { + text.caretPos = document.getSelection(); } if (which != "") { var Field = eval("document.." + which); From d42b73ce3a0ef6f96b1dcc12643af0931ee85286 Mon Sep 17 00:00:00 2001 From: Yuna Scatari Date: Mon, 14 Jul 2014 14:26:01 +0300 Subject: [PATCH 090/106] [ENHANCEMENT] Update jQuery from 1.2.6 to 1.11.1 [ENHANCEMENT] Little slipstream of InsertCode function inside textbbcode() --- include/functions_global.php | 53 +++++------ js/jquery.js | 170 ++++++++++++++++++++++++++++++++--- js/jquery.migrate.js | 2 + themes/Gray/stdhead.php | 1 + themes/TBDev/stdhead.php | 1 + 5 files changed, 184 insertions(+), 43 deletions(-) create mode 100644 js/jquery.migrate.js diff --git a/include/functions_global.php b/include/functions_global.php index f2972a9..e3ec2ab 100644 --- a/include/functions_global.php +++ b/include/functions_global.php @@ -142,6 +142,22 @@ function AddSelectedText(Open, Close) { SelField.focus(); } } + function jqwrapText(element, openTag, closeTag) { + // This function is not working properly with IE, thus making workaround without JQ + if ((clientVer >= 4) && is_ie && is_win) { + AddSelectedText(openTag, closeTag); + } else { + var textArea = $(element); + var len = textArea.val().length; + var sel = textArea.getSelection(); + var start = sel.start; + var end = sel.end; + var selectedText = textArea.val().substring(start, end); + var replacement = openTag + selectedText + closeTag; + textArea.val(textArea.val().substring(0, start) + replacement + textArea.val().substring(end, len)); + } + } + function InsertCode(code, info, type, error) { if (code == 'name') { AddSelectedText('[b]' + info + '[/b]', '\n'); @@ -149,45 +165,18 @@ function InsertCode(code, info, type, error) { if (code == 'url') var url = prompt(info, 'http://'); if (code == 'mail') var url = prompt(info, ''); if (!url) return alert(error); - if ((clientVer >= 4) && is_ie && is_win) { - selection = document.selection.createRange().text; - if (!selection) { - var title = prompt(type, type); - AddSelectedText('[' + code + '=' + url + ']' + title + '[/' + code + ']', '\n'); - } else { - AddSelectedText('[' + code + '=' + url + ']', '[/' + code + ']'); - } - } else { - mozWrap(TxtFeld, '[' + code + '=' + url + ']', '[/' + code + ']'); - } + jqwrapText(TxtFeld, '[' + code + '=' + url + ']', '[/' + code + ']'); } else if (code == 'color' || code == 'family' || code == 'size') { - if ((clientVer >= 4) && is_ie && is_win) { - AddSelectedText('[' + code + '=' + info + ']', '[/' + code + ']'); - } else if (TxtFeld.selectionEnd && (TxtFeld.selectionEnd - TxtFeld.selectionStart > 0)) { - mozWrap(TxtFeld, '[' + code + '=' + info + ']', '[/' + code + ']'); - } + jqwrapText(TxtFeld, '[' + code + '=' + info + ']', '[/' + code + ']'); } else if (code == 'li' || code == 'hr') { - if ((clientVer >= 4) && is_ie && is_win) { - AddSelectedText('[' + code + ']', ''); - } else { - mozWrap(TxtFeld, '[' + code + ']', ''); - } + jqwrapText(TxtFeld, '[' + code + ']', ''); } else { - if ((clientVer >= 4) && is_ie && is_win) { - var selection = false; - selection = document.selection.createRange().text; - if (selection && code == 'quote') { - AddSelectedText('[' + code + ']' + selection + '[/' + code + ']', '\n'); - } else { - AddSelectedText('[' + code + ']', '[/' + code + ']'); - } - } else { - mozWrap(TxtFeld, '[' + code + ']', '[/' + code + ']'); - } + jqwrapText(TxtFeld, '[' + code + ']', '[/' + code + ']'); } } function mozWrap(txtarea, open, close) { + alert('mozWrap function is deprecated!'); var selLength = txtarea.textLength; var selStart = txtarea.selectionStart; var selEnd = txtarea.selectionEnd; diff --git a/js/jquery.js b/js/jquery.js index 95dd013..a436370 100644 --- a/js/jquery.js +++ b/js/jquery.js @@ -1,11 +1,159 @@ -/* - * jQuery 1.2.6 - New Wave Javascript - * - * Copyright (c) 2008 John Resig (jquery.com) - * Dual licensed under the MIT (MIT-LICENSE.txt) - * and GPL (GPL-LICENSE.txt) licenses. - * - * $Date: 2008-05-24 14:22:17 -0400 (Sat, 24 May 2008) $ - * $Rev: 5685 $ - */ -eval(function(p,a,c,k,e,r){e=function(c){return(c35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)r[e(c)]=k[c]||e(c);k=[function(e){return r[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('(H(){J w=1b.4M,3m$=1b.$;J D=1b.4M=1b.$=H(a,b){I 2B D.17.5j(a,b)};J u=/^[^<]*(<(.|\\s)+>)[^>]*$|^#(\\w+)$/,62=/^.[^:#\\[\\.]*$/,12;D.17=D.44={5j:H(d,b){d=d||S;G(d.16){7[0]=d;7.K=1;I 7}G(1j d=="23"){J c=u.2D(d);G(c&&(c[1]||!b)){G(c[1])d=D.4h([c[1]],b);N{J a=S.61(c[3]);G(a){G(a.2v!=c[3])I D().2q(d);I D(a)}d=[]}}N I D(b).2q(d)}N G(D.1D(d))I D(S)[D.17.27?"27":"43"](d);I 7.6Y(D.2d(d))},5w:"1.2.6",8G:H(){I 7.K},K:0,3p:H(a){I a==12?D.2d(7):7[a]},2I:H(b){J a=D(b);a.5n=7;I a},6Y:H(a){7.K=0;2p.44.1p.1w(7,a);I 7},P:H(a,b){I D.P(7,a,b)},5i:H(b){J a=-1;I D.2L(b&&b.5w?b[0]:b,7)},1K:H(c,a,b){J d=c;G(c.1q==56)G(a===12)I 7[0]&&D[b||"1K"](7[0],c);N{d={};d[c]=a}I 7.P(H(i){R(c 1n d)D.1K(b?7.V:7,c,D.1i(7,d[c],b,i,c))})},1g:H(b,a){G((b==\'2h\'||b==\'1Z\')&&3d(a)<0)a=12;I 7.1K(b,a,"2a")},1r:H(b){G(1j b!="49"&&b!=U)I 7.4E().3v((7[0]&&7[0].2z||S).5F(b));J a="";D.P(b||7,H(){D.P(7.3t,H(){G(7.16!=8)a+=7.16!=1?7.76:D.17.1r([7])})});I a},5z:H(b){G(7[0])D(b,7[0].2z).5y().39(7[0]).2l(H(){J a=7;1B(a.1x)a=a.1x;I a}).3v(7);I 7},8Y:H(a){I 7.P(H(){D(7).6Q().5z(a)})},8R:H(a){I 7.P(H(){D(7).5z(a)})},3v:H(){I 7.3W(19,M,Q,H(a){G(7.16==1)7.3U(a)})},6F:H(){I 7.3W(19,M,M,H(a){G(7.16==1)7.39(a,7.1x)})},6E:H(){I 7.3W(19,Q,Q,H(a){7.1d.39(a,7)})},5q:H(){I 7.3W(19,Q,M,H(a){7.1d.39(a,7.2H)})},3l:H(){I 7.5n||D([])},2q:H(b){J c=D.2l(7,H(a){I D.2q(b,a)});I 7.2I(/[^+>] [^+>]/.11(b)||b.1h("..")>-1?D.4r(c):c)},5y:H(e){J f=7.2l(H(){G(D.14.1f&&!D.4n(7)){J a=7.6o(M),5h=S.3h("1v");5h.3U(a);I D.4h([5h.4H])[0]}N I 7.6o(M)});J d=f.2q("*").5c().P(H(){G(7[E]!=12)7[E]=U});G(e===M)7.2q("*").5c().P(H(i){G(7.16==3)I;J c=D.L(7,"3w");R(J a 1n c)R(J b 1n c[a])D.W.1e(d[i],a,c[a][b],c[a][b].L)});I f},1E:H(b){I 7.2I(D.1D(b)&&D.3C(7,H(a,i){I b.1k(a,i)})||D.3g(b,7))},4Y:H(b){G(b.1q==56)G(62.11(b))I 7.2I(D.3g(b,7,M));N b=D.3g(b,7);J a=b.K&&b[b.K-1]!==12&&!b.16;I 7.1E(H(){I a?D.2L(7,b)<0:7!=b})},1e:H(a){I 7.2I(D.4r(D.2R(7.3p(),1j a==\'23\'?D(a):D.2d(a))))},3F:H(a){I!!a&&D.3g(a,7).K>0},7T:H(a){I 7.3F("."+a)},6e:H(b){G(b==12){G(7.K){J c=7[0];G(D.Y(c,"2A")){J e=c.64,63=[],15=c.15,2V=c.O=="2A-2V";G(e<0)I U;R(J i=2V?e:0,2f=2V?e+1:15.K;i<2f;i++){J d=15[i];G(d.2W){b=D.14.1f&&!d.at.2x.an?d.1r:d.2x;G(2V)I b;63.1p(b)}}I 63}N I(7[0].2x||"").1o(/\\r/g,"")}I 12}G(b.1q==4L)b+=\'\';I 7.P(H(){G(7.16!=1)I;G(b.1q==2p&&/5O|5L/.11(7.O))7.4J=(D.2L(7.2x,b)>=0||D.2L(7.34,b)>=0);N G(D.Y(7,"2A")){J a=D.2d(b);D("9R",7).P(H(){7.2W=(D.2L(7.2x,a)>=0||D.2L(7.1r,a)>=0)});G(!a.K)7.64=-1}N 7.2x=b})},2K:H(a){I a==12?(7[0]?7[0].4H:U):7.4E().3v(a)},7b:H(a){I 7.5q(a).21()},79:H(i){I 7.3s(i,i+1)},3s:H(){I 7.2I(2p.44.3s.1w(7,19))},2l:H(b){I 7.2I(D.2l(7,H(a,i){I b.1k(a,i,a)}))},5c:H(){I 7.1e(7.5n)},L:H(d,b){J a=d.1R(".");a[1]=a[1]?"."+a[1]:"";G(b===12){J c=7.5C("9z"+a[1]+"!",[a[0]]);G(c===12&&7.K)c=D.L(7[0],d);I c===12&&a[1]?7.L(a[0]):c}N I 7.1P("9u"+a[1]+"!",[a[0],b]).P(H(){D.L(7,d,b)})},3b:H(a){I 7.P(H(){D.3b(7,a)})},3W:H(g,f,h,d){J e=7.K>1,3x;I 7.P(H(){G(!3x){3x=D.4h(g,7.2z);G(h)3x.9o()}J b=7;G(f&&D.Y(7,"1T")&&D.Y(3x[0],"4F"))b=7.3H("22")[0]||7.3U(7.2z.3h("22"));J c=D([]);D.P(3x,H(){J a=e?D(7).5y(M)[0]:7;G(D.Y(a,"1m"))c=c.1e(a);N{G(a.16==1)c=c.1e(D("1m",a).21());d.1k(b,a)}});c.P(6T)})}};D.17.5j.44=D.17;H 6T(i,a){G(a.4d)D.3Y({1a:a.4d,31:Q,1O:"1m"});N D.5u(a.1r||a.6O||a.4H||"");G(a.1d)a.1d.37(a)}H 1z(){I+2B 8J}D.1l=D.17.1l=H(){J b=19[0]||{},i=1,K=19.K,4x=Q,15;G(b.1q==8I){4x=b;b=19[1]||{};i=2}G(1j b!="49"&&1j b!="H")b={};G(K==i){b=7;--i}R(;i-1}},6q:H(b,c,a){J e={};R(J d 1n c){e[d]=b.V[d];b.V[d]=c[d]}a.1k(b);R(J d 1n c)b.V[d]=e[d]},1g:H(d,e,c){G(e=="2h"||e=="1Z"){J b,3X={30:"5x",5g:"1G",18:"3I"},35=e=="2h"?["5e","6k"]:["5G","6i"];H 5b(){b=e=="2h"?d.8f:d.8c;J a=0,2C=0;D.P(35,H(){a+=3d(D.2a(d,"57"+7,M))||0;2C+=3d(D.2a(d,"2C"+7+"4b",M))||0});b-=29.83(a+2C)}G(D(d).3F(":4j"))5b();N D.6q(d,3X,5b);I 29.2f(0,b)}I D.2a(d,e,c)},2a:H(f,l,k){J e,V=f.V;H 3E(b){G(!D.14.2k)I Q;J a=3P.54(b,U);I!a||a.52("3E")==""}G(l=="1y"&&D.14.1f){e=D.1K(V,"1y");I e==""?"1":e}G(D.14.2G&&l=="18"){J d=V.50;V.50="0 7Y 7W";V.50=d}G(l.1I(/4i/i))l=y;G(!k&&V&&V[l])e=V[l];N G(3P.54){G(l.1I(/4i/i))l="4i";l=l.1o(/([A-Z])/g,"-$1").3y();J c=3P.54(f,U);G(c&&!3E(f))e=c.52(l);N{J g=[],2E=[],a=f,i=0;R(;a&&3E(a);a=a.1d)2E.6h(a);R(;i<2E.K;i++)G(3E(2E[i])){g[i]=2E[i].V.18;2E[i].V.18="3I"}e=l=="18"&&g[2E.K-1]!=U?"2F":(c&&c.52(l))||"";R(i=0;i]*?)\\/>/g,H(b,a,c){I c.1I(/^(aK|4f|7E|aG|4T|7A|aB|3n|az|ay|av)$/i)?b:a+">"});J f=D.3k(d).3y(),1v=h.3h("1v");J e=!f.1h("",""]||!f.1h("",""]||f.1I(/^<(aq|22|am|ak|ai)/)&&[1,"<1T>",""]||!f.1h("<4F")&&[2,"<1T><22>",""]||(!f.1h("<22><4F>",""]||!f.1h("<7E")&&[2,"<1T><22><7q>",""]||D.14.1f&&[1,"1v<1v>",""]||[0,"",""];1v.4H=e[1]+d+e[2];1B(e[0]--)1v=1v.5T;G(D.14.1f){J g=!f.1h("<1T")&&f.1h("<22")<0?1v.1x&&1v.1x.3t:e[1]=="<1T>"&&f.1h("<22")<0?1v.3t:[];R(J j=g.K-1;j>=0;--j)G(D.Y(g[j],"22")&&!g[j].3t.K)g[j].1d.37(g[j]);G(/^\\s/.11(d))1v.39(h.5F(d.1I(/^\\s*/)[0]),1v.1x)}d=D.2d(1v.3t)}G(d.K===0&&(!D.Y(d,"3V")&&!D.Y(d,"2A")))I;G(d[0]==12||D.Y(d,"3V")||d.15)k.1p(d);N k=D.2R(k,d)});I k},1K:H(d,f,c){G(!d||d.16==3||d.16==8)I 12;J e=!D.4n(d),40=c!==12,1f=D.14.1f;f=e&&D.3X[f]||f;G(d.2j){J g=/5Q|4d|V/.11(f);G(f=="2W"&&D.14.2k)d.1d.64;G(f 1n d&&e&&!g){G(40){G(f=="O"&&D.Y(d,"4T")&&d.1d)7p"O a3 a1\'t 9V 9U";d[f]=c}G(D.Y(d,"3V")&&d.7i(f))I d.7i(f).76;I d[f]}G(1f&&e&&f=="V")I D.1K(d.V,"9T",c);G(40)d.9Q(f,""+c);J h=1f&&e&&g?d.4G(f,2):d.4G(f);I h===U?12:h}G(1f&&f=="1y"){G(40){d.6B=1;d.1E=(d.1E||"").1o(/7f\\([^)]*\\)/,"")+(3r(c)+\'\'=="9L"?"":"7f(1y="+c*7a+")")}I d.1E&&d.1E.1h("1y=")>=0?(3d(d.1E.1I(/1y=([^)]*)/)[1])/7a)+\'\':""}f=f.1o(/-([a-z])/9H,H(a,b){I b.2r()});G(40)d[f]=c;I d[f]},3k:H(a){I(a||"").1o(/^\\s+|\\s+$/g,"")},2d:H(b){J a=[];G(b!=U){J i=b.K;G(i==U||b.1R||b.4I||b.1k)a[0]=b;N 1B(i)a[--i]=b[i]}I a},2L:H(b,a){R(J i=0,K=a.K;i*",7).21();1B(7.1x)7.37(7.1x)}},H(a,b){D.17[a]=H(){I 7.P(b,19)}});D.P(["6N","4b"],H(i,c){J b=c.3y();D.17[b]=H(a){I 7[0]==1b?D.14.2G&&S.1c["5t"+c]||D.14.2k&&1b["5s"+c]||S.70=="6Z"&&S.1C["5t"+c]||S.1c["5t"+c]:7[0]==S?29.2f(29.2f(S.1c["4y"+c],S.1C["4y"+c]),29.2f(S.1c["2i"+c],S.1C["2i"+c])):a==12?(7.K?D.1g(7[0],b):U):7.1g(b,a.1q==56?a:a+"2X")}});H 25(a,b){I a[0]&&3r(D.2a(a[0],b,M),10)||0}J C=D.14.2k&&3r(D.14.5B)<8H?"(?:[\\\\w*3m-]|\\\\\\\\.)":"(?:[\\\\w\\8F-\\8E*3m-]|\\\\\\\\.)",6L=2B 4v("^>\\\\s*("+C+"+)"),6J=2B 4v("^("+C+"+)(#)("+C+"+)"),6I=2B 4v("^([#.]?)("+C+"*)");D.1l({6H:{"":H(a,i,m){I m[2]=="*"||D.Y(a,m[2])},"#":H(a,i,m){I a.4G("2v")==m[2]},":":{8D:H(a,i,m){I im[3]-0},3a:H(a,i,m){I m[3]-0==i},79:H(a,i,m){I m[3]-0==i},3o:H(a,i){I i==0},3S:H(a,i,m,r){I i==r.K-1},6D:H(a,i){I i%2==0},6C:H(a,i){I i%2},"3o-4u":H(a){I a.1d.3H("*")[0]==a},"3S-4u":H(a){I D.3a(a.1d.5T,1,"4l")==a},"8z-4u":H(a){I!D.3a(a.1d.5T,2,"4l")},6W:H(a){I a.1x},4E:H(a){I!a.1x},8y:H(a,i,m){I(a.6O||a.8x||D(a).1r()||"").1h(m[3])>=0},4j:H(a){I"1G"!=a.O&&D.1g(a,"18")!="2F"&&D.1g(a,"5g")!="1G"},1G:H(a){I"1G"==a.O||D.1g(a,"18")=="2F"||D.1g(a,"5g")=="1G"},8w:H(a){I!a.3R},3R:H(a){I a.3R},4J:H(a){I a.4J},2W:H(a){I a.2W||D.1K(a,"2W")},1r:H(a){I"1r"==a.O},5O:H(a){I"5O"==a.O},5L:H(a){I"5L"==a.O},5p:H(a){I"5p"==a.O},3Q:H(a){I"3Q"==a.O},5o:H(a){I"5o"==a.O},6A:H(a){I"6A"==a.O},6z:H(a){I"6z"==a.O},2s:H(a){I"2s"==a.O||D.Y(a,"2s")},4T:H(a){I/4T|2A|6y|2s/i.11(a.Y)},3T:H(a,i,m){I D.2q(m[3],a).K},8t:H(a){I/h\\d/i.11(a.Y)},8s:H(a){I D.3C(D.3O,H(b){I a==b.T}).K}}},6x:[/^(\\[) *@?([\\w-]+) *([!*$^~=]*) *(\'?"?)(.*?)\\4 *\\]/,/^(:)([\\w-]+)\\("?\'?(.*?(\\(.*?\\))?[^(]*?)"?\'?\\)/,2B 4v("^([:.#]*)("+C+"+)")],3g:H(a,c,b){J d,1t=[];1B(a&&a!=d){d=a;J f=D.1E(a,c,b);a=f.t.1o(/^\\s*,\\s*/,"");1t=b?c=f.r:D.2R(1t,f.r)}I 1t},2q:H(t,o){G(1j t!="23")I[t];G(o&&o.16!=1&&o.16!=9)I[];o=o||S;J d=[o],2o=[],3S,Y;1B(t&&3S!=t){J r=[];3S=t;t=D.3k(t);J l=Q,3j=6L,m=3j.2D(t);G(m){Y=m[1].2r();R(J i=0;d[i];i++)R(J c=d[i].1x;c;c=c.2H)G(c.16==1&&(Y=="*"||c.Y.2r()==Y))r.1p(c);d=r;t=t.1o(3j,"");G(t.1h(" ")==0)6M;l=M}N{3j=/^([>+~])\\s*(\\w*)/i;G((m=3j.2D(t))!=U){r=[];J k={};Y=m[2].2r();m=m[1];R(J j=0,3i=d.K;j<3i;j++){J n=m=="~"||m=="+"?d[j].2H:d[j].1x;R(;n;n=n.2H)G(n.16==1){J g=D.L(n);G(m=="~"&&k[g])1X;G(!Y||n.Y.2r()==Y){G(m=="~")k[g]=M;r.1p(n)}G(m=="+")1X}}d=r;t=D.3k(t.1o(3j,""));l=M}}G(t&&!l){G(!t.1h(",")){G(o==d[0])d.4s();2o=D.2R(2o,d);r=d=[o];t=" "+t.6v(1,t.K)}N{J h=6J;J m=h.2D(t);G(m){m=[0,m[2],m[3],m[1]]}N{h=6I;m=h.2D(t)}m[2]=m[2].1o(/\\\\/g,"");J f=d[d.K-1];G(m[1]=="#"&&f&&f.61&&!D.4n(f)){J p=f.61(m[2]);G((D.14.1f||D.14.2G)&&p&&1j p.2v=="23"&&p.2v!=m[2])p=D(\'[@2v="\'+m[2]+\'"]\',f)[0];d=r=p&&(!m[3]||D.Y(p,m[3]))?[p]:[]}N{R(J i=0;d[i];i++){J a=m[1]=="#"&&m[3]?m[3]:m[1]!=""||m[0]==""?"*":m[2];G(a=="*"&&d[i].Y.3y()=="49")a="3n";r=D.2R(r,d[i].3H(a))}G(m[1]==".")r=D.5m(r,m[2]);G(m[1]=="#"){J e=[];R(J i=0;r[i];i++)G(r[i].4G("2v")==m[2]){e=[r[i]];1X}r=e}d=r}t=t.1o(h,"")}}G(t){J b=D.1E(t,r);d=r=b.r;t=D.3k(b.t)}}G(t)d=[];G(d&&o==d[0])d.4s();2o=D.2R(2o,d);I 2o},5m:H(r,m,a){m=" "+m+" ";J c=[];R(J i=0;r[i];i++){J b=(" "+r[i].1F+" ").1h(m)>=0;G(!a&&b||a&&!b)c.1p(r[i])}I c},1E:H(t,r,h){J d;1B(t&&t!=d){d=t;J p=D.6x,m;R(J i=0;p[i];i++){m=p[i].2D(t);G(m){t=t.8r(m[0].K);m[2]=m[2].1o(/\\\\/g,"");1X}}G(!m)1X;G(m[1]==":"&&m[2]=="4Y")r=62.11(m[3])?D.1E(m[3],r,M).r:D(r).4Y(m[3]);N G(m[1]==".")r=D.5m(r,m[2],h);N G(m[1]=="["){J g=[],O=m[3];R(J i=0,3i=r.K;i<3i;i++){J a=r[i],z=a[D.3X[m[2]]||m[2]];G(z==U||/5Q|4d|2W/.11(m[2]))z=D.1K(a,m[2])||\'\';G((O==""&&!!z||O=="="&&z==m[5]||O=="!="&&z!=m[5]||O=="^="&&z&&!z.1h(m[5])||O=="$="&&z.6v(z.K-m[5].K)==m[5]||(O=="*="||O=="~=")&&z.1h(m[5])>=0)^h)g.1p(a)}r=g}N G(m[1]==":"&&m[2]=="3a-4u"){J e={},g=[],11=/(-?)(\\d*)n((?:\\+|-)?\\d*)/.2D(m[3]=="6D"&&"2n"||m[3]=="6C"&&"2n+1"||!/\\D/.11(m[3])&&"8q+"+m[3]||m[3]),3o=(11[1]+(11[2]||1))-0,d=11[3]-0;R(J i=0,3i=r.K;i<3i;i++){J j=r[i],1d=j.1d,2v=D.L(1d);G(!e[2v]){J c=1;R(J n=1d.1x;n;n=n.2H)G(n.16==1)n.4q=c++;e[2v]=M}J b=Q;G(3o==0){G(j.4q==d)b=M}N G((j.4q-d)%3o==0&&(j.4q-d)/3o>=0)b=M;G(b^h)g.1p(j)}r=g}N{J f=D.6H[m[1]];G(1j f=="49")f=f[m[2]];G(1j f=="23")f=6u("Q||H(a,i){I "+f+";}");r=D.3C(r,H(a,i){I f(a,i,m,r)},h)}}I{r:r,t:t}},4S:H(b,c){J a=[],1t=b[c];1B(1t&&1t!=S){G(1t.16==1)a.1p(1t);1t=1t[c]}I a},3a:H(a,e,c,b){e=e||1;J d=0;R(;a;a=a[c])G(a.16==1&&++d==e)1X;I a},5v:H(n,a){J r=[];R(;n;n=n.2H){G(n.16==1&&n!=a)r.1p(n)}I r}});D.W={1e:H(f,i,g,e){G(f.16==3||f.16==8)I;G(D.14.1f&&f.4I)f=1b;G(!g.24)g.24=7.24++;G(e!=12){J h=g;g=7.3M(h,H(){I h.1w(7,19)});g.L=e}J j=D.L(f,"3w")||D.L(f,"3w",{}),1H=D.L(f,"1H")||D.L(f,"1H",H(){G(1j D!="12"&&!D.W.5k)I D.W.1H.1w(19.3L.T,19)});1H.T=f;D.P(i.1R(/\\s+/),H(c,b){J a=b.1R(".");b=a[0];g.O=a[1];J d=j[b];G(!d){d=j[b]={};G(!D.W.2t[b]||D.W.2t[b].4p.1k(f)===Q){G(f.3K)f.3K(b,1H,Q);N G(f.6t)f.6t("4o"+b,1H)}}d[g.24]=g;D.W.26[b]=M});f=U},24:1,26:{},21:H(e,h,f){G(e.16==3||e.16==8)I;J i=D.L(e,"3w"),1L,5i;G(i){G(h==12||(1j h=="23"&&h.8p(0)=="."))R(J g 1n i)7.21(e,g+(h||""));N{G(h.O){f=h.2y;h=h.O}D.P(h.1R(/\\s+/),H(b,a){J c=a.1R(".");a=c[0];G(i[a]){G(f)2U i[a][f.24];N R(f 1n i[a])G(!c[1]||i[a][f].O==c[1])2U i[a][f];R(1L 1n i[a])1X;G(!1L){G(!D.W.2t[a]||D.W.2t[a].4A.1k(e)===Q){G(e.6p)e.6p(a,D.L(e,"1H"),Q);N G(e.6n)e.6n("4o"+a,D.L(e,"1H"))}1L=U;2U i[a]}}})}R(1L 1n i)1X;G(!1L){J d=D.L(e,"1H");G(d)d.T=U;D.3b(e,"3w");D.3b(e,"1H")}}},1P:H(h,c,f,g,i){c=D.2d(c);G(h.1h("!")>=0){h=h.3s(0,-1);J a=M}G(!f){G(7.26[h])D("*").1e([1b,S]).1P(h,c)}N{G(f.16==3||f.16==8)I 12;J b,1L,17=D.1D(f[h]||U),W=!c[0]||!c[0].32;G(W){c.6h({O:h,2J:f,32:H(){},3J:H(){},4C:1z()});c[0][E]=M}c[0].O=h;G(a)c[0].6m=M;J d=D.L(f,"1H");G(d)b=d.1w(f,c);G((!17||(D.Y(f,\'a\')&&h=="4V"))&&f["4o"+h]&&f["4o"+h].1w(f,c)===Q)b=Q;G(W)c.4s();G(i&&D.1D(i)){1L=i.1w(f,b==U?c:c.7d(b));G(1L!==12)b=1L}G(17&&g!==Q&&b!==Q&&!(D.Y(f,\'a\')&&h=="4V")){7.5k=M;1U{f[h]()}1V(e){}}7.5k=Q}I b},1H:H(b){J a,1L,38,5f,4m;b=19[0]=D.W.6l(b||1b.W);38=b.O.1R(".");b.O=38[0];38=38[1];5f=!38&&!b.6m;4m=(D.L(7,"3w")||{})[b.O];R(J j 1n 4m){J c=4m[j];G(5f||c.O==38){b.2y=c;b.L=c.L;1L=c.1w(7,19);G(a!==Q)a=1L;G(1L===Q){b.32();b.3J()}}}I a},6l:H(b){G(b[E]==M)I b;J d=b;b={8o:d};J c="8n 8m 8l 8k 2s 8j 47 5d 6j 5E 8i L 8h 8g 4K 2y 5a 59 8e 8b 58 6f 8a 88 4k 87 86 84 6d 2J 4C 6c O 82 81 35".1R(" ");R(J i=c.K;i;i--)b[c[i]]=d[c[i]];b[E]=M;b.32=H(){G(d.32)d.32();d.80=Q};b.3J=H(){G(d.3J)d.3J();d.7Z=M};b.4C=b.4C||1z();G(!b.2J)b.2J=b.6d||S;G(b.2J.16==3)b.2J=b.2J.1d;G(!b.4k&&b.4K)b.4k=b.4K==b.2J?b.6c:b.4K;G(b.58==U&&b.5d!=U){J a=S.1C,1c=S.1c;b.58=b.5d+(a&&a.2e||1c&&1c.2e||0)-(a.6b||0);b.6f=b.6j+(a&&a.2c||1c&&1c.2c||0)-(a.6a||0)}G(!b.35&&((b.47||b.47===0)?b.47:b.5a))b.35=b.47||b.5a;G(!b.59&&b.5E)b.59=b.5E;G(!b.35&&b.2s)b.35=(b.2s&1?1:(b.2s&2?3:(b.2s&4?2:0)));I b},3M:H(a,b){b.24=a.24=a.24||b.24||7.24++;I b},2t:{27:{4p:H(){55();I},4A:H(){I}},3D:{4p:H(){G(D.14.1f)I Q;D(7).2O("53",D.W.2t.3D.2y);I M},4A:H(){G(D.14.1f)I Q;D(7).4e("53",D.W.2t.3D.2y);I M},2y:H(a){G(F(a,7))I M;a.O="3D";I D.W.1H.1w(7,19)}},3N:{4p:H(){G(D.14.1f)I Q;D(7).2O("51",D.W.2t.3N.2y);I M},4A:H(){G(D.14.1f)I Q;D(7).4e("51",D.W.2t.3N.2y);I M},2y:H(a){G(F(a,7))I M;a.O="3N";I D.W.1H.1w(7,19)}}}};D.17.1l({2O:H(c,a,b){I c=="4X"?7.2V(c,a,b):7.P(H(){D.W.1e(7,c,b||a,b&&a)})},2V:H(d,b,c){J e=D.W.3M(c||b,H(a){D(7).4e(a,e);I(c||b).1w(7,19)});I 7.P(H(){D.W.1e(7,d,e,c&&b)})},4e:H(a,b){I 7.P(H(){D.W.21(7,a,b)})},1P:H(c,a,b){I 7.P(H(){D.W.1P(c,a,7,M,b)})},5C:H(c,a,b){I 7[0]&&D.W.1P(c,a,7[0],Q,b)},2m:H(b){J c=19,i=1;1B(i=0){J i=g.3s(e,g.K);g=g.3s(0,e)}c=c||H(){};J f="2P";G(d)G(D.1D(d)){c=d;d=U}N{d=D.3n(d);f="6g"}J h=7;D.3Y({1a:g,O:f,1O:"2K",L:d,1J:H(a,b){G(b=="1W"||b=="7J")h.2K(i?D("<1v/>").3v(a.4U.1o(/<1m(.|\\s)*?\\/1m>/g,"")).2q(i):a.4U);h.P(c,[a.4U,b,a])}});I 7},aL:H(){I D.3n(7.7I())},7I:H(){I 7.2l(H(){I D.Y(7,"3V")?D.2d(7.aH):7}).1E(H(){I 7.34&&!7.3R&&(7.4J||/2A|6y/i.11(7.Y)||/1r|1G|3Q/i.11(7.O))}).2l(H(i,c){J b=D(7).6e();I b==U?U:b.1q==2p?D.2l(b,H(a,i){I{34:c.34,2x:a}}):{34:c.34,2x:b}}).3p()}});D.P("7H,7G,7F,7D,7C,7B".1R(","),H(i,o){D.17[o]=H(f){I 7.2O(o,f)}});J B=1z();D.1l({3p:H(d,b,a,c){G(D.1D(b)){a=b;b=U}I D.3Y({O:"2P",1a:d,L:b,1W:a,1O:c})},aE:H(b,a){I D.3p(b,U,a,"1m")},aD:H(c,b,a){I D.3p(c,b,a,"3z")},aC:H(d,b,a,c){G(D.1D(b)){a=b;b={}}I D.3Y({O:"6g",1a:d,L:b,1W:a,1O:c})},aA:H(a){D.1l(D.60,a)},60:{1a:5Z.5Q,26:M,O:"2P",2T:0,7z:"4R/x-ax-3V-aw",7x:M,31:M,L:U,5Y:U,3Q:U,4Q:{2N:"4R/2N, 1r/2N",2K:"1r/2K",1m:"1r/4t, 4R/4t",3z:"4R/3z, 1r/4t",1r:"1r/as",4w:"*/*"}},4z:{},3Y:H(s){s=D.1l(M,s,D.1l(M,{},D.60,s));J g,2Z=/=\\?(&|$)/g,1u,L,O=s.O.2r();G(s.L&&s.7x&&1j s.L!="23")s.L=D.3n(s.L);G(s.1O=="4P"){G(O=="2P"){G(!s.1a.1I(2Z))s.1a+=(s.1a.1I(/\\?/)?"&":"?")+(s.4P||"7u")+"=?"}N G(!s.L||!s.L.1I(2Z))s.L=(s.L?s.L+"&":"")+(s.4P||"7u")+"=?";s.1O="3z"}G(s.1O=="3z"&&(s.L&&s.L.1I(2Z)||s.1a.1I(2Z))){g="4P"+B++;G(s.L)s.L=(s.L+"").1o(2Z,"="+g+"$1");s.1a=s.1a.1o(2Z,"="+g+"$1");s.1O="1m";1b[g]=H(a){L=a;1W();1J();1b[g]=12;1U{2U 1b[g]}1V(e){}G(i)i.37(h)}}G(s.1O=="1m"&&s.1Y==U)s.1Y=Q;G(s.1Y===Q&&O=="2P"){J j=1z();J k=s.1a.1o(/(\\?|&)3m=.*?(&|$)/,"$ap="+j+"$2");s.1a=k+((k==s.1a)?(s.1a.1I(/\\?/)?"&":"?")+"3m="+j:"")}G(s.L&&O=="2P"){s.1a+=(s.1a.1I(/\\?/)?"&":"?")+s.L;s.L=U}G(s.26&&!D.4O++)D.W.1P("7H");J n=/^(?:\\w+:)?\\/\\/([^\\/?#]+)/;G(s.1O=="1m"&&O=="2P"&&n.11(s.1a)&&n.2D(s.1a)[1]!=5Z.al){J i=S.3H("6w")[0];J h=S.3h("1m");h.4d=s.1a;G(s.7t)h.aj=s.7t;G(!g){J l=Q;h.ah=h.ag=H(){G(!l&&(!7.3f||7.3f=="68"||7.3f=="1J")){l=M;1W();1J();i.37(h)}}}i.3U(h);I 12}J m=Q;J c=1b.7s?2B 7s("ae.ac"):2B 7r();G(s.5Y)c.6R(O,s.1a,s.31,s.5Y,s.3Q);N c.6R(O,s.1a,s.31);1U{G(s.L)c.4B("ab-aa",s.7z);G(s.5S)c.4B("a9-5R-a8",D.4z[s.1a]||"a7, a6 a5 a4 5N:5N:5N a2");c.4B("X-9Z-9Y","7r");c.4B("9W",s.1O&&s.4Q[s.1O]?s.4Q[s.1O]+", */*":s.4Q.4w)}1V(e){}G(s.7m&&s.7m(c,s)===Q){s.26&&D.4O--;c.7l();I Q}G(s.26)D.W.1P("7B",[c,s]);J d=H(a){G(!m&&c&&(c.3f==4||a=="2T")){m=M;G(f){7k(f);f=U}1u=a=="2T"&&"2T"||!D.7j(c)&&"3e"||s.5S&&D.7h(c,s.1a)&&"7J"||"1W";G(1u=="1W"){1U{L=D.6X(c,s.1O,s.9S)}1V(e){1u="5J"}}G(1u=="1W"){J b;1U{b=c.5I("7g-5R")}1V(e){}G(s.5S&&b)D.4z[s.1a]=b;G(!g)1W()}N D.5H(s,c,1u);1J();G(s.31)c=U}};G(s.31){J f=4I(d,13);G(s.2T>0)3B(H(){G(c){c.7l();G(!m)d("2T")}},s.2T)}1U{c.9P(s.L)}1V(e){D.5H(s,c,U,e)}G(!s.31)d();H 1W(){G(s.1W)s.1W(L,1u);G(s.26)D.W.1P("7C",[c,s])}H 1J(){G(s.1J)s.1J(c,1u);G(s.26)D.W.1P("7F",[c,s]);G(s.26&&!--D.4O)D.W.1P("7G")}I c},5H:H(s,a,b,e){G(s.3e)s.3e(a,b,e);G(s.26)D.W.1P("7D",[a,s,e])},4O:0,7j:H(a){1U{I!a.1u&&5Z.9O=="5p:"||(a.1u>=7e&&a.1u<9N)||a.1u==7c||a.1u==9K||D.14.2k&&a.1u==12}1V(e){}I Q},7h:H(a,c){1U{J b=a.5I("7g-5R");I a.1u==7c||b==D.4z[c]||D.14.2k&&a.1u==12}1V(e){}I Q},6X:H(a,c,b){J d=a.5I("9J-O"),2N=c=="2N"||!c&&d&&d.1h("2N")>=0,L=2N?a.9I:a.4U;G(2N&&L.1C.2j=="5J")7p"5J";G(b)L=b(L,c);G(c=="1m")D.5u(L);G(c=="3z")L=6u("("+L+")");I L},3n:H(a){J s=[];G(a.1q==2p||a.5w)D.P(a,H(){s.1p(3u(7.34)+"="+3u(7.2x))});N R(J j 1n a)G(a[j]&&a[j].1q==2p)D.P(a[j],H(){s.1p(3u(j)+"="+3u(7))});N s.1p(3u(j)+"="+3u(D.1D(a[j])?a[j]():a[j]));I s.6s("&").1o(/%20/g,"+")}});D.17.1l({1N:H(c,b){I c?7.2g({1Z:"1N",2h:"1N",1y:"1N"},c,b):7.1E(":1G").P(H(){7.V.18=7.5D||"";G(D.1g(7,"18")=="2F"){J a=D("<"+7.2j+" />").6P("1c");7.V.18=a.1g("18");G(7.V.18=="2F")7.V.18="3I";a.21()}}).3l()},1M:H(b,a){I b?7.2g({1Z:"1M",2h:"1M",1y:"1M"},b,a):7.1E(":4j").P(H(){7.5D=7.5D||D.1g(7,"18");7.V.18="2F"}).3l()},78:D.17.2m,2m:H(a,b){I D.1D(a)&&D.1D(b)?7.78.1w(7,19):a?7.2g({1Z:"2m",2h:"2m",1y:"2m"},a,b):7.P(H(){D(7)[D(7).3F(":1G")?"1N":"1M"]()})},9G:H(b,a){I 7.2g({1Z:"1N"},b,a)},9F:H(b,a){I 7.2g({1Z:"1M"},b,a)},9E:H(b,a){I 7.2g({1Z:"2m"},b,a)},9D:H(b,a){I 7.2g({1y:"1N"},b,a)},9M:H(b,a){I 7.2g({1y:"1M"},b,a)},9C:H(c,a,b){I 7.2g({1y:a},c,b)},2g:H(k,j,i,g){J h=D.77(j,i,g);I 7[h.36===Q?"P":"36"](H(){G(7.16!=1)I Q;J f=D.1l({},h),p,1G=D(7).3F(":1G"),46=7;R(p 1n k){G(k[p]=="1M"&&1G||k[p]=="1N"&&!1G)I f.1J.1k(7);G(p=="1Z"||p=="2h"){f.18=D.1g(7,"18");f.33=7.V.33}}G(f.33!=U)7.V.33="1G";f.45=D.1l({},k);D.P(k,H(c,a){J e=2B D.28(46,f,c);G(/2m|1N|1M/.11(a))e[a=="2m"?1G?"1N":"1M":a](k);N{J b=a.6r().1I(/^([+-]=)?([\\d+-.]+)(.*)$/),2b=e.1t(M)||0;G(b){J d=3d(b[2]),2M=b[3]||"2X";G(2M!="2X"){46.V[c]=(d||1)+2M;2b=((d||1)/e.1t(M))*2b;46.V[c]=2b+2M}G(b[1])d=((b[1]=="-="?-1:1)*d)+2b;e.3G(2b,d,2M)}N e.3G(2b,a,"")}});I M})},36:H(a,b){G(D.1D(a)||(a&&a.1q==2p)){b=a;a="28"}G(!a||(1j a=="23"&&!b))I A(7[0],a);I 7.P(H(){G(b.1q==2p)A(7,a,b);N{A(7,a).1p(b);G(A(7,a).K==1)b.1k(7)}})},9X:H(b,c){J a=D.3O;G(b)7.36([]);7.P(H(){R(J i=a.K-1;i>=0;i--)G(a[i].T==7){G(c)a[i](M);a.7n(i,1)}});G(!c)7.5A();I 7}});J A=H(b,c,a){G(b){c=c||"28";J q=D.L(b,c+"36");G(!q||a)q=D.L(b,c+"36",D.2d(a))}I q};D.17.5A=H(a){a=a||"28";I 7.P(H(){J q=A(7,a);q.4s();G(q.K)q[0].1k(7)})};D.1l({77:H(b,a,c){J d=b&&b.1q==a0?b:{1J:c||!c&&a||D.1D(b)&&b,2u:b,41:c&&a||a&&a.1q!=9t&&a};d.2u=(d.2u&&d.2u.1q==4L?d.2u:D.28.5K[d.2u])||D.28.5K.74;d.5M=d.1J;d.1J=H(){G(d.36!==Q)D(7).5A();G(D.1D(d.5M))d.5M.1k(7)};I d},41:{73:H(p,n,b,a){I b+a*p},5P:H(p,n,b,a){I((-29.9r(p*29.9q)/2)+0.5)*a+b}},3O:[],48:U,28:H(b,c,a){7.15=c;7.T=b;7.1i=a;G(!c.3Z)c.3Z={}}});D.28.44={4D:H(){G(7.15.2Y)7.15.2Y.1k(7.T,7.1z,7);(D.28.2Y[7.1i]||D.28.2Y.4w)(7);G(7.1i=="1Z"||7.1i=="2h")7.T.V.18="3I"},1t:H(a){G(7.T[7.1i]!=U&&7.T.V[7.1i]==U)I 7.T[7.1i];J r=3d(D.1g(7.T,7.1i,a));I r&&r>-9p?r:3d(D.2a(7.T,7.1i))||0},3G:H(c,b,d){7.5V=1z();7.2b=c;7.3l=b;7.2M=d||7.2M||"2X";7.1z=7.2b;7.2S=7.4N=0;7.4D();J e=7;H t(a){I e.2Y(a)}t.T=7.T;D.3O.1p(t);G(D.48==U){D.48=4I(H(){J a=D.3O;R(J i=0;i7.15.2u+7.5V){7.1z=7.3l;7.2S=7.4N=1;7.4D();7.15.45[7.1i]=M;J b=M;R(J i 1n 7.15.45)G(7.15.45[i]!==M)b=Q;G(b){G(7.15.18!=U){7.T.V.33=7.15.33;7.T.V.18=7.15.18;G(D.1g(7.T,"18")=="2F")7.T.V.18="3I"}G(7.15.1M)7.T.V.18="2F";G(7.15.1M||7.15.1N)R(J p 1n 7.15.45)D.1K(7.T.V,p,7.15.3Z[p])}G(b)7.15.1J.1k(7.T);I Q}N{J n=t-7.5V;7.4N=n/7.15.2u;7.2S=D.41[7.15.41||(D.41.5P?"5P":"73")](7.4N,n,0,1,7.15.2u);7.1z=7.2b+((7.3l-7.2b)*7.2S);7.4D()}I M}};D.1l(D.28,{5K:{9l:9j,9i:7e,74:9g},2Y:{2e:H(a){a.T.2e=a.1z},2c:H(a){a.T.2c=a.1z},1y:H(a){D.1K(a.T.V,"1y",a.1z)},4w:H(a){a.T.V[a.1i]=a.1z+a.2M}}});D.17.2i=H(){J b=0,1S=0,T=7[0],3q;G(T)ao(D.14){J d=T.1d,4a=T,1s=T.1s,1Q=T.2z,5U=2k&&3r(5B)<9c&&!/9a/i.11(v),1g=D.2a,3c=1g(T,"30")=="3c";G(T.7y){J c=T.7y();1e(c.1A+29.2f(1Q.1C.2e,1Q.1c.2e),c.1S+29.2f(1Q.1C.2c,1Q.1c.2c));1e(-1Q.1C.6b,-1Q.1C.6a)}N{1e(T.5X,T.5W);1B(1s){1e(1s.5X,1s.5W);G(42&&!/^t(98|d|h)$/i.11(1s.2j)||2k&&!5U)2C(1s);G(!3c&&1g(1s,"30")=="3c")3c=M;4a=/^1c$/i.11(1s.2j)?4a:1s;1s=1s.1s}1B(d&&d.2j&&!/^1c|2K$/i.11(d.2j)){G(!/^96|1T.*$/i.11(1g(d,"18")))1e(-d.2e,-d.2c);G(42&&1g(d,"33")!="4j")2C(d);d=d.1d}G((5U&&(3c||1g(4a,"30")=="5x"))||(42&&1g(4a,"30")!="5x"))1e(-1Q.1c.5X,-1Q.1c.5W);G(3c)1e(29.2f(1Q.1C.2e,1Q.1c.2e),29.2f(1Q.1C.2c,1Q.1c.2c))}3q={1S:1S,1A:b}}H 2C(a){1e(D.2a(a,"6V",M),D.2a(a,"6U",M))}H 1e(l,t){b+=3r(l,10)||0;1S+=3r(t,10)||0}I 3q};D.17.1l({30:H(){J a=0,1S=0,3q;G(7[0]){J b=7.1s(),2i=7.2i(),4c=/^1c|2K$/i.11(b[0].2j)?{1S:0,1A:0}:b.2i();2i.1S-=25(7,\'94\');2i.1A-=25(7,\'aF\');4c.1S+=25(b,\'6U\');4c.1A+=25(b,\'6V\');3q={1S:2i.1S-4c.1S,1A:2i.1A-4c.1A}}I 3q},1s:H(){J a=7[0].1s;1B(a&&(!/^1c|2K$/i.11(a.2j)&&D.1g(a,\'30\')==\'93\'))a=a.1s;I D(a)}});D.P([\'5e\',\'5G\'],H(i,b){J c=\'4y\'+b;D.17[c]=H(a){G(!7[0])I;I a!=12?7.P(H(){7==1b||7==S?1b.92(!i?a:D(1b).2e(),i?a:D(1b).2c()):7[c]=a}):7[0]==1b||7[0]==S?46[i?\'aI\':\'aJ\']||D.71&&S.1C[c]||S.1c[c]:7[0][c]}});D.P(["6N","4b"],H(i,b){J c=i?"5e":"5G",4f=i?"6k":"6i";D.17["5s"+b]=H(){I 7[b.3y()]()+25(7,"57"+c)+25(7,"57"+4f)};D.17["90"+b]=H(a){I 7["5s"+b]()+25(7,"2C"+c+"4b")+25(7,"2C"+4f+"4b")+(a?25(7,"6S"+c)+25(7,"6S"+4f):0)}})})();',62,669,'|||||||this|||||||||||||||||||||||||||||||||||if|function|return|var|length|data|true|else|type|each|false|for|document|elem|null|style|event||nodeName|||test|undefined||browser|options|nodeType|fn|display|arguments|url|window|body|parentNode|add|msie|css|indexOf|prop|typeof|call|extend|script|in|replace|push|constructor|text|offsetParent|cur|status|div|apply|firstChild|opacity|now|left|while|documentElement|isFunction|filter|className|hidden|handle|match|complete|attr|ret|hide|show|dataType|trigger|doc|split|top|table|try|catch|success|break|cache|height||remove|tbody|string|guid|num|global|ready|fx|Math|curCSS|start|scrollTop|makeArray|scrollLeft|max|animate|width|offset|tagName|safari|map|toggle||done|Array|find|toUpperCase|button|special|duration|id|copy|value|handler|ownerDocument|select|new|border|exec|stack|none|opera|nextSibling|pushStack|target|html|inArray|unit|xml|bind|GET|isReady|merge|pos|timeout|delete|one|selected|px|step|jsre|position|async|preventDefault|overflow|name|which|queue|removeChild|namespace|insertBefore|nth|removeData|fixed|parseFloat|error|readyState|multiFilter|createElement|rl|re|trim|end|_|param|first|get|results|parseInt|slice|childNodes|encodeURIComponent|append|events|elems|toLowerCase|json|readyList|setTimeout|grep|mouseenter|color|is|custom|getElementsByTagName|block|stopPropagation|addEventListener|callee|proxy|mouseleave|timers|defaultView|password|disabled|last|has|appendChild|form|domManip|props|ajax|orig|set|easing|mozilla|load|prototype|curAnim|self|charCode|timerId|object|offsetChild|Width|parentOffset|src|unbind|br|currentStyle|clean|float|visible|relatedTarget|previousSibling|handlers|isXMLDoc|on|setup|nodeIndex|unique|shift|javascript|child|RegExp|_default|deep|scroll|lastModified|teardown|setRequestHeader|timeStamp|update|empty|tr|getAttribute|innerHTML|setInterval|checked|fromElement|Number|jQuery|state|active|jsonp|accepts|application|dir|input|responseText|click|styleSheets|unload|not|lastToggle|outline|mouseout|getPropertyValue|mouseover|getComputedStyle|bindReady|String|padding|pageX|metaKey|keyCode|getWH|andSelf|clientX|Left|all|visibility|container|index|init|triggered|removeAttribute|classFilter|prevObject|submit|file|after|windowData|inner|client|globalEval|sibling|jquery|absolute|clone|wrapAll|dequeue|version|triggerHandler|oldblock|ctrlKey|createTextNode|Top|handleError|getResponseHeader|parsererror|speeds|checkbox|old|00|radio|swing|href|Modified|ifModified|lastChild|safari2|startTime|offsetTop|offsetLeft|username|location|ajaxSettings|getElementById|isSimple|values|selectedIndex|runtimeStyle|rsLeft|_load|loaded|DOMContentLoaded|clientTop|clientLeft|toElement|srcElement|val|pageY|POST|unshift|Bottom|clientY|Right|fix|exclusive|detachEvent|cloneNode|removeEventListener|swap|toString|join|attachEvent|eval|substr|head|parse|textarea|reset|image|zoom|odd|even|before|prepend|exclude|expr|quickClass|quickID|uuid|quickChild|continue|Height|textContent|appendTo|contents|open|margin|evalScript|borderTopWidth|borderLeftWidth|parent|httpData|setArray|CSS1Compat|compatMode|boxModel|cssFloat|linear|def|webkit|nodeValue|speed|_toggle|eq|100|replaceWith|304|concat|200|alpha|Last|httpNotModified|getAttributeNode|httpSuccess|clearInterval|abort|beforeSend|splice|styleFloat|throw|colgroup|XMLHttpRequest|ActiveXObject|scriptCharset|callback|fieldset|multiple|processData|getBoundingClientRect|contentType|link|ajaxSend|ajaxSuccess|ajaxError|col|ajaxComplete|ajaxStop|ajaxStart|serializeArray|notmodified|keypress|keydown|change|mouseup|mousedown|dblclick|focus|blur|stylesheet|hasClass|rel|doScroll|black|hover|solid|cancelBubble|returnValue|wheelDelta|view|round|shiftKey|resize|screenY|screenX|relatedNode|mousemove|prevValue|originalTarget|offsetHeight|keyup|newValue|offsetWidth|eventPhase|detail|currentTarget|cancelable|bubbles|attrName|attrChange|altKey|originalEvent|charAt|0n|substring|animated|header|noConflict|line|enabled|innerText|contains|only|weight|font|gt|lt|uFFFF|u0128|size|417|Boolean|Date|toggleClass|removeClass|addClass|removeAttr|replaceAll|insertAfter|prependTo|wrap|contentWindow|contentDocument|iframe|children|siblings|prevAll|wrapInner|nextAll|outer|prev|scrollTo|static|marginTop|next|inline|parents|able|cellSpacing|adobeair|cellspacing|522|maxLength|maxlength|readOnly|400|readonly|fast|600|class|slow|1px|htmlFor|reverse|10000|PI|cos|compatible|Function|setData|ie|ra|it|rv|getData|userAgent|navigator|fadeTo|fadeIn|slideToggle|slideUp|slideDown|ig|responseXML|content|1223|NaN|fadeOut|300|protocol|send|setAttribute|option|dataFilter|cssText|changed|be|Accept|stop|With|Requested|Object|can|GMT|property|1970|Jan|01|Thu|Since|If|Type|Content|XMLHTTP|th|Microsoft|td|onreadystatechange|onload|cap|charset|colg|host|tfoot|specified|with|1_|thead|leg|plain|attributes|opt|embed|urlencoded|www|area|hr|ajaxSetup|meta|post|getJSON|getScript|marginLeft|img|elements|pageYOffset|pageXOffset|abbr|serialize|pixelLeft'.split('|'),0,{})) \ No newline at end of file +/*! jQuery v1.11.1 | (c) 2005, 2014 jQuery Foundation, Inc. | jquery.org/license */ +!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=c.slice,e=c.concat,f=c.push,g=c.indexOf,h={},i=h.toString,j=h.hasOwnProperty,k={},l="1.11.1",m=function(a,b){return new m.fn.init(a,b)},n=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,o=/^-ms-/,p=/-([\da-z])/gi,q=function(a,b){return b.toUpperCase()};m.fn=m.prototype={jquery:l,constructor:m,selector:"",length:0,toArray:function(){return d.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:d.call(this)},pushStack:function(a){var b=m.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a,b){return m.each(this,a,b)},map:function(a){return this.pushStack(m.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(d.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor(null)},push:f,sort:c.sort,splice:c.splice},m.extend=m.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||m.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(e=arguments[h]))for(d in e)a=g[d],c=e[d],g!==c&&(j&&c&&(m.isPlainObject(c)||(b=m.isArray(c)))?(b?(b=!1,f=a&&m.isArray(a)?a:[]):f=a&&m.isPlainObject(a)?a:{},g[d]=m.extend(j,f,c)):void 0!==c&&(g[d]=c));return g},m.extend({expando:"jQuery"+(l+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===m.type(a)},isArray:Array.isArray||function(a){return"array"===m.type(a)},isWindow:function(a){return null!=a&&a==a.window},isNumeric:function(a){return!m.isArray(a)&&a-parseFloat(a)>=0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},isPlainObject:function(a){var b;if(!a||"object"!==m.type(a)||a.nodeType||m.isWindow(a))return!1;try{if(a.constructor&&!j.call(a,"constructor")&&!j.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}if(k.ownLast)for(b in a)return j.call(a,b);for(b in a);return void 0===b||j.call(a,b)},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?h[i.call(a)]||"object":typeof a},globalEval:function(b){b&&m.trim(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(o,"ms-").replace(p,q)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b,c){var d,e=0,f=a.length,g=r(a);if(c){if(g){for(;f>e;e++)if(d=b.apply(a[e],c),d===!1)break}else for(e in a)if(d=b.apply(a[e],c),d===!1)break}else if(g){for(;f>e;e++)if(d=b.call(a[e],e,a[e]),d===!1)break}else for(e in a)if(d=b.call(a[e],e,a[e]),d===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(n,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(r(Object(a))?m.merge(c,"string"==typeof a?[a]:a):f.call(c,a)),c},inArray:function(a,b,c){var d;if(b){if(g)return g.call(b,a,c);for(d=b.length,c=c?0>c?Math.max(0,d+c):c:0;d>c;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,b){var c=+b.length,d=0,e=a.length;while(c>d)a[e++]=b[d++];if(c!==c)while(void 0!==b[d])a[e++]=b[d++];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,f=0,g=a.length,h=r(a),i=[];if(h)for(;g>f;f++)d=b(a[f],f,c),null!=d&&i.push(d);else for(f in a)d=b(a[f],f,c),null!=d&&i.push(d);return e.apply([],i)},guid:1,proxy:function(a,b){var c,e,f;return"string"==typeof b&&(f=a[b],b=a,a=f),m.isFunction(a)?(c=d.call(arguments,2),e=function(){return a.apply(b||this,c.concat(d.call(arguments)))},e.guid=a.guid=a.guid||m.guid++,e):void 0},now:function(){return+new Date},support:k}),m.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(a,b){h["[object "+b+"]"]=b.toLowerCase()});function r(a){var b=a.length,c=m.type(a);return"function"===c||m.isWindow(a)?!1:1===a.nodeType&&b?!0:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var s=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+-new Date,v=a.document,w=0,x=0,y=gb(),z=gb(),A=gb(),B=function(a,b){return a===b&&(l=!0),0},C="undefined",D=1<<31,E={}.hasOwnProperty,F=[],G=F.pop,H=F.push,I=F.push,J=F.slice,K=F.indexOf||function(a){for(var b=0,c=this.length;c>b;b++)if(this[b]===a)return b;return-1},L="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",M="[\\x20\\t\\r\\n\\f]",N="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",O=N.replace("w","w#"),P="\\["+M+"*("+N+")(?:"+M+"*([*^$|!~]?=)"+M+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+O+"))|)"+M+"*\\]",Q=":("+N+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+P+")*)|.*)\\)|)",R=new RegExp("^"+M+"+|((?:^|[^\\\\])(?:\\\\.)*)"+M+"+$","g"),S=new RegExp("^"+M+"*,"+M+"*"),T=new RegExp("^"+M+"*([>+~]|"+M+")"+M+"*"),U=new RegExp("="+M+"*([^\\]'\"]*?)"+M+"*\\]","g"),V=new RegExp(Q),W=new RegExp("^"+O+"$"),X={ID:new RegExp("^#("+N+")"),CLASS:new RegExp("^\\.("+N+")"),TAG:new RegExp("^("+N.replace("w","w*")+")"),ATTR:new RegExp("^"+P),PSEUDO:new RegExp("^"+Q),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+L+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/^(?:input|select|textarea|button)$/i,Z=/^h\d$/i,$=/^[^{]+\{\s*\[native \w/,_=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ab=/[+~]/,bb=/'|\\/g,cb=new RegExp("\\\\([\\da-f]{1,6}"+M+"?|("+M+")|.)","ig"),db=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)};try{I.apply(F=J.call(v.childNodes),v.childNodes),F[v.childNodes.length].nodeType}catch(eb){I={apply:F.length?function(a,b){H.apply(a,J.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function fb(a,b,d,e){var f,h,j,k,l,o,r,s,w,x;if((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,d=d||[],!a||"string"!=typeof a)return d;if(1!==(k=b.nodeType)&&9!==k)return[];if(p&&!e){if(f=_.exec(a))if(j=f[1]){if(9===k){if(h=b.getElementById(j),!h||!h.parentNode)return d;if(h.id===j)return d.push(h),d}else if(b.ownerDocument&&(h=b.ownerDocument.getElementById(j))&&t(b,h)&&h.id===j)return d.push(h),d}else{if(f[2])return I.apply(d,b.getElementsByTagName(a)),d;if((j=f[3])&&c.getElementsByClassName&&b.getElementsByClassName)return I.apply(d,b.getElementsByClassName(j)),d}if(c.qsa&&(!q||!q.test(a))){if(s=r=u,w=b,x=9===k&&a,1===k&&"object"!==b.nodeName.toLowerCase()){o=g(a),(r=b.getAttribute("id"))?s=r.replace(bb,"\\$&"):b.setAttribute("id",s),s="[id='"+s+"'] ",l=o.length;while(l--)o[l]=s+qb(o[l]);w=ab.test(a)&&ob(b.parentNode)||b,x=o.join(",")}if(x)try{return I.apply(d,w.querySelectorAll(x)),d}catch(y){}finally{r||b.removeAttribute("id")}}}return i(a.replace(R,"$1"),b,d,e)}function gb(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function hb(a){return a[u]=!0,a}function ib(a){var b=n.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function jb(a,b){var c=a.split("|"),e=a.length;while(e--)d.attrHandle[c[e]]=b}function kb(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||D)-(~a.sourceIndex||D);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function lb(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function mb(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function nb(a){return hb(function(b){return b=+b,hb(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function ob(a){return a&&typeof a.getElementsByTagName!==C&&a}c=fb.support={},f=fb.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},m=fb.setDocument=function(a){var b,e=a?a.ownerDocument||a:v,g=e.defaultView;return e!==n&&9===e.nodeType&&e.documentElement?(n=e,o=e.documentElement,p=!f(e),g&&g!==g.top&&(g.addEventListener?g.addEventListener("unload",function(){m()},!1):g.attachEvent&&g.attachEvent("onunload",function(){m()})),c.attributes=ib(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ib(function(a){return a.appendChild(e.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=$.test(e.getElementsByClassName)&&ib(function(a){return a.innerHTML="
    ",a.firstChild.className="i",2===a.getElementsByClassName("i").length}),c.getById=ib(function(a){return o.appendChild(a).id=u,!e.getElementsByName||!e.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if(typeof b.getElementById!==C&&p){var c=b.getElementById(a);return c&&c.parentNode?[c]:[]}},d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){var c=typeof a.getAttributeNode!==C&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return typeof b.getElementsByTagName!==C?b.getElementsByTagName(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return typeof b.getElementsByClassName!==C&&p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=$.test(e.querySelectorAll))&&(ib(function(a){a.innerHTML="",a.querySelectorAll("[msallowclip^='']").length&&q.push("[*^$]="+M+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+M+"*(?:value|"+L+")"),a.querySelectorAll(":checked").length||q.push(":checked")}),ib(function(a){var b=e.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+M+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=$.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ib(function(a){c.disconnectedMatch=s.call(a,"div"),s.call(a,"[s!='']:x"),r.push("!=",Q)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=$.test(o.compareDocumentPosition),t=b||$.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===e||a.ownerDocument===v&&t(v,a)?-1:b===e||b.ownerDocument===v&&t(v,b)?1:k?K.call(k,a)-K.call(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,f=a.parentNode,g=b.parentNode,h=[a],i=[b];if(!f||!g)return a===e?-1:b===e?1:f?-1:g?1:k?K.call(k,a)-K.call(k,b):0;if(f===g)return kb(a,b);c=a;while(c=c.parentNode)h.unshift(c);c=b;while(c=c.parentNode)i.unshift(c);while(h[d]===i[d])d++;return d?kb(h[d],i[d]):h[d]===v?-1:i[d]===v?1:0},e):n},fb.matches=function(a,b){return fb(a,null,null,b)},fb.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(U,"='$1']"),!(!c.matchesSelector||!p||r&&r.test(b)||q&&q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return fb(b,n,null,[a]).length>0},fb.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},fb.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&E.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},fb.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},fb.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=fb.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=fb.selectors={cacheLength:50,createPseudo:hb,match:X,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(cb,db),a[3]=(a[3]||a[4]||a[5]||"").replace(cb,db),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||fb.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&fb.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return X.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&V.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(cb,db).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+M+")"+a+"("+M+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||typeof a.getAttribute!==C&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=fb.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h;if(q){if(f){while(p){l=b;while(l=l[p])if(h?l.nodeName.toLowerCase()===r:1===l.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){k=q[u]||(q[u]={}),j=k[a]||[],n=j[0]===w&&j[1],m=j[0]===w&&j[2],l=n&&q.childNodes[n];while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if(1===l.nodeType&&++m&&l===b){k[a]=[w,n,m];break}}else if(s&&(j=(b[u]||(b[u]={}))[a])&&j[0]===w)m=j[1];else while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if((h?l.nodeName.toLowerCase()===r:1===l.nodeType)&&++m&&(s&&((l[u]||(l[u]={}))[a]=[w,m]),l===b))break;return m-=e,m===d||m%d===0&&m/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||fb.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?hb(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=K.call(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:hb(function(a){var b=[],c=[],d=h(a.replace(R,"$1"));return d[u]?hb(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),!c.pop()}}),has:hb(function(a){return function(b){return fb(a,b).length>0}}),contains:hb(function(a){return function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:hb(function(a){return W.test(a||"")||fb.error("unsupported lang: "+a),a=a.replace(cb,db).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return Z.test(a.nodeName)},input:function(a){return Y.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:nb(function(){return[0]}),last:nb(function(a,b){return[b-1]}),eq:nb(function(a,b,c){return[0>c?c+b:c]}),even:nb(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:nb(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:nb(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:nb(function(a,b,c){for(var d=0>c?c+b:c;++db;b++)d+=a[b].value;return d}function rb(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=x++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j=[w,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(i=b[u]||(b[u]={}),(h=i[d])&&h[0]===w&&h[1]===f)return j[2]=h[2];if(i[d]=j,j[2]=a(b,c,g))return!0}}}function sb(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function tb(a,b,c){for(var d=0,e=b.length;e>d;d++)fb(a,b[d],c);return c}function ub(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(!c||c(f,d,e))&&(g.push(f),j&&b.push(h));return g}function vb(a,b,c,d,e,f){return d&&!d[u]&&(d=vb(d)),e&&!e[u]&&(e=vb(e,f)),hb(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||tb(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:ub(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=ub(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?K.call(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=ub(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):I.apply(g,r)})}function wb(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=rb(function(a){return a===b},h,!0),l=rb(function(a){return K.call(b,a)>-1},h,!0),m=[function(a,c,d){return!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d))}];f>i;i++)if(c=d.relative[a[i].type])m=[rb(sb(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;f>e;e++)if(d.relative[a[e].type])break;return vb(i>1&&sb(m),i>1&&qb(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(R,"$1"),c,e>i&&wb(a.slice(i,e)),f>e&&wb(a=a.slice(e)),f>e&&qb(a))}m.push(c)}return sb(m)}function xb(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,m,o,p=0,q="0",r=f&&[],s=[],t=j,u=f||e&&d.find.TAG("*",k),v=w+=null==t?1:Math.random()||.1,x=u.length;for(k&&(j=g!==n&&g);q!==x&&null!=(l=u[q]);q++){if(e&&l){m=0;while(o=a[m++])if(o(l,g,h)){i.push(l);break}k&&(w=v)}c&&((l=!o&&l)&&p--,f&&r.push(l))}if(p+=q,c&&q!==p){m=0;while(o=b[m++])o(r,s,g,h);if(f){if(p>0)while(q--)r[q]||s[q]||(s[q]=G.call(i));s=ub(s)}I.apply(i,s),k&&!f&&s.length>0&&p+b.length>1&&fb.uniqueSort(i)}return k&&(w=v,j=t),r};return c?hb(f):f}return h=fb.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=wb(b[c]),f[u]?d.push(f):e.push(f);f=A(a,xb(e,d)),f.selector=a}return f},i=fb.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(cb,db),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=X.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(cb,db),ab.test(j[0].type)&&ob(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&qb(j),!a)return I.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,ab.test(a)&&ob(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ib(function(a){return 1&a.compareDocumentPosition(n.createElement("div"))}),ib(function(a){return a.innerHTML="","#"===a.firstChild.getAttribute("href")})||jb("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ib(function(a){return a.innerHTML="",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||jb("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),ib(function(a){return null==a.getAttribute("disabled")})||jb(L,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),fb}(a);m.find=s,m.expr=s.selectors,m.expr[":"]=m.expr.pseudos,m.unique=s.uniqueSort,m.text=s.getText,m.isXMLDoc=s.isXML,m.contains=s.contains;var t=m.expr.match.needsContext,u=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,v=/^.[^:#\[\.,]*$/;function w(a,b,c){if(m.isFunction(b))return m.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return m.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(v.test(b))return m.filter(b,a,c);b=m.filter(b,a)}return m.grep(a,function(a){return m.inArray(a,b)>=0!==c})}m.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?m.find.matchesSelector(d,a)?[d]:[]:m.find.matches(a,m.grep(b,function(a){return 1===a.nodeType}))},m.fn.extend({find:function(a){var b,c=[],d=this,e=d.length;if("string"!=typeof a)return this.pushStack(m(a).filter(function(){for(b=0;e>b;b++)if(m.contains(d[b],this))return!0}));for(b=0;e>b;b++)m.find(a,d[b],c);return c=this.pushStack(e>1?m.unique(c):c),c.selector=this.selector?this.selector+" "+a:a,c},filter:function(a){return this.pushStack(w(this,a||[],!1))},not:function(a){return this.pushStack(w(this,a||[],!0))},is:function(a){return!!w(this,"string"==typeof a&&t.test(a)?m(a):a||[],!1).length}});var x,y=a.document,z=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,A=m.fn.init=function(a,b){var c,d;if(!a)return this;if("string"==typeof a){if(c="<"===a.charAt(0)&&">"===a.charAt(a.length-1)&&a.length>=3?[null,a,null]:z.exec(a),!c||!c[1]&&b)return!b||b.jquery?(b||x).find(a):this.constructor(b).find(a);if(c[1]){if(b=b instanceof m?b[0]:b,m.merge(this,m.parseHTML(c[1],b&&b.nodeType?b.ownerDocument||b:y,!0)),u.test(c[1])&&m.isPlainObject(b))for(c in b)m.isFunction(this[c])?this[c](b[c]):this.attr(c,b[c]);return this}if(d=y.getElementById(c[2]),d&&d.parentNode){if(d.id!==c[2])return x.find(a);this.length=1,this[0]=d}return this.context=y,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):m.isFunction(a)?"undefined"!=typeof x.ready?x.ready(a):a(m):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),m.makeArray(a,this))};A.prototype=m.fn,x=m(y);var B=/^(?:parents|prev(?:Until|All))/,C={children:!0,contents:!0,next:!0,prev:!0};m.extend({dir:function(a,b,c){var d=[],e=a[b];while(e&&9!==e.nodeType&&(void 0===c||1!==e.nodeType||!m(e).is(c)))1===e.nodeType&&d.push(e),e=e[b];return d},sibling:function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c}}),m.fn.extend({has:function(a){var b,c=m(a,this),d=c.length;return this.filter(function(){for(b=0;d>b;b++)if(m.contains(this,c[b]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=t.test(a)||"string"!=typeof a?m(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&m.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?m.unique(f):f)},index:function(a){return a?"string"==typeof a?m.inArray(this[0],m(a)):m.inArray(a.jquery?a[0]:a,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(m.unique(m.merge(this.get(),m(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function D(a,b){do a=a[b];while(a&&1!==a.nodeType);return a}m.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return m.dir(a,"parentNode")},parentsUntil:function(a,b,c){return m.dir(a,"parentNode",c)},next:function(a){return D(a,"nextSibling")},prev:function(a){return D(a,"previousSibling")},nextAll:function(a){return m.dir(a,"nextSibling")},prevAll:function(a){return m.dir(a,"previousSibling")},nextUntil:function(a,b,c){return m.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return m.dir(a,"previousSibling",c)},siblings:function(a){return m.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return m.sibling(a.firstChild)},contents:function(a){return m.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:m.merge([],a.childNodes)}},function(a,b){m.fn[a]=function(c,d){var e=m.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=m.filter(d,e)),this.length>1&&(C[a]||(e=m.unique(e)),B.test(a)&&(e=e.reverse())),this.pushStack(e)}});var E=/\S+/g,F={};function G(a){var b=F[a]={};return m.each(a.match(E)||[],function(a,c){b[c]=!0}),b}m.Callbacks=function(a){a="string"==typeof a?F[a]||G(a):m.extend({},a);var b,c,d,e,f,g,h=[],i=!a.once&&[],j=function(l){for(c=a.memory&&l,d=!0,f=g||0,g=0,e=h.length,b=!0;h&&e>f;f++)if(h[f].apply(l[0],l[1])===!1&&a.stopOnFalse){c=!1;break}b=!1,h&&(i?i.length&&j(i.shift()):c?h=[]:k.disable())},k={add:function(){if(h){var d=h.length;!function f(b){m.each(b,function(b,c){var d=m.type(c);"function"===d?a.unique&&k.has(c)||h.push(c):c&&c.length&&"string"!==d&&f(c)})}(arguments),b?e=h.length:c&&(g=d,j(c))}return this},remove:function(){return h&&m.each(arguments,function(a,c){var d;while((d=m.inArray(c,h,d))>-1)h.splice(d,1),b&&(e>=d&&e--,f>=d&&f--)}),this},has:function(a){return a?m.inArray(a,h)>-1:!(!h||!h.length)},empty:function(){return h=[],e=0,this},disable:function(){return h=i=c=void 0,this},disabled:function(){return!h},lock:function(){return i=void 0,c||k.disable(),this},locked:function(){return!i},fireWith:function(a,c){return!h||d&&!i||(c=c||[],c=[a,c.slice?c.slice():c],b?i.push(c):j(c)),this},fire:function(){return k.fireWith(this,arguments),this},fired:function(){return!!d}};return k},m.extend({Deferred:function(a){var b=[["resolve","done",m.Callbacks("once memory"),"resolved"],["reject","fail",m.Callbacks("once memory"),"rejected"],["notify","progress",m.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return m.Deferred(function(c){m.each(b,function(b,f){var g=m.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&m.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?m.extend(a,d):d}},e={};return d.pipe=d.then,m.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=d.call(arguments),e=c.length,f=1!==e||a&&m.isFunction(a.promise)?e:0,g=1===f?a:m.Deferred(),h=function(a,b,c){return function(e){b[a]=this,c[a]=arguments.length>1?d.call(arguments):e,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(e>1)for(i=new Array(e),j=new Array(e),k=new Array(e);e>b;b++)c[b]&&m.isFunction(c[b].promise)?c[b].promise().done(h(b,k,c)).fail(g.reject).progress(h(b,j,i)):--f;return f||g.resolveWith(k,c),g.promise()}});var H;m.fn.ready=function(a){return m.ready.promise().done(a),this},m.extend({isReady:!1,readyWait:1,holdReady:function(a){a?m.readyWait++:m.ready(!0)},ready:function(a){if(a===!0?!--m.readyWait:!m.isReady){if(!y.body)return setTimeout(m.ready);m.isReady=!0,a!==!0&&--m.readyWait>0||(H.resolveWith(y,[m]),m.fn.triggerHandler&&(m(y).triggerHandler("ready"),m(y).off("ready")))}}});function I(){y.addEventListener?(y.removeEventListener("DOMContentLoaded",J,!1),a.removeEventListener("load",J,!1)):(y.detachEvent("onreadystatechange",J),a.detachEvent("onload",J))}function J(){(y.addEventListener||"load"===event.type||"complete"===y.readyState)&&(I(),m.ready())}m.ready.promise=function(b){if(!H)if(H=m.Deferred(),"complete"===y.readyState)setTimeout(m.ready);else if(y.addEventListener)y.addEventListener("DOMContentLoaded",J,!1),a.addEventListener("load",J,!1);else{y.attachEvent("onreadystatechange",J),a.attachEvent("onload",J);var c=!1;try{c=null==a.frameElement&&y.documentElement}catch(d){}c&&c.doScroll&&!function e(){if(!m.isReady){try{c.doScroll("left")}catch(a){return setTimeout(e,50)}I(),m.ready()}}()}return H.promise(b)};var K="undefined",L;for(L in m(k))break;k.ownLast="0"!==L,k.inlineBlockNeedsLayout=!1,m(function(){var a,b,c,d;c=y.getElementsByTagName("body")[0],c&&c.style&&(b=y.createElement("div"),d=y.createElement("div"),d.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(d).appendChild(b),typeof b.style.zoom!==K&&(b.style.cssText="display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1",k.inlineBlockNeedsLayout=a=3===b.offsetWidth,a&&(c.style.zoom=1)),c.removeChild(d))}),function(){var a=y.createElement("div");if(null==k.deleteExpando){k.deleteExpando=!0;try{delete a.test}catch(b){k.deleteExpando=!1}}a=null}(),m.acceptData=function(a){var b=m.noData[(a.nodeName+" ").toLowerCase()],c=+a.nodeType||1;return 1!==c&&9!==c?!1:!b||b!==!0&&a.getAttribute("classid")===b};var M=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,N=/([A-Z])/g;function O(a,b,c){if(void 0===c&&1===a.nodeType){var d="data-"+b.replace(N,"-$1").toLowerCase();if(c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:M.test(c)?m.parseJSON(c):c}catch(e){}m.data(a,b,c)}else c=void 0}return c}function P(a){var b;for(b in a)if(("data"!==b||!m.isEmptyObject(a[b]))&&"toJSON"!==b)return!1;return!0}function Q(a,b,d,e){if(m.acceptData(a)){var f,g,h=m.expando,i=a.nodeType,j=i?m.cache:a,k=i?a[h]:a[h]&&h; +if(k&&j[k]&&(e||j[k].data)||void 0!==d||"string"!=typeof b)return k||(k=i?a[h]=c.pop()||m.guid++:h),j[k]||(j[k]=i?{}:{toJSON:m.noop}),("object"==typeof b||"function"==typeof b)&&(e?j[k]=m.extend(j[k],b):j[k].data=m.extend(j[k].data,b)),g=j[k],e||(g.data||(g.data={}),g=g.data),void 0!==d&&(g[m.camelCase(b)]=d),"string"==typeof b?(f=g[b],null==f&&(f=g[m.camelCase(b)])):f=g,f}}function R(a,b,c){if(m.acceptData(a)){var d,e,f=a.nodeType,g=f?m.cache:a,h=f?a[m.expando]:m.expando;if(g[h]){if(b&&(d=c?g[h]:g[h].data)){m.isArray(b)?b=b.concat(m.map(b,m.camelCase)):b in d?b=[b]:(b=m.camelCase(b),b=b in d?[b]:b.split(" ")),e=b.length;while(e--)delete d[b[e]];if(c?!P(d):!m.isEmptyObject(d))return}(c||(delete g[h].data,P(g[h])))&&(f?m.cleanData([a],!0):k.deleteExpando||g!=g.window?delete g[h]:g[h]=null)}}}m.extend({cache:{},noData:{"applet ":!0,"embed ":!0,"object ":"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(a){return a=a.nodeType?m.cache[a[m.expando]]:a[m.expando],!!a&&!P(a)},data:function(a,b,c){return Q(a,b,c)},removeData:function(a,b){return R(a,b)},_data:function(a,b,c){return Q(a,b,c,!0)},_removeData:function(a,b){return R(a,b,!0)}}),m.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=m.data(f),1===f.nodeType&&!m._data(f,"parsedAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=m.camelCase(d.slice(5)),O(f,d,e[d])));m._data(f,"parsedAttrs",!0)}return e}return"object"==typeof a?this.each(function(){m.data(this,a)}):arguments.length>1?this.each(function(){m.data(this,a,b)}):f?O(f,a,m.data(f,a)):void 0},removeData:function(a){return this.each(function(){m.removeData(this,a)})}}),m.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=m._data(a,b),c&&(!d||m.isArray(c)?d=m._data(a,b,m.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=m.queue(a,b),d=c.length,e=c.shift(),f=m._queueHooks(a,b),g=function(){m.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return m._data(a,c)||m._data(a,c,{empty:m.Callbacks("once memory").add(function(){m._removeData(a,b+"queue"),m._removeData(a,c)})})}}),m.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.lengthh;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f},W=/^(?:checkbox|radio)$/i;!function(){var a=y.createElement("input"),b=y.createElement("div"),c=y.createDocumentFragment();if(b.innerHTML="
    a",k.leadingWhitespace=3===b.firstChild.nodeType,k.tbody=!b.getElementsByTagName("tbody").length,k.htmlSerialize=!!b.getElementsByTagName("link").length,k.html5Clone="<:nav>"!==y.createElement("nav").cloneNode(!0).outerHTML,a.type="checkbox",a.checked=!0,c.appendChild(a),k.appendChecked=a.checked,b.innerHTML="",k.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue,c.appendChild(b),b.innerHTML="",k.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,k.noCloneEvent=!0,b.attachEvent&&(b.attachEvent("onclick",function(){k.noCloneEvent=!1}),b.cloneNode(!0).click()),null==k.deleteExpando){k.deleteExpando=!0;try{delete b.test}catch(d){k.deleteExpando=!1}}}(),function(){var b,c,d=y.createElement("div");for(b in{submit:!0,change:!0,focusin:!0})c="on"+b,(k[b+"Bubbles"]=c in a)||(d.setAttribute(c,"t"),k[b+"Bubbles"]=d.attributes[c].expando===!1);d=null}();var X=/^(?:input|select|textarea)$/i,Y=/^key/,Z=/^(?:mouse|pointer|contextmenu)|click/,$=/^(?:focusinfocus|focusoutblur)$/,_=/^([^.]*)(?:\.(.+)|)$/;function ab(){return!0}function bb(){return!1}function cb(){try{return y.activeElement}catch(a){}}m.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,n,o,p,q,r=m._data(a);if(r){c.handler&&(i=c,c=i.handler,e=i.selector),c.guid||(c.guid=m.guid++),(g=r.events)||(g=r.events={}),(k=r.handle)||(k=r.handle=function(a){return typeof m===K||a&&m.event.triggered===a.type?void 0:m.event.dispatch.apply(k.elem,arguments)},k.elem=a),b=(b||"").match(E)||[""],h=b.length;while(h--)f=_.exec(b[h])||[],o=q=f[1],p=(f[2]||"").split(".").sort(),o&&(j=m.event.special[o]||{},o=(e?j.delegateType:j.bindType)||o,j=m.event.special[o]||{},l=m.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&m.expr.match.needsContext.test(e),namespace:p.join(".")},i),(n=g[o])||(n=g[o]=[],n.delegateCount=0,j.setup&&j.setup.call(a,d,p,k)!==!1||(a.addEventListener?a.addEventListener(o,k,!1):a.attachEvent&&a.attachEvent("on"+o,k))),j.add&&(j.add.call(a,l),l.handler.guid||(l.handler.guid=c.guid)),e?n.splice(n.delegateCount++,0,l):n.push(l),m.event.global[o]=!0);a=null}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,n,o,p,q,r=m.hasData(a)&&m._data(a);if(r&&(k=r.events)){b=(b||"").match(E)||[""],j=b.length;while(j--)if(h=_.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=m.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,n=k[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),i=f=n.length;while(f--)g=n[f],!e&&q!==g.origType||c&&c.guid!==g.guid||h&&!h.test(g.namespace)||d&&d!==g.selector&&("**"!==d||!g.selector)||(n.splice(f,1),g.selector&&n.delegateCount--,l.remove&&l.remove.call(a,g));i&&!n.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||m.removeEvent(a,o,r.handle),delete k[o])}else for(o in k)m.event.remove(a,o+b[j],c,d,!0);m.isEmptyObject(k)&&(delete r.handle,m._removeData(a,"events"))}},trigger:function(b,c,d,e){var f,g,h,i,k,l,n,o=[d||y],p=j.call(b,"type")?b.type:b,q=j.call(b,"namespace")?b.namespace.split("."):[];if(h=l=d=d||y,3!==d.nodeType&&8!==d.nodeType&&!$.test(p+m.event.triggered)&&(p.indexOf(".")>=0&&(q=p.split("."),p=q.shift(),q.sort()),g=p.indexOf(":")<0&&"on"+p,b=b[m.expando]?b:new m.Event(p,"object"==typeof b&&b),b.isTrigger=e?2:3,b.namespace=q.join("."),b.namespace_re=b.namespace?new RegExp("(^|\\.)"+q.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=d),c=null==c?[b]:m.makeArray(c,[b]),k=m.event.special[p]||{},e||!k.trigger||k.trigger.apply(d,c)!==!1)){if(!e&&!k.noBubble&&!m.isWindow(d)){for(i=k.delegateType||p,$.test(i+p)||(h=h.parentNode);h;h=h.parentNode)o.push(h),l=h;l===(d.ownerDocument||y)&&o.push(l.defaultView||l.parentWindow||a)}n=0;while((h=o[n++])&&!b.isPropagationStopped())b.type=n>1?i:k.bindType||p,f=(m._data(h,"events")||{})[b.type]&&m._data(h,"handle"),f&&f.apply(h,c),f=g&&h[g],f&&f.apply&&m.acceptData(h)&&(b.result=f.apply(h,c),b.result===!1&&b.preventDefault());if(b.type=p,!e&&!b.isDefaultPrevented()&&(!k._default||k._default.apply(o.pop(),c)===!1)&&m.acceptData(d)&&g&&d[p]&&!m.isWindow(d)){l=d[g],l&&(d[g]=null),m.event.triggered=p;try{d[p]()}catch(r){}m.event.triggered=void 0,l&&(d[g]=l)}return b.result}},dispatch:function(a){a=m.event.fix(a);var b,c,e,f,g,h=[],i=d.call(arguments),j=(m._data(this,"events")||{})[a.type]||[],k=m.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=m.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,g=0;while((e=f.handlers[g++])&&!a.isImmediatePropagationStopped())(!a.namespace_re||a.namespace_re.test(e.namespace))&&(a.handleObj=e,a.data=e.data,c=((m.event.special[e.origType]||{}).handle||e.handler).apply(f.elem,i),void 0!==c&&(a.result=c)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&(!a.button||"click"!==a.type))for(;i!=this;i=i.parentNode||this)if(1===i.nodeType&&(i.disabled!==!0||"click"!==a.type)){for(e=[],f=0;h>f;f++)d=b[f],c=d.selector+" ",void 0===e[c]&&(e[c]=d.needsContext?m(c,this).index(i)>=0:m.find(c,this,null,[i]).length),e[c]&&e.push(d);e.length&&g.push({elem:i,handlers:e})}return h]","i"),hb=/^\s+/,ib=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,jb=/<([\w:]+)/,kb=/
    ","
    "],tr:[2,"","
    "],col:[2,"","
    "],td:[3,"","
    "],_default:k.htmlSerialize?[0,"",""]:[1,"X
    ","
    "]},sb=db(y),tb=sb.appendChild(y.createElement("div"));rb.optgroup=rb.option,rb.tbody=rb.tfoot=rb.colgroup=rb.caption=rb.thead,rb.th=rb.td;function ub(a,b){var c,d,e=0,f=typeof a.getElementsByTagName!==K?a.getElementsByTagName(b||"*"):typeof a.querySelectorAll!==K?a.querySelectorAll(b||"*"):void 0;if(!f)for(f=[],c=a.childNodes||a;null!=(d=c[e]);e++)!b||m.nodeName(d,b)?f.push(d):m.merge(f,ub(d,b));return void 0===b||b&&m.nodeName(a,b)?m.merge([a],f):f}function vb(a){W.test(a.type)&&(a.defaultChecked=a.checked)}function wb(a,b){return m.nodeName(a,"table")&&m.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function xb(a){return a.type=(null!==m.find.attr(a,"type"))+"/"+a.type,a}function yb(a){var b=pb.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function zb(a,b){for(var c,d=0;null!=(c=a[d]);d++)m._data(c,"globalEval",!b||m._data(b[d],"globalEval"))}function Ab(a,b){if(1===b.nodeType&&m.hasData(a)){var c,d,e,f=m._data(a),g=m._data(b,f),h=f.events;if(h){delete g.handle,g.events={};for(c in h)for(d=0,e=h[c].length;e>d;d++)m.event.add(b,c,h[c][d])}g.data&&(g.data=m.extend({},g.data))}}function Bb(a,b){var c,d,e;if(1===b.nodeType){if(c=b.nodeName.toLowerCase(),!k.noCloneEvent&&b[m.expando]){e=m._data(b);for(d in e.events)m.removeEvent(b,d,e.handle);b.removeAttribute(m.expando)}"script"===c&&b.text!==a.text?(xb(b).text=a.text,yb(b)):"object"===c?(b.parentNode&&(b.outerHTML=a.outerHTML),k.html5Clone&&a.innerHTML&&!m.trim(b.innerHTML)&&(b.innerHTML=a.innerHTML)):"input"===c&&W.test(a.type)?(b.defaultChecked=b.checked=a.checked,b.value!==a.value&&(b.value=a.value)):"option"===c?b.defaultSelected=b.selected=a.defaultSelected:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue)}}m.extend({clone:function(a,b,c){var d,e,f,g,h,i=m.contains(a.ownerDocument,a);if(k.html5Clone||m.isXMLDoc(a)||!gb.test("<"+a.nodeName+">")?f=a.cloneNode(!0):(tb.innerHTML=a.outerHTML,tb.removeChild(f=tb.firstChild)),!(k.noCloneEvent&&k.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||m.isXMLDoc(a)))for(d=ub(f),h=ub(a),g=0;null!=(e=h[g]);++g)d[g]&&Bb(e,d[g]);if(b)if(c)for(h=h||ub(a),d=d||ub(f),g=0;null!=(e=h[g]);g++)Ab(e,d[g]);else Ab(a,f);return d=ub(f,"script"),d.length>0&&zb(d,!i&&ub(a,"script")),d=h=e=null,f},buildFragment:function(a,b,c,d){for(var e,f,g,h,i,j,l,n=a.length,o=db(b),p=[],q=0;n>q;q++)if(f=a[q],f||0===f)if("object"===m.type(f))m.merge(p,f.nodeType?[f]:f);else if(lb.test(f)){h=h||o.appendChild(b.createElement("div")),i=(jb.exec(f)||["",""])[1].toLowerCase(),l=rb[i]||rb._default,h.innerHTML=l[1]+f.replace(ib,"<$1>")+l[2],e=l[0];while(e--)h=h.lastChild;if(!k.leadingWhitespace&&hb.test(f)&&p.push(b.createTextNode(hb.exec(f)[0])),!k.tbody){f="table"!==i||kb.test(f)?""!==l[1]||kb.test(f)?0:h:h.firstChild,e=f&&f.childNodes.length;while(e--)m.nodeName(j=f.childNodes[e],"tbody")&&!j.childNodes.length&&f.removeChild(j)}m.merge(p,h.childNodes),h.textContent="";while(h.firstChild)h.removeChild(h.firstChild);h=o.lastChild}else p.push(b.createTextNode(f));h&&o.removeChild(h),k.appendChecked||m.grep(ub(p,"input"),vb),q=0;while(f=p[q++])if((!d||-1===m.inArray(f,d))&&(g=m.contains(f.ownerDocument,f),h=ub(o.appendChild(f),"script"),g&&zb(h),c)){e=0;while(f=h[e++])ob.test(f.type||"")&&c.push(f)}return h=null,o},cleanData:function(a,b){for(var d,e,f,g,h=0,i=m.expando,j=m.cache,l=k.deleteExpando,n=m.event.special;null!=(d=a[h]);h++)if((b||m.acceptData(d))&&(f=d[i],g=f&&j[f])){if(g.events)for(e in g.events)n[e]?m.event.remove(d,e):m.removeEvent(d,e,g.handle);j[f]&&(delete j[f],l?delete d[i]:typeof d.removeAttribute!==K?d.removeAttribute(i):d[i]=null,c.push(f))}}}),m.fn.extend({text:function(a){return V(this,function(a){return void 0===a?m.text(this):this.empty().append((this[0]&&this[0].ownerDocument||y).createTextNode(a))},null,a,arguments.length)},append:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=wb(this,a);b.appendChild(a)}})},prepend:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=wb(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},remove:function(a,b){for(var c,d=a?m.filter(a,this):this,e=0;null!=(c=d[e]);e++)b||1!==c.nodeType||m.cleanData(ub(c)),c.parentNode&&(b&&m.contains(c.ownerDocument,c)&&zb(ub(c,"script")),c.parentNode.removeChild(c));return this},empty:function(){for(var a,b=0;null!=(a=this[b]);b++){1===a.nodeType&&m.cleanData(ub(a,!1));while(a.firstChild)a.removeChild(a.firstChild);a.options&&m.nodeName(a,"select")&&(a.options.length=0)}return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return m.clone(this,a,b)})},html:function(a){return V(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a)return 1===b.nodeType?b.innerHTML.replace(fb,""):void 0;if(!("string"!=typeof a||mb.test(a)||!k.htmlSerialize&&gb.test(a)||!k.leadingWhitespace&&hb.test(a)||rb[(jb.exec(a)||["",""])[1].toLowerCase()])){a=a.replace(ib,"<$1>");try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(m.cleanData(ub(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=arguments[0];return this.domManip(arguments,function(b){a=this.parentNode,m.cleanData(ub(this)),a&&a.replaceChild(b,this)}),a&&(a.length||a.nodeType)?this:this.remove()},detach:function(a){return this.remove(a,!0)},domManip:function(a,b){a=e.apply([],a);var c,d,f,g,h,i,j=0,l=this.length,n=this,o=l-1,p=a[0],q=m.isFunction(p);if(q||l>1&&"string"==typeof p&&!k.checkClone&&nb.test(p))return this.each(function(c){var d=n.eq(c);q&&(a[0]=p.call(this,c,d.html())),d.domManip(a,b)});if(l&&(i=m.buildFragment(a,this[0].ownerDocument,!1,this),c=i.firstChild,1===i.childNodes.length&&(i=c),c)){for(g=m.map(ub(i,"script"),xb),f=g.length;l>j;j++)d=i,j!==o&&(d=m.clone(d,!0,!0),f&&m.merge(g,ub(d,"script"))),b.call(this[j],d,j);if(f)for(h=g[g.length-1].ownerDocument,m.map(g,yb),j=0;f>j;j++)d=g[j],ob.test(d.type||"")&&!m._data(d,"globalEval")&&m.contains(h,d)&&(d.src?m._evalUrl&&m._evalUrl(d.src):m.globalEval((d.text||d.textContent||d.innerHTML||"").replace(qb,"")));i=c=null}return this}}),m.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){m.fn[a]=function(a){for(var c,d=0,e=[],g=m(a),h=g.length-1;h>=d;d++)c=d===h?this:this.clone(!0),m(g[d])[b](c),f.apply(e,c.get());return this.pushStack(e)}});var Cb,Db={};function Eb(b,c){var d,e=m(c.createElement(b)).appendTo(c.body),f=a.getDefaultComputedStyle&&(d=a.getDefaultComputedStyle(e[0]))?d.display:m.css(e[0],"display");return e.detach(),f}function Fb(a){var b=y,c=Db[a];return c||(c=Eb(a,b),"none"!==c&&c||(Cb=(Cb||m("