commit a3ba82be64e7c1cbfa72230d6b0dfb35dd3df459 Author: xiaomlove Date: Sat Dec 26 01:42:23 2020 +0800 init diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..9624fcdd --- /dev/null +++ b/.gitignore @@ -0,0 +1,9 @@ +/node_modules +/vendor +/.idea +/.vagrant +npm-debug.log +.env +/.settings +.buildpath +.project diff --git a/.htaccess b/.htaccess new file mode 100644 index 00000000..b62ef7ac --- /dev/null +++ b/.htaccess @@ -0,0 +1,12 @@ + +RewriteEngine on +RewriteRule \.svn/ - [F] +RewriteCond %{QUERY_STRING} ^(.+)$ +RewriteRule ^(.*)forums/$ $1forums.php?action=viewtopic&%1 [L] + +RewriteRule ^(.*)forums/$ $1forums.php?action=viewtopic + +Options FollowSymLinks +Order allow,deny +Allow from all + diff --git a/INSTALL b/INSTALL new file mode 100644 index 00000000..d1c7c79c --- /dev/null +++ b/INSTALL @@ -0,0 +1,215 @@ +NexusPHP 1.5 beta 4 20100517 Installation +This guide is intended for experienced webmasters and takes Ubuntu Server 10.04 as the example. Check out http://www.nexusphp.com for more tutorials. +1.Environment +This project should work on most operation systems where PHP is supported, such as Linux, Unix and Microsoft Windows. +1.1.Required: +A web server, Apache HTTP Server (v2.2.X tested) preferred. IIS HTTP Server (6.0 tested) should work as well but not recommended. +PHP 5 (v5.2.X and v5.3.X tested). Multibyte String(mbstring), MySQL(mysql), Memcache(memcache), GD extensions are required. +MySQL Server (v5.0.X tested). +memcached + +1.2.Optional: +PEAR with HTTP_Request2 package. For the feature of IMDb information scraping. +A SMTP server, Postfix preferred. IIS SMTP Server (6.0 tested) should work, too. For sending email. + +2.INSTALL +2.1.Apache web server +2.1.1.install the web server. +on Ubuntu Server 10.04: +# OS commandline starts +sudo apt-get install apache2 +# OS commandline ends +2.1.2.edit the configuration file (usually named 'Apache2.conf' or 'httpd.conf') +on Ubuntu Server 10.04: +# OS commandline starts +sudo nano /etc/apache2/sites-enabled/000-default +# OS commandline ends + +# configuration starts + + DirectoryIndex index.php index.html + + + DocumentRoot "/your/http/document/root" + + Options FollowSymLinks + AllowOverride None + Order allow,deny + Allow from all + + + AllowOverride None + Order allow,deny + Deny from all + + + AllowOverride None + Order allow,deny + Deny from all + + + AllowOverride None + Order allow,deny + Deny from all + + + Options +Indexes + Order allow,deny + Allow from all + + + AllowOverride None + Order allow,deny + Deny from all + + +# configuration ends + +Note: replace '/your/http/document/root' with your own path, e.g. '/var/www/nexusphp' + +2.2.PHP +2.2.1.install PHP with all required extensions. +on Ubuntu Server 10.04: +# OS commandline starts +sudo apt-get install php5 php5-gd php5-memcache php5-mysql +# OS commandline ends +2.2.2.edit the configuration file (usually named 'php.ini') +on Ubuntu Server 10.04: +# OS commandline starts +sudo nano /etc/php5/apache2/php.ini +# OS commandline ends +IMPORTANT: You must turn off the 'magic quotes' feature in PHP. It is unfortunately turned on by default with PHP 5.2 + +; configuration starts +magic_quotes_gpc = Off +magic_quotes_runtime = Off +magic_quotes_sybase = Off +; Optional. Increase it if memory-limit-reached error occurs when uploading large torrent files. +memory_limit = 128M +; configuration ends + +2.3.MySQL server +2.3.1.install it. +on Ubuntu Server 10.04: +# OS commandline starts +sudo apt-get install mysql-server +# OS commandline ends +2.3.2.edit the configuration file (usually named 'my.cnf' or 'my.ini') +on Ubuntu Server 10.04: +# OS commandline starts +sudo nano /etc/mysql/my.cnf +# OS commandline ends + +IMPORTANT: Do not set any SQL Modes. This project is not tested to work with them. +# configuration starts +sql-mode="" +; Optional. Increase it if mysql connection-failure occurs under heavy traffic load. +max_connections = 1000 +# configuration ends + +2.3.3.with the 1.5 beta 4 release, no installation script comes with the project. So you have to do everything yourself, such as creating a database: +2.3.3.1.connect to MySQL server +# OS commandline starts +mysql --user=yourdbusername --password=yourdbpassword --host=yourdbhostname +# OS commandline ends +Note: replace 'yourdbusername' with your own MySQL username e.g. 'root', 'yourdbpassword' with your MySQL user password, and 'yourdbhostname' with your MySQL hostname e.g. 'localhost' +2.3.3.2.create a database. +-- MySQL commandline starts +CREATE DATABASE yourdbname; +USE yourdbname; +-- MySQL commandline end +Note: replace 'yourdbname' with your own mysql database name, e.g. 'nexusphp'. +2.3.3.3.import database structure from this project. +-- MySQL commandline starts +SET NAMES utf8; +SOURCE /path/to/project/source/_db/dbstructure.sql; +-- MySQL commandline ends +Note: replace '/path/to/project/source' with your own path where you save files from this project. +2.3.3.4.quit MySQL +-- MySQL commandline starts +quit; +-- MySQL commandline ends + +2.4.Memcached +2.4.1.install it. +on Ubuntu Server 10.04: +# OS commandline starts +sudo apt-get install memcached +# OS commandline ends +2.4.2.run it as a daemon. +on Ubuntu Server 10.04: +# OS commandline starts +memcached -d -u nobody +# OS commandline ends + +2.5.PEAR and HTTP_Request2 package +To save the trouble, a package named 'Required.Files.From.PEAR' is available from the website http://www.nexusphp.com. You may skipped the following procedure if you have downloaded that package. +2.5.1.install PEAR basic package +on Ubuntu Server 10.04: +# OS commandline starts +sudo apt-get install php-pear +# OS commandline ends +2.5.2.set preferred package state of PEAR to 'alpha' +on Ubuntu Server 10.04: +# OS commandline starts +sudo pear config-set preferred_state alpha +# OS commandline ends +2.5.3.install HTTP_Request2 package. +# OS commandline starts +sudo pear install HTTP_Request2 +# OS commandline ends + +2.6.Postfix +2.6.1.install it. +on Ubuntu Server 10.04: +# OS commandline starts +sudo apt-get install postfix +# OS commandline ends + +2.7.Restart MySQL and Apache HTTP Server services +For edits of configuration to take effect, services need to be restarted. +on Ubuntu Server 10.04: +# OS commandline starts +sudo /etc/init.d/apache2 restart +sudo /etc/init.d/mysql restart +# OS commandline ends + +3.Set up this project +3.1.put all files from this project into the document root of your http server, e.g. '/var/www/nexusphp' +3.2.on *nix OS, change files' access permission to 777 +on Ubuntu Server 10.04: +# OS commandline starts +sudo chmod -Rf 777 /your/http/document/root +# OS commandline ends +Note: replace '/your/http/document/root' with your own path, e.g. '/var/www/nexusphp' +3.3.edit the configuration file (named 'config/allconfig.php') of this project + +// configuration starts +$BASIC=array( + 'SITENAME' => 'yoursitename', + 'BASEURL' => 'yoursiteurl', + 'announce_url' => 'yoursiteurl/announce.php', + 'mysql_host' => 'yourdbhostname', + 'mysql_user' => 'yourdbusername', + 'mysql_pass' => 'yourdbpassword', + 'mysql_db' => 'yourdbname', +); +// configuration ends +Note: replace 'yoursitename' with your own name of the website e.g. 'MyTracker', 'yoursiteurl' with your site base URL (without prefixing 'http://') e.g. 'www.nexusphp.com', 'mysql_host' with your MySQL hostname e.g. 'localhost', 'yourdbhostname' with your MySQL username e.g. 'root', 'yourdbusername' with your MySQL user password, and 'mysql_db' with your MySQL database name e.g. 'nexusphp'. +3.4.visit your site. Register a new user. +3.5.set yourself the Staff Leader. +Again, you have to do it the dirty way, namely running MySQL query manually. +3.5.1.connect to mysql server +# OS commandline starts +mysql --user=yourdbusername --password=yourdbpassword --host=yourdbhostname yourdbname +# OS commandline ends +Note: replace 'yourdbusername' with your own MySQL username e.g. 'root', 'yourdbpassword' with your MySQL user password, 'yourdbhostname' with your MySQL hostname e.g. 'localhost', and 'yourdbname' with your MySQL database name e.g. 'nexusphp'. +3.5.2.set your class to Staff Leader +-- MySQL commandline starts +UPDATE users SET class=16 WHERE username='yourwebsiteusername'; +-- MySQL commandline ends +NOTE: replace 'yourwebsiteusername' with the username you have just registered on the website. +3.5.3.quit MySQL +-- MySQL commandline starts +quit; +-- MySQL commandline ends diff --git a/LICENSE b/LICENSE new file mode 100644 index 00000000..ecef7655 --- /dev/null +++ b/LICENSE @@ -0,0 +1,342 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Library General +Public License instead of this License. + + diff --git a/README b/README new file mode 100644 index 00000000..6f4e0dd6 --- /dev/null +++ b/README @@ -0,0 +1,7 @@ +ABOUT NexusPHP +This Project NexusPHP is an open-sourced private tracker script written in PHP. +It forks from the TBSource project and some other open-sourced projects. +Please read the LICENSE file before using this project. +Read the INSTALL file for information about how to use it. +Read the RELEASENOTE file about this release. +Visit http://www.nexusphp.com for more information about this project. diff --git a/RELEASENOTE b/RELEASENOTE new file mode 100644 index 00000000..09eb09af --- /dev/null +++ b/RELEASENOTE @@ -0,0 +1,31 @@ +Release note for v1.5 beta 5 20120707 +fix tracker "can't unzip" issue when zlib is not enabled + +Release note for v1.5 beta 5 20120301 +Fix: several security issues +Fix: takesignup not checking invitation code +Fix: function sqlesc() with numeric value +Fix: sendmail delay issue +Fix: language file in docleanup() +Fix: language setting at FAQ and Rules +Mod: default promotion display type to 'icon' +thank http://wiki.nexusphp.org for reporting bugs + +Release note for v1.5 beta 4 20100919 +Fix: "There is a minimum announce time of 30 seconds", caused by timezone settings. Now you should set correct timezone in php.ini +Fix: varchar column length exceed 255 characters, which causes errors in MySQL 5.0.3 and later +Mod: set mysql sql_mode in php level +Mod: change mysql_pconnect to mysql_connect +Release note for v1.5 beta 4 20100905 +Add: promotion timeout setting per torrent +Fix: some minor bugs +Release note for v1.5 beta 4 20100615 +Change default cleanup from cron-triggered to browser-triggered +Release note for v1.5 beta 4 20100603 +Fix a few minor bugs from previous release +Release note for v1.5 beta 4 20100531 +Fix a few minor bugs from previous release +Release note for v1.5 beta 4 20100517 +This release is not considered stable and ready for major time. A lot of things, especially those in staff panel, may not work as expected. +No installer available yet. +Use it at your own risk. diff --git a/_db/.htaccess b/_db/.htaccess new file mode 100644 index 00000000..4aa5ec94 --- /dev/null +++ b/_db/.htaccess @@ -0,0 +1,3 @@ +Options -Indexes +Order allow,deny +Deny from all diff --git a/_db/dbstructure.sql b/_db/dbstructure.sql new file mode 100644 index 00000000..32042e51 --- /dev/null +++ b/_db/dbstructure.sql @@ -0,0 +1,2504 @@ +-- phpMyAdmin SQL Dump +-- version 3.3.2deb1 +-- http://www.phpmyadmin.net +-- +-- Host: localhost +-- Generation Time: May 18, 2010 at 01:10 AM +-- Server version: 5.1.41 +-- PHP Version: 5.3.2-1ubuntu4 + +SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO"; + + +/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; +/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; +/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; +/*!40101 SET NAMES utf8 */; + +-- +-- Database: `nexus20100517` +-- + +-- -------------------------------------------------------- + +-- +-- Table structure for table `adminpanel` +-- + +CREATE TABLE IF NOT EXISTS `adminpanel` ( + `id` tinyint(3) unsigned NOT NULL AUTO_INCREMENT, + `name` varchar(128) NOT NULL DEFAULT '', + `url` varchar(255) NOT NULL DEFAULT '', + `info` varchar(255) NOT NULL DEFAULT '', + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=12 ; + +-- +-- Dumping data for table `adminpanel` +-- + +INSERT INTO `adminpanel` (`id`, `name`, `url`, `info`) VALUES +(1, 'Add user', 'adduser.php', 'Create new user account'), +(3, 'Reset Users Password', 'reset.php', 'Rest lost Passwords'), +(4, 'Mass PM', 'staffmess.php', 'Send PM to all users'), +(5, 'List Unconnectable Users', 'notconnectable.php', 'View All Unconnectable Users'), +(6, 'Poll overview', 'polloverview.php', 'View poll votes'), +(7, 'Warned users', 'warned.php', 'See all warned users on tracker'), +(8, 'FreeLeech', 'freeleech.php', 'Set ALL Torrents At Special State.'), +(9, 'FAQ Management', 'faqmanage.php', 'Edit/Add/Delete FAQ Page'), +(10, 'Rules Management', 'modrules.php', 'Edit/Add/Delete RULES Page'), +(11, 'Category Manage', 'catmanage.php', 'Manage torrents categories at your site'); + +-- -------------------------------------------------------- + +-- +-- Table structure for table `advertisements` +-- + +CREATE TABLE IF NOT EXISTS `advertisements` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `enabled` tinyint(1) NOT NULL DEFAULT '0', + `type` enum('bbcodes','xhtml','text','image','flash') NOT NULL, + `position` enum('header','footer','belownav','belowsearchbox','torrentdetail','comment','interoverforums','forumpost','popup') NOT NULL, + `displayorder` tinyint(3) NOT NULL DEFAULT '0', + `name` varchar(255) NOT NULL DEFAULT '', + `parameters` text NOT NULL, + `code` text NOT NULL, + `starttime` datetime NOT NULL, + `endtime` datetime NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; + +-- +-- Dumping data for table `advertisements` +-- + + +-- -------------------------------------------------------- + +-- +-- Table structure for table `agent_allowed_exception` +-- + +CREATE TABLE IF NOT EXISTS `agent_allowed_exception` ( + `family_id` tinyint(3) unsigned NOT NULL, + `name` varchar(100) NOT NULL DEFAULT '', + `peer_id` varchar(20) NOT NULL, + `agent` varchar(100) NOT NULL, + `comment` varchar(200) NOT NULL DEFAULT '', + KEY `family_id` (`family_id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; + +-- +-- Dumping data for table `agent_allowed_exception` +-- + +INSERT INTO `agent_allowed_exception` (`family_id`, `name`, `peer_id`, `agent`, `comment`) VALUES +(16, 'uTorrent 1.80B (Build 6838)', '-UT180B-', 'uTorrent/180B(6838)', 'buggy build that always seeding bad request'); + +-- -------------------------------------------------------- + +-- +-- Table structure for table `agent_allowed_family` +-- + +CREATE TABLE IF NOT EXISTS `agent_allowed_family` ( + `id` tinyint(3) unsigned NOT NULL AUTO_INCREMENT, + `family` varchar(50) NOT NULL DEFAULT '', + `start_name` varchar(100) NOT NULL DEFAULT '', + `peer_id_pattern` varchar(200) NOT NULL, + `peer_id_match_num` tinyint(3) unsigned NOT NULL, + `peer_id_matchtype` enum('dec','hex') NOT NULL DEFAULT 'dec', + `peer_id_start` varchar(20) NOT NULL, + `agent_pattern` varchar(200) NOT NULL, + `agent_match_num` tinyint(3) unsigned NOT NULL, + `agent_matchtype` enum('dec','hex') NOT NULL DEFAULT 'dec', + `agent_start` varchar(100) NOT NULL, + `exception` enum('yes','no') NOT NULL DEFAULT 'no', + `allowhttps` enum('yes','no') NOT NULL DEFAULT 'no', + `comment` varchar(200) NOT NULL DEFAULT '', + `hits` mediumint(8) unsigned NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; + +-- +-- Dumping data for table `agent_allowed_family` +-- + +INSERT INTO `agent_allowed_family` (`id`, `family`, `start_name`, `peer_id_pattern`, `peer_id_match_num`, `peer_id_matchtype`, `peer_id_start`, `agent_pattern`, `agent_match_num`, `agent_matchtype`, `agent_start`, `exception`, `allowhttps`, `comment`, `hits`) VALUES +(1, 'Azureus 2.5.0.4', 'Azureus 2.5.0.4', '/^-AZ2504-/', 0, 'dec', '-AZ2504-', '/^Azureus 2.5.0.4/', 0, 'dec', 'Azureus 2.5.0.4', 'no', 'yes', '', 0), +(2, 'uTorrent 1.6.1', 'uTorrent 1.6.1', '/^-UT1610-/', 0, 'dec', '-UT1610-', '/^uTorrent\\/1610/', 0, 'dec', 'uTorrent/1610', 'no', 'no', '', 0), +(3, 'Bittorrent 6.x', 'Bittorrent 6.0.1', '/^M6-([0-9])-([0-9])--/', 2, 'dec', 'M6-0-1--', '/^BitTorrent\\/6([0-9])([0-9])([0-9])/', 3, 'dec', 'BitTorrent/6010', 'no', 'yes', '', 0), +(4, 'Deluge 0.x', 'Deluge 0.5.8.9', '/^-DE0([0-9])([0-9])([0-9])-/', 3, 'dec', '-DE0589-', '/^Deluge 0\\.([0-9])\\.([0-9])\\.([0-9])/', 3, 'dec', 'Deluge 0.5.8.9', 'no', 'yes', '', 0), +(5, 'Transmission1.x', 'Transmission 1.06 (build 5136)', '/^-TR1([0-9])([0-9])([0-9])-/', 3, 'dec', '-TR1060-', '/^Transmission\\/1\\.([0-9])([0-9])/', 3, 'dec', 'Transmission/1.06', 'no', 'yes', '', 0), +(6, 'RTorrent 0.x(with libtorrent 0.x)', 'rTorrent 0.8.0 (with libtorrent 0.12.0)', '/^-lt([0-9A-E])([0-9A-E])([0-9A-E])([0-9A-E])-/', 4, 'hex', '-lt0C00-', '/^rtorrent\\/0\\.([0-9])\\.([0-9])\\/0\\.([1-9][0-9]*)\\.(0|[1-9][0-9]*)/', 4, 'dec', 'rtorrent/0.8.0/0.12.0', 'no', 'no', '', 3), +(7, 'Rufus 0.x', 'Rufus 0.6.9', '', 0, 'dec', '', '/^Rufus\\/0\\.([0-9])\\.([0-9])/', 2, 'dec', 'Rufus/0.6.9', 'no', 'no', '', 0), +(8, 'Azureus 3.x', 'Azureus 3.0.5.0', '/^-AZ3([0-9])([0-9])([0-9])-/', 3, 'dec', '-AZ3050-', '/^Azureus 3\\.([0-9])\\.([0-9])\\.([0-9])/', 3, 'dec', 'Azureus 3.0.5.0', 'no', 'yes', '', 0), +(9, 'uTorrent 1.7.x', 'uTorrent 1.7.5', '/^-UT17([0-9])([0-9])-/', 2, 'dec', '-UT1750-', '/^uTorrent\\/17([0-9])([0-9])/', 2, 'dec', 'uTorrent/1750', 'no', 'yes', '', 0), +(10, 'BitRocket 0.x', 'BitRocket 0.3.3(32)', '/^-BR0([0-9])([1-9][0-9]*)-/', 2, 'dec', '-BR0332-', '/^BitRocket\\/0\\.([0-9])\\.([0-9])\\(([1-9][0-9]*)\\) libtorrent\\/0\\.([1-9][0-9]*)\\.(0|[1-9][0-9]*)\\.(0|[1-9][0-9]*)/', 6, 'dec', 'BitRocket/0.3.3(32) libtorrent/0.13.0.0', 'no', 'yes', '', 0), +(11, 'MLDonkey 2.9.x', 'MLDonkey 2.9.2', '/^-ML2\\.9\\.([0-9])-/', 1, 'dec', '-ML2.9.2-', '/^MLDonkey\\/2\\.9\\.([0-9])/', 1, 'dec', 'MLDonkey/2.9.2', 'no', 'yes', '', 0), +(12, 'uTorrent 1.8.x', 'uTorrent 1.8.0', '/^-UT18([0-9])([0-9])-/', 2, 'dec', '-UT1800-', '/^uTorrent\\/18([0-9])([0-9])/', 2, 'dec', 'uTorrent/1800', 'no', 'yes', '', 0), +(13, 'Azureus 4.x', 'Vuze 4.0.0.2', '/^-AZ4([0-9])([0-9])([0-9])-/', 3, 'dec', '-AZ4002-', '/^Azureus 4\\.([0-9])\\.([0-9])\\.([0-9])/', 3, 'dec', 'Azureus 4.0.0.2', 'no', 'yes', '', 0), +(14, 'SymTorrent', '', '', 0, 'dec', '', '/^SymTorrent/', 0, 'dec', 'SymTorrent', 'no', 'no', '', 0), +(15, 'Deluge 1.x', 'Deluge 1.1.6', '/^-DE1([0-9])([0-9])([0-9])-/', 3, 'dec', '-DE1160-', '/^Deluge 1\\.([0-9])\\.([0-9])/', 2, 'dec', 'Deluge 1.1.6', 'no', 'yes', '', 0), +(16, 'uTorrent 1.8xB', 'uTorrent 1.80 Beta (build 9137)', '/^-UT18([0-9])B-/', 1, 'dec', '-UT180B-', '/^uTorrent\\/18([0-9])B\\(([1-9][0-9]*)\\)/', 2, 'dec', 'uTorrent/180B(9137)', 'no', 'yes', '', 0), +(17, 'uTorrent 2.x.x', 'uTorrent 2.0(build 17624)', '/^-UT2([0-9])([0-9])([0-9])-/', 3, 'dec', '-UT2000-', '/^uTorrent\\/2([0-9])([0-9])([0-9])/', 3, 'dec', 'uTorrent/2000', 'no', 'yes', '', 0); + +-- -------------------------------------------------------- + +-- +-- Table structure for table `allowedemails` +-- + +CREATE TABLE IF NOT EXISTS `allowedemails` ( + `id` int(10) NOT NULL AUTO_INCREMENT, + `value` mediumtext NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=2 ; + +-- +-- Dumping data for table `allowedemails` +-- + +INSERT INTO `allowedemails` (`id`, `value`) VALUES +(1, '@st.zju.edu.cn @gstu.zju.edu.cn @fa.zju.edu.cn @zuaa.zju.edu.cn'); + +-- -------------------------------------------------------- + +-- +-- Table structure for table `attachments` +-- + +CREATE TABLE IF NOT EXISTS `attachments` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `userid` mediumint(8) unsigned NOT NULL DEFAULT '0', + `width` smallint(6) unsigned NOT NULL DEFAULT '0', + `added` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `filename` varchar(255) NOT NULL DEFAULT '', + `dlkey` char(32) NOT NULL, + `filetype` varchar(50) NOT NULL DEFAULT '', + `filesize` bigint(20) unsigned NOT NULL DEFAULT '0', + `location` varchar(255) NOT NULL, + `downloads` mediumint(8) NOT NULL DEFAULT '0', + `isimage` tinyint(1) unsigned NOT NULL DEFAULT '0', + `thumb` tinyint(1) unsigned NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `pid` (`userid`,`id`), + KEY `dateline` (`added`,`isimage`,`downloads`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; + +-- +-- Dumping data for table `attachments` +-- + + +-- -------------------------------------------------------- + +-- +-- Table structure for table `audiocodecs` +-- + +CREATE TABLE IF NOT EXISTS `audiocodecs` ( + `id` tinyint(3) unsigned NOT NULL AUTO_INCREMENT, + `name` varchar(30) NOT NULL, + `image` varchar(255) NOT NULL, + `sort_index` tinyint(3) unsigned NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC AUTO_INCREMENT=10 ; + +-- +-- Dumping data for table `audiocodecs` +-- + +INSERT INTO `audiocodecs` (`id`, `name`, `image`, `sort_index`) VALUES +(1, 'FLAC', '', 0), +(2, 'APE', '', 0), +(3, 'DTS', '', 0), +(4, 'MP3', '', 0), +(5, 'OGG', '', 0), +(6, 'AAC', '', 0), +(7, 'Other', '', 0); + +-- -------------------------------------------------------- + +-- +-- Table structure for table `avps` +-- + +CREATE TABLE IF NOT EXISTS `avps` ( + `arg` varchar(20) NOT NULL DEFAULT '', + `value_s` text NOT NULL, + `value_i` int(11) NOT NULL DEFAULT '0', + `value_u` int(10) unsigned NOT NULL DEFAULT '0', + PRIMARY KEY (`arg`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; + +-- +-- Dumping data for table `avps` +-- + +INSERT INTO `avps` (`arg`, `value_s`, `value_i`, `value_u`) VALUES +('lastcleantime', '', 0, 1274104801), +('last24', '', 947, 1211708476), +('lastcleantime2', '', 0, 1274103601), +('lastcleantime3', '', 0, 1274101801), +('lastcleantime4', '', 0, 1274079901), +('lastcleantime5', '', 0, 1273652875); + +-- -------------------------------------------------------- + +-- +-- Table structure for table `bannedemails` +-- + +CREATE TABLE IF NOT EXISTS `bannedemails` ( + `id` int(10) NOT NULL AUTO_INCREMENT, + `value` mediumtext NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=2 ; + +-- +-- Dumping data for table `bannedemails` +-- + +INSERT INTO `bannedemails` (`id`, `value`) VALUES +(1, '@test.com'); + +-- -------------------------------------------------------- + +-- +-- Table structure for table `bans` +-- + +CREATE TABLE IF NOT EXISTS `bans` ( + `id` smallint(5) unsigned NOT NULL AUTO_INCREMENT, + `added` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `addedby` mediumint(8) unsigned NOT NULL DEFAULT '0', + `comment` varchar(255) NOT NULL DEFAULT '', + `first` bigint(20) NOT NULL, + `last` bigint(20) NOT NULL, + PRIMARY KEY (`id`), + KEY `first_last` (`first`,`last`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; + +-- +-- Dumping data for table `bans` +-- + + +-- -------------------------------------------------------- + +-- +-- Table structure for table `bitbucket` +-- + +CREATE TABLE IF NOT EXISTS `bitbucket` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `owner` mediumint(8) unsigned NOT NULL DEFAULT '0', + `name` varchar(255) NOT NULL, + `added` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `public` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; + +-- +-- Dumping data for table `bitbucket` +-- + + +-- -------------------------------------------------------- + +-- +-- Table structure for table `blocks` +-- + +CREATE TABLE IF NOT EXISTS `blocks` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `userid` mediumint(8) unsigned NOT NULL DEFAULT '0', + `blockid` mediumint(8) unsigned NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + UNIQUE KEY `userfriend` (`userid`,`blockid`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; + +-- +-- Dumping data for table `blocks` +-- + + +-- -------------------------------------------------------- + +-- +-- Table structure for table `bookmarks` +-- + +CREATE TABLE IF NOT EXISTS `bookmarks` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `torrentid` mediumint(8) unsigned NOT NULL DEFAULT '0', + `userid` mediumint(8) unsigned NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `userid_torrentid` (`userid`,`torrentid`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; + +-- +-- Dumping data for table `bookmarks` +-- + + +-- -------------------------------------------------------- + +-- +-- Table structure for table `categories` +-- + +CREATE TABLE IF NOT EXISTS `categories` ( + `id` smallint(5) unsigned NOT NULL AUTO_INCREMENT, + `mode` tinyint(3) unsigned NOT NULL DEFAULT '1', + `class_name` varchar(255) NOT NULL DEFAULT '', + `name` varchar(30) NOT NULL, + `image` varchar(255) NOT NULL, + `sort_index` smallint(5) unsigned NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `mode_sort` (`mode`,`sort_index`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=410 ; + +-- +-- Dumping data for table `categories` +-- + +INSERT INTO `categories` (`id`, `mode`, `class_name`, `name`, `image`, `sort_index`) VALUES +(401, 4, 'c_movies', 'Movies', 'catsprites.png', 0), +(402, 4, 'c_tvseries', 'TV Series', 'catsprites.png', 3), +(403, 4, 'c_tvshows', 'TV Shows', 'catsprites.png', 4), +(404, 4, 'c_doc', 'Documentaries', 'catsprites.png', 1), +(405, 4, 'c_anime', 'Animations', 'catsprites.png', 2), +(406, 4, 'c_mv', 'Music Videos', 'catsprites.png', 5), +(407, 4, 'c_sports', 'Sports', 'catsprites.png', 6), +(408, 4, 'c_hqaudio', 'HQ Audio', 'catsprites.png', 8), +(409, 4, 'c_misc', 'Misc', 'catsprites.png', 7); + +-- -------------------------------------------------------- + +-- +-- Table structure for table `caticons` +-- + +CREATE TABLE IF NOT EXISTS `caticons` ( + `id` tinyint(3) unsigned NOT NULL AUTO_INCREMENT, + `name` varchar(64) NOT NULL DEFAULT '', + `folder` varchar(255) NOT NULL, + `cssfile` varchar(255) NOT NULL DEFAULT '', + `multilang` enum('yes','no') NOT NULL DEFAULT 'no', + `secondicon` enum('yes','no') NOT NULL DEFAULT 'no', + `designer` varchar(50) NOT NULL DEFAULT '', + `comment` varchar(255) NOT NULL DEFAULT '', + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=5 ; + +-- +-- Dumping data for table `caticons` +-- + +INSERT INTO `caticons` (`id`, `name`, `folder`, `cssfile`, `multilang`, `secondicon`, `designer`, `comment`) VALUES +(1, 'SceneTorrents mod', 'scenetorrents/', 'pic/category/chd/scenetorrents/catsprites.css', 'yes', 'no', 'NexusPHP', 'Modified from SceneTorrents'); + +-- -------------------------------------------------------- + +-- +-- Table structure for table `cheaters` +-- + +CREATE TABLE IF NOT EXISTS `cheaters` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `added` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `userid` mediumint(8) unsigned NOT NULL DEFAULT '0', + `torrentid` mediumint(8) unsigned NOT NULL DEFAULT '0', + `uploaded` bigint(20) unsigned NOT NULL DEFAULT '0', + `downloaded` bigint(20) unsigned NOT NULL DEFAULT '0', + `anctime` mediumint(8) unsigned NOT NULL DEFAULT '0', + `seeders` mediumint(5) unsigned NOT NULL DEFAULT '0', + `leechers` mediumint(8) unsigned NOT NULL DEFAULT '0', + `hit` tinyint(3) unsigned NOT NULL DEFAULT '0', + `dealtby` mediumint(8) unsigned NOT NULL DEFAULT '0', + `dealtwith` tinyint(1) NOT NULL DEFAULT '0', + `comment` varchar(255) NOT NULL DEFAULT '', + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; + +-- +-- Dumping data for table `cheaters` +-- + + +-- -------------------------------------------------------- + +-- +-- Table structure for table `chronicle` +-- + +CREATE TABLE IF NOT EXISTS `chronicle` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `userid` mediumint(8) unsigned NOT NULL DEFAULT '0', + `added` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `txt` text, + PRIMARY KEY (`id`), + KEY `added` (`added`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; + +-- +-- Dumping data for table `chronicle` +-- + + +-- -------------------------------------------------------- + +-- +-- Table structure for table `codecs` +-- + +CREATE TABLE IF NOT EXISTS `codecs` ( + `id` tinyint(3) unsigned NOT NULL AUTO_INCREMENT, + `name` varchar(30) NOT NULL, + `sort_index` tinyint(3) unsigned NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=10 ; + +-- +-- Dumping data for table `codecs` +-- + +INSERT INTO `codecs` (`id`, `name`, `sort_index`) VALUES +(1, 'H.264', 0), +(2, 'VC-1', 0), +(3, 'Xvid', 0), +(4, 'MPEG-2', 0), +(5, 'Other', 0); + +-- -------------------------------------------------------- + +-- +-- Table structure for table `comments` +-- + +CREATE TABLE IF NOT EXISTS `comments` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `user` mediumint(8) unsigned NOT NULL DEFAULT '0', + `torrent` mediumint(8) unsigned NOT NULL DEFAULT '0', + `added` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `text` text, + `ori_text` text, + `editedby` mediumint(8) unsigned NOT NULL DEFAULT '0', + `editdate` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `offer` mediumint(8) unsigned NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `user` (`user`), + KEY `torrent_id` (`torrent`,`id`), + KEY `offer_id` (`offer`,`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; + +-- +-- Dumping data for table `comments` +-- + + +-- -------------------------------------------------------- + +-- +-- Table structure for table `countries` +-- + +CREATE TABLE IF NOT EXISTS `countries` ( + `id` smallint(5) unsigned NOT NULL AUTO_INCREMENT, + `name` varchar(50) NOT NULL, + `flagpic` varchar(255) NOT NULL DEFAULT '', + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=108 ; + +-- +-- Dumping data for table `countries` +-- + +INSERT INTO `countries` (`id`, `name`, `flagpic`) VALUES +(1, 'Sweden', 'sweden.gif'), +(2, 'United States of America', 'usa.gif'), +(3, 'Russia', 'russia.gif'), +(4, 'Finland', 'finland.gif'), +(5, 'Canada', 'canada.gif'), +(6, 'France', 'france.gif'), +(7, 'Germany', 'germany.gif'), +(8, '中国', 'china.gif'), +(9, 'Italy', 'italy.gif'), +(10, 'Denmark', 'denmark.gif'), +(11, 'Norway', 'norway.gif'), +(12, 'United Kingdom', 'uk.gif'), +(13, 'Ireland', 'ireland.gif'), +(14, 'Poland', 'poland.gif'), +(15, 'Netherlands', 'netherlands.gif'), +(16, 'Belgium', 'belgium.gif'), +(17, 'Japan', 'japan.gif'), +(18, 'Brazil', 'brazil.gif'), +(19, 'Argentina', 'argentina.gif'), +(20, 'Australia', 'australia.gif'), +(21, 'New Zealand', 'newzealand.gif'), +(23, 'Spain', 'spain.gif'), +(24, 'Portugal', 'portugal.gif'), +(25, 'Mexico', 'mexico.gif'), +(26, 'Singapore', 'singapore.gif'), +(70, 'India', 'india.gif'), +(65, 'Albania', 'albania.gif'), +(29, 'South Africa', 'southafrica.gif'), +(30, 'South Korea', 'southkorea.gif'), +(31, 'Jamaica', 'jamaica.gif'), +(32, 'Luxembourg', 'luxembourg.gif'), +(34, 'Belize', 'belize.gif'), +(35, 'Algeria', 'algeria.gif'), +(36, 'Angola', 'angola.gif'), +(37, 'Austria', 'austria.gif'), +(38, 'Yugoslavia', 'yugoslavia.gif'), +(39, 'Western Samoa', 'westernsamoa.gif'), +(40, 'Malaysia', 'malaysia.gif'), +(41, 'Dominican Republic', 'dominicanrep.gif'), +(42, 'Greece', 'greece.gif'), +(43, 'Guatemala', 'guatemala.gif'), +(44, 'Israel', 'israel.gif'), +(45, 'Pakistan', 'pakistan.gif'), +(46, 'Czech Republic', 'czechrep.gif'), +(47, 'Serbia', 'serbia.gif'), +(48, 'Seychelles', 'seychelles.gif'), +(50, 'Puerto Rico', 'puertorico.gif'), +(51, 'Chile', 'chile.gif'), +(52, 'Cuba', 'cuba.gif'), +(53, 'Congo', 'congo.gif'), +(54, 'Afghanistan', 'afghanistan.gif'), +(55, 'Turkey', 'turkey.gif'), +(56, 'Uzbekistan', 'uzbekistan.gif'), +(57, 'Switzerland', 'switzerland.gif'), +(58, 'Kiribati', 'kiribati.gif'), +(59, 'Philippines', 'philippines.gif'), +(60, 'Burkina Faso', 'burkinafaso.gif'), +(61, 'Nigeria', 'nigeria.gif'), +(62, 'Iceland', 'iceland.gif'), +(63, 'Nauru', 'nauru.gif'), +(64, 'Slovenia', 'slovenia.gif'), +(66, 'Turkmenistan', 'turkmenistan.gif'), +(67, 'Bosnia Herzegovina', 'bosniaherzegovina.gif'), +(68, 'Andorra', 'andorra.gif'), +(69, 'Lithuania', 'lithuania.gif'), +(71, 'Netherlands Antilles', 'nethantilles.gif'), +(72, 'Ukraine', 'ukraine.gif'), +(73, 'Venezuela', 'venezuela.gif'), +(74, 'Hungary', 'hungary.gif'), +(75, 'Romania', 'romania.gif'), +(76, 'Vanuatu', 'vanuatu.gif'), +(77, 'Vietnam', 'vietnam.gif'), +(78, 'Trinidad & Tobago', 'trinidadandtobago.gif'), +(79, 'Honduras', 'honduras.gif'), +(80, 'Kyrgyzstan', 'kyrgyzstan.gif'), +(81, 'Ecuador', 'ecuador.gif'), +(82, 'Bahamas', 'bahamas.gif'), +(83, 'Peru', 'peru.gif'), +(84, 'Cambodia', 'cambodia.gif'), +(85, 'Barbados', 'barbados.gif'), +(86, 'Bangladesh', 'bangladesh.gif'), +(87, 'Laos', 'laos.gif'), +(88, 'Uruguay', 'uruguay.gif'), +(89, 'Antigua Barbuda', 'antiguabarbuda.gif'), +(90, 'Paraguay', 'paraguay.gif'), +(93, 'Thailand', 'thailand.gif'), +(92, 'Union of Soviet Socialist Republics', 'ussr.gif'), +(94, 'Senegal', 'senegal.gif'), +(95, 'Togo', 'togo.gif'), +(96, 'North Korea', 'northkorea.gif'), +(97, 'Croatia', 'croatia.gif'), +(98, 'Estonia', 'estonia.gif'), +(99, 'Colombia', 'colombia.gif'), +(100, 'Lebanon', 'lebanon.gif'), +(101, 'Latvia', 'latvia.gif'), +(102, 'Costa Rica', 'costarica.gif'), +(103, 'Egypt', 'egypt.gif'), +(104, 'Bulgaria', 'bulgaria.gif'), +(105, 'Isla de Muerte', 'jollyroger.gif'), +(107, 'Pirates', 'jollyroger.gif'); + +-- -------------------------------------------------------- + +-- +-- Table structure for table `downloadspeed` +-- + +CREATE TABLE IF NOT EXISTS `downloadspeed` ( + `id` tinyint(3) unsigned NOT NULL AUTO_INCREMENT, + `name` varchar(50) NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=19 ; + +-- +-- Dumping data for table `downloadspeed` +-- + +INSERT INTO `downloadspeed` (`id`, `name`) VALUES +(1, '64kbps'), +(2, '128kbps'), +(3, '256kbps'), +(4, '512kbps'), +(5, '768kbps'), +(6, '1Mbps'), +(7, '1.5Mbps'), +(8, '2Mbps'), +(9, '3Mbps'), +(10, '4Mbps'), +(11, '5Mbps'), +(12, '6Mbps'), +(13, '7Mbps'), +(14, '8Mbps'), +(15, '9Mbps'), +(16, '10Mbps'), +(17, '48Mbps'), +(18, '100Mbit'); + +-- -------------------------------------------------------- + +-- +-- Table structure for table `faq` +-- + +CREATE TABLE IF NOT EXISTS `faq` ( + `id` smallint(5) unsigned NOT NULL AUTO_INCREMENT, + `link_id` smallint(5) unsigned NOT NULL, + `lang_id` smallint(5) unsigned NOT NULL DEFAULT '6', + `type` enum('categ','item') NOT NULL DEFAULT 'item', + `question` text NOT NULL, + `answer` text NOT NULL, + `flag` tinyint(3) unsigned NOT NULL DEFAULT '1', + `categ` smallint(5) unsigned NOT NULL DEFAULT '0', + `order` smallint(5) unsigned NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=476 ; + +-- +-- Dumping data for table `faq` +-- + +INSERT INTO `faq` (`id`, `link_id`, `lang_id`, `type`, `question`, `answer`, `flag`, `categ`, `order`) VALUES +(1, 1, 25, 'categ', '站点信息', '', 1, 0, 1), +(2, 2, 25, 'categ', '用户信息', '', 1, 0, 2), +(3, 3, 25, 'categ', '数据统计', '', 1, 0, 3), +(4, 4, 25, 'categ', '发布', '', 1, 0, 4), +(5, 5, 25, 'categ', '下载', '', 1, 0, 5), +(6, 6, 25, 'categ', '我该怎样提升下载速度?', '', 1, 0, 6), +(7, 7, 25, 'categ', '我的网络提供商(ISP)使用了透明代理。我应该怎么做?', '', 1, 0, 7), +(8, 8, 25, 'categ', '为什么我连不上?难道我被网站屏蔽了?', '', 1, 0, 8), +(9, 9, 25, 'categ', '如果从这里找不到我的问题的解答,我该怎么办?', '', 1, 0, 9), +(10, 10, 25, 'item', '到底什么是BT(Bittorrent)?我要如何才能弄到这类程序?', '参看Brian的BitTorrent FAQ及指导。', 1, 1, 1), +(11, 11, 25, 'item', '我们捐出来的钱上哪儿去了?', '所有捐助的钱用于维护服务器的费用。', 1, 1, 2), +(12, 12, 25, 'item', '我从哪里可以搞到源代码的拷贝?', '这个Tracker使用的是NexusPHP的代码。代码获取事宜,请看这里
\r\nNexusPHP的代码是根据TBSource的源码改写的。TBDev网站,Tracker源代码以及社区论坛都在这里:TBDev.net。', 1, 1, 3), +(13, 13, 25, 'item', '我注册了一个账号但是却没有收到验证邮件!', '这很有可能是Tracker所在的服务器网络出现了问题。你可以填写这个表格让服务器重发验证邮件。
\r\n通常没有得到确认的注册帐户会在24小时后被删除,所以你可以在第二天重试。需要注意的是,如果你第一次没有收到确认信,第二次有很大的可能仍然无法收到确认信,所以换一个E-mail地址是一个不错的主意。', 1, 2, 1), +(14, 14, 25, 'item', '我忘记了我的用户名/密码了,能帮我找回来么?', '请填写这个表单,我们将把登录详情发还给你。', 1, 2, 2), +(15, 15, 25, 'item', '我可以给我的账号改个名字么?', '我们并不支持给账号改名。', 1, 2, 3), +(16, 16, 25, 'item', '你可以删除一个(已确认的)账号么?', '我们一般不提供该类服务,所以不要请求删除任何一个被你邀请的帐号。', 1, 2, 4), +(17, 17, 25, 'item', '那么,什么是我的分享率(Ratio)?', '就在页面功能分区的下面。
\r\n
\r\nratio\r\n
\r\n
\r\n区分你的整体分享率和独立分享率是很重要的。整体分享率关注的是自从你加入站点以来,账号的整体上传与下载量。而独立分享率则针对每一个你正在下载或做种的文件。\r\n
\r\n
\r\n你可能看到两种符号来代替数字:"Inf.",这个是无限(Infinity)的缩写,意思是你的下载量为0字节,而上传量则是任意一个非零的值(上传量/下载量=无穷大);"---",应该被视为“不可用”,这说明了你的下载量和上传量都是0字节。(上传量/下载量=0/0 这是一个不确定的量)。\r\n', 1, 2, 5), +(18, 18, 25, 'item', '为什么我的IP地址显示在我的个人信息页面上?', '只有你自己和网站Moderator及以上的管理员可以看到你的IP地址和Email。普通用户是看不到这些信息的。', 1, 2, 6), +(21, 21, 25, 'item', '为什么我的“可连接”是“否”?(以及为什么我需要关注这个问题?)', 'Tracker服务器认为你在防火墙后,或者在NAT桥接后,并且无法接收其他Peer的连接请求。\r\n
\r\n
\r\n这意味着其它的大批Peer无法连接到你,只能由你连接到他们。更糟糕的情况是,如果两个Peer都处于这样的状态,他们将完全无法连接到对方。这对于整体速度有着非常不利的影响。\r\n
\r\n
\r\n对于这个问题,有以下解决方式:对于防火墙,打开用于接收连接的端口(即你在BT客户端中定义的端口);对于NAT,你需要配置NAT服务器使用Basic NAT方式而不是NAPT(不同的路由有着不同的运行方式。翻阅你的路由文档或客服论坛。你也可以在PortForward找到关于此问题的大量信息)。\r\n\r\n\r\n\r\n\r\n\r\n', 1, 2, 9), +(22, 22, 25, 'item', '不同的用户等级代表了什么含义?', '\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n
  Peasant  被降级的用户,他们有30天时间来提升分享率,否则他们会被踢。不能发表趣味盒内容;不能申请友情链接;不能上传字幕。\r\n
  User 新用户的默认级别。只能在每周六中午12点至每周日晚上11点59分发布种子。
  Power User 得到一个邀请名额;可以直接发布种子;可以查看NFO文档;可以查看用户列表;可以请求续种; 可以发送邀请; 可以查看排行榜;可以查看其它用户的种子历史(如果用户隐私等级未设置为"强"); 可以删除自己上传的字幕。
  Elite User Elite User及以上用户封存账号后不会被删除。
  Crazy User 得到两个邀请名额;可以在做种/下载/发布的时候选择匿名模式。
  Insane User 可以查看普通日志。
  Veteran User 得到三个邀请名额;可以查看其它用户的评论、帖子历史。Veteran User及以上用户会永远保留账号。
  Extreme User 可以更新过期的外部信息;可以查看Extreme User论坛。
  Ultimate User 得到五个邀请名额。
  Nexus Master 得到十个邀请名额。
  Star 为网站捐款的主。
  贵宾(VIP) Nexus Master拥有相同权限并被认为是精英成员。免除自动降级。
  其它 自定义等级。
  养老族(Retiree) 退休后的管理组成员。
  发布员(Uploader) 专注的发布者。免除自动降级;可以查看匿名用户的真实身份。
  总版主(Moderator) 可以查看管理组信箱、举报信箱;管理趣味盒内容、投票内容;可以编辑或删除任何发布的种子;可以管理候选;可以管理论坛帖子、用户评论;可以查看机密日志;可以删除任何字幕;可以管理日志中的代码、史册;可以查看用户的邀请记录;可以管理用户帐号的一般信息。不能管理友情链接、最近消息、论坛版块;不能将种子设为置顶或促销;不能查看用户IP或Email等机密信息;不能删除账号。
  管理员(Administrator) 除了不能改变站点设定、管理捐赠外,可以做任何事。
  维护开发员(Sysop) 网站开发/维护人员,可以改变站点设定,不能管理捐赠。
  主管(Staff Leader) 网站主管,可以做任何事。
', 1, 2, 10), +(23, 23, 25, 'item', '提升和降级又是怎样被执行的呢?', '\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n
  Peasant 当以下情况时将被自动降至本级:
\r\n1.如果你已经下载了超过50GB,你应该有大于0.4的分享率。
\r\n2.如果你已经下载了超过100GB,你应该有大于0.5的分享率。
\r\n3.如果你已经下载了超过200GB,你应该有大于0.6的分享率。
\r\n4.如果你已经下载了超过400GB,你应该有大于0.7的分享率。
\r\n5.如果你已经下载了超过800GB,你应该有大于0.8的分享率。
  Power User 必须注册至少4周,并且下载至少50G,分享率大于1.05。
\r\n当条件符合时将被自动提升。注意,无论何时,如果你的分享率低于0.95,你将自动降级。
  Elite User 必须注册至少8周,并且下载至少120G,分享率大于1.55。\r\n
\r\n当条件符合时将被自动提升。注意,无论何时,如果你的分享率低于1.45,你将自动降级。
  Crazy User 必须注册至少15周,并且下载至少300G,分享率大于2.05。\r\n
\r\n当条件符合时将被自动提升。注意,无论何时,如果你的分享率低于1.95,你将自动降级。
  Insane User 必须注册至少25周,并且下载至少500G,分享率大于2.55。
\r\n当条件符合时将被自动提升。注意,无论何时,如果你的分享率低于2.45,你将自动降级。
  Veteran User 必须注册至少40周,并且下载至少750G,分享率大于3.05。
\r\n当条件符合时将被自动提升。注意,无论何时,如果你的分享率低于2.95,你将自动降级。
  Extreme User 必须注册至少60周,并且下载至少1TB,分享率大于3.55。
\r\n当条件符合时将被自动提升。注意,无论何时,如果你的分享率低于3.45,你将自动降级。
  Ultimate User 必须注册至少80周,并且下载至少1.5TB,分享率大于4.05。
\r\n当条件符合时将被自动提升。注意,无论何时,如果你的分享率低于3.95,你将自动降级。
  Nexus Master 必须注册至少100周,并且下载至少3TB,分享率大于4.55。
\r\n当条件符合时将被自动提升。注意,无论何时,如果你的分享率低于4.45,你将自动降级。
  Star 只需捐款,详见这里
  贵宾(VIP) 由管理员仔细斟酌后分配给他们认为对于站点某方面有特殊贡献的用户。
\r\n(任何索取贵宾等级的要求将被自动无视)
  其它 用户使用魔力值兑换,或由管理员仔细斟酌后授权。
  养老族(Retiree) 由管理员授予。
  发布员(Uploader) 由管理员分配(参见''发布''部分以了解详情)。
  总版主(Moderator) 无需多问,我们会找到你的!
', 1, 2, 11), +(25, 25, 25, 'item', '为什么我的朋友不能加入?', '用户数目有所限制(你可以查看“首页->站点数据->上限”)。当达到那个数目时,我们会停止接受新成员。
\r\n由于非活跃用户(长期不使用账号的用户)引起账号资源浪费,因此我们将清理该部分用户,为其他想加入用户腾出空间。
\r\n关于非活跃用户清理规则,参考规则。', 1, 2, 13), +(26, 26, 25, 'item', '怎样自定义头像?', '首先,找一个你喜欢的图片,当然了它不能违反我们的规则。然后你要找一个存放它的地方,比方说我们自己的上传器。出于服务器负载的考虑,我们更希望你将图片上传到别的网站,然后将其URL粘贴到你的控制面板的头像URL部分。
\r\n
\r\n请不要为了仅仅测试头像而发帖。如果一切顺利,你将在你的详情页面看到它。', 1, 2, 14), +(27, 27, 25, 'item', '最常见的数据未能得到更新的原因', '
    \r\n
  • 服务器过载/未响应。只要尝试着保持会话直到服务器恢复响应(不推荐连续手动刷新,这样会加重服务器负载)。
  • \r\n
  • 你正在使用不稳定的客户端。如果你想要使用测试版或者CVS版本,你需要自己承担由此带来的风险。
  • \r\n
', 1, 3, 1), +(28, 28, 25, 'item', '最佳的尝试', '
    \r\n
  • 如果你当前正下载/上传的种子并不在你的用户详情页面中,你可以等一会或者强制进行手动更新。
  • \r\n
  • 确保你正确地关闭了客户端软件,否则Tracker服务器无法收到"event=completed"的信号。
  • \r\n
  • 如果Tracker服务器挂了,不要停止上传。只要在你退出客户端之前服务器恢复工作,所有的数据都会得到正确地更新。
  • \r\n
', 1, 3, 2), +(29, 29, 25, 'item', '我可以任意选择Bittorrent客户端软件么?', '根据NexusPHP对常见BitTorrent客户端的测试,目前本站Tracker只允许使用以下的BitTorrent客户端软件。
\r\nNexusPHP的测试报告可在此查看。\r\n
\r\nWindows:\r\n
    \r\n
  • Azureus: 2.5.0.4, 3.0.5.0, 3.0.5.2及后续版本
  • \r\n
  • uTorrent: 1.6.1, 1.7.5, 1.7.6, 1.7.7, 1.8Beta(Build 10364), 2.0(Build 17624)及后续版本
  • \r\n
  • BitTorrent: 6.0.1, 6.0.2, 6.0.3及后续版本
  • \r\n
  • Deluge: 0.5.9.1, 1.1.6及后续版本
  • \r\n
  • Rufus: 0.6.9, 0.7.0及后续版本
  • \r\n
\r\nLinux:\r\n
    \r\n
  • Azureus: 2.5.0.4, 3.0.5.0, 3.0.5.2及后续版本
  • \r\n
  • Deluge: 0.5.9.1, 1.1.6及后续版本
  • \r\n
  • Rufus: 0.6.9, 0.7.0及后续版本
  • \r\n
  • Transmission: 1.21及后续版本
  • \r\n
  • rTorrent: 0.8.0(配合libtorrent 0.12.0或后续版本)及后续版本
  • \r\n
  • Enhanced CTorrent: 3.3.2及后续版本
  • \r\n
\r\nMacOS X:\r\n\r\nSymbian (仅供测试):\r\n\r\n
\r\n\r\n以上客户端在https支持方面\r\n
    \r\n
  • uTorrent 1.61: 无法准确解析https的tracker, 同时在使用会将自己标识为uTorrent 1.5
  • \r\n
  • Rufus: 没有https支持, 并且已经几年没有继续开发
  • \r\n
  • rtorrent: 需要手工设置SSL证书, 详细信息请自行查阅其官方网站说明
  • \r\n
\r\n\r\n
\r\n\r\n同时请尽量避免使用处于测试期的客户端软件, 如uTorrent 1.8.0B。\r\n\r\n为了从本站得到最好的下载体验,我们高度推荐uTorrent 以及Azureus这两个软件的最新稳定版。', 1, 5, 3), +(30, 30, 25, 'item', '为什么我正在下载/做种的一个种子会在我的详情页面中被列出多次?', '如果因为某些原因(比方说死机,客户端失去响应)你的客户端非正常退出并且你又重新打开它,它会被分配到一个全新的Peer ID, 这样它显示为一个全新的种子。而旧的种子将永远不会收到“event=completed”或“event=stopped”的信号,因此将一直被列出直到Tracker清理超时的Peer。 无视了它就可以了,它最后会消失的。', 1, 3, 4), +(31, 31, 25, 'item', '为什么我已经完成/取消的种子仍然在我的详情页面里?', '有一些客户端,比如说TorrentStorm和Nova Torrent,在取消或者完成一个任务的时候不能向Tracker服务器正确发送信号。在那样的情况下,Tracker服务器将一直保持等待信号的状态(因此会一直列出种子的状态为做种/下载的状态)直到Tracker清理超时的Peer。无视了它就可以了,它最后会消失的。', 1, 3, 5), +(33, 33, 25, 'item', '多IP(我可以从不同的电脑登录/下载吗?)', '是的,目前Tracker服务器支持单个用户从任意个数的IP地址同时访问/下载。
\r\n然而,对于单种是有限制的。对于每个种子,最多允许3个做种的连接,最多只允许1个下载的连接(这意味着,对于某个种子你一次只能在一个地方下载)。', 1, 3, 7), +(36, 36, 25, 'item', '为什么我不能发布种子?', '请看规则。', 1, 4, 1), +(37, 37, 25, 'item', '我需要满足哪些条件才能加入发布小组呢?', '你所必须满足的条件:\r\n
    \r\n
  • 具有稳定的资源来源
  • \r\n
  • 平均每周资源发布数量不少于5个
  • \r\n
\r\n你必须确保发布的文件符合以下特征:\r\n
    \r\n
  • 不超过7天之前
  • \r\n
  • 你必须要有做种的能力,或者可以确保至少有效供种24小时。
  • \r\n
  • 你需要有至少达到2MBit的上传带宽。
  • \r\n
\r\n如果你认为你符合以上条件,那么不要犹豫,联系管理组吧。
\r\n记住! 仔细填写你的申请!确保申请中包含你的上传速度以及你计划发布的内容的类型。
\r\n只有仔细填写并且经过慎重考虑的申请才会纳入我们的视野。', 1, 4, 2), +(38, 38, 25, 'item', '我可以发布你们这里的种子到别的Tracker服务器么?', '不能。我们是一个封闭的、限制用户数的社区。只有注册用户才能够使用我们的Tracker。将我们的种子文件发布到其他Tracker服务器是徒劳的,因为绝大多数试图下载这些文件的人将无法连接到我们的服务器。将我们的种子发布到其他Tracker只让那里的用户恼怒(因为无法下载)并且对我们产生敌对情绪,所以这种行为是我们是不能容忍的。
\r\n
\r\n如果其他网站的管理员向我们举报我们的种子被发布在他们的站点上,对此负责的用户将因此被移出我们的社区。
\r\n
\r\n但是对于从我们这里下载得到的文件,你可以随意操控它们(发布者明确说明为独占的资源除外)。你可以制作另一个种子,写入其他Tracker的地址,并发布到你喜欢的站点上。', 1, 4, 3), +(39, 39, 25, 'item', '下载来的文件该怎么打开?', '在这份指引里面找找看吧。', 1, 5, 1), +(40, 40, 25, 'item', '我下载了一部电影,但是不明白CAM/TS/TC/SCR是什么意思?', '在这份指引里面找找看吧。', 1, 5, 2), +(41, 41, 25, 'item', '为什么一个可用的种子忽然就消失了?', '以下原因都会导致这个现象的出现:
\r\n(1) 按照网站规则,这个种子不符合规则已被删除。\r\n
\r\n(2) 发布者因为文件存在问题而删除了它。一般来说,发布者会发布一个替代的版本的。
\r\n(3) 在长时间断种后种子被自动删除了。', 1, 5, 3), +(42, 42, 25, 'item', '我该怎样续传文件或者给一个文件续种呢?', '打开扩展名为.torrent的文件,当你的客户端软件询问保存的目录时,选择已经存在的文件存放的目录,它就能够开始续传/续种了。', 1, 5, 4), +(43, 43, 25, 'item', '为什么我的下载有时候停在99%?', '你所下载到的片段越多,寻找拥有你所缺少的片段的同伴就将变得越困难。这就是为什么有时候在下载即将完成的时候,速度会变得非常慢,甚至完全停止了。只要耐心等候,或早或晚剩下的部分一定能够下载到的。', 1, 5, 5), +(44, 44, 25, 'item', '"部分哈希验证出错"这条信息是什么意思?', 'BT的客户端会检查它所收到的数据的完整性。如果某一个片段在验证中出错,那么这个片段将被重新下载。偶尔的哈希验证错误是非常常见的现象,不用担心。
\r\n
\r\n有些客户端有屏蔽向你发送错误数据的其他客户端的功能。如果有这个选项,最好打开它。因为这样可以保证如果某个同伴经常向你发送错误的数据时,它将会被屏蔽。', 1, 5, 6), +(45, 45, 25, 'item', '100MB大小的种子,我怎么下了120MB的东西回来?', '参见哈希验证失败的那个问题。如果你的客户端收到了错误的数据,那么它将会重新下载这一部分,因此总下载量有可能比种子大小略微大一些。确保“屏蔽发送错误数据的客户端”的那个选项被打开了,这样可以减少额外的下载。', 1, 5, 7), +(46, 46, 25, 'item', '为什么我的客户端的Tracker服务器状态出现"Your ratio is too low! You need to wait xx h to start"的错误?', '在种子被上传到Tracker服务器之后,有一些用户必须等一些时间才能开始下载。
\r\n这个延迟只会影响那些分享率较低且下载量大于10G的用户。
\r\n
\r\n\r\n\r\n \r\n \r\n \r\n \r\n \r\n\r\n\r\n \r\n \r\n \r\n \r\n \r\n\r\n\r\n \r\n \r\n \r\n \r\n \r\n\r\n\r\n \r\n \r\n \r\n \r\n \r\n\r\n
分享率低于0.4 延迟24小时
分享率低于0.5 延迟12小时
分享率低于0.6 延迟6小时
分享率低于0.8 延迟3小时
', 0, 5, 8), +(47, 47, 25, 'item', '为什么发生了这个错误? "Port xxxx is blacklisted"?', '你的客户端向Tracker服务器报告它正在使用某个默认的BT协议端口(6881-6889)或是任何其他常见P2P端口来作为连接端口。
\r\n
\r\n本站不允许这些通常被P2P协议默认使用的端口。原因是目前ISP常常对这些端口进行限速。
\r\n
\r\n被屏蔽的端口如下:
\r\n
\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
Direct Connect411 - 413
BitTorrent6881 - 6889
Kazza1214
Gnutella6346 - 6347
Emule4662
WinMX6699
\r\n
\r\n要使用我们的Tracker服务器,你必须配置你的客户端使用未在上面列出的端口范围(从49152到65535都是不错的选择,参看IANA)。注意某些客户端,如Azureus 2.0.7.0或更高版本,对所有的种子都使用同一端口。而其他大多数客户端为每一个种子开放一个端口,你在选择端口范围应考虑到这个问题(一般来说端口范围小于10。设置一个过大的范围并不一定有好处,而且可能有安全隐患)。
\r\n
\r\n这些端口是用于同伴间通信的,而非用于客户端连接到Tracker服务器。因此这个改动并不会影响你使用其他Tracker服务器(事实上,它甚至可能加快所有Tracker服务器上种子的速度)。你的客户端也仍然能够连接到那些使用默认端口的同伴。如果你的客户端不支持自己自定义端口,那么换一个吧。
\r\n
\r\n不要向我们询问,或者在论坛里面提问究竟应该选择什么端口。我们的用户选择的端口越随机,ISP就越难以捉摸清楚我们使用的端口,从而无法对我们的端口进行限速。如果我们只是简单地规定一个范围,那么ISP又会很快对那个范围内的端口进行限速的。
\r\n
\r\n最后还要说的是,记得在你的路由和/或防火墙上打开你选择的端口,如果你有这些东西的话。', 1, 5, 9), +(48, 48, 25, 'item', '那么这个呢? “IO错误 - [错误号13] 许可被拒绝”?', '如果你只是想要解决这个问题的话,重新启动你的电脑应该就可以了。否则的话,继续读下去。
\r\n
\r\nIO错误指的是输入-输出错误,这是一个文件系统错误,而非来自我们的Tracker服务器。当你的客户端由于某些原因不能打开种子中未下载完成的文件时,这个错误就会发生。 通常原因是客户端的两个实例同时在运行:当上一次关闭客户端时因为某种原因它没有被真正关闭,从而始终在后台运行。因此文件被锁定,使得新的实例不能打开这个文件。
\r\n
\r\n另外一个不常出现的原因是因为老旧的FAT文件系统。某些系统崩溃可能导致未下载完成的文件损坏,接着就出现了这个错误。运行一次scandisk应该可以解决这个问题。注意,只有当你使用Windows 9X操作系统(只支持FAT文件系统)或者在Windows NT/2000/XP中使用FAT文件系统的时候才比较可能出现这个问题。NTFS文件系统要健壮许多,不太可能出现这样的问题。', 1, 5, 10), +(50, 50, 25, 'item', '不要马上下载新发布的种子', '下载速度主要取决于上传者/下载者比(SLR)。如果是种子是新发布的且非常受欢迎而SLR又很低的种子,下载速度低是常见的问题。
\r\n
\r\n请牢记你不喜欢低速下载。所以多上传让别人不用忍耐同样的困扰。\r\n
\r\n
由其是当你的带宽较窄时,不要马上下载新发布的种子。最好的下载速度通常在一个种子生命周期的一半时出现,此时SLR达到最大值(不过,这时下载的缺点是你的上传量不会很多。究竟如何平衡优点与缺点,取决于你自己)。', 1, 6, 1), +(51, 51, 25, 'item', '限制上传速度', '上传速度将从以下两种方式显著影响下载速度:\r\n
    \r\n
  • Bittorrent的同伴倾向于回馈那些给它们提上传的同伴。这就意味着如果A和B正在同时下载一个文件,而A又在高速向B传送数据,那么B将会尝试着回报A。因此高速上传将导致高速下载。
  • \r\n\r\n
  • 由于TCP协议的工作方式,当A正从B下载某些东西的时候,A必须不停地向B发送成功收到B所发送来的数据的信号(被称为确认──ACK ── 某种“已收到”的信息)。如果A没有发送ACK信号,那么B将暂停向A发送数据并且进入等候状态。如果A正在全速上传,很有可能没有用来发送ACK信号的带宽,因此ACK信号被耽搁。在这种情况下,过高速度的上传导致了低速的下载。
  • \r\n
\r\n实际的效果是以上两个原因的结合。上传速度应该在保证ACK能正常传输的前提下被设得尽量高。 一个很好的实践理论是保持上传速度在理论上限的80%。你也可以细细研究什么是最适合你的速度(同时也请记住高速上传对于你的分享率很有帮助)。
\r\n
\r\n如果你正在运行一个以上的种子任务,你应该考虑的是全局上传速度。某些客户端能限制了全局上传速度,其他的则能对每一个种子分别进行设置。了解你的客户端。如果你正在使用你的电脑做别的某些应用(比方说上网或者从FTP拖东西),也需考虑一下它们对于全局上传的影响。', 1, 6, 2), +(52, 52, 25, 'item', '限制同时连接数', '某些操作系统(例如Windows 9X)对于大量连接数支持不完善,甚至有可能因此而崩溃。也有一些家用路由(尤其当运行着NAT以及/或者打开防火墙状态检查服务时)会因大量连接数而变得很慢或者崩溃。对于连接数没有固定的最佳值,你可以试试看60或者100。记住这些连接数是累加的,所以如果你的客户端运行了两个会话,这两个数字要加在一起。', 1, 6, 3), +(53, 53, 25, 'item', '限制同时上传数', '上传数难道和连接数有什么不一样吗?是的,两者是不同的。连接数限制了你的客户端所能对话以及/或者下载的同伴数。上传数则限制了你的客户端实际能上传的同伴数。理想的数值一般要比连接数低许多,并且与你的物理带宽高度相关。', 1, 6, 4), +(54, 54, 25, 'item', '那怎么办?等待一会吧', '如我们在上面所解释的,在BT下载过程中一个同伴更加倾向于回报那些上传给它的同伴。当你开始一个新的下载任务时,你没有文件片断提高给其他同伴,因此他们通常会无视你。这使得开始阶段的下载非常缓慢,由其是当你所连接到的同伴只有很少是(或者没有)做种者。一旦你获得了一些能用于共享的文件片断,下载速度会有所改观。', 1, 6, 5), +(55, 55, 25, 'item', '为什么在我下载的时候浏览网页速度如此之慢?', '你的下载带宽是有限的。如果你正在下载一个速度很快的种子,它几乎肯定将占满你的下载带宽。这是浏览网页显然就会变慢。很多BT客户端允许你限制下载速度,你可以试试。
\r\n
\r\n浏览网页只是作为举例之一,同样的问题也会出现在游戏,即时通信软件上......', 1, 6, 6), +(56, 56, 25, 'item', '什么是代理?', '基本上说,代理就是中间人。当你通过代理访问某个站点的时候,你的请求将首先被发送到代理处,然后由代理转发到你所请求的站点,而不是你直接连通到网站。下面是几种典型的代理分类(术语不是那么的规范):
\r\n
\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
 透明代理 透明代理在客户端无需配置。他将自动把80端口的信息重定向到代理(有时候也作为非匿名代理的同义词);
 显式代理 浏览器必须经过配置才能使用代理;
 匿名代理 代理将不会把客户标记发送至服务器端 (HTTP_X_FORWARDED_FOR头标志将不被发送。服务器也因此看不到你的IP);
 高度匿名代理 代理将不会把客户标记或代理标记发送至服务器端 (HTTP_X_FORWARDED_FOR和HTTP_VIA and HTTP_PROXY_CONNECTION头标志将不被发送。服务器看不到你的IP,甚至不知道你正在使用代理);
 公用 (不言自明了)。
\r\n
\r\n透明代理可能是匿名的,也可能是非匿名的,且匿名也有相应的等级。', 1, 7, 1), +(57, 57, 25, 'item', '我该怎样发现自己正处于一个(透明的/匿名的)代理后面?', '试试看ProxyJudge。它列出了服务器端从你这里所收到的HTTP的头标志。相关的几个标志是HTTP_CLIENT_IP,HTTP_X_FORWARDED_FOR和REMOTE_ADDR。', 1, 7, 2), +(75, 75, 25, 'item', '我的“可连接”是“否”尽管我并没有NAT或者防火墙?', 'Tracker服务器在寻找你的真实IP方面非常有天赋。但是这需要代理发送HTTP头标志HTTP_X_FORWARDED_FOR。如果你的ISP的代理没有这么做的话,Tracker服务器将把代理的IP当作你的客户端的IP。所以当你登录之后,Tracker服务器尝试连接你的客户端来确信你没有使用NAT/防火墙,服务器实际上将试图连接代理的IP(使用你的BT客户端报告的接收连接端口)。很自然地,代理服务器并没有监听那个端口。如此连接会失败,而Tracker服务器也因此认为你使用了NAT/防火墙。', 1, 7, 3), +(62, 62, 25, 'item', '也许是因为我的IP地址被列入黑名单了?', '这个网站有屏蔽被禁用户或攻击者的IP地址的功能。该功能在Apache/PHP层面上起作用,且只能屏蔽从这些地址登录网站。这不会阻止你连接到网站,更无法从底层的协议层面进行屏蔽。即便你的地址已经被列入了黑名单,你应该仍能够通过ping/traceroute命令连同服务器。如果你不能连通服务器,那么问题的原因在别处。
\r\n
\r\n如果你的IP地址因某种原因错误地被我们屏蔽了,请联系我们。', 1, 8, 1), +(63, 63, 25, 'item', '你的ISP屏蔽了本站的地址', '首先,这一般不像你的ISP的所作所为。DNS域名解析以及/或者网络问题是常见的真凶。\r\n
\r\n对此我们无能为力。你应该联系你的ISP(或者换一个)。记住你仍然可以通过代理访问本站,参看此常见问题关于代理的部分。在这种情况下,代理是否匿名或者使用哪个监听端口都不重要了。
\r\n
\r\n注意,你的“可连接状态”将因此一直被列为“否”,因为此时Tracker服务器无法检查你的BT客户端接收连接的状态。', 1, 8, 2), +(65, 65, 25, 'item', '不妨试试这个', '用任何手段在论坛发帖。通常情况下你能得到友善而有用的帮助。这里给你一些基本的指导:
    \r\n
  • 确保你的问题的确不在这篇FAQ中。这样的发帖导致的结果就是返回这篇FAQ。
  • \r\n
  • 在发帖之前,看看置顶。很多时候,还没有被我们的FAQ所收录的最新的信息都可以在那里被找到。
  • \r\n
  • 帮助我们也就是帮助你自己。不要仅仅说“嘿我这里出问题了!!”提供一些详情,这样我们就不用猜测或者浪费时间来询问了。你使用的是什么客户端?什么操作系统?怎样的网络设置?如果发生了错误,是什么样的具体错误信息?有问题的种子文件是哪个?你所提供的信息越多,对你的帮助也就越容易,你的帖子也就更加容易得到回复。
  • \r\n
  • 不需要说的是:保持礼貌。趾高气扬得命令别人帮助你很少会有用。
', 1, 9, 1), +(66, 66, 25, 'item', '什么是"Your slot limit is reached! You may at most download xx torrents at the same time"错误?', '这是“最大连接数系统”。最大连接数系统用于限制那些分享率较低且下载量大于10GB的用户的最大同时下载数。

\r\n规则如下:

\r\n\r\n\r\n \r\n \r\n \r\n \r\n \r\n\r\n\r\n \r\n \r\n \r\n \r\n \r\n\r\n\r\n \r\n \r\n \r\n \r\n \r\n\r\n\r\n \r\n \r\n \r\n \r\n \r\n\r\n\r\n \r\n \r\n \r\n \r\n \r\n\r\n
分享率低于0.5 最大连接数1
分享率低于0.65 最大连接数2
分享率低于0.8 最大连接数3
分享率低于0.95 最大连接数4
分享率大于0.95 最大连接数无限制
\r\n
\r\n无论何时,同时的上传数不设限。但是如果你当前的下载数已达到了你的最大连接数,这时开启新的做种任务,你也会收到同样的错误提示。在这种情况下,你必须先关闭一个下载任务,然后开启所有的上传任务,然后继续刚才关闭的下载任务。因为当你的连接数被占满,系统将不加验证直接拒绝任何下载或上传的请求。
\r\n

\r\n你可以在任意时间察看自己的连接数,该信息在页面顶端信息栏中被列出。', 0, 5, 12), +(67, 67, 25, 'item', '什么是密钥系统?它是怎么工作的?', '密钥系统在BT客户端连接Tracker服务器时起到验证身份的作用。每一个用户都有一个系统随机生成的密钥。当用户下载某个种子文件时,他的私人密钥被添加到种子文件的Tracker服务器URL中。通过这种方式,你可以在家中或者办公室使用不同的IP来做种某个文件。\r\n\r\n', 1, 5, 13), +(68, 68, 25, 'item', '“Unknown passkey”这错误是咋回事?', '首先,如果你不是我们的注册用户,将会发生这个错误。其次,有可能你没有在登录状态下从我们的网页里下载种子文件。如果是这两种情况,只要注册一个帐号或者登录后下载种子文件就可以了。
\r\n另外,当你注册了一个新用户并且开始第一次下载的时候,或者你刚刚重置了你的密钥时,也可能出现这个错误。原因是系统并非实时检查密钥的改变。如果是因为这个原因,那么就让种子任务等一会儿,最后一定能收到Tracker服务器发回的成功信息。', 1, 5, 14), +(69, 69, 25, 'item', '什么时候我需要重置我的密钥?', '
  • 如果你的密钥被泄漏,且别的用户正在使用这个密钥(即使用你的帐户)下载文件。在这种情况下,你能在你的详情页面看到你并未下载或上传的种子。
  • \r\n
  • 当你的客户端崩溃,或者你的连接并没有正常被终止。在这样的情况下,就算你已经关闭了你的客户端,你仍然在你的详情页面看到正在上传/下载的记录。通常情况下这些“冗余种子”将在30分钟之内被自动清除,但是如果你马上继续你的下载而服务器又提示“You already are downloading the same torrent”的错误,那么你需要重置你的密钥,然后重新下载种子文件,之后继续下载过程。
', 1, 5, 15), +(70, 70, 25, 'item', 'DHT是什么?为什么一定要关闭这个功能?', 'DHT必须从你的客户端被禁止。DHT可能导致你的数据被错误地记录,可以视为一种作弊行为。任何使用DHT的用户将因作弊而被系统禁止。
\r\n幸运的是,目前Tracker服务器会自动分析用户上传的种子文件,强制去除DHT的支持。这也是为什么种子发布者必须重新下载种子才能正常做种的原因之一。', 1, 5, 16), +(71, 71, 25, 'categ', 'How can I help translate the site language into my native language?', '', 1, 0, 8), +(72, 72, 25, 'item', 'What skills do I need to do the translation?', 'Translate the site into another language is quite easy. You needn''t be skilled in PHP or dynamic website design. In fact, all you need is proficient understanding of English (the default site language) and the language you plan to translate into. Maybe some basic knowledge in HTML would help.

\r\nMoreover, we give a detailed tutorial on how to do the translation HERE. And our coders would be more than pleased to answer the questions you may encounter.

\r\nTranslate the whole site into another language would take estimated 10 hours. And extra time is needed to maintain the translation when site code is updated.

\r\nSo, if you think you could help, feel free to CONTACT US. Needless to say, you would be rewarded.', 1, 71, 1); +INSERT INTO `faq` (`id`, `link_id`, `lang_id`, `type`, `question`, `answer`, `flag`, `categ`, `order`) VALUES +(73, 73, 25, 'item', 'The translation tutorial', '
    \r\n
  • How does multi-language work?
    \r\nCurrently we use language files to store all the static words that a user can see on web pages.
    \r\nEvery php code file has a corresponding language file for a certain language. And we named the language file ''lang_'' plus the filename of the php code file. i.e. the language file of the php code file ''details.php'' would be ''lang_details.php''.
    \r\nWe has some mechanism in php codes to read the exact language files of user''s preferred language, and you shouldn''t worry about that.
  • \r\n
  • What''s in language files?
    \r\nIn a language file is an array of strings. These strings contain all the static words that a user can see on web pages. When we need to say some words on a php code file, we call for a string in the array. And the output of the php code file, that is what users see on the web pages, would show the value of the string.
    \r\nSounds dizzying? Well, you need not care about all these. All you gotta do is translate the values of the strings in the language files into another language. Let''s see an example:

    \r\nThe following is the content of the English language file ''lang_users.php'', which works for the php code file ''users.php''.

    \r\nlangfileeng
    \r\nIf you wanna translate it into Simplified Chinese, all you need is edit the file into this:
    \r\nlangfilechs
    \r\nSee, in every line, the left part, that is before =>, is the name of a string, which you shouldn''t touch. All you need to is translate the right part, after =>, which is the value of the string, into another language.
    \r\nSometimes you need to look at the corresponding web pages to get the context meaning of some words.
  • \r\n
  • Sounds easy? See what do you need to do.
    \r\nIf you feel like to help us, CONTACT US and we will send you a pack of the English language files (or any other available language if you prefer). Received it, you can start translating the value of strings (which is in English), into another language. It should take you several hours to do the whole work. After this, send back the translated language files to us.
    \r\nIf no bugs or hacking codes are found in testing, we would put the new language into work.
    \r\nSometimes the language files need to be updated, typically adding new strings, when site codes are updated. If you feel like it, you can help maintain the language files.
  • \r\n
  • IMPORTANT
    \r\nThe text of language files must be encoded in UTF-8. When saving files, be sure to set the character encoding to UTF-8. Otherwise mojibake may happen.
', 1, 71, 2), +(74, 74, 25, 'item', '为什么我的磁盘还有充足的空间,客户端却提示磁盘剩余空间不足?', '很可能是因为你的磁盘分区的文件系统为FAT32,该文件系统不支持大于4GB的单个文件。如果你使用的是Windows系统,你可以在磁盘的属性中查看其文件系统信息。你可以将磁盘文件系统转换成更高级的NTFS来解决该问题。
\r\n你可以在命令行窗口使用convert命令将FAT32无损转成NTFS文件系统格式。

\r\n命令说明\r\nCONVERT volume /FS:NTFS [/V] [/CvtArea:filename] [/NoSecurity] [/X]
\r\nvolume 指定驱动器号(后面跟一个冒号)、装载点或卷名。
\r\n/FS:NTFS 指定要被转换成 NTFS 的卷。
\r\n/V 指定 Convert 应该用详述模式运行。
\r\n/CvtArea:filename 将根目录中的一个接续文件指定为NTFS 系统文件的占位符。
\r\n/NoSecurity 指定每个人都可以访问转换的文件和目录的安全设置。
\r\n/X 如果必要,先强行卸载卷。该卷的所有打开的句柄则无效。

\r\n简单说
:\r\n打开 命令提示符窗口。
\r\n在命令提示符窗口,请键入:
\r\nconvert drive_letter:/fs:ntfs
\r\n例如:转换D盘为NTFS,可输入convert D:/fs:ntfs', 1, 5, 17), +(374, 74, 28, 'item', '為什么我的磁碟還有充足的空間,用戶端卻輔助說明磁碟剩餘空間不足?', '很可能是因為你的磁碟割區的檔案系統為FAT32,該檔案系統不支援大于4GB的單個檔案。如果你使用的是Windows系統,你可以在磁碟的屬性中檢視其檔案系統資訊。你可以將磁碟檔案系統轉換成更進階的NTFS來解決該問題。
\r\n你可以在指令行視窗使用convert指令將FAT32無損轉成NTFS檔案系統格式。

\r\n指令說明\r\nCONVERT volume /FS:NTFS [/V] [/CvtArea:filename] [/NoSecurity] [/X]
\r\nvolume 指定磁碟機號(后面跟一個冒號)、裝載點或卷名。
\r\n/FS:NTFS 指定要被轉換成 NTFS 的卷。
\r\n/V 指定 Convert 應該用詳述型態執行。
\r\n/CvtArea:filename 將根目錄中的一個接續檔案指定為NTFS 系統檔案的占位符。
\r\n/NoSecurity 指定每個人都可以存取轉換的檔案和目錄的安全設定。
\r\n/X 如果必要,先強行卸載卷。該卷的所有開啟的控點則無效。

\r\n簡單說
:\r\n開啟 指令輔助說明符視窗。
\r\n在指令輔助說明符視窗,請鍵入:
\r\nconvert drive_letter:/fs:ntfs
\r\n例如:轉換D槃為NTFS,可匯入convert D:/fs:ntfs', 1, 5, 17), +(368, 68, 28, 'item', '“Unknown passkey”這錯誤是咋回事?', '首先,如果你不是我們的註冊用戶,將會發生這個錯誤。其次,有可能你沒有在登入狀態下從我們的網頁裡下載種子檔案。如果是這兩種情況,只要註冊一個帳號或者登入后下載種子檔案就可以了。
\r\n另外,當你註冊了一個新用戶并且開始第一次下載的時候,或者你剛剛重置了你的加密鍵時,也可能出現這個錯誤。原因是系統并非實時檢查加密鍵的改變。如果是因為這個原因,那么就讓種子工作等一會兒,最后一定能收到Tracker伺服器發回的成功資訊。', 1, 5, 14), +(369, 69, 28, 'item', '什么時候我需要重置我的加密鍵?', '
  • 如果你的加密鍵被泄漏,且別的用戶正在使用這個加密鍵(即使用你的帳戶)下載檔案。在這種情況下,你能在你的詳情頁面看到你并未下載或上傳的種子。
  • \r\n
  • 當你的用戶端崩潰,或者你的連線并沒有正常被終止。在這樣的情況下,就算你已經關閉了你的用戶端,你仍然在你的詳情頁面看到正在上傳/下載的記錄。通常情況下這些“多餘種子”將在30分鐘之內被自動清除,但是如果你馬上繼續你的下載而伺服器又輔助說明“You already are downloading the same torrent”的錯誤,那么你需要重置你的加密鍵,然后重新下載種子檔案,之后繼續下載過程。
', 1, 5, 15), +(370, 70, 28, 'item', 'DHT是什么?為什么一定要關閉這個功能?', 'DHT必須從你的用戶端被禁止。DHT可能導致你的資料被錯誤地記錄,可以視為一種作弊行為。任何使用DHT的用戶將因作弊而被系統禁止。
\r\n幸運的是,目前Tracker伺服器會自動解析用戶上傳的種子檔案,強制去除DHT的支援。這也是為什么種子發布者必須重新下載種子才能正常做種的原因之一。', 1, 5, 16), +(371, 71, 28, 'categ', 'How can I help translate the site language into my native language?', '', 1, 0, 8), +(372, 72, 28, 'item', 'What skills do I need to do the translation?', 'Translate the site into another language is quite easy. You needn''t be skilled in PHP or dynamic website design. In fact, all you need is proficient understanding of English (the default site language) and the language you plan to translate into. Maybe some basic knowledge in HTML would help.

\r\nMoreover, we give a detailed tutorial on how to do the translation HERE. And our coders would be more than pleased to answer the questions you may encounter.

\r\nTranslate the whole site into another language would take estimated 10 hours. And extra time is needed to maintain the translation when site code is updated.

\r\nSo, if you think you could help, feel free to CONTACT US. Needless to say, you would be rewarded.', 1, 71, 1), +(373, 73, 28, 'item', 'The translation tutorial', '
    \r\n
  • How does multi-language work?
    \r\nCurrently we use language files to store all the static words that a user can see on web pages.
    \r\nEvery php code file has a corresponding language file for a certain language. And we named the language file ''lang_'' plus the filename of the php code file. i.e. the language file of the php code file ''details.php'' would be ''lang_details.php''.
    \r\nWe has some mechanism in php codes to read the exact language files of user''s preferred language, and you shouldn''t worry about that.
  • \r\n
  • What''s in language files?
    \r\nIn a language file is an array of strings. These strings contain all the static words that a user can see on web pages. When we need to say some words on a php code file, we call for a string in the array. And the output of the php code file, that is what users see on the web pages, would show the value of the string.
    \r\nSounds dizzying? Well, you need not care about all these. All you gotta do is translate the values of the strings in the language files into another language. Let''s see an example:

    \r\nThe following is the content of the English language file ''lang_users.php'', which works for the php code file ''users.php''.

    \r\nlangfileeng
    \r\nIf you wanna translate it into Simplified Chinese, all you need is edit the file into this:
    \r\nlangfilechs
    \r\nSee, in every line, the left part, that is before =>, is the name of a string, which you shouldn''t touch. All you need to is translate the right part, after =>, which is the value of the string, into another language.
    \r\nSometimes you need to look at the corresponding web pages to get the context meaning of some words.
  • \r\n
  • Sounds easy? See what do you need to do.
    \r\nIf you feel like to help us, CONTACT US and we will send you a pack of the English language files (or any other available language if you prefer). Received it, you can start translating the value of strings (which is in English), into another language. It should take you several hours to do the whole work. After this, send back the translated language files to us.
    \r\nIf no bugs or hacking codes are found in testing, we would put the new language into work.
    \r\nSometimes the language files need to be updated, typically adding new strings, when site codes are updated. If you feel like it, you can help maintain the language files.
  • \r\n
  • IMPORTANT
    \r\nThe text of language files must be encoded in UTF-8. When saving files, be sure to set the character encoding to UTF-8. Otherwise mojibake may happen.
', 1, 71, 2), +(362, 62, 28, 'item', '也許是因為我的IP位址被列入黑名單了?', '這個網站有屏蔽被禁用戶或攻擊者的IP位址的功能。該功能在Apache/PHP層面上起作用,且只能屏蔽從這些位址登入網站。這不會阻止你連線到網站,更無法從底層的協定層面進行屏蔽。即便你的位址已經被列入了黑名單,你應該仍能夠通過ping/traceroute指令連同伺服器。如果你無法連通伺服器,那么問題的原因在別處。
\r\n
\r\n如果你的IP位址因某種原因錯誤地被我們屏蔽了,請聯繫我們。', 1, 8, 1), +(363, 63, 28, 'item', '你的ISP屏蔽了本站的位址', '首先,這一般不像你的ISP的所作所為。DNS域名解析以及/或者網路問題是常見的真凶。\r\n
\r\n對此我們無能為力。你應該聯繫你的ISP(或者換一個)。記住你仍然可以通過代理存取本站,參看此常見問題關于代理的部分。在這種情況下,代理是否匿名或者使用哪個監聽通訊埠都不重要了。
\r\n
\r\n注意,你的“可連線狀態”將因此一直被列為“否”,因為此時Tracker伺服器無法檢查你的BT用戶端接收連線的狀態。', 1, 8, 2), +(365, 65, 28, 'item', '不妨試試這個', '用任何手段在論壇發帖。通常情況下你能得到友善而有用的輔助說明。這裡給你一些基本的指導:
    \r\n
  • 確保你的問題的確不在這篇FAQ中。這樣的發帖導致的結果就是傳回這篇FAQ。
  • \r\n
  • 在發帖之前,看看置頂。很多時候,還沒有被我們的FAQ所收錄的最新的資訊都可以在那裡被找到。
  • \r\n
  • 輔助說明我們也就是輔助說明你自己。不要僅僅說“嘿我這裡出問題了!!”提供一些詳情,這樣我們就不用猜測或者浪費時間來詢問了。你使用的是什么用戶端?什么作業系統?怎樣的網路設定?如果發生了錯誤,是什么樣的具體錯誤資訊?有問題的種子檔案是哪個?你所提供的資訊越多,對你的輔助說明也就越容易,你的帖子也就更加容易得到回覆。
  • \r\n
  • 不需要說的是:保持禮貌。趾高氣揚得指令別人輔助說明你很少會有用。
', 1, 9, 1), +(366, 66, 28, 'item', '什么是"Your slot limit is reached! You may at most download xx torrents at the same time"錯誤?', '這是“最大連線數系統”。最大連線數系統用于限制那些分享率較低且下載量大于10GB的用戶的最大同時下載數。

\r\n規則如下:

\r\n\r\n\r\n \r\n \r\n \r\n \r\n \r\n\r\n\r\n \r\n \r\n \r\n \r\n \r\n\r\n\r\n \r\n \r\n \r\n \r\n \r\n\r\n\r\n \r\n \r\n \r\n \r\n \r\n\r\n\r\n \r\n \r\n \r\n \r\n \r\n\r\n
分享率低于0.5 最大連線數1
分享率低于0.65 最大連線數2
分享率低于0.8 最大連線數3
分享率低于0.95 最大連線數4
分享率大于0.95 最大連線數無限制
\r\n
\r\n無論何時,同時的上傳數不設限。但是如果你目前的下載數已達到了你的最大連線數,這時開啟新的做種工作,你也會收到同樣的錯誤輔助說明。在這種情況下,你必須先關閉一個下載工作,然后開啟所有的上傳工作,然后繼續剛才關閉的下載工作。因為當你的連線數被占滿,系統將不加驗證直接拒絕任何下載或上傳的要求。
\r\n

\r\n你可以在任意時間察看自己的連線數,該資訊在頁面頂端資訊欄中被列出。', 0, 5, 12), +(367, 67, 28, 'item', '什么是加密鍵系統?它是怎么工作的?', '加密鍵系統在BT用戶端連線Tracker伺服器時起到驗證身份的作用。每一個用戶都有一個系統隨機生成的加密鍵。當用戶下載某個種子檔案時,他的私人加密鍵被添加到種子檔案的Tracker伺服器URL中。通過這種方式,你可以在家中或者辦公室使用不同的IP來做種某個檔案。\r\n\r\n', 1, 5, 13), +(301, 1, 28, 'categ', '網站資訊', '', 1, 0, 1), +(302, 2, 28, 'categ', '用戶資訊', '', 1, 0, 2), +(303, 3, 28, 'categ', '資料統計', '', 1, 0, 3), +(304, 4, 28, 'categ', '發布', '', 1, 0, 4), +(305, 5, 28, 'categ', '下載', '', 1, 0, 5), +(306, 6, 28, 'categ', '我該怎樣提升下載速度?', '', 1, 0, 6), +(307, 7, 28, 'categ', '我的網路提供商(ISP)使用了透通代理。我應該怎么做?', '', 1, 0, 7), +(308, 8, 28, 'categ', '為什么我連不上?難道我被網站屏蔽了?', '', 1, 0, 8), +(309, 9, 28, 'categ', '如果從這裡找不到我的問題的解答,我該怎么辦?', '', 1, 0, 9), +(310, 10, 28, 'item', '到底什么是BT(Bittorrent)?我要如何才能弄到這類程式?', '參看Brian的BitTorrent FAQ及指導。', 1, 1, 1), +(311, 11, 28, 'item', '我們捐出來的錢上哪兒去了?', '所有捐助的錢用于維護伺服器的費用。', 1, 1, 2), +(312, 12, 28, 'item', '我從哪裡可以搞到來源碼的拷貝?', '這個Tracker使用的是NexusPHP的程式碼。程式碼抓取事宜,請看這裡
\r\nNexusPHP的程式碼是根據TBSource的源碼改寫的。TBDev網站,Tracker來源碼以及社區論壇都在這裡:TBDev.net。', 1, 1, 3), +(313, 13, 28, 'item', '我註冊了一個賬號但是卻沒有收到驗證郵件!', '這很有可能是Tracker所在的伺服器網路出現了問題。你可以填寫這個表格讓伺服器重發驗證郵件。
\r\n通常沒有得到確認的註冊帳戶會在24小時后被移除,所以你可以在第二天重試。需要注意的是,如果你第一次沒有收到確認信,第二次有很大的可能仍然無法收到確認信,所以換一個E-mail位址是一個不錯的主意。', 1, 2, 1), +(314, 14, 28, 'item', '我忘記了我的用戶名/密碼了,能幫我找回來么?', '請填寫這個表單,我們將把登入詳情發還給你。', 1, 2, 2), +(315, 15, 28, 'item', '我可以給我的賬號改個名字么?', '我們并不支援給賬號改名。', 1, 2, 3), +(316, 16, 28, 'item', '你可以移除一個(已確認的)賬號么?', '我們一般不提供該類服務,所以不要要求移除任何一個被你邀請的帳號。', 1, 2, 4), +(317, 17, 28, 'item', '那么,什么是我的分享率(Ratio)?', '就在頁面功能割區的下面。
\r\n
\r\nratio\r\n
\r\n
\r\n區分你的整體分享率和獨立分享率是很重要的。整體分享率關注的是自從你加入網站以來,賬號的整體上傳與下載量。而獨立分享率則針對每一個你正在下載或做種的檔案。\r\n
\r\n
\r\n你可能看到兩種象徵式來代替數字:"Inf.",這個是無限(Infinity)的縮寫,意思是你的下載量為0位元組,而上傳量則是任意一個非零的值(上傳量/下載量=無窮大);"---",應該被視為“不可用”,這說明了你的下載量和上傳量都是0位元組。(上傳量/下載量=0/0 這是一個不確定的量)。\r\n', 1, 2, 5), +(318, 18, 28, 'item', '為什么我的IP位址察看在我的個人資訊頁面上?', '只有你自己和網站Moderator及以上的管理員可以看到你的IP位址和Email。普通用戶是看不到這些資訊的。', 1, 2, 6), +(321, 21, 28, 'item', '為什么我的“可連線”是“否”?(以及為什么我需要關注這個問題?)', 'Tracker伺服器認為你在防火牆后,或者在NAT橋接后,并且無法接收其他Peer的連線要求。\r\n
\r\n
\r\n這意味着其他的大批Peer無法連線到你,只能由你連線到他們。更糟糕的情況是,如果兩個Peer都處于這樣的狀態,他們將完全無法連線到對方。這對于整體速度有着非常不利的影響。\r\n
\r\n
\r\n對于這個問題,有以下解決方式:對于防火牆,開啟用于接收連線的通訊埠(即你在BT用戶端中定義的通訊埠);對于NAT,你需要配置NAT伺服器使用Basic NAT方式而不是NAPT(不同的路線有着不同的執行方式。翻閱你的路線文件或客服論壇。你也可以在PortForward找到關于此問題的大量資訊)。\r\n\r\n\r\n\r\n\r\n\r\n', 1, 2, 9), +(322, 22, 28, 'item', '不同的用戶等級代表了什么含義?', '\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n
  Peasant  被降級的用戶,他們有30天時間來提升分享率,否則他們會被踢。無法發表趣味盒內容;無法申請友情鏈結;無法上傳字幕。\r\n
  User 新用戶的預設級別。只能在每周六中午12點至每周日晚上11點59分發布種子。
  Power User 得到一個邀請名額;可以直接發布種子;可以檢視NFO文件;可以檢視用戶清單;可以要求續種; 可以傳送邀請; 可以檢視排行榜;可以檢視其他用戶的種子曆史(如果用戶隱私等級未設定為"強"); 可以移除自己上傳的字幕。
  Elite User Elite User及以上用戶封存賬號后不會被移除。
  Crazy User 得到兩個邀請名額;可以在做種/下載/發布的時候選取匿名型態。
  Insane User 可以檢視普通日誌。
  Veteran User 得到三個邀請名額;可以檢視其他用戶的評論、帖子曆史。Veteran User及以上用戶會永遠保留賬號。
  Extreme User 可以更新過期的外部資訊;可以檢視Extreme User論壇。
  Ultimate User 得到五個邀請名額。
  Nexus Master 得到十個邀請名額。
  Star 為網站捐款的主。
  貴賓(VIP) Nexus Master擁有相同許可權并被認為是精英成員。免除自動降級。
  其他 自訂等級。
  養老族(Retiree) 退休后的管理組成員。
  發布員(Uploader) 專注的發布者。免除自動降級;可以檢視匿名用戶的真實身份。
  總版主(Moderator) 可以檢視管理組郵箱、舉報郵箱;管理趣味盒內容、投票內容;可以編輯或移除任何發布的種子;可以管理候選;可以管理論壇帖子、用戶評論;可以檢視機密日誌;可以移除任何字幕;可以管理日誌中的程式碼、史冊;可以檢視用戶的邀請記錄;可以管理用戶帳號的一般資訊。無法管理友情鏈結、最近訊息、論壇版塊;無法將種子設為置頂或促銷;無法檢視用戶IP或Email等機密資訊;無法移除賬號。
  管理員(Administrator) 除了無法改變網站設定、管理捐贈外,可以做任何事。
  維護開發員(Sysop) 網站開發/維護人員,可以改變網站設定,無法管理捐贈。
  主管(Staff Leader) 網站主管,可以做任何事。
', 1, 2, 10), +(323, 23, 28, 'item', '提升和降級又是怎樣被執行的呢?', '\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n
  Peasant 當以下情況時將被自動降至本級:
\r\n1.如果你已經下載了超過50GB,你應該有大于0.4的分享率。
\r\n2.如果你已經下載了超過100GB,你應該有大于0.5的分享率。
\r\n3.如果你已經下載了超過200GB,你應該有大于0.6的分享率。
\r\n4.如果你已經下載了超過400GB,你應該有大于0.7的分享率。
\r\n5.如果你已經下載了超過800GB,你應該有大于0.8的分享率。
  Power User 必須註冊至少4周,并且下載至少50G,分享率大于1.05。
\r\n當條件符合時將被自動提升。注意,無論何時,如果你的分享率低于0.95,你將自動降級。
  Elite User 必須註冊至少8周,并且下載至少120G,分享率大于1.55。\r\n
\r\n當條件符合時將被自動提升。注意,無論何時,如果你的分享率低于1.45,你將自動降級。
  Crazy User 必須註冊至少15周,并且下載至少300G,分享率大于2.05。\r\n
\r\n當條件符合時將被自動提升。注意,無論何時,如果你的分享率低于1.95,你將自動降級。
  Insane User 必須註冊至少25周,并且下載至少500G,分享率大于2.55。
\r\n當條件符合時將被自動提升。注意,無論何時,如果你的分享率低于2.45,你將自動降級。
  Veteran User 必須註冊至少40周,并且下載至少750G,分享率大于3.05。
\r\n當條件符合時將被自動提升。注意,無論何時,如果你的分享率低于2.95,你將自動降級。
  Extreme User 必須註冊至少60周,并且下載至少1TB,分享率大于3.55。
\r\n當條件符合時將被自動提升。注意,無論何時,如果你的分享率低于3.45,你將自動降級。
  Ultimate User 必須註冊至少80周,并且下載至少1.5TB,分享率大于4.05。
\r\n當條件符合時將被自動提升。注意,無論何時,如果你的分享率低于3.95,你將自動降級。
  Nexus Master 必須註冊至少100周,并且下載至少3TB,分享率大于4.55。
\r\n當條件符合時將被自動提升。注意,無論何時,如果你的分享率低于4.45,你將自動降級。
  Star 只需捐款,詳見這裡
  貴賓(VIP) 由管理員仔細斟酌后配置給他們認為對于網站某方面有特殊貢獻的用戶。
\r\n(任何索取貴賓等級的要求將被自動無視)
  其他 用戶使用魔力值兌換,或由管理員仔細斟酌后授權。
  養老族(Retiree) 由管理員授予。
  發布員(Uploader) 由管理員配置(參見''發布''部分以了解詳情)。
  總版主(Moderator) 無需多問,我們會找到你的!
', 1, 2, 11), +(325, 25, 28, 'item', '為什么我的朋友無法加入?', '用戶數目有所限制(你可以檢視“首頁->網站資料->上限”)。當達到那個數目時,我們會停止接受新成員。
\r\n由于非活躍用戶(長期不使用賬號的用戶)引起賬號資源浪費,因此我們將清理該部分用戶,為其他想加入用戶騰出空間。
\r\n關于非活躍用戶清理規則,參照規則。', 1, 2, 13), +(326, 26, 28, 'item', '怎樣自訂頭像?', '首先,找一個你喜歡的圖片,當然了它無法違反我們的規則。然后你要找一個存放它的地方,比方說我們自己的上傳器。出于伺服器負載的考慮,我們更希望你將圖片上傳到別的網站,然后將其URL黏貼到你的控制面板的頭像URL部分。
\r\n
\r\n請不要為了僅僅測試頭像而發帖。如果一切順利,你將在你的詳情頁面看到它。', 1, 2, 14), +(327, 27, 28, 'item', '最常見的資料未能得到更新的原因', '
    \r\n
  • 伺服器超載/未回應。只要嘗試着保持階段作業直到伺服器回復回應(不建議連續手動清除,這樣會加重伺服器負載)。
  • \r\n
  • 你正在使用不穩定的用戶端。如果你想要使用測試版或者CVS版本,你需要自己承擔由此帶來的風險。
  • \r\n
', 1, 3, 1), +(328, 28, 28, 'item', '最佳的嘗試', '
    \r\n
  • 如果你目前正下載/上傳的種子并不在你的用戶詳情頁面中,你可以等一會或者強制進行手動更新。
  • \r\n
  • 確保你正確地關閉了用戶端軟體,否則Tracker伺服器無法收到"event=completed"的訊號。
  • \r\n
  • 如果Tracker伺服器掛了,不要停止上傳。只要在你結束用戶端之前伺服器回復工作,所有的資料都會得到正確地更新。
  • \r\n
', 1, 3, 2), +(329, 29, 28, 'item', '我可以任意選取Bittorrent用戶端軟體么?', '根據NexusPHP對常見BitTorrent用戶端的測試,目前本站Tracker只允許使用以下的BitTorrent用戶端軟體。
\r\nNexusPHP的測試報告可在此檢視。\r\n
\r\nWindows:\r\n
    \r\n
  • Azureus: 2.5.0.4, 3.0.5.0, 3.0.5.2及后續版本
  • \r\n
  • uTorrent: 1.6.1, 1.7.5, 1.7.6, 1.7.7, 1.8Beta(Build 10364), 2.0(Build 17624)及后續版本
  • \r\n
  • BitTorrent: 6.0.1, 6.0.2, 6.0.3及后續版本
  • \r\n
  • Deluge: 0.5.9.1, 1.1.6及后續版本
  • \r\n
  • Rufus: 0.6.9, 0.7.0及后續版本
  • \r\n
\r\nLinux:\r\n
    \r\n
  • Azureus: 2.5.0.4, 3.0.5.0, 3.0.5.2及后續版本
  • \r\n
  • Deluge: 0.5.9.1, 1.1.6及后續版本
  • \r\n
  • Rufus: 0.6.9, 0.7.0及后續版本
  • \r\n
  • Transmission: 1.21及后續版本
  • \r\n
  • rTorrent: 0.8.0(配合libtorrent 0.12.0或后續版本)及后續版本
  • \r\n
  • Enhanced CTorrent: 3.3.2及后續版本
  • \r\n
\r\nMacOS X:\r\n\r\nSymbian (僅供測試):\r\n\r\n
\r\n\r\n以上用戶端在https支援方面\r\n
    \r\n
  • uTorrent 1.61: 無法准確解析https的tracker, 同時在使用會將自己識別為uTorrent 1.5
  • \r\n
  • Rufus: 沒有https支援, 并且已經几年沒有繼續開發
  • \r\n
  • rtorrent: 需要手工設定SSL證書, 詳細資訊請自行查閱其官方網站說明
  • \r\n
\r\n\r\n
\r\n\r\n同時請儘量避免使用處于測試期的用戶端軟體, 如uTorrent 1.8.0B。\r\n\r\n為了從本站得到最好的下載體驗,我們高度建議uTorrent 以及Azureus這兩個軟體的最新穩定版。', 1, 5, 3), +(330, 30, 28, 'item', '為什么我正在下載/做種的一個種子會在我的詳情頁面中被列出多次?', '如果因為某些原因(比方說死機,用戶端失去回應)你的用戶端非正常結束并且你又重新開啟它,它會被配置到一個全新的Peer ID, 這樣它察看為一個全新的種子。而舊的種子將永遠不會收到“event=completed”或“event=stopped”的訊號,因此將一直被列出直到Tracker清理逾時的Peer。 無視了它就可以了,它最后會消失的。', 1, 3, 4), +(331, 31, 28, 'item', '為什么我已經完成/取消的種子仍然在我的詳情頁面裡?', '有一些用戶端,比如說TorrentStorm和Nova Torrent,在取消或者完成一個工作的時候無法向Tracker伺服器正確傳送訊號。在那樣的情況下,Tracker伺服器將一直保持等待訊號的狀態(因此會一直列出種子的狀態為做種/下載的狀態)直到Tracker清理逾時的Peer。無視了它就可以了,它最后會消失的。', 1, 3, 5), +(333, 33, 28, 'item', '多IP(我可以從不同的電腦登入/下載嗎?)', '是的,目前Tracker伺服器支援單個用戶從任意個數的IP位址同時存取/下載。
\r\n然而,對于單種是有限制的。對于每個種子,最多允許3個做種的連線,最多只允許1個下載的連線(這意味着,對于某個種子你一次只能在一個地方下載)。', 1, 3, 7), +(336, 36, 28, 'item', '為什么我無法發布種子?', '請看規則。', 1, 4, 1), +(337, 37, 28, 'item', '我需要滿足哪些條件才能加入發布小組呢?', '你所必須滿足的條件:\r\n
    \r\n
  • 具有穩定的資源來源
  • \r\n
  • 平均每周資源發布數量不少于5個
  • \r\n
\r\n你必須確保發布的檔案符合以下特征:\r\n
    \r\n
  • 不超過7天之前
  • \r\n
  • 你必須要有做種的能力,或者可以確保至少有效供種24小時。
  • \r\n
  • 你需要有至少達到2MBit的上傳頻寬。
  • \r\n
\r\n如果你認為你符合以上條件,那么不要猶豫,聯繫管理組吧。
\r\n記住! 仔細填寫你的申請!確保申請中包含你的上傳速度以及你計划發布的內容的類別。
\r\n只有仔細填寫并且經過慎重考慮的申請才會納入我們的視野。', 1, 4, 2), +(338, 38, 28, 'item', '我可以發布你們這裡的種子到別的Tracker伺服器么?', '無法。我們是一個封閉的、限制用戶數的社區。只有註冊用戶才能夠使用我們的Tracker。將我們的種子檔案發布到其他Tracker伺服器是徒勞的,因為絕大多數嘗試下載這些檔案的人將無法連線到我們的伺服器。將我們的種子發布到其他Tracker只讓那裡的用戶惱怒(因為無法下載)并且對我們產生敵對情緒,所以這種行為是我們是無法容忍的。
\r\n
\r\n如果其他網站的管理員向我們舉報我們的種子被發布在他們的網站上,對此負責的用戶將因此被移出我們的社區。
\r\n
\r\n但是對于從我們這裡下載得到的檔案,你可以隨意操控它們(發布者明確說明為獨占的資源除外)。你可以制作另一個種子,寫入其他Tracker的位址,并發布到你喜歡的網站上。', 1, 4, 3), +(339, 39, 28, 'item', '下載來的檔案該怎么開啟?', '在這份指引裡面找找看吧。', 1, 5, 1), +(340, 40, 28, 'item', '我下載了一部電影,但是不明白CAM/TS/TC/SCR是什么意思?', '在這份指引裡面找找看吧。', 1, 5, 2), +(341, 41, 28, 'item', '為什么一個可用的種子忽然就消失了?', '以下原因都會導致這個現象的出現:
\r\n(1) 按照網站規則,這個種子不符合規則已被移除。\r\n
\r\n(2) 發布者因為檔案存在問題而移除了它。一般來說,發布者會發布一個交替的版本的。
\r\n(3) 在長時間斷種后種子被自動移除了。', 1, 5, 3), +(342, 42, 28, 'item', '我該怎樣續傳檔案或者給一個檔案續種呢?', '開啟副檔名為.torrent的檔案,當你的用戶端軟體詢問儲存的目錄時,選取已經存在的檔案存放的目錄,它就能夠開始續傳/續種了。', 1, 5, 4), +(343, 43, 28, 'item', '為什么我的下載有時候停在99%?', '你所下載到的片段越多,搜尋擁有你所缺少的片段的同伴就將變得越困難。這就是為什么有時候在下載即將完成的時候,速度會變得非常慢,甚至完全停止了。只要耐心等候,或早或晚剩餘的部分一定能夠下載到的。', 1, 5, 5), +(344, 44, 28, 'item', '"部分哈希驗證出錯"這條資訊是什么意思?', 'BT的用戶端會檢查它所收到的資料的完整性。如果某一個片段在驗證中出錯,那么這個片段將被重新下載。偶爾的哈希驗證錯誤是非常常見的現象,不用擔心。
\r\n
\r\n有些用戶端有屏蔽向你傳送錯誤資料的其他用戶端的功能。如果有這個選項,最好開啟它。因為這樣可以保證如果某個同伴經常向你傳送錯誤的資料時,它將會被屏蔽。', 1, 5, 6), +(345, 45, 28, 'item', '100MB大小的種子,我怎么下了120MB的東西回來?', '參見哈希驗證失敗的那個問題。如果你的用戶端收到了錯誤的資料,那么它將會重新下載這一部分,因此總下載量有可能比種子大小略微大一些。確保“屏蔽傳送錯誤資料的用戶端”的那個選項被開啟了,這樣可以減少其餘的下載。', 1, 5, 7), +(346, 46, 28, 'item', '為什么我的用戶端的Tracker伺服器狀態出現"Your ratio is too low! You need to wait xx h to start"的錯誤?', '在種子被上傳到Tracker伺服器之后,有一些用戶必須等一些時間才能開始下載。
\r\n這個延遲只會影響那些分享率較低且下載量大于10G的用戶。
\r\n
\r\n\r\n\r\n \r\n \r\n \r\n \r\n \r\n\r\n\r\n \r\n \r\n \r\n \r\n \r\n\r\n\r\n \r\n \r\n \r\n \r\n \r\n\r\n\r\n \r\n \r\n \r\n \r\n \r\n\r\n
分享率低于0.4 延遲24小時
分享率低于0.5 延遲12小時
分享率低于0.6 延遲6小時
分享率低于0.8 延遲3小時
', 0, 5, 8), +(347, 47, 28, 'item', '為什么發生了這個錯誤? "Port xxxx is blacklisted"?', '你的用戶端向Tracker伺服器報告它正在使用某個預設的BT協定通訊埠(6881-6889)或是任何其他常見P2P通訊埠來作為連線通訊埠。
\r\n
\r\n本站不允許這些通常被P2P協定預設使用的通訊埠。原因是目前ISP常常對這些通訊埠進行限速。
\r\n
\r\n被屏蔽的通訊埠如下:
\r\n
\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
Direct Connect411 - 413
BitTorrent6881 - 6889
Kazza1214
Gnutella6346 - 6347
Emule4662
WinMX6699
\r\n
\r\n要使用我們的Tracker伺服器,你必須配置你的用戶端使用未在上面列出的通訊埠範圍(從49152到65535都是不錯的選取,參看IANA)。注意某些用戶端,如Azureus 2.0.7.0或更高版本,對所有的種子都使用同一通訊埠。而其他大多數用戶端為每一個種子開放一個通訊埠,你在選取通訊埠範圍應考慮到這個問題(一般來說通訊埠範圍小于10。設定一個過大的範圍并不一定有好處,而且可能有安全隱患)。
\r\n
\r\n這些通訊埠是用于同伴間通訊的,而非用于用戶端連線到Tracker伺服器。因此這個改動并不會影響你使用其他Tracker伺服器(事實上,它甚至可能加快所有Tracker伺服器上種子的速度)。你的用戶端也仍然能夠連線到那些使用預設通訊埠的同伴。如果你的用戶端不支援自己自訂通訊埠,那么換一個吧。
\r\n
\r\n不要向我們詢問,或者在論壇裡面提問究竟應該選取什么通訊埠。我們的用戶選取的通訊埠越隨機,ISP就越難以捉摸清楚我們使用的通訊埠,從而無法對我們的通訊埠進行限速。如果我們只是簡單地規定一個範圍,那么ISP又會很快對那個範圍內的通訊埠進行限速的。
\r\n
\r\n最后還要說的是,記得在你的路線和/或防火牆上開啟你選取的通訊埠,如果你有這些東西的話。', 1, 5, 9), +(348, 48, 28, 'item', '那么這個呢? “IO錯誤 - [錯誤號13] 許可被拒絕”?', '如果你只是想要解決這個問題的話,重新啟動你的電腦應該就可以了。否則的話,繼續讀下去。
\r\n
\r\nIO錯誤指的是匯入-匯出錯誤,這是一個檔案系統錯誤,而非來自我們的Tracker伺服器。當你的用戶端由于某些原因無法開啟種子中未下載完成的檔案時,這個錯誤就會發生。 通常原因是用戶端的兩個實例同時在執行:當上一次關閉用戶端時因為某種原因它沒有被真正關閉,從而始終在背景執行。因此檔案被鎖定,使得新的實例無法開啟這個檔案。
\r\n
\r\n另外一個不常出現的原因是因為老舊的FAT檔案系統。某些系統崩潰可能導致未下載完成的檔案損壞,接着就出現了這個錯誤。執行一次scandisk應該可以解決這個問題。注意,只有當你使用Windows 9X作業系統(只支援FAT檔案系統)或者在Windows NT/2000/XP中使用FAT檔案系統的時候才比對可能出現這個問題。NTFS檔案系統要健壯許多,不太可能出現這樣的問題。', 1, 5, 10), +(350, 50, 28, 'item', '不要馬上下載新發布的種子', '下載速度主要取決于上傳者/下載者比(SLR)。如果是種子是新發布的且非常受歡迎而SLR又很低的種子,下載速度低是常見的問題。
\r\n
\r\n請牢記你不喜歡低速下載。所以多上傳讓別人不用忍耐同樣的困擾。\r\n
\r\n
由其是當你的頻寬較窄時,不要馬上下載新發布的種子。最好的下載速度通常在一個種子生命周期的一半時出現,此時SLR達到最大值(不過,這時下載的缺點是你的上傳量不會很多。究竟如何平衡優點與缺點,取決于你自己)。', 1, 6, 1); +INSERT INTO `faq` (`id`, `link_id`, `lang_id`, `type`, `question`, `answer`, `flag`, `categ`, `order`) VALUES +(351, 51, 28, 'item', '限制上傳速度', '上傳速度將從以下兩種方式顯著影響下載速度:\r\n
    \r\n
  • Bittorrent的同伴傾向于回饋那些給它們提上傳的同伴。這就意味着如果A和B正在同時下載一個檔案,而A又在高速向B傳輸資料,那么B將會嘗試着回報A。因此高速上傳將導致高速下載。
  • \r\n\r\n
  • 由于TCP協定的工作方式,當A正從B下載某些東西的時候,A必須不停地向B傳送成功收到B所傳送來的資料的訊號(被稱為確認──ACK ── 某種“已收到”的資訊)。如果A沒有傳送ACK訊號,那么B將暫停向A傳送資料并且進入等候狀態。如果A正在全速上傳,很有可能沒有用來傳送ACK訊號的頻寬,因此ACK訊號被耽擱。在這種情況下,過高速度的上傳導致了低速的下載。
  • \r\n
\r\n實際的效果是以上兩個原因的結合。上傳速度應該在保證ACK能正常傳送的前提下被設得儘量高。 一個很好的實踐理論是保持上傳速度在理論上限的80%。你也可以細細研究什么是最適合你的速度(同時也請記住高速上傳對于你的分享率很有輔助說明)。
\r\n
\r\n如果你正在執行一個以上的種子工作,你應該考慮的是全域上傳速度。某些用戶端能限制了全域上傳速度,其他的則能對每一個種子分別進行設定。了解你的用戶端。如果你正在使用你的電腦做別的某些應用(比方說上網或者從FTP拖東西),也需考慮一下它們對于全域上傳的影響。', 1, 6, 2), +(352, 52, 28, 'item', '限制同時連線數', '某些作業系統(例如Windows 9X)對于大量連線數支援不完善,甚至有可能因此而崩潰。也有一些家用路線(尤其當執行着NAT以及/或者開啟防火牆狀態檢查服務時)會因大量連線數而變得很慢或者崩潰。對于連線數沒有固定的最佳值,你可以試試看60或者100。記住這些連線數是累加的,所以如果你的用戶端執行了兩個階段作業,這兩個數字要加在一起。', 1, 6, 3), +(353, 53, 28, 'item', '限制同時上傳數', '上傳數難道和連線數有什么不一樣嗎?是的,兩者是不同的。連線數限制了你的用戶端所能對話以及/或者下載的同伴數。上傳數則限制了你的用戶端實際能上傳的同伴數。理想的數值一般要比連線數低許多,并且與你的物理頻寬高度相關。', 1, 6, 4), +(354, 54, 28, 'item', '那怎么辦?等待一會吧', '如我們在上面所解譯的,在BT下載過程中一個同伴更加傾向于回報那些上傳給它的同伴。當你開始一個新的下載工作時,你沒有檔案片斷提高給其他同伴,因此他們通常會無視你。這使得開始階段的下載非常緩慢,由其是當你所連線到的同伴只有很少是(或者沒有)做種者。一旦你獲得了一些能用于共用的檔案片斷,下載速度會有所改觀。', 1, 6, 5), +(355, 55, 28, 'item', '為什么在我下載的時候瀏覽網頁速度如此之慢?', '你的下載頻寬是有限的。如果你正在下載一個速度很快的種子,它几乎肯定將占滿你的下載頻寬。這是瀏覽網頁顯然就會變慢。很多BT用戶端允許你限制下載速度,你可以試試。
\r\n
\r\n瀏覽網頁只是作為舉例之一,同樣的問題也會出現在游戲,即時通訊軟體上......', 1, 6, 6), +(356, 56, 28, 'item', '什么是代理?', '基本上說,代理就是中間人。當你通過代理存取某個網站的時候,你的要求將首先被傳送到代理處,然后由代理轉寄到你所要求的網站,而不是你直接連通到網站。下面是几種典型的代理分類(朮語不是那么的規格):
\r\n
\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
 透通代理 透通代理在用戶端無需配置。他將自動把80通訊埠的資訊重導到代理(有時候也作為非匿名代理的同義詞);
 顯式代理 瀏覽器必須經過配置才能使用代理;
 匿名代理 代理將不會把用戶記號傳送至伺服器端 (HTTP_X_FORWARDED_FOR頭旗標將不被傳送。伺服器也因此看不到你的IP);
 高度匿名代理 代理將不會把用戶記號或代理記號傳送至伺服器端 (HTTP_X_FORWARDED_FOR和HTTP_VIA and HTTP_PROXY_CONNECTION頭旗標將不被傳送。伺服器看不到你的IP,甚至不知道你正在使用代理);
 公用 (不言自明了)。
\r\n
\r\n透通代理可能是匿名的,也可能是非匿名的,且匿名也有相應的等級。', 1, 7, 1), +(357, 57, 28, 'item', '我該怎樣發現自己正處于一個(透通的/匿名的)代理后面?', '試試看ProxyJudge。它列出了伺服器端從你這裡所收到的HTTP的頭旗標。相關的几個旗標是HTTP_CLIENT_IP,HTTP_X_FORWARDED_FOR和REMOTE_ADDR。', 1, 7, 2), +(375, 75, 28, 'item', '我的“可連線”是“否”儘管我并沒有NAT或者防火牆?', 'Tracker伺服器在搜尋你的真實IP方面非常有天賦。但是這需要代理髮送HTTP頭旗標HTTP_X_FORWARDED_FOR。如果你的ISP的代理沒有這么做的話,Tracker伺服器將把代理的IP當作你的用戶端的IP。所以當你登入之后,Tracker伺服器嘗試連線你的用戶端來確信你沒有使用NAT/防火牆,伺服器實際上將嘗試連線代理的IP(使用你的BT用戶端報告的接收連線通訊埠)。很自然地,代理伺服器并沒有監聽那個通訊埠。如此連線會失敗,而Tracker伺服器也因此認為你使用了NAT/防火牆。', 1, 7, 3), +(401, 1, 6, 'categ', 'Site information', '', 1, 0, 1), +(402, 2, 6, 'categ', 'User information', '', 1, 0, 2), +(403, 3, 6, 'categ', 'Stats', '', 1, 0, 3), +(404, 4, 6, 'categ', 'Uploading', '', 1, 0, 4), +(405, 5, 6, 'categ', 'Downloading', '', 1, 0, 5), +(406, 6, 6, 'categ', 'How can I improve my download speed?', '', 1, 0, 6), +(407, 7, 6, 'categ', 'My ISP uses a transparent proxy. What should I do?', '', 1, 0, 7), +(408, 8, 6, 'categ', 'Why can''t I connect? Is the site blocking me?', '', 1, 0, 8), +(409, 9, 6, 'categ', 'What if I can''t find the answer to my problem here?', '', 1, 0, 9), +(410, 10, 6, 'item', 'What is this bittorrent all about anyway? How do I get the files?', 'Check out Brian''s BitTorrent FAQ and Guide.', 1, 1, 1), +(411, 11, 6, 'item', 'Where does the donated money go?', 'All donated money goes to the cost of server that this tracker is on.', 1, 1, 2), +(412, 12, 6, 'item', 'Where can I get a copy of the source code?', 'This tracker is powered by NexusPHP. If you like to use NexusPHP to power your tracker, Contact Us.
\r\nThe first stage of NexusPHP forks from TBSource. You may find more information about TBSource at TBDev.net.', 1, 1, 3), +(413, 13, 6, 'item', 'I registered an account but did not receive the confirmation e-mail!', 'One possible reason may be that the network around the tracker has encountered some problems. You can use this form ask the tracker to resend confirmation e-mail.
\r\nTypically registered users would be deleted after 24 hours if not confirmed, so you may try again the next day. Note though that if you didn''t receive the email the first time it will probably not succeed the second time either so you should really try another email address.', 1, 2, 1), +(414, 14, 6, 'item', 'I''ve lost my user name or password! Can you send it to me?', 'Please use this form to have the login details mailed back to you.', 1, 2, 2), +(415, 15, 6, 'item', 'Can you rename my account? ', 'No, we do not rename accounts. Don''t ask for it.', 1, 2, 3), +(416, 16, 6, 'item', 'Can you delete my (confirmed) account?', 'No, we don''t delete accounts. Don''t ask for it.', 1, 2, 4), +(417, 17, 6, 'item', 'So, what''s MY ratio?', 'It''s on the left-top of pages.
\r\n
\r\nratio\r\n
\r\n
\r\nIt''s important to distinguish between your overall ratio and the individual ratio on each torrent you may be seeding or leeching. The overall ratio takes into account the total uploaded and downloaded from your account since you joined the site. The individual ratio takes into account those values for each torrent.\r\n
\r\n
\r\nYou may see two symbols instead of a number: "Inf.", which is just an abbreviation for Infinity, and means that you have downloaded 0 bytes while uploading a non-zero amount (ul/dl becomes infinity); "---", which should be read as "non-available", and shows up when you have both downloaded and uploaded 0 bytes (ul/dl = 0/0 which is an indeterminate amount).\r\n', 1, 2, 5), +(418, 18, 6, 'item', 'Why is my IP displayed on my details page?', 'Only you and the site moderators can view your IP address and email. Regular users do not see that information.', 1, 2, 6), +(421, 21, 6, 'item', 'Why am I listed as not connectable? (And why should I care?)', 'The tracker has determined that you are firewalled or NATed and cannot accept incoming connections. \r\n
\r\n
\r\nThis means that other peers in the swarm will be unable to connect to you, only you to them. Even worse, if two peers are both in this state they will not be able to connect at all. This has obviously a detrimental effect on the overall speed. \r\n
\r\n
\r\nThe way to solve the problem involves opening the ports used for incoming connections (the same range you defined in your client) on the firewall and/or configuring your NAT server to use a basic form of NAT for that range instead of NAPT (the actual process differs widely between different router models. Check your router documentation and/or support forum. You will also find lots of information on the subject at PortForward).\r\n\r\n\r\n\r\n\r\n\r\n', 1, 2, 9), +(422, 22, 6, 'item', 'What are the different user classes?', '\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n
  Peasant  Demoted users. They must improve their ratio within 30 days or they will be banned. Cannot post funbox item, apply for links or upload subtitles.\r\n
  User The default class of new members. may upload torrents between 12:00, Saturday and 23:59 Sunday of every week.
  Power User Get a invitation. Can upload torrents, view NFO files, view user list, ask for reseed, send invitation, access Power User and External Trackers forums, view Top 10, view other users'' torrent history (if user''s privacy level is not set ''strong''), delete subtitle uploaded by oneself.
  Elite User Elite User or above would never be deleted if parked.
  Crazy User Get two invitations. Can be anonymous when seeding/leeching/uploading.
  Insane User Can view general logs.
  Veteran User Get three invitations. Can view other users'' history of comments and forum posts. Veteran User or above would never be deleted whether parked or not.
  Extreme User Can update outdated external information and access Extreme User forum.
  Ultimate User Get 5 invitations.
  Nexus Master Get 10 invitations.
  Star Has donated money to this tracker.
  VIP Same privileges as Nexus Master and is considered an Elite Member of this tracker. Immune to automatic demotion.
  Retiree Former staff members.
  Other Customized title.
  Uploader Dedicated uploader, immune to automatic demotion. Can view who anonymous ones are.
  Moderator Can view staffbox and reportbox, manage funbox and polls, edit and delete any uploaded torrent, manage offers, manage forum posts and user comments, view confidential logs, delete any uploaded subtitle, manage code updates and chronicles at logs, view users'' invitation history, change general user account information. Cannot manage links,recent news or forums. Cannot set torrents sticky or on promotion.Cannot view users'' confidential information (e.g. IP address and Email address). Cannot delete user account.
  Administrator Other than changing site settings and managing donation, can do just about anything.
  SysOp Dedicated site developer. Except managing donation, can do anything (including changing site settings)
  Staff Leader The boss. Can do anything.
', 1, 2, 10), +(423, 23, 6, 'item', 'How does this promotion thing work anyway?', '\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n
  Peasant User would be demoted to this class under any of the following circumstances:
\r\n1.Downloaded more than 50 GB and with ratio below 0.4
\r\n2.Downloaded more than 100 GB and with ratio below 0.5
\r\n3.Downloaded more than 200 GB and with ratio below 0.6
\r\n4.Downloaded more than 400 GB and with ratio below 0.7
\r\n5.Downloaded more than 800 GB and with ratio below 0.8
  Power User Must have been a member for at least 4 weeks, have downloaded at least 50GB and have a ratio at or above 1.05. The promotion is automatic when these conditions are met.
\r\nNote that you will be automatically demoted from this status if your ratio drops below 0.95 at any time.
  Elite User Must have been a member for at least 8 weeks, have downloaded at least 120GB and have a ratio at or above 1.55. The promotion is automatic when these conditions are met.
\r\nNote that you will be automatically demoted from this status if your ratio drops below 1.45 at any time.
  Crazy User Must have been a member for at least 15 weeks, have downloaded at least 300GB and have a ratio at or above 2.05. The promotion is automatic when these conditions are met.
\r\nNote that you will be automatically demoted from this status if your ratio drops below 1.95 at any time.
  Insane User Must have been a member for at least 25 weeks, have downloaded at least 500GB and have a ratio at or above 2.55. The promotion is automatic when these conditions are met.
\r\nNote that you will be automatically demoted from this status if your ratio drops below 2.45 at any time.
  Veteran User Must have been a member for at least 40 weeks, have downloaded at least 750GB and have a ratio at or above 3.05. The promotion is automatic when these conditions are met.
\r\nNote that you will be automatically demoted from this status if your ratio drops below 2.95 at any time.
  Extreme User Must have been a member for at least 60 weeks, have downloaded at least 1TB and have a ratio at or above 3.55. The promotion is automatic when these conditions are met.
\r\nNote that you will be automatically demoted from this status if your ratio drops below 3.45 at any time.
  Ultimate User Must have been a member for at least 80 weeks, have downloaded at least 1.5TB and have a ratio at or above 4.05. The promotion is automatic when these conditions are met.
\r\nNote that you will be automatically demoted from this status if your ratio drops below 3.95 at any time.
  Nexus Master Must have been a member for at least 100 weeks, have downloaded at least 3TB and have a ratio at or above 4.55. The promotion is automatic when these conditions are met.
\r\nNote that you will be automatically demoted from this status if your ratio drops below 4.45 at any time.
  \\\\\\\\\\\\\\"Star\\\\\\\\\\\\\\" Just donate, see here for the details.
  VIP Assigned by mods at their discretion to users they feel contribute something special to the site. (Anyone begging for VIP status will be automatically disqualified.)
  Other Customized title. Exchanged at bonus system or granted by admins.
  Uploader Appointed by Admins/SysOp/Staff Leader (see the \\\\\\\\\\\\\\''Uploading\\\\\\\\\\\\\\'' section for conditions).
  Retiree Granted by Admins/SysOp/Staff Leader
  Moderator You don\\\\\\\\\\\\\\''t ask us, we\\\\\\\\\\\\\\''ll ask you!
', 0, 2, 11), +(425, 25, 6, 'item', 'Why can''t my friend become a member?', 'There is a users limit (it is list at Home -> Tracker Statistics -> Limit). When that number is reached we stop accepting new members. Accounts inactive (i.e. not logged in for a long time) are automatically deleted, so keep trying.
\r\nWhen are inactive user accounts deleted? See Rules', 1, 2, 13), +(426, 26, 6, 'item', 'How do I add an avatar to my profile?', 'First, find an image that you like, and that is within the rules. Then you will have to find a place to host it, such as our own BitBucket. To lighten tracker''s load, we recommend you upload it to other websites and copy the URL you were given when uploading it to the Avatar URL field in UserCP.
\r\n
\r\nPlease do not make a post just to test your avatar. If everything is all right you''ll see it in your details page. ', 1, 2, 14), +(427, 27, 6, 'item', 'Most common reason for stats not updating', '
    \r\n
  • The server is overloaded and unresponsive. Just try to keep the session open until the server responds again. (Flooding the server with consecutive manual updates is not recommended.)
  • \r\n
  • You are using a faulty client. If you want to use an experimental or CVS version you do it at your own risk.
  • \r\n
', 1, 3, 1), +(428, 28, 6, 'item', 'Best practices', '
    \r\n
  • If a torrent you are currently leeching/seeding is not listed on your detail page, just wait or force a manual update.
  • \r\n
  • Make sure you exit your client properly, so that the tracker receives "event=completed".
  • \r\n
  • If the tracker is down, do not stop seeding. As long as the tracker is back up before you exit the client the stats should update properly.
  • \r\n
', 1, 3, 2), +(429, 29, 6, 'item', 'May I use any bittorrent client?', 'No. According to tests of common bittorrent clients by NexusPHP, we allowed only the following bittorrent clients.
\r\nThe test report by NexusPHP is here. \r\n
\r\nWindows:\r\n
    \r\n
  • Azureus: 2.5.0.4, 3.0.5.0, 3.0.5.2 and later versions
  • \r\n
  • uTorrent: 1.6.1, 1.7.5, 1.7.6, 1.7.7, 1.8Beta(Build 10364), 2.0(Build 17624) and later versions
  • \r\n
  • BitTorrent: 6.0.1, 6.0.2, 6.0.3 and later versions
  • \r\n
  • Deluge: 0.5.9.1, 1.1.6 and later versions
  • \r\n
  • Rufus: 0.6.9, 0.7.0 and later versions
  • \r\n
\r\nLinux:\r\n
    \r\n
  • Azureus: 2.5.0.4, 3.0.5.0, 3.0.5.2 and later versions
  • \r\n
  • Deluge: 0.5.9.1, 1.1.6 and later versions
  • \r\n
  • Rufus: 0.6.9, 0.7.0 and later versions
  • \r\n
  • Transmission: 1.21 and later versions
  • \r\n
  • rTorrent: 0.8.0(with libtorrent 0.12.0 or later) and later versions
  • \r\n
  • Enhanced CTorrent: 3.3.2 and later versions
  • \r\n
\r\nMacOS X:\r\n
    \r\n
  • Azureus: 2.5.0.4, 3.0.5.0, 3.0.5.2 and later versions
  • \r\n
  • Transmission: 1.21 and later versions
  • \r\n
  • BitRocket: 0.3.3(32) and later versions
  • \r\n
\r\nSymbian (For Testing Only):\r\n\r\n
\r\n\r\nSupport for https:\r\n
    \r\n
  • uTorrent 1.61: cannot parse tracker https url, and marks itself as uTorrent 1.5
  • \r\n
  • Rufus: no support for https, and development ceased for years.
  • \r\n
  • rtorrent: needs to add SSL certification manually, see User Guide at its official site.
  • \r\n
\r\n\r\n
\r\n\r\nPlease do not use any beta or testing version of bittorrent clients, e.g. uTorrent 1.8.0B. To get the best downloading experience, we highly recommend latest stable version of uTorrent and Azureus.', 1, 5, 3), +(430, 30, 6, 'item', 'Why is a torrent I''m leeching/seeding listed several times in my profile?', 'If for some reason (e.g. PC crash, or frozen client) your client exits improperly and you restart it, it will have a new peer_id, so it will show as a new torrent. The old one will never receive a "event=completed" or "event=stopped" and will be listed until some tracker timeout. Just ignore it, it will eventually go away.', 1, 3, 4), +(431, 31, 6, 'item', 'I''ve finished or cancelled a torrent. Why is it still listed in my profile?', 'Some clients, notably TorrentStorm and Nova Torrent, do not report properly to the tracker when canceling or finishing a torrent. In that case the tracker will keep waiting for some message - and thus listing the torrent as seeding or leeching - until some timeout occurs. Just ignore it, it will eventually go away.', 1, 3, 5), +(433, 33, 6, 'item', 'Multiple IPs (Can I login from different computers?)', 'Yes, the tracker is capable of following sessions from different IPs for the same user. You may access the site and seed/leech simultaneously from as many computers as you want with the same account.
\r\nHowever, there is a limit for a single torrent. Per torrent 3 simultaneous connections are permitted per user, and in case of leeching only 1, which means you can leech a torrent from one location only at a time.', 1, 3, 7), +(436, 36, 6, 'item', 'Why can''t I upload torrents?', 'See Rules.', 1, 4, 1), +(437, 37, 6, 'item', 'What criteria must I meet before I can join the Uploader team?', 'You must:\r\n
    \r\n
  • have steady access to resources.
  • \r\n
  • upload not less than 5 torrents per week.
  • \r\n
\r\nYou must be able to provide releases that:\r\n
    \r\n
  • are not older than 7 days
  • \r\n
  • you''ll be able to seed, or make sure are well-seeded, for at least 24 hours.
  • \r\n
  • Also, you should have at least 2MBit upload bandwith.
  • \r\n
\r\nIf you think you can match these criteria do not hesitate to contact the staff.
\r\nRemember! Write your application carefully! Be sure to include your upload speed and what kind of stuff you''re planning to upload.
\r\nOnly well written letters with serious intent will be considered.', 1, 4, 2), +(438, 38, 6, 'item', 'Can I upload your torrents to other trackers?', 'No. We are a closed, limited-membership community. Only registered users can use the tracker. Posting our torrents on other trackers is useless, since most people who attempt to download them will be unable to connect with us. This generates a lot of frustration and bad-will against us, and will therefore not be tolerated.
\r\n
\r\nComplaints from other sites'' administrative staff about our torrents being posted on their sites will result in the banning of the users responsible.\r\n
\r\n
\r\nHowever, the files you download from us are yours to do as you please (except those marked as EXCLUSIVE by the uploader). You can always create another torrent, pointing to some other tracker, and upload it to the site of your choice.', 1, 4, 3), +(439, 39, 6, 'item', 'How do I use the files I''ve downloaded?', 'Check out this guide.', 1, 5, 1), +(440, 40, 6, 'item', 'Downloaded a movie and don''t know what CAM/TS/TC/SCR means?', 'Check out this guide.', 1, 5, 2), +(441, 41, 6, 'item', 'Why did an active torrent suddenly disappear?', 'There may be three reasons for this:
\r\n(1) The torrent may have been against the site rules.\r\n
\r\n(2) The uploader may have deleted it because it was a bad release. A replacement will probably be uploaded to take its place.
\r\n(3) Torrents are automatically deleted after being dead for a long time.', 1, 5, 3), +(442, 42, 6, 'item', 'How do I resume a broken download or reseed something?', 'Open the .torrent file. When your client asks you for a location, choose the location of the existing file(s) and it will resume/reseed the torrent.', 1, 5, 4), +(443, 43, 6, 'item', 'Why do my downloads sometimes stall at 99%?', 'The more pieces you have, the harder it becomes to find peers who have pieces you are missing. That is why downloads sometimes slow down or even stall when there are just a few percent remaining. Just be patient and you will, sooner or later, get the remaining pieces.', 1, 5, 5), +(444, 44, 6, 'item', 'What are these "a piece has failed a hash check" messages? ', 'Bittorrent clients check the data they receive for integrity. When a piece fails this check it is automatically re-downloaded. Occasional hash fails are a common occurrence, and you shouldn''t worry.
\r\n
\r\nSome clients have an (advanced) option/preference to ''kick/ban clients that send you bad data'' or similar. It should be turned on, since it makes sure that if a peer repeatedly sends you pieces that fail the hash check it will be ignored in the future.', 1, 5, 6), +(445, 45, 6, 'item', 'The torrent is supposed to be 100MB. How come I downloaded 120MB? ', 'See the hash fails topic. If your client receives bad data it will have to re-download it, therefore the total downloaded may be larger than the torrent size. Make sure the "kick/ban" option is turned on to minimize the extra downloads.', 1, 5, 7), +(446, 46, 6, 'item', 'Why do I get a "Your ratio is too low! You need to wait xx h to start" error?', 'From the time that each new torrent is uploaded to the tracker, there is a period of time that some users must wait before they can download it.
\r\nThis delay in downloading will only affect users with a low ratio and downloaded amount above 10 GB.
\r\n
\r\n\r\n\r\n \r\n \r\n \r\n \r\n \r\n\r\n\r\n \r\n \r\n \r\n \r\n \r\n\r\n\r\n \r\n \r\n \r\n \r\n \r\n\r\n\r\n \r\n \r\n \r\n \r\n \r\n\r\n
Ratio below0.4 delay of24h
Ratio below0.5 delay of12h
Ratio below0.6 delay of6h
Ratio below0.8 delay of3h
', 0, 5, 8), +(447, 47, 6, 'item', 'Why do I get a "Port xxxx is blacklisted" error?', 'Your client is reporting to the tracker that it uses one of the default bittorrent ports (6881-6889) or any other common p2p port for incoming connections.
\r\n
\r\nWe does not allow clients to use ports commonly associated with p2p protocols. The reason for this is that it is a common practice for ISPs to throttle those ports (that is, limit the bandwidth, hence the speed).
\r\n
\r\nThe blocked ports list include the following:
\r\n
\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
Direct Connect411 - 413
BitTorrent6881 - 6889
Kazza1214
Gnutella6346 - 6347
Emule4662
WinMX6699
\r\n
\r\nIn order to use our tracker you must configure your client to use any port range that does not contain those ports (a range within the region 49152 through 65535 is preferable,\r\ncf. IANA). Notice that some clients, like Azureus 2.0.7.0 or higher, use a single port for all torrents, while most others use one port per open torrent. The size of the range you choose should take this into account (typically less than 10 ports wide. There is no benefit whatsoever in choosing a wide range, and there are possible security implications).
\r\n
\r\nThese ports are used for connections between peers, not client to tracker. Therefore this change will not interfere with your ability to use other trackers (in fact it should increase your speed with torrents from any tracker, not just ours). Your client will also still be able to connect to peers that are using the standard ports. If your client does not allow custom ports to be used, you will have to switch to one that does.
\r\n
\r\nDo not ask us, or in the forums, which ports you should choose. The more random the choice is the harder it will be for ISPs to catch on to us and start limiting speeds on the ports we use. If we simply define another range ISPs will start throttling that range also.
\r\n
\r\nFinally, remember to forward the chosen ports in your router and/or open them in your\r\nfirewall, should you have them.', 1, 5, 9), +(448, 48, 6, 'item', 'What''s this "IOError - [Errno13] Permission denied" error?', 'If you just want to fix it reboot your computer, it should solve the problem. Otherwise read on.
\r\nIOError means Input-Output Error, and that is a file system error, not a tracker one. It shows up when your client is for some reason unable to open the partially downloaded torrent files. The most common cause is two instances of the client to be running simultaneously: the last time the client was closed it somehow didn''t really close but kept running in the background, and is therefore still locking the files, making it impossible for the new instance to open them.
\r\nA more uncommon occurrence is a corrupted FAT. A crash may result in corruption that makes the partially downloaded files unreadable, and the error ensues. Running scandisk should solve the problem. (Note that this may happen only if you''re running Windows 9x - which only support FAT - or NT/2000/XP with FAT formatted hard drives. NTFS is much more robust and should never permit this problem.)\r\n', 1, 5, 10), +(450, 50, 6, 'item', 'Do not immediately jump on new torrents', 'The download speed mostly depends on the seeder-to-leecher ratio (SLR). Poor download speed is mainly a problem with new and very popular torrents where the SLR is low.
\r\n(Note: make sure you remember that you did not enjoy the low speed. Seed so that others will not endure the same.)
\r\n
In particular, do not do it if you have a slow connection. The best speeds will be found around the half-life of a torrent, when the SLR will be at its highest. (The downside is that you will not be able to seed so much. It''s up to you to balance the pros and cons of this.)', 1, 6, 1), +(451, 51, 6, 'item', 'Limit your upload speed', 'The upload speed affects the download speed in essentially two ways:\r\n
    \r\n
  • Bittorrent peers tend to favour those other peers that upload to them. This means that if A and B are leeching the same torrent and A is sending data to B at high speed then B will try to reciprocate. So due to this effect high upload speeds lead to high download speeds.
  • \r\n\r\n
  • Due to the way TCP works, when A is downloading something from B it has to keep telling B that it received the data sent to him. (These are called acknowledgements - ACKs -, a sort of "got it!" messages). If A fails to do this then B will stop sending data and wait. If A is uploading at full speed there may be no bandwidth left for the ACKs and they will be delayed. So due to this effect excessively high upload speeds lead to low download speeds.
  • \r\n
\r\n\r\nThe full effect is a combination of the two. The upload should be kept as high as possible while allowing the ACKs to get through without delay. A good thumb rule is keeping the upload at about 80% of the theoretical upload speed. You will have to fine tune yours to find out what works best for you. (Remember that keeping the upload high has the additional benefit of helping with your ratio.)
\r\n
\r\nIf you are running more than one instance of a client it is the overall upload speed that you must take into account. Some clients limit global upload speed, others do it on a per torrent basis. Know your client. The same applies if you are using your connection for anything else (e.g. browsing or ftp), always think of the overall upload speed.', 1, 6, 2), +(452, 52, 6, 'item', 'Limit the number of simultaneous connections', 'Some operating systems (like Windows 9x) do not deal well with a large number of connections, and may even crash. Also some home routers (particularly when running NAT and/or firewall with stateful inspection services) tend to become slow or crash when having to deal with too many connections. There are no fixed values for this, you may try 60 or 100 and experiment with the value. Note that these numbers are additive, if you have two instances of a client running the numbers add up.', 1, 6, 3), +(453, 53, 6, 'item', 'Limit the number of simultaneous uploads', 'Isn''t this the same as above? No. Connections limit the number of peers your client is talking to and/or downloading from. Uploads limit the number of peers your client is actually uploading to. The ideal number is typically much lower than the number of connections, and highly dependent on your (physical) connection.', 1, 6, 4), +(454, 54, 6, 'item', 'Just give it some time', 'As explained above peers favour other peers that upload to them. When you start leeching a new torrent you have nothing to offer to other peers and they will tend to ignore you. This makes the starts slow, in particular if, by chance, the peers you are connected to include few or no seeders. The download speed should increase as soon as you have some pieces to share.', 1, 6, 5), +(455, 55, 6, 'item', 'Why is my browsing so slow while leeching?', 'Your download speed is always finite. If you are a peer in a fast torrent it will almost certainly saturate your download bandwidth, and your browsing will suffer. Many clients allows you to limit the download speed and try it.
\r\n
\r\nBrowsing was used just as an example, the same would apply to gaming, IMing, etc...', 1, 6, 6), +(456, 56, 6, 'item', 'What is a proxy?', 'Basically a middleman. When you are browsing a site through a proxy your requests are sent to the proxy and the proxy forwards them to the site instead of you connecting directly to the site. There are several classifications (the terminology is far from standard):
\r\n
\r\n\r\n\r\n \r\n \r\n \r\n\r\n\r\n \r\n \r\n \r\n\r\n\r\n \r\n \r\n \r\n\r\n\r\n \r\n \r\n \r\n\r\n\r\n \r\n \r\n \r\n\r\n
 Transparent A transparent proxy is one that needs no configuration on the clients. It works by automatically redirecting all port 80 traffic to the proxy. (Sometimes used as synonymous for non-anonymous.)
 Explicit/Voluntary Clients must configure their browsers to use them.
 Anonymous The proxy sends no client identification to the server. (HTTP_X_FORWARDED_FOR header is not sent; the server does not see your IP.)
 Highly Anonymous The proxy sends no client nor proxy identification to the server. (HTTP_X_FORWARDED_FOR, HTTP_VIA and HTTP_PROXY_CONNECTION headers are not sent; the server doesn''t see your IP and doesn''t even know you''re using a proxy.)
 Public (Self explanatory)
\r\n
\r\nA transparent proxy may or may not be anonymous, and there are several levels of anonymity.', 1, 7, 1), +(457, 57, 6, 'item', 'How do I find out if I''m behind a (transparent/anonymous) proxy?', 'Try ProxyJudge. It lists the HTTP headers that the server where it is running received from you. The relevant ones are HTTP_CLIENT_IP, HTTP_X_FORWARDED_FOR and REMOTE_ADDR.', 1, 7, 2), +(475, 75, 6, 'item', 'Why am I listed as not connectable even though I''m not NAT/Firewalled?', 'The tracker is quite smart at finding your real IP, but it does need the proxy to send the HTTP header HTTP_X_FORWARDED_FOR. If your ISP''s proxy does not then what happens is that the tracker will interpret the proxy''s IP address as the client''s IP address. So when you login and the tracker tries to connect to your client to see if you are NAT/firewalled it will actually try to connect to the proxy on the port your client reports to be using for incoming connections. Naturally the proxy will not be listening on that port, the connection will fail and the tracker will think you are NAT/firewalled.', 1, 7, 3), +(462, 62, 6, 'item', 'Maybe my address is blacklisted?', 'The site keeps a list of blocked IP addresses for banned users or attackers. This works at Apache/PHP level, and only blocks logins from those addresses. It should not stop you from reaching the site. In particular it does not block lower level protocols, you should be able to ping/traceroute the server even if your address is blacklisted. If you cannot then the reason for the problem lies elsewhere.
\r\n
\r\nIf somehow your address is blocked by mistake, contact us about it.', 1, 8, 1), +(463, 63, 6, 'item', 'Your ISP blocks the site''s address', '(In first place, it''s unlikely your ISP is doing so. DNS name resolution and/or network problems are the usual culprits.) \r\n
\r\nThere''s nothing we can do. You should contact your ISP (or get a new one). Note that you can still visit the site via a proxy, follow the instructions in the relevant section. In this case it doesn''t matter if the proxy is anonymous or not, or which port it listens to.
\r\n
\r\nNotice that you will always be listed as an "unconnectable" client because the tracker will be unable to check that you''re capable of accepting incoming connections.', 1, 8, 2); +INSERT INTO `faq` (`id`, `link_id`, `lang_id`, `type`, `question`, `answer`, `flag`, `categ`, `order`) VALUES +(465, 65, 6, 'item', 'You may try this', 'Post in the Forums, by all means. You''ll find they are usually a friendly and helpful place, provided you follow a few basic guidelines:
    \r\n
  • Make sure your problem is not really in this FAQ. There''s no point in posting just to be sent back here.
  • \r\n
  • Before posting read the sticky topics (the ones at the top). Many times new information that still hasn''t been incorporated in the FAQ can be found there.
  • \r\n
  • Help us in helping you. Do not just say "it doesn''t work!". Provide details so that we don''t have to guess or waste time asking. What client do you use? What''s your OS? What''s your network setup? What''s the exact error message you get, if any? What are the torrents you are having problems with? The more you tell the easiest it will be for us, and the more probable your post will get a reply.
  • \r\n
  • And needless to say: be polite. Demanding help rarely works, asking for it usually does the trick.
', 1, 9, 1), +(466, 66, 6, 'item', 'Why do I get a "Your slot limit is reached! You may at most download xx torrents at the same time" error?', 'This is part of the "Slot System". The slot system is being used to limit the concurrent downloads for users that have low ratio and downloaded amount above 10 GB

\r\nRules:
\r\n\r\n\r\n \r\n \r\n \r\n \r\n \r\n\r\n\r\n \r\n \r\n \r\n \r\n \r\n\r\n\r\n \r\n \r\n \r\n \r\n \r\n\r\n\r\n \r\n \r\n \r\n \r\n \r\n\r\n\r\n \r\n \r\n \r\n \r\n \r\n\r\n
Ratio below0.5 available slots1
Ratio below0.65 available slots2
Ratio below0.8 available slots3
Ratio below0.95 available slots4
Ratio above0.95 available slotsunlimited
\r\n
\r\nIn all cases the seeding slots are unlimited. However if you have already filled all your available download slots and try to start seeding you will receive the same error. In this case you must free at least one download slot in order to start all your seeds and then start the download. If all your download slots are filled the system will deny any connection before validating if you want to download or seed. So first start your seeds and after that your downloads.
\r\n

\r\nAny time, you can check your available slots in the member bar on top of the page.', 0, 5, 12), +(467, 67, 6, 'item', 'What is the passkey System? How does it work?', 'The passkey system is implemented to verify if you are registered with the tracker. Every user has a personal passkey, a random key generated by the system. When a user tries to download a torrent, his personal passkey is imprinted in the tracker URL of the torrent, allowing to the tracker to identify any source connected on it. In this way, you can seed a torrent for example, at home and at your office simultaneously without any problem with the 2 different IPs.\r\n', 1, 5, 13), +(468, 68, 6, 'item', 'Why do I get an "Unknown passkey" error? ', 'You will get this error, firstly if you are not registered on our tracker, or if you haven''t downloaded the torrent to use from our webpage, when you were logged in. In this case, just register or log in and re-download the torrent.
\r\nThere is a chance to get this error also, at the first time you download anything as a new user, or at the first download after you reset your passkey. The reason is simply that the tracker reviews the changes in the passkeys every few minutes and not instantly. For that reason just leave the torrent running for a few minutes, and you will get eventually an OK message from the tracker.', 1, 5, 14), +(469, 69, 6, 'item', 'When do I need to reset my passkey?', '
  • If your passkey has been leaked and other user(s) uses it to download torrents using your account. In this case, you will see torrents stated in your account that you are not leeching or seeding .
  • \r\n
  • When your clients hangs up or your connection is terminated without pressing the stop button of your client. In this case, in your account you will see that you are still leeching/seeding the torrents even that your client has been closed. Normally these "ghost peers" will be cleaned automatically within 30 minutes, but if you want to resume your downloads and the tracker denied that due to the fact that you "already are downloading the same torrent" then you should reset your passkey and re-download the torrent, then resume it.
', 1, 5, 15), +(470, 70, 6, 'item', 'What is DHT? Why must I turn it off and how?', 'DHT must be disabled in your client. DHT can cause your stats to be recorded incorrectly and could be seen as cheating. Anyone using this will be banned for cheating the system.\r\n
\r\nFortunately, this tracker would parse uploaded .torrent files and automatically disable DHT. That''s why you must re-downloaded the torrent before starting seeding.', 1, 5, 16), +(471, 71, 6, 'categ', 'How can I help translate the site language into my native language?', '', 1, 1, 8), +(472, 72, 6, 'item', 'What skills do I need to do the translation?', 'Translate the site into another language is quite easy. You needn''t be skilled in PHP or dynamic website design. In fact, all you need is proficient understanding of English (the default site language) and the language you plan to translate into. Maybe some basic knowledge in HTML would help.

\r\nMoreover, we give a detailed tutorial on how to do the translation HERE. And our coders would be more than pleased to answer the questions you may encounter.

\r\nTranslate the whole site into another language would take estimated 10 hours. And extra time is needed to maintain the translation when site code is updated.

\r\nSo, if you think you could help, feel free to CONTACT US. Needless to say, you would be rewarded.', 1, 71, 1), +(473, 73, 6, 'item', 'The translation tutorial', '
    \r\n
  • How does multi-language work?
    \r\nCurrently we use language files to store all the static words that a user can see on web pages.
    \r\nEvery php code file has a corresponding language file for a certain language. And we named the language file ''lang_'' plus the filename of the php code file. i.e. the language file of the php code file ''details.php'' would be ''lang_details.php''.
    \r\nWe has some mechanism in php codes to read the exact language files of user''s preferred language, and you shouldn''t worry about that.
  • \r\n
  • What''s in language files?
    \r\nIn a language file is an array of strings. These strings contain all the static words that a user can see on web pages. When we need to say some words on a php code file, we call for a string in the array. And the output of the php code file, that is what users see on the web pages, would show the value of the string.
    \r\nSounds dizzying? Well, you need not care about all these. All you gotta do is translate the values of the strings in the language files into another language. Let''s see an example:

    \r\nThe following is the content of the English language file ''lang_users.php'', which works for the php code file ''users.php''.

    \r\nlangfileeng
    \r\nIf you wanna translate it into Simplified Chinese, all you need is edit the file into this:
    \r\nlangfilechs
    \r\nSee, in every line, the left part, that is before =>, is the name of a string, which you shouldn''t touch. All you need to is translate the right part, after =>, which is the value of the string, into another language.
    \r\nSometimes you need to look at the corresponding web pages to get the context meaning of some words.
  • \r\n
  • Sounds easy? See what do you need to do.
    \r\nIf you feel like to help us, CONTACT US and we will send you a pack of the English language files (or any other available language if you prefer). Received it, you can start translating the value of strings (which is in English), into another language. It should take you several hours to do the whole work. After this, send back the translated language files to us.
    \r\nIf no bugs or hacking codes are found in testing, we would put the new language into work.
    \r\nSometimes the language files need to be updated, typically adding new strings, when site codes are updated. If you feel like it, you can help maintain the language files.
  • \r\n
  • IMPORTANT
    \r\nThe text of language files must be encoded in UTF-8. When saving files, be sure to set the character encoding to UTF-8. Otherwise mojibake may happen.
', 1, 71, 2), +(474, 74, 6, 'item', 'Why does my client notify me of low disk space even if there is plenty left?', 'Most possible reason is that the file system of your disk partitions is FAT32, which has a maximum file size limit of 4 GB. If your operation system is Windows, consider converting file system to NTFS. Check here for details.\r\n', 1, 5, 17); + +-- -------------------------------------------------------- + +-- +-- Table structure for table `files` +-- + +CREATE TABLE IF NOT EXISTS `files` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `torrent` mediumint(8) unsigned NOT NULL DEFAULT '0', + `filename` varchar(255) NOT NULL DEFAULT '', + `size` bigint(20) unsigned NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `torrent` (`torrent`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; + +-- +-- Dumping data for table `files` +-- + + +-- -------------------------------------------------------- + +-- +-- Table structure for table `forummods` +-- + +CREATE TABLE IF NOT EXISTS `forummods` ( + `id` smallint(5) unsigned NOT NULL AUTO_INCREMENT, + `forumid` smallint(5) unsigned NOT NULL, + `userid` mediumint(8) unsigned NOT NULL, + PRIMARY KEY (`id`), + KEY `forumid` (`forumid`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; + +-- +-- Dumping data for table `forummods` +-- + + +-- -------------------------------------------------------- + +-- +-- Table structure for table `forums` +-- + +CREATE TABLE IF NOT EXISTS `forums` ( + `id` smallint(5) unsigned NOT NULL AUTO_INCREMENT, + `sort` smallint(5) unsigned NOT NULL DEFAULT '0', + `name` varchar(60) NOT NULL, + `description` varchar(255) NOT NULL DEFAULT '', + `minclassread` tinyint(3) unsigned NOT NULL DEFAULT '0', + `minclasswrite` tinyint(3) unsigned NOT NULL DEFAULT '0', + `postcount` int(10) unsigned NOT NULL DEFAULT '0', + `topiccount` int(10) unsigned NOT NULL DEFAULT '0', + `minclasscreate` tinyint(3) unsigned NOT NULL DEFAULT '0', + `forid` smallint(5) unsigned NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; + +-- +-- Dumping data for table `forums` +-- + + +-- -------------------------------------------------------- + +-- +-- Table structure for table `friends` +-- + +CREATE TABLE IF NOT EXISTS `friends` ( + `id` int(12) unsigned NOT NULL AUTO_INCREMENT, + `userid` mediumint(8) unsigned NOT NULL, + `friendid` mediumint(8) unsigned NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `userfriend` (`userid`,`friendid`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; + +-- +-- Dumping data for table `friends` +-- + + +-- -------------------------------------------------------- + +-- +-- Table structure for table `fun` +-- + +CREATE TABLE IF NOT EXISTS `fun` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `userid` mediumint(8) unsigned NOT NULL DEFAULT '0', + `added` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `body` text, + `title` varchar(255) NOT NULL DEFAULT '', + `status` enum('normal','dull','notfunny','funny','veryfunny','banned') NOT NULL DEFAULT 'normal', + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; + +-- +-- Dumping data for table `fun` +-- + + +-- -------------------------------------------------------- + +-- +-- Table structure for table `funds` +-- + +CREATE TABLE IF NOT EXISTS `funds` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `usd` decimal(8,2) NOT NULL DEFAULT '0.00', + `cny` decimal(8,2) NOT NULL DEFAULT '0.00', + `user` mediumint(8) unsigned NOT NULL, + `added` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `memo` varchar(255) NOT NULL DEFAULT '', + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; + +-- +-- Dumping data for table `funds` +-- + + +-- -------------------------------------------------------- + +-- +-- Table structure for table `funvotes` +-- + +CREATE TABLE IF NOT EXISTS `funvotes` ( + `funid` mediumint(8) unsigned NOT NULL, + `userid` mediumint(8) unsigned NOT NULL, + `added` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `vote` enum('fun','dull') NOT NULL DEFAULT 'fun', + PRIMARY KEY (`funid`,`userid`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; + +-- +-- Dumping data for table `funvotes` +-- + + +-- -------------------------------------------------------- + +-- +-- Table structure for table `invites` +-- + +CREATE TABLE IF NOT EXISTS `invites` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `inviter` mediumint(8) unsigned NOT NULL DEFAULT '0', + `invitee` varchar(80) NOT NULL DEFAULT '', + `hash` char(32) NOT NULL, + `time_invited` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + PRIMARY KEY (`id`), + KEY `hash` (`hash`(3)) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; + +-- +-- Dumping data for table `invites` +-- + + +-- -------------------------------------------------------- + +-- +-- Table structure for table `iplog` +-- + +CREATE TABLE IF NOT EXISTS `iplog` ( + `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, + `ip` varchar(64) NOT NULL, + `userid` mediumint(8) unsigned NOT NULL, + `access` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + PRIMARY KEY (`id`), + KEY `userid` (`userid`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; + +-- +-- Dumping data for table `iplog` +-- + + +-- -------------------------------------------------------- + +-- +-- Table structure for table `isp` +-- + +CREATE TABLE IF NOT EXISTS `isp` ( + `id` tinyint(3) unsigned NOT NULL AUTO_INCREMENT, + `name` varchar(50) DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=21 ; + +-- +-- Dumping data for table `isp` +-- + +INSERT INTO `isp` (`id`, `name`) VALUES +(1, '中国电信'), +(2, '中国网通'), +(3, '中国铁通'), +(4, '中国移动'), +(5, '中国联通'), +(6, '中国教育网'), +(20, 'Other'); + +-- -------------------------------------------------------- + +-- +-- Table structure for table `language` +-- + +CREATE TABLE IF NOT EXISTS `language` ( + `id` smallint(5) unsigned NOT NULL AUTO_INCREMENT, + `lang_name` varchar(50) NOT NULL, + `flagpic` varchar(255) NOT NULL DEFAULT '', + `sub_lang` tinyint(3) unsigned NOT NULL DEFAULT '1', + `rule_lang` tinyint(3) unsigned NOT NULL DEFAULT '0', + `site_lang` tinyint(3) unsigned NOT NULL DEFAULT '0', + `site_lang_folder` varchar(255) NOT NULL DEFAULT '', + `trans_state` enum('up-to-date','outdate','incomplete','need-new','unavailable') NOT NULL DEFAULT 'unavailable', + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=32 ; + +-- +-- Dumping data for table `language` +-- + +INSERT INTO `language` (`id`, `lang_name`, `flagpic`, `sub_lang`, `rule_lang`, `site_lang`, `site_lang_folder`, `trans_state`) VALUES +(1, 'Bulgarian', 'bulgaria.gif', 1, 0, 0, '', 'unavailable'), +(2, 'Croatian', 'croatia.gif', 1, 0, 0, '', 'unavailable'), +(3, 'Czech', 'czechrep.gif', 1, 0, 0, '', 'unavailable'), +(4, 'Danish', 'denmark.gif', 1, 0, 0, '', 'unavailable'), +(5, 'Dutch', 'netherlands.gif', 1, 0, 0, '', 'unavailable'), +(6, 'English', 'uk.gif', 1, 1, 1, 'en', 'up-to-date'), +(7, 'Estonian', 'estonia.gif', 1, 0, 0, '', 'unavailable'), +(8, 'Finnish', 'finland.gif', 1, 0, 0, '', 'unavailable'), +(9, 'French', 'france.gif', 1, 0, 0, '', 'unavailable'), +(10, 'German', 'germany.gif', 1, 0, 0, '', 'unavailable'), +(11, 'Greek', 'greece.gif', 1, 0, 0, '', 'unavailable'), +(12, 'Hebrew', 'israel.gif', 1, 0, 0, '', 'unavailable'), +(13, 'Hungarian', 'hungary.gif', 1, 0, 0, '', 'unavailable'), +(14, 'Italian', 'italy.gif', 1, 0, 0, '', 'unavailable'), +(15, '日本語', 'japan.gif', 1, 0, 0, '', 'unavailable'), +(16, '한국어', 'southkorea.gif', 1, 0, 0, 'ko', 'unavailable'), +(17, 'Norwegian', 'norway.gif', 1, 0, 0, '', 'unavailable'), +(18, 'Other', 'jollyroger.gif', 1, 0, 0, '', 'unavailable'), +(19, 'Polish', 'poland.gif', 1, 0, 0, '', 'unavailable'), +(20, 'Portuguese', 'portugal.gif', 1, 0, 0, '', 'unavailable'), +(21, 'Romanian', 'romania.gif', 1, 0, 0, '', 'unavailable'), +(22, 'Russian', 'russia.gif', 1, 0, 0, '', 'unavailable'), +(23, 'Serbian', 'serbia.gif', 1, 0, 0, '', 'unavailable'), +(24, 'Slovak', 'slovakia.gif', 1, 0, 0, '', 'unavailable'), +(25, '简体中文', 'china.gif', 1, 1, 1, 'chs', 'up-to-date'), +(26, 'Spanish', 'spain.gif', 1, 0, 0, '', 'unavailable'), +(27, 'Swedish', 'sweden.gif', 1, 0, 0, '', 'unavailable'), +(28, '繁體中文', 'hongkong.gif', 1, 1, 1, 'cht', 'up-to-date'), +(29, 'Turkish', 'turkey.gif', 1, 0, 0, '', 'unavailable'), +(30, 'Slovenian', 'slovenia.gif', 1, 0, 0, '', 'unavailable'), +(31, 'Thai', 'thailand.gif', 1, 0, 0, 'th', 'unavailable'); + +-- -------------------------------------------------------- + +-- +-- Table structure for table `links` +-- + +CREATE TABLE IF NOT EXISTS `links` ( + `id` tinyint(3) unsigned NOT NULL AUTO_INCREMENT, + `name` varchar(30) NOT NULL, + `url` varchar(255) NOT NULL, + `title` varchar(50) NOT NULL DEFAULT '', + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; + +-- +-- Dumping data for table `links` +-- + + +-- -------------------------------------------------------- + +-- +-- Table structure for table `locations` +-- + +CREATE TABLE IF NOT EXISTS `locations` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `name` varchar(50) DEFAULT NULL, + `location_main` varchar(200) NOT NULL, + `location_sub` varchar(200) NOT NULL, + `flagpic` varchar(50) DEFAULT NULL, + `start_ip` varchar(20) NOT NULL, + `end_ip` varchar(20) NOT NULL, + `theory_upspeed` int(10) unsigned NOT NULL DEFAULT '10', + `practical_upspeed` int(10) unsigned NOT NULL DEFAULT '10', + `theory_downspeed` int(10) unsigned NOT NULL DEFAULT '10', + `practical_downspeed` int(10) unsigned NOT NULL DEFAULT '10', + `hit` int(10) unsigned NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; + +-- +-- Dumping data for table `locations` +-- + + +-- -------------------------------------------------------- + +-- +-- Table structure for table `loginattempts` +-- + +CREATE TABLE IF NOT EXISTS `loginattempts` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `ip` varchar(64) NOT NULL DEFAULT '', + `added` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `banned` enum('yes','no') NOT NULL DEFAULT 'no', + `attempts` smallint(5) unsigned NOT NULL DEFAULT '0', + `type` enum('login','recover') NOT NULL DEFAULT 'login', + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; + +-- +-- Dumping data for table `loginattempts` +-- + + +-- -------------------------------------------------------- + +-- +-- Table structure for table `media` +-- + +CREATE TABLE IF NOT EXISTS `media` ( + `id` tinyint(3) unsigned NOT NULL AUTO_INCREMENT, + `name` varchar(30) NOT NULL, + `sort_index` tinyint(3) unsigned NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=10 ; + +-- +-- Dumping data for table `media` +-- + +INSERT INTO `media` (`id`, `name`, `sort_index`) VALUES +(1, 'Blu-ray', 0), +(2, 'HD DVD', 1), +(4, 'MiniBD', 4), +(5, 'HDTV', 5), +(6, 'DVDR', 6), +(7, 'Encode', 3), +(3, 'Remux', 2), +(8, 'CD', 7), +(9, 'Track', 9); + +-- -------------------------------------------------------- + +-- +-- Table structure for table `messages` +-- + +CREATE TABLE IF NOT EXISTS `messages` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `sender` mediumint(8) unsigned NOT NULL DEFAULT '0', + `receiver` mediumint(8) unsigned NOT NULL DEFAULT '0', + `added` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `subject` varchar(128) NOT NULL DEFAULT '', + `msg` text, + `unread` enum('yes','no') NOT NULL DEFAULT 'yes', + `location` smallint(6) NOT NULL DEFAULT '1', + `saved` enum('no','yes') NOT NULL DEFAULT 'no', + PRIMARY KEY (`id`), + KEY `receiver` (`receiver`), + KEY `sender` (`sender`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; + +-- +-- Dumping data for table `messages` +-- + + +-- -------------------------------------------------------- + +-- +-- Table structure for table `modpanel` +-- + +CREATE TABLE IF NOT EXISTS `modpanel` ( + `id` tinyint(3) unsigned NOT NULL AUTO_INCREMENT, + `name` varchar(128) NOT NULL DEFAULT '', + `url` varchar(255) NOT NULL DEFAULT '', + `info` varchar(255) NOT NULL DEFAULT '', + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1020 ; + +-- +-- Dumping data for table `modpanel` +-- + +INSERT INTO `modpanel` (`id`, `name`, `url`, `info`) VALUES +(1, 'Abnormal Upload Speed Detector', 'cheaters.php', 'See cheaters'), +(2, 'Duplicate IP Check', 'ipcheck.php', 'Check for Duplicate IP Users'), +(3, 'All Clients (currently)', 'allagents.php', 'Show All Clients (currently downloading/uploading/seeding)'), +(4, 'Ad management', 'admanage.php', 'Manage ads at your site'), +(5, 'Uploaders', 'uploaders.php', 'See uploaders stats'), +(6, 'Stats', 'stats.php', 'Tracker Stats'), +(7, 'IP Test', 'testip.php', 'Test if IP is banned'), +(8, 'Add Bonus Points', 'amountbonus.php', 'Add Bonus Points to one or All Users.'), +(9, 'Clear cache', 'clearcache.php', 'Clear cache of memcached'); + +-- -------------------------------------------------------- + +-- +-- Table structure for table `news` +-- + +CREATE TABLE IF NOT EXISTS `news` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `userid` mediumint(8) unsigned NOT NULL DEFAULT '0', + `added` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `body` text, + `title` varchar(255) NOT NULL DEFAULT '', + `notify` enum('yes','no') NOT NULL DEFAULT 'no', + PRIMARY KEY (`id`), + KEY `added` (`added`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; + +-- +-- Dumping data for table `news` +-- + + +-- -------------------------------------------------------- + +-- +-- Table structure for table `offers` +-- + +CREATE TABLE IF NOT EXISTS `offers` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `userid` mediumint(8) unsigned NOT NULL DEFAULT '0', + `name` varchar(225) NOT NULL, + `descr` text, + `added` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `allowedtime` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `yeah` smallint(5) unsigned NOT NULL DEFAULT '0', + `against` smallint(5) unsigned NOT NULL DEFAULT '0', + `category` smallint(5) unsigned NOT NULL DEFAULT '0', + `comments` mediumint(8) unsigned NOT NULL DEFAULT '0', + `allowed` enum('allowed','pending','denied') NOT NULL DEFAULT 'pending', + PRIMARY KEY (`id`), + KEY `userid` (`userid`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; + +-- +-- Dumping data for table `offers` +-- + + +-- -------------------------------------------------------- + +-- +-- Table structure for table `offervotes` +-- + +CREATE TABLE IF NOT EXISTS `offervotes` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `offerid` mediumint(8) unsigned NOT NULL DEFAULT '0', + `userid` mediumint(8) unsigned NOT NULL DEFAULT '0', + `vote` enum('yeah','against') NOT NULL DEFAULT 'yeah', + PRIMARY KEY (`id`), + KEY `userid` (`userid`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; + +-- +-- Dumping data for table `offervotes` +-- + + +-- -------------------------------------------------------- + +-- +-- Table structure for table `overforums` +-- + +CREATE TABLE IF NOT EXISTS `overforums` ( + `id` smallint(5) unsigned NOT NULL AUTO_INCREMENT, + `name` varchar(60) NOT NULL, + `description` varchar(255) NOT NULL DEFAULT '', + `minclassview` tinyint(3) unsigned NOT NULL DEFAULT '0', + `sort` tinyint(3) unsigned NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; + +-- +-- Dumping data for table `overforums` +-- + + +-- -------------------------------------------------------- + +-- +-- Table structure for table `peers` +-- + +CREATE TABLE IF NOT EXISTS `peers` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `torrent` mediumint(8) unsigned NOT NULL DEFAULT '0', + `peer_id` binary(20) NOT NULL, + `ip` varchar(64) NOT NULL DEFAULT '', + `port` smallint(5) unsigned NOT NULL DEFAULT '0', + `uploaded` bigint(20) unsigned NOT NULL DEFAULT '0', + `downloaded` bigint(20) unsigned NOT NULL DEFAULT '0', + `to_go` bigint(20) unsigned NOT NULL DEFAULT '0', + `seeder` enum('yes','no') NOT NULL DEFAULT 'no', + `started` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `last_action` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `prev_action` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `connectable` enum('yes','no') NOT NULL DEFAULT 'yes', + `userid` mediumint(8) unsigned NOT NULL DEFAULT '0', + `agent` varchar(60) NOT NULL DEFAULT '', + `finishedat` int(10) unsigned NOT NULL DEFAULT '0', + `downloadoffset` bigint(20) unsigned NOT NULL DEFAULT '0', + `uploadoffset` bigint(20) unsigned NOT NULL DEFAULT '0', + `passkey` char(32) NOT NULL DEFAULT '', + PRIMARY KEY (`id`), + KEY `userid` (`userid`), + KEY `torrent` (`torrent`) +) ENGINE=MEMORY DEFAULT CHARSET=utf8 ROW_FORMAT=FIXED AUTO_INCREMENT=1 ; + +-- +-- Dumping data for table `peers` +-- + + +-- -------------------------------------------------------- + +-- +-- Table structure for table `pmboxes` +-- + +CREATE TABLE IF NOT EXISTS `pmboxes` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `userid` mediumint(8) unsigned NOT NULL, + `boxnumber` tinyint(3) unsigned NOT NULL DEFAULT '2', + `name` varchar(15) NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; + +-- +-- Dumping data for table `pmboxes` +-- + + +-- -------------------------------------------------------- + +-- +-- Table structure for table `pollanswers` +-- + +CREATE TABLE IF NOT EXISTS `pollanswers` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `pollid` mediumint(8) unsigned NOT NULL, + `userid` mediumint(8) unsigned NOT NULL, + `selection` tinyint(3) unsigned NOT NULL, + PRIMARY KEY (`id`), + KEY `pollid` (`pollid`), + KEY `selection` (`selection`), + KEY `userid` (`userid`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; + +-- +-- Dumping data for table `pollanswers` +-- + + +-- -------------------------------------------------------- + +-- +-- Table structure for table `polls` +-- + +CREATE TABLE IF NOT EXISTS `polls` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `added` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `question` varchar(255) NOT NULL DEFAULT '', + `option0` varchar(40) NOT NULL DEFAULT '', + `option1` varchar(40) NOT NULL DEFAULT '', + `option2` varchar(40) NOT NULL DEFAULT '', + `option3` varchar(40) NOT NULL DEFAULT '', + `option4` varchar(40) NOT NULL DEFAULT '', + `option5` varchar(40) NOT NULL DEFAULT '', + `option6` varchar(40) NOT NULL DEFAULT '', + `option7` varchar(40) NOT NULL DEFAULT '', + `option8` varchar(40) NOT NULL DEFAULT '', + `option9` varchar(40) NOT NULL DEFAULT '', + `option10` varchar(40) NOT NULL DEFAULT '', + `option11` varchar(40) NOT NULL DEFAULT '', + `option12` varchar(40) NOT NULL DEFAULT '', + `option13` varchar(40) NOT NULL DEFAULT '', + `option14` varchar(40) NOT NULL DEFAULT '', + `option15` varchar(40) NOT NULL DEFAULT '', + `option16` varchar(40) NOT NULL DEFAULT '', + `option17` varchar(40) NOT NULL DEFAULT '', + `option18` varchar(40) NOT NULL DEFAULT '', + `option19` varchar(40) NOT NULL DEFAULT '', + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; + +-- +-- Dumping data for table `polls` +-- + + +-- -------------------------------------------------------- + +-- +-- Table structure for table `posts` +-- + +CREATE TABLE IF NOT EXISTS `posts` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `topicid` mediumint(8) unsigned NOT NULL DEFAULT '0', + `userid` mediumint(8) unsigned NOT NULL DEFAULT '0', + `added` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `body` text, + `ori_body` text, + `editedby` mediumint(8) unsigned NOT NULL DEFAULT '0', + `editdate` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + PRIMARY KEY (`id`), + KEY `userid` (`userid`), + KEY `topicid_id` (`topicid`,`id`), + KEY `added` (`added`), + FULLTEXT KEY `body` (`body`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; + +-- +-- Dumping data for table `posts` +-- + + +-- -------------------------------------------------------- + +-- +-- Table structure for table `processings` +-- + +CREATE TABLE IF NOT EXISTS `processings` ( + `id` tinyint(3) unsigned NOT NULL AUTO_INCREMENT, + `name` varchar(30) NOT NULL, + `sort_index` tinyint(3) unsigned NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=3 ; + +-- +-- Dumping data for table `processings` +-- + +INSERT INTO `processings` (`id`, `name`, `sort_index`) VALUES +(1, 'Raw', 0), +(2, 'Encode', 0); + +-- -------------------------------------------------------- + +-- +-- Table structure for table `prolinkclicks` +-- + +CREATE TABLE IF NOT EXISTS `prolinkclicks` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `userid` mediumint(8) unsigned NOT NULL DEFAULT '0', + `ip` varchar(64) NOT NULL DEFAULT '', + `added` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; + +-- +-- Dumping data for table `prolinkclicks` +-- + + +-- -------------------------------------------------------- + +-- +-- Table structure for table `readposts` +-- + +CREATE TABLE IF NOT EXISTS `readposts` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `userid` mediumint(8) unsigned NOT NULL DEFAULT '0', + `topicid` mediumint(8) unsigned NOT NULL DEFAULT '0', + `lastpostread` int(10) unsigned NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `topicid` (`topicid`), + KEY `userid` (`userid`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; + +-- +-- Dumping data for table `readposts` +-- + + +-- -------------------------------------------------------- + +-- +-- Table structure for table `regimages` +-- + +CREATE TABLE IF NOT EXISTS `regimages` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `imagehash` varchar(32) NOT NULL DEFAULT '', + `imagestring` varchar(8) NOT NULL DEFAULT '', + `dateline` int(10) unsigned NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; + +-- +-- Dumping data for table `regimages` +-- + + +-- -------------------------------------------------------- + +-- +-- Table structure for table `reports` +-- + +CREATE TABLE IF NOT EXISTS `reports` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `addedby` mediumint(8) unsigned NOT NULL DEFAULT '0', + `added` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `reportid` int(10) unsigned NOT NULL DEFAULT '0', + `type` enum('torrent','user','offer','request','post','comment','subtitle') NOT NULL DEFAULT 'torrent', + `reason` varchar(255) NOT NULL DEFAULT '', + `dealtby` mediumint(8) unsigned NOT NULL DEFAULT '0', + `dealtwith` tinyint(1) NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; + +-- +-- Dumping data for table `reports` +-- + + +-- -------------------------------------------------------- + +-- +-- Table structure for table `rules` +-- + +CREATE TABLE IF NOT EXISTS `rules` ( + `id` smallint(5) unsigned NOT NULL AUTO_INCREMENT, + `lang_id` smallint(5) unsigned NOT NULL DEFAULT '6', + `title` varchar(255) NOT NULL, + `text` text, + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=56 ; + +-- +-- Dumping data for table `rules` +-- + +INSERT INTO `rules` (`id`, `lang_id`, `title`, `text`) VALUES +(1, 25, '总则 - 不遵守这些将导致帐号被封!', '[*]请不要做管理员明文禁止的事情。\r\n[*]不允许发送垃圾信息。\r\n[*]账号保留规则:\r\n 1.[b]Veteran User[/b]及以上等级用户会永远保留;\r\n 2.[b]Elite User[/b]及以上等级用户封存账号(在[url=usercp.php?action=personal]控制面板[/url])后不会被删除帐号;\r\n 3.封存账号的用户连续400天不登录将被删除帐号;\r\n 4.未封存账号的用户连续150天不登录将被删除帐号;\r\n 5.没有流量的用户(即上传/下载数据都为0)连续100天不登录将被删除帐号。\r\n[*]一切作弊的帐号会被封,请勿心存侥幸。\r\n[*]注册多个[site]账号的用户将被禁止。\r\n[*]不要把本站的种子文件上传到其他Tracker!(具体请看[url=faq.php#38][b]常见问题[/b][/url])\r\n[*]第一次在论坛或服务器中的捣乱行为会受到警告,第二次您将永远无缘[site] 。'), +(2, 25, '下载规则 - 违规将会失去下载权限!', '[*]过低的分享率会导致严重的后果,包括禁止帐号。详见[url=faq.php#22]常见问题[/url]。\r\n[*]种子促销规则:\r\n [*]随机促销(种子上传后系统自动随机设为促销):\r\n [*]10%的概率成为“[color=#7c7ff6][b]50%下载[/b][/color]”;\r\n [*]5%的概率成为“[color=#f0cc00][b]免费[/b][/color]”;\r\n [*]5%的概率成为“[color=#aaaaaa][b]2x上传[/b][/color]”;\r\n [*]3%的概率成为“[color=#7ad6ea][b]50%下载&2x上传[/b][/color]”;\r\n [*]1%的概率成为“[color=#99cc66][b]免费&2x上传[/b][/color]”。\r\n [*]文件总体积大于20GB的种子将自动成为“[color=#f0cc00][b]免费[/b][/color]”。\r\n [*]Blu-ray Disk, HD DVD原盘将成为“[color=#f0cc00][b]免费[/b][/color]”。\r\n [*]电视剧等每季的第一集将成为“[color=#f0cc00][b]免费[/b][/color]”。\r\n [*]关注度高的种子将被设置为促销(由管理员定夺)。\r\n [*]促销时限:\r\n [*]除了“[color=#aaaaaa][b]2x上传[/b][/color]”以外,其余类型的促销限时7天(自种子发布时起);\r\n [*]“[color=#aaaaaa][b]2x上传[/b][/color]”无时限。\r\n [*]所有种子在发布1个月后将自动永久成为“[color=#aaaaaa][b]2x上传[/b][/color]”。 \r\n [*]我们也将不定期开启全站[color=#f0cc00][b]免费[/b][/color],届时尽情狂欢吧~:mml: :mml: :mml:\r\n[*]你只能使用允许的BT客户端下载本站资源。详见[url=faq.php#29]常见问题[/url]。'), +(4, 25, '论坛总则 - 请遵循以下的守则,违规会受到警告!', '[*]禁止攻击、挑动他人的言辞。\r\n[*]禁止恶意灌水或发布垃圾信息。请勿在论坛非Water Jar版块发布无意义主题或回复(如纯表情)等。\r\n[*]不要为了获取魔力值而大肆灌水。\r\n[*]禁止在标题或正文使用脏话。\r\n[*]不要讨论禁忌、政治敏感或当地法律禁止的话题。\r\n[*]禁止任何基于种族、国家、民族、肤色、宗教、性别、年龄、性取向、身体或精神障碍的歧视性言辞。违规将导致账号永久性禁用。\r\n[*]禁止挖坟(所有挖坟帖都要被删掉)。\r\n[*]禁止重复发帖。\r\n[*]请确保问题发布在相对应的板块。\r\n[*]365天无新回复的主题将被系统自动锁定.\r\n'), +(6, 25, '头像使用规定 - 请尽量遵守以下规则', '[*]允许的格式为.gif, .jpg, 和.png。\r\n[*]图片大小不能超过150KB,为了统一,系统会调整头像宽度到150像素大小(浏览器会把图片调整成合适的大小,小图片将被拉伸,而过大的图片只会浪费带宽和CPU) 。\r\n[*]请不要使用可能引起别人反感的图片,包括色情、宗教、血腥的动物/人类、宣扬某种意识形态的图片。如果你不确定某张图片是否合适,请站短管理员。'), +(3, 25, '上传规则 - 谨记: 违规的种子将不经提醒而直接删除 ', '请遵守规则。如果你对规则有任何不清楚或不理解的地方,请[url=contactstaff.php]咨询管理组[/url]。[b]管理组保留裁决的权力。[/b]\r\n\r\n[b]上传总则[/b]\r\n [*]上传者必须对上传的文件拥有合法的传播权。\r\n [*]上传者必须保证上传速度与做种时间。如果在其他人完成前撤种或做种时间不足24小时,或者故意低速上传,上传者将会被警告甚至取消上传权限。\r\n [*]对于自己发布的种子,发布者将获得双倍的上传量。\r\n [*]如果你有一些违规但却有价值的资源,请将详细情况[url=contactstaff.php]告知管理组[/url],我们可能破例允许其发布。\r\n\r\n[b]上传者资格[/b]\r\n [*]任何人都能发布资源。\r\n [*]不过,有些用户需要先在[url=offers.php]候选区[/url]提交候选。详见常见问题中的[url=faq.php#22]相关说明[/url]。\r\n [*]对于游戏类资源,只有[color=#DC143C][b]上传员[/b][/color]及以上等级的用户,或者是管理组特别指定的用户,才能自由上传。其他用户必须先在[url=offers.php]候选区[/url]提交候选。\r\n\r\n[b]允许的资源和文件:[/b]\r\n [*]高清(HD)视频,包括\r\n [*]完整高清媒介,如蓝光(Blu-ray)原碟、HD DVD原碟等,或remux,\r\n [*]HDTV流媒体,\r\n [*]来源于上述媒介的高清重编码(至少为720p标准),\r\n [*]其他高清视频,如高清DV;\r\n [*]标清(SD)视频,只能是\r\n [*]来源于高清媒介的标清重编码(至少为480p标准);\r\n [*]DVDR/DVDISO,\r\n [*]DVDRip、CNDVDRip;\r\n [*]无损音轨(及相应cue表单),如FLAC、Monkey''s Audio等;\r\n [*]5.1声道或以上标准的电影音轨、音乐音轨(DTS、DTSCD镜像等),评论音轨;\r\n [*]PC游戏(必须为原版光盘镜像);\r\n [*]7日内发布的高清预告片;\r\n [*]与高清相关的软件和文档。\r\n\r\n[b]不允许的资源和文件:[/b]\r\n [*]总体积小于100MB的资源;\r\n [*]标清视频upscale或部分upscale而成的视频文件;\r\n [*]属于标清级别但质量较差的视频文件,包括CAM、TC、TS、SCR、DVDSCR、R5、R5.Line、HalfCD等;\r\n [*]RealVideo编码的视频(通常封装于RMVB或RM)、flv文件;\r\n [*]单独的样片(样片请和正片一起上传);\r\n [*]未达到5.1声道标准的有损音频文件,如常见的有损MP3、有损WMA等;\r\n [*]无正确cue表单的多轨音频文件;\r\n [*]硬盘版、高压版的游戏资源,非官方制作的游戏镜像,第三方mod,小游戏合集,单独的游戏破解或补丁;\r\n [*]RAR等压缩文件;\r\n [*]重复(dupe)的资源(判定规则见下文);\r\n [*]涉及禁忌或敏感内容(如色情、敏感政治话题等)的资源;\r\n [*]损坏的文件,指在读取或回放过程中出现错误的文件;\r\n [*]垃圾文件,如病毒、木马、网站链接、广告文档、种子中包含的种子文件等,或无关文件。\r\n\r\n[b]重复(dupe)判定规则:质量重于数量[/b]\r\n [*]视频资源按来源媒介确定优先级,主要为:Blu-ray/HD DVD > HDTV > DVD > TV。同一视频高优先级版本将使低优先级版本被判定为重复。\r\n [*]同一视频的高清版本将使标清版本被判定为重复。\r\n [*]对于动漫类视频资源,HDTV版本和DVD版本有相同的优先级,这是一个特例。\r\n [*]来源于相同媒介,相同分辨率水平的高清视频重编码\r\n [*]参考“[url=forums.php?action=viewtopic&forumid=6&topicid=1520]Scene & Internal, from Group to Quality-Degree. ONLY FOR HD-resources[/url]”按发布组确定优先级;\r\n [*]高优先级发布组发布的版本将使低优先级或相同优先级发布组发布的其他版本被判定为重复;\r\n [*]但是,总会保留一个当前最佳画质的来源经重编码而成的DVD5大小(即4.38 GB左右)的版本;\r\n [*]基于无损截图对比,高质量版本将使低质量版本被视为重复。\r\n [*]来自其他区域,包含不同配音和/或字幕的blu-ray/HD DVD原盘版本不被视为重复版本。\r\n [*]每个无损音轨资源原则上只保留一个版本,其余不同格式的版本将被视为重复。分轨FLAC格式有最高的优先级。\r\n [*]对于站内已有的资源,\r\n [*]如果新版本没有旧版本中已确认的错误/画质问题,或新版本的来源有更好的质量,新版本允许发布且旧版本将被视为重复;\r\n [*]如果旧版本已经连续断种45日以上或已经发布18个月以上,发布新版本将不受重复判定规则约束。\r\n [*]新版本发布后,旧的、重复的版本将被保留,直至断种。\r\n\r\n[b]资源打包规则(试行)[/b]\r\n 原则上只允许以下资源打包:\r\n [*]按套装售卖的高清电影合集(如[i]The Ultimate Matrix Collection Blu-ray Box[/i]);\r\n [*]整季的电视剧/综艺节目/动漫;\r\n [*]同一专题的纪录片;\r\n [*]7日内的高清预告片;\r\n [*]同一艺术家的MV\r\n [*]标清MV只允许按DVD打包,且不允许单曲MV单独发布;\r\n [*]分辨率相同的高清MV;\r\n [*]同一艺术家的音乐\r\n [*]5张或5张以上专辑方可打包发布;\r\n [*]两年内发售的专辑可以单独发布;\r\n [*]打包时应剔除站内已有的资源,或者将它们都包括进来;\r\n [*]分卷发售的动漫剧集、角色歌、广播剧等;\r\n [*]发布组打包发布的资源。\r\n 打包发布的视频资源必须来源于相同类型的媒介(如蓝光原碟),有相同的分辨率水平(如720p),编码格式一致(如x264),但预告片例外。对于电影合集,发布组也必须统一。打包发布的音频资源必须编码格式一致(如全部为分轨FLAC)。打包发布后,将视情况删除相应单独的种子。\r\n 如果你对资源打包有任何不明确的地方,请[url=contactstaff.php]咨询管理组[/url]。管理组保留资源打包相关问题的解释权和处理权。\r\n\r\n[b]例外[/b]\r\n [*]允许发布来源于TV或是DSR的体育类的标清视频。\r\n [*]允许发布小于100MB的高清相关软件和文档。\r\n [*]允许发布小于100MB的单曲专辑。\r\n [*]允许发布2.0声道或以上标准的国语/粤语音轨。\r\n [*]允许在发布的资源中附带字幕、游戏破解与补丁、字体、包装等的扫描图。上述几种文件必须统一打包或统一不打包。\r\n [*]允许在发布音轨时附带附赠DVD的相关文件。\r\n\r\n[b]种子信息[/b]\r\n 所有种子都应该有描述性的标题,必要的介绍以及其他信息。以下是一份简明的规范,完整的、详尽的规范请参阅“[url=forums.php?action=viewtopic&topicid=3438&page=0#56711]种子信息填写规范与指导[/url]”。\r\n [*]标题\r\n [*]电影:[i][中文名] 名称 [年份] [剪辑版本] [发布说明] 分辨率 来源 [音频/]视频编码-发布组名称[/i]\r\n 例:[i]蝙蝠侠:黑暗骑士 The Dark Knight 2008 PROPER 720p BluRay x264-SiNNERS[/i]\r\n [*]电视剧:[i][中文名] 名称 [年份] S**E** [发布说明] 分辨率 来源 [音频/]视频编码-发布组名称[/i]\r\n 例:[i]越狱 Prison Break S04E01 PROPER 720p HDTV x264-CTU[/i]\r\n [*]音轨:[i][中文艺术家名 - 中文专辑名] 艺术家名 - 专辑名 [年份] [版本] [发布说明] 音频编码[-发布组名称][/i]\r\n 例:[i]恩雅 - 冬季降临 Enya - And Winter Came 2008 FLAC[/i]\r\n [*]游戏:[i][中文名] 名称 [年份] [版本] [发布说明][-发布组名称][/i]\r\n 例:[i]红色警戒3:起义时刻 Command And Conquer Red Alert 3 Uprising-RELOADED[/i]\r\n [*]副标题\r\n [*]不要包含广告或求种/续种请求。\r\n [*]外部信息\r\n [*]电影和电视剧必须包含外部信息链接(如IMDb连接)地址(如果存在的话)。\r\n [*]简介\r\n [*]NFO图请写入NFO文件,而不是粘贴到简介里。\r\n [*]电影、电视剧、动漫:\r\n [*]必须包含海报、横幅或BD/HDDVD/DVD封面(如果存在的话); \r\n [*]请尽可能包含画面截图或其缩略图和链接;\r\n [*]请尽可能包含文件的详细情况,包括格式、时长、编码、码率、分辨率、语言、字幕等;\r\n [*]请尽可能包含演职员名单以及剧情概要。\r\n [*]体育节目:\r\n [*]请勿在文字介绍或截图/文件名/文件大小/时长中泄漏比赛结果。\r\n [*]音乐:\r\n [*]必须包含专辑封面和曲目列表(如果存在的话);\r\n [*]PC游戏:\r\n [*]必须包含海报或BD/HDDVD/DVD封面(如果存在的话);\r\n [*]请尽可能包含画面截图或其缩略图和链接。\r\n [*]杂项\r\n [*]请正确选择资源的类型和质量信息。\r\n [*]注意事项\r\n [*]管理员会根据规范对种子信息进行编辑。\r\n [*]请勿改变或去除管理员对种子信息作出的修改(但上传者可以修正一些错误)。\r\n [*]种子信息不符合规范的种子可能会被删除,视种子信息的规范程度而定。\r\n [*]如果资源的原始发布信息基本符合规范,请尽量使用原始发布信息。\r\n'), +(8, 25, '管理守则 - 请慎用你的权限!', '[*]最重要的一条:慎用你手中的权限!\r\n[*]对于违规行为不要怕说“不”!\r\n[*]不要公开和其他管理员冲突,一切通过私下沟通解决。\r\n[*]不要太绝情,给违规者一个改过的机会。\r\n[*]不要试图“打预防针”,等到人们犯错了再去纠正。\r\n[*]尝试去改正一个不适当的帖而不是简单的关闭它。\r\n[*]多尝试移动帖子到适合的版面而不是简单地锁帖。\r\n[*]当处理版聊帖的时候要宽容适度。\r\n[*]锁帖的时候请给予简单的操作理由。\r\n[*]在屏蔽某个用户前请先站短通知他/她, 如果有所积极回应可以考虑再给2周观察期。\r\n[*]不要禁用一个注册尚未满4周的帐户。\r\n[*]永远记得以理服人。'), +(12, 28, '下載規則 - 違規將會失去下載權限! ', '[*]過低的分享率會導致嚴重的后果,包括禁止帳號。詳見[url=faq.php#22]常見問題[/url]。\r\n[*]種子促銷規則:\r\n [*]隨機促銷(種子上傳後系統自動隨機設為促銷):\r\n [*]10%的概率成為“[color=#7c7ff6][b]50%下載[/b][/color]”;\r\n [*]5%的概率成為“[color=#f0cc00][b]免費[/b][/color]”;\r\n [*]5%的概率成為“[color=#aaaaaa][b]2x上傳[/b][/color]”;\r\n [*]3%的概率成為“[color=#7ad6ea][b]50%下載&2x上傳[/b][/color]”;\r\n [*]1%的概率成為“[color=#99cc66][b]免費&2x上傳[/b][/color]”。\r\n [*]檔總體積大於20GB的種子將自動成為“[color=#f0cc00][b]免費[/b][/color]”。\r\n [*]Blu-ray Disk, HD DVD原盤將成為“[color=#f0cc00][b]免費[/b][/color]”。\r\n [*]電視劇等每季的第一集將成為“[color=#f0cc00][b]免費[/b][/color]”。\r\n [*]關注度高的種子將被設置為促銷(由管理員定奪)。\r\n [*]促銷時限:\r\n [*]除了“[color=#aaaaaa][b]2x上傳[/b][/color]”以外,其餘類型的促銷限時7天(自種子發佈時起);\r\n [*]“[color=#aaaaaa][b]2x上傳[/b][/color]”無時限。\r\n [*]所有種子在發佈1個月後將自動永久成為“[color=#aaaaaa][b]2x上傳[/b][/color]”。 \r\n [*]我們也將不定期開啟全站[color=#f0cc00][b]免費[/b][/color],屆時盡情狂歡吧~:mml: :mml: :mml:\r\n[*]你只能使用允許的BT客戶端下載本站資源。詳見[url=faq.php#29]常見問題[/url]。'), +(14, 28, '論壇總則 - 請遵循以下的守則,違規會受到警告! ', '[*]禁止攻擊、挑動他人的言辭。\r\n[*]禁止惡意灌水或發布垃圾信息。請勿在論壇非Water Jar版塊發布無意義主題或回復(如純表情)等。\r\n[*]不要為了獲取魔力值而大肆灌水。\r\n[*]禁止在標題或正文使用臟話。\r\n[*]不要討論禁忌、政治敏感或當地法律禁止的話題。\r\n[*]禁止任何基于種族、國家、民族、膚色、宗教、性別、年齡、性取向、身體或精神障礙的歧視性言辭。違規將導致賬號永久性禁用。\r\n[*]禁止挖墳(所有挖墳帖都要被刪掉)。\r\n[*]禁止重復發帖。\r\n[*]請確保問題發布在相對應的板塊。\r\n[*]365天無新回復的主題將被系統自動鎖定。'), +(5, 25, '评论总则 - 永远尊重上传者!', '[*]无论如何,请尊重上传者!\r\n[*]所有论坛发帖的规则同样适用于评论。\r\n[*]如果你没有下载的意向,请不要随便发表否定性的评论。'), +(16, 28, '頭像使用規定 - 請盡量遵守以下規則 ', '[*]允許的格式為.gif, .jpg, 和.png。\r\n[*]圖片大小不能超過150KB,為了統一,系統會調整頭像寬度到150像素大小(瀏覽器會把圖片調整成合適的大小,小圖片將被拉伸,而過大的圖片只會浪費帶寬和CPU) 。\r\n[*]請不要使用可能引起別人反感的圖片,包括色情、宗教、血腥的動物/人類、宣揚某種意識形態的圖片。如果你不確定某張圖片是否合適,請站短管理員。\r\n'), +(7, 25, '趣味盒规则 - 在娱乐中赚分', '[*]任何用户都可在趣味盒中投放笑话、趣图、搞笑视频、Flash等有趣的内容,除了色情、禁忌、政治敏感和当地法律禁止的内容。\r\n[*]正常情况下,一条趣味内容在发布24小时后过期。然而,如果获得的投票数超过20且其中“有趣”的比例低于25%,趣味内容将提前过期。\r\n[*]新的趣味内容[b]只有[/b]在旧的内容过期后才能提交。\r\n[*]若趣味内容被多数用户投票认为有趣,其发布者将得到以下奖励:\r\n [*]票数超过25,其中认为“有趣”比例超过50%,发布者得到5个魔力值。\r\n [*]票数超过50,其中认为“有趣”比例超过50%,发布者得到另外的5个魔力值。\r\n [*]票数超过100,其中认为“有趣”比例超过50%,发布者得到另外的5个魔力值。\r\n [*]票数超过200,其中认为“有趣”比例超过50%,发布者得到另外的5个魔力值。\r\n [*]票数超过25,其中认为“有趣”比例超过75%,发布者得到10个魔力值。\r\n [*]票数超过50,其中认为“有趣”比例超过75%,发布者得到另外的10个魔力值。\r\n [*]票数超过100,其中认为“有趣”比例超过75%,发布者得到另外的10个魔力值。\r\n [*]票数超过200,其中认为“有趣”比例超过75%,发布者得到另外的10个魔力值。'), +(11, 28, '總則 - 不遵守這些將導致帳號被封! ', '[*]請不要做管理員明文禁止的事情。\r\n[*]不允許發送垃圾信息。\r\n[*]賬號保留規則:\r\n 1.[b]Veteran User[/b]及以上等級用戶會永遠保留;\r\n 2.[b]Elite User[/b]及以上等級用戶封存賬號(在[url=usercp.php?action=personal]控制面板[/url])后不會被刪除帳號;\r\n 3.封存賬號的用戶連續400天不登錄將被刪除帳號;\r\n 4.未封存賬號的用戶連續150天不登錄將被刪除帳號;\r\n 5.沒有流量的用戶(即上傳/下載數據都為0)連續100天不登錄將被刪除帳號。\r\n[*]一切作弊的帳號會被封,請勿心存僥幸。\r\n[*]注冊多個[site]賬號的用戶將匾被禁止。\r\n[*]不要把本站的種子文件上傳到其他Tracker!(具體請看 [url=faq.php#38][b]常見問題[/b][/url])\r\n[*]第一次在論壇或服務器中的搗亂行為會受到警告,第二次您將永遠無緣[site] 。'), +(13, 28, '上傳規則 - 謹記: 違規的種子將不經提醒而直接刪除 ', '請遵守規則。如果你對規則有任何不清楚或不理解的地方,請[url=contactstaff.php]諮詢管理組[/url]。[b]管理組保留裁決的權力。[/b]\r\n\r\n[b]上傳總則[/b]\r\n [*]上傳者必須對上傳的檔擁有合法的傳播權。\r\n [*]上傳者必須保證上傳速度與做種時間。如果在其他人完成前撤種或做種時間不足24小時,或者故意低速上傳,上傳者將會被警告甚至取消上傳許可權。\r\n [*]對於自己發佈的種子,發佈者將獲得雙倍的上傳量。\r\n [*]如果你有一些違規但卻有價值的資源,請將詳細情況[url=contactstaff.php]告知管理組[/url],我們可能破例允許其發佈。\r\n\r\n[b]上傳者資格[/b]\r\n [*]任何人都能發佈資源。\r\n [*]不過,有些使用者需要先在[url=offers.php]候選區[/url]提交候選。詳見常見問題中的[url=faq.php#22]相關說明[/url]。\r\n [*]對於遊戲類資源,只有[color=#DC143C][b]上傳員[/b][/color]及以上等級的使用者,或者是管理組特別指定的用戶,才能自由上傳。其他用戶必須先在[url=offers.php]候選區[/url]提交候選。\r\n\r\n[b]允許的資源和檔:[/b]\r\n [*]高清(HD)視頻,包括\r\n [*]完整高清媒介,如藍光(Blu-ray)原碟、HD DVD原碟等,或remux,\r\n [*]HDTV流媒體,\r\n [*]來源於上述媒介的高清重編碼(至少為720p標準),\r\n [*]其他高清視頻,如高清DV;\r\n [*]標清(SD)視頻,只能是\r\n [*]來源於高清媒介的標清重編碼(至少為480p標準);\r\n [*]DVDR/DVDISO,\r\n [*]DVDRip、CNDVDRip;\r\n [*]無損音軌(及相應cue表單),如FLAC、Monkey''s Audio等;\r\n [*]5.1聲道或以上標準的電影音軌、音樂音軌(DTS、DTSCD鏡像等),評論音軌;\r\n [*]PC遊戲(必須為原版光碟鏡像);\r\n [*]7日內發佈的高清預告片;\r\n [*]與高清相關的軟體和文檔。\r\n\r\n[b]不允許的資源和檔:[/b]\r\n [*]總體積小於100MB的資源;\r\n [*]標清視頻upscale或部分upscale而成的視頻檔;\r\n [*]屬於標清級別但品質較差的視頻檔,包括CAM、TC、TS、SCR、DVDSCR、R5、R5.Line、HalfCD等;\r\n [*]RealVideo編碼的視頻(通常封裝於RMVB或RM)、flv檔;\r\n [*]單獨的樣片(樣片請和正片一起上傳);\r\n [*]未達到5.1聲道標準的有損音訊檔,如常見的有損MP3、有損WMA等;\r\n [*]無正確cue表單的多軌音訊檔;\r\n [*]硬碟版、高壓版的遊戲資源,非官方製作的遊戲鏡像,協力廠商mod,小遊戲合集,單獨的遊戲破解或補丁;\r\n [*]RAR等壓縮檔;\r\n [*]重複(dupe)的資源(判定規則見下文);\r\n [*]涉及禁忌或敏感內容(如色情、敏感政治話題等)的資源;\r\n [*]損壞的檔,指在讀取或重播過程中出現錯誤的檔;\r\n [*]垃圾檔,如病毒、木馬、網站連結、廣告文檔、種子中包含的種子檔等,或無關檔。\r\n\r\n[b]重複(dupe)判定規則:品質重於數量[/b]\r\n [*]視頻資源按來源媒介確定優先順序,主要為:Blu-ray/HD DVD > HDTV > DVD > TV。同一視頻高優先順序版本將使低優先順序版本被判定為重複。\r\n [*]同一視頻的高清版本將使標清版本被判定為重複。\r\n [*]對於動漫類視頻資源,HDTV版本和DVD版本有相同的優先順序,這是一個特例。\r\n [*]來源於相同媒介,相同解析度水準的高清視頻重編碼\r\n [*]參考“[url=forums.php?action=viewtopic&forumid=6&topicid=1520]Scene & Internal, from Group to Quality-Degree. ONLY FOR HD-resources[/url]”按發佈組確定優先順序;\r\n [*]高優先順序發佈組發佈的版本將使低優先順序或相同優先順序發佈組發佈的其他版本被判定為重複;\r\n [*]但是,總會保留一個當前最佳畫質的來源經重編碼而成的DVD5大小(即4.38 GB左右)的版本;\r\n [*]基於無損截圖對比,高品質版本將使低品質版本被視為重複。\r\n [*]來自其他區域,包含不同配音和/或字幕的blu-ray/HD DVD原盤版本不被視為重複版本。\r\n [*]每個無損音軌資源原則上只保留一個版本,其餘不同格式的版本將被視為重複。分軌FLAC格式有最高的優先順序。\r\n [*]對於站內已有的資源,\r\n [*]如果新版本沒有舊版本中已確認的錯誤/畫質問題,或新版本的來源有更好的品質,新版本允許發佈且舊版本將被視為重複;\r\n [*]如果舊版本已經連續斷種45日以上或已經發佈18個月以上,發佈新版本將不受重複判定規則約束。\r\n [*]新版本發佈後,舊的、重複的版本將被保留,直至斷種。\r\n\r\n[b]資源打包規則(試行)[/b]\r\n 原則上只允許以下資源打包:\r\n [*]按套裝售賣的高清電影合集(如[i]The Ultimate Matrix Collection Blu-ray Box[/i]);\r\n [*]整季的電視劇/綜藝節目/動漫;\r\n [*]同一專題的紀錄片;\r\n [*]7日內的高清預告片;\r\n [*]同一藝術家的MV\r\n [*]標清MV只允許按DVD打包,且不允許單曲MV單獨發佈;\r\n [*]解析度相同的高清MV;\r\n [*]同一藝術家的音樂\r\n [*]5張或5張以上專輯方可打包發佈;\r\n [*]兩年內發售的專輯可以單獨發佈;\r\n [*]打包時應剔除站內已有的資源,或者將它們都包括進來;\r\n [*]分卷發售的動漫劇集、角色歌、廣播劇等;\r\n [*]發佈組打包發佈的資源。\r\n 打包發佈的視頻資源必須來源於相同類型的媒介(如藍光原碟),有相同的解析度水準(如720p),編碼格式一致(如x264),但預告片例外。對於電影合集,發佈組也必須統一。打包發佈的音訊資源必須編碼格式一致(如全部為分軌FLAC)。打包發佈後,將視情況刪除相應單獨的種子。\r\n 如果你對資源打包有任何不明確的地方,請[url=contactstaff.php]諮詢管理組[/url]。管理組保留資源打包相關問題的解釋權和處理權。\r\n\r\n[b]例外[/b]\r\n [*]允許發佈來源於TV或是DSR的體育類的標清視頻。\r\n [*]允許發佈小於100MB的高清相關軟體和文檔。\r\n [*]允許發佈小於100MB的單曲專輯。\r\n [*]允許發佈2.0聲道或以上標準的國語/粵語音軌。\r\n [*]允許在發佈的資源中附帶字幕、遊戲破解與補丁、字體、包裝等的掃描圖。上述幾種檔必須統一打包或統一不打包。\r\n [*]允許在發佈音軌時附帶附贈DVD的相關檔。\r\n\r\n[b]種子資訊[/b]\r\n 所有種子都應該有描述性的標題,必要的介紹以及其他資訊。以下是一份簡明的規範,完整的、詳盡的規範請參閱“[url=forums.php?action=viewtopic&topicid=3438&page=0#56711]種子資訊填寫規範與指導[/url]”。\r\n [*]標題\r\n [*]電影:[i][中文名] 名稱 [年份] [剪輯版本] [發佈說明] 解析度 來源 [音訊/]視頻編碼-發佈組名稱[/i]\r\n 例:[i]蝙蝠俠:黑暗騎士 The Dark Knight 2008 PROPER 720p BluRay x264-SiNNERS[/i]\r\n [*]電視劇:[i][中文名] 名稱 [年份] S**E** [發佈說明] 解析度 來源 [音訊/]視頻編碼-發佈組名稱[/i]\r\n 例:[i]越獄 Prison Break S04E01 PROPER 720p HDTV x264-CTU[/i]\r\n [*]音軌:[i][中文藝術家名 - 中文專輯名] 藝術家名 - 專輯名 [年份] [版本] [發佈說明] 音訊編碼[-發佈組名稱][/i]\r\n 例:[i]恩雅 - 冬季降臨 Enya - And Winter Came 2008 FLAC[/i]\r\n [*]遊戲:[i][中文名] 名稱 [年份] [版本] [發佈說明][-發佈組名稱][/i]\r\n 例:[i]紅色警戒3:起義時刻 Command And Conquer Red Alert 3 Uprising-RELOADED[/i]\r\n [*]副標題\r\n [*]不要包含廣告或求種/續種請求。\r\n [*]外部資訊\r\n [*]電影和電視劇必須包含外部資訊連結(如IMDb連接)位址(如果存在的話)。\r\n [*]簡介\r\n [*]NFO圖請寫入NFO檔,而不是粘貼到簡介裡。\r\n [*]電影、電視劇、動漫:\r\n [*]必須包含海報、橫幅或BD/HDDVD/DVD封面(如果存在的話); \r\n [*]請盡可能包含畫面截圖或其縮略圖和連結;\r\n [*]請盡可能包含檔的詳細情況,包括格式、時長、編碼、碼率、解析度、語言、字幕等;\r\n [*]請盡可能包含演職員名單以及劇情概要。\r\n [*]體育節目:\r\n [*]請勿在文字介紹或截圖/檔案名/檔大小/時長中洩漏比賽結果。\r\n [*]音樂:\r\n [*]必須包含專輯封面和曲目列表(如果存在的話);\r\n [*]PC遊戲:\r\n [*]必須包含海報或BD/HDDVD/DVD封面(如果存在的話);\r\n [*]請盡可能包含畫面截圖或其縮略圖和連結。\r\n [*]雜項\r\n [*]請正確選擇資源的類型和品質資訊。\r\n [*]注意事項\r\n [*]管理員會根據規範對種子資訊進行編輯。\r\n [*]請勿改變或去除管理員對種子資訊作出的修改(但上傳者可以修正一些錯誤)。\r\n [*]種子資訊不符合規範的種子可能會被刪除,視種子資訊的規範程度而定。\r\n [*]如果資源的原始發佈資訊基本符合規範,請儘量使用原始發佈資訊。\r\n'), +(18, 28, '管理守則 - 請慎用你的權限! ', '[*]最重要的一條:慎用你手中的權限!\r\n[*]對于違規行為不要怕說“不”!\r\n[*]不要公開和其他管理員沖突,一切通過私下溝通解決。\r\n[*]不要太絕情,給違規者一個改過的機會。\r\n[*]不要試圖“打預防針”,等到人們犯錯了再去糾正。\r\n[*]嘗試去改正一個不適當的帖而不是簡單的關閉它。\r\n[*]多嘗試移動帖子到適合的版面而不是簡單地鎖帖。\r\n[*]當處理版聊帖的時候要寬容適度。\r\n[*]鎖帖的時候請給予簡單的操作理由。\r\n[*]在屏蔽某個用戶前請先站短通知他/她, 如果有所積極回應可以考慮再給2周觀察期。\r\n[*]不要禁用一個注冊尚未滿4周的帳戶。\r\n[*]永遠記得以理服人。\r\n'), +(17, 28, '趣味盒規則 - 在娛樂中賺分 ', '[*]任何用戶都可在趣味盒中投放笑話、趣圖、搞笑視頻、Flash等有趣的內容,除了色情、禁忌、政治敏感和當地法律禁止的內容。\r\n[*]正常情況下,一條趣味內容在發布24小時后過期。然而,如果獲得的投票數超過20且其中“有趣”的比例低于25%,趣味內容將提前過期。\r\n[*]新的趣味內容[b]只有[/b]在舊的內容過期后才能提交。\r\n[*]若趣味內容被多數用戶投票認為有趣,其發布者將得到以下獎勵:\r\n [*]票數超過25,其中認為“有趣”比例超過50%,發布者得到5個魔力值。\r\n [*]票數超過50,其中認為“有趣”比例超過50%,發布者得到另外的5個魔力值。\r\n [*]票數超過100,其中認為“有趣”比例超過50%,發布者得到另外的5個魔力值。\r\n [*]票數超過200,其中認為“有趣”比例超過50%,發布者得到另外的5個魔力值。\r\n [*]票數超過25,其中認為“有趣”比例超過75%,發布者得到10個魔力值。\r\n [*]票數超過50,其中認為“有趣”比例超過75%,發布者得到另外的10個魔力值。\r\n [*]票數超過100,其中認為“有趣”比例超過75%,發布者得到另外的10個魔力值。\r\n [*]票數超過200,其中認為“有趣”比例超過75%,發布者得到另外的10個魔力值。'), +(21, 6, 'General rules - Breaking these rules can and will get you banned!', '[*]Do not do things we forbid.\r\n[*]Do not spam.\r\n[*]Cherish your user account. Inactive accounts would be deleted based on the following rules:\r\n 1.[b]Veteran User[/b] or above would never be deleted.\r\n 2.[b]Elite User[/b] or above would never be deleted if packed (at [url=usercp.php?action=personal]User CP[/url]).\r\n 3.Packed accounts would be deleted if users have not logged in for more than 400 days in a row.\r\n 4.Unpacked accounts would be deleted if users have not logged in for more than 150 days in a row.\r\n 5.Accounts with both uploaded and downloaded amount being 0 would be deleted if users have not logged in for more than 100 days in a row.\r\n[*]User found cheating would be deleted. Don''t take chances!\r\n[*]Possession of multiple [site] accounts will result in a ban!\r\n[*]Do not upload our torrents to other trackers! (See the [url=faq.php#38]FAQ[/url] for details.)\r\n[*]Disruptive behavior in the forums or on the server will result in a warning. You will only get [b]one[/b] warning! After that it''s bye bye Kansas!'), +(15, 28, '評論總則 - 永遠尊重上傳者! ', '[*]無論如何,請尊重上傳者!\r\n[*]所有論壇發帖的規則同樣適用于評論。\r\n[*]如果你沒有下載的意向,請不要隨便發表否定性的評論。'), +(25, 6, 'Commenting Guidelines - Always respect uploaders no matter what!', '[*]Always respect uploaders no matter what!\r\n[*]All rules of forum posting apply to commenting, too.\r\n[*]Do not post negative comments about torrents that you don''t plan to download.'), +(27, 6, 'Funbox Rules - Get bonus with fun!', '[*]Users can submit anything funny (e.g. stories, pictures, flash, video) except things that is pornographic, taboo, political sensitive or forbidden by local laws.\r\n[*]Normally a newly-submitted funbox item would be outdated after 24 hours. However, if there are 20 or more votes on a funbox item, among which votes for ''funny'' is less than 25%, the funbox item would be outdated ahead of its due time.\r\n[*]New funbox item can be submitted [b]only[/b] when the old one is outdated.\r\n[*]User, whose funbox item is voted as [b]funny[/b], would be rewarded based on the following rules:\r\n [*]More than 25 votes, among which votes for [i]funny[/i] exceed 50%. User gets 5 bonus.\r\n [*]More than 50 votes, among which votes for [i]funny[/i] exceed 50%. User gets another 5 bonus.\r\n [*]More than 100 votes, among which votes for [i]funny[/i] exceed 50%. User gets another 5 bonus.\r\n [*]More than 200 votes, among which votes for [i]funny[/i] exceed 50%. User gets another 5 bonus.\r\n [*]More than 25 votes, among which votes for [i]funny[/i] exceed 75%. User gets 10 bonus.\r\n [*]More than 50 votes, among which votes for [i]funny[/i] exceed 75%. User gets another 10 bonus.\r\n [*]More than 100 votes, among which votes for [i]funny[/i] exceed 75%. User gets another 10 bonus.\r\n [*]More than 200 votes, among which votes for [i]funny[/i] exceed 75%. User gets another 10 bonus.'), +(22, 6, 'Downloading rules - By not following these rules you will lose download privileges!', '[*]Low ratios may result in severe consequences, including banning accounts. See [url=faq.php#22]FAQ[/url].\r\n[*]Rules for torrent promotion:\r\n [*]Random promotion (torrents promoted randomly by system upon uploading):\r\n [*]10% chance becoming [color=#7c7ff6][b]50% Leech[/b][/color],\r\n [*]5% chance becoming [color=#f0cc00][b]Free Leech[/b][/color],\r\n [*]5% chance becoming [color=#aaaaaa][b]2X up[/b][/color],\r\n [*]3% chance becoming [color=#7ad6ea][b]50% Leech and 2X up[/b][/color],\r\n [*]1% chance becoming [color=#99cc66][b]Free Leech and 2X up[/b][/color].\r\n [*]Torrents larger than 20GB will automatically be [color=#f0cc00][b]Free Leech[/b][/color].\r\n [*]Raw Blu-ray, HD DVD Discs will be [color=#f0cc00][b]Free Leech[/b][/color].\r\n [*]First episode of every season of TV Series, etc. will be [color=#f0cc00][b]Free Leech[/b][/color].\r\n [*]Highly popular torrents will be on promotion (decided by admins).\r\n [*]Promotion timeout:\r\n [*]Except [color=#aaaaaa][b]2X up[/b][/color], all the other types of promotion will be due after 7 days (counted from the time when the torrent is uploaded).\r\n [*][color=#aaaaaa][b]2X up[/b][/color] will never become due.\r\n [*]ALL the torrents will be [color=#aaaaaa][b]2X up[/b][/color] forever when they are on the site for over 1 month.\r\n [*]On special occasions, we would set the whole site [color=#f0cc00][b]Free Leech[/b][/color]. Grab as much as you can. :mml: :mml: :mml:\r\n[*]You may [b]only[/b] use allowed bittorrent clients at [site]. See [url=faq.php#29]FAQ[/url].'), +(24, 6, 'General Forum Guidelines - Please follow these guidelines or else you might end up with a warning!', '[*]No aggressive behavior or flaming in the forums.\r\n[*]No trashing of any topics (i.e. SPAM). Do not submit meaningless topics or posts (e.g. smiley only) in any forum except Water Jar.\r\n[*]Do not flood any forum in order to get bonus.\r\n[*]No foul language on title or text.\r\n[*]Do not discuss topics that are taboo, political sensitive or forbidden by local laws.\r\n[*]No language of discrimination based on race, national or ethnic origin, color, religion, gender, age, sexual preference or mental or physical disability. Violating this rule would result in permanent ban.\r\n[*]No bumping... (All bumped threads will be deleted.)\r\n[*]No double posting. \r\n[*]Please ensure all questions are posted in the correct section!\r\n[*]Topics without new reply in 365 days would be locked automatically by system.'), +(26, 6, 'Avatar Guidelines - Please try to follow these guidelines', '[*]The allowed formats are .gif, .jpg and .png. \r\n[*]Be considerate. Resize your images to a width of 150 px and a size of no more than 150 KB. (Browsers will rescale them anyway: smaller images will be expanded and will not look good; larger images will just waste bandwidth and CPU cycles.)\r\n[*]Do not use potentially offensive material involving porn, religious material, animal / human cruelty or ideologically charged images. Staff members have wide discretion on what is acceptable. If in doubt PM one. '); +INSERT INTO `rules` (`id`, `lang_id`, `title`, `text`) VALUES +(23, 6, 'Uploading rules - Torrents violating these rules may be deleted without notice', 'Please respect the rules, and if you have any questions about something unclear or not understandable, please [url=contactstaff.php]consult the staff[/url]. Staff reserves the rights to adjudicate.\r\n\r\n[b]GENERAL[/b]\r\n [*]You must have legal rights to the file you upload.\r\n [*]Make sure your torrents are well-seeded. If you fail to seed for at least 24 hours or till someone else completes, or purposely keep a low uploading speed, you can be warned and your privilege to upload can be removed.\r\n [*]You would get 2 times as much of uploading credit for torrents uploaded by yourself.\r\n [*]If you have something interesting that somehow violates these rules, [url=contactstaff.php]ask the staff[/url] with a detailed description and we might make an exception.\r\n\r\n[b]PRIVILEGE[/b]\r\n [*]Everyone can upload.\r\n [*]However, some must go through the [url=offers.php]Offer section[/url]. See [url=faq.php#22]FAQ[/url] for details.\r\n [*]ONLY users in the class [color=#DC143C][b]Uploader[/b][/color] or above, or users specified by staff can freely upload games. Others should go through the [url=offers.php]Offer section[/url].\r\n\r\n[b]ALLOWED CONTENTS[/b]\r\n [*]High Definition (HD) videos, including\r\n [*]complete HD media, e.g. Blu-ray disc, HD DVD disc, etc. or remux,\r\n [*]captured HDTV streams,\r\n [*]encodes from above listed sources in HD resolution (at least 720p),\r\n [*]other HD videos such as HD DV.\r\n [*]Standard Definition (SD) videos, only\r\n [*]SD encodes from HD media (at least 480p),\r\n [*]DVDR/DVDISO,\r\n [*]DVDRip, CNDVDRip.\r\n [*]Lossless audio tracks (and corresponding cue sheets), e.g. FLAC, Monkey''s Audio, etc.\r\n [*]5.1-channel (or higher) movie dubs and music tracks (DTS, DTS CD Image, etc.), and commentary tracks.\r\n [*]PC games (must be original images).\r\n [*]HD trailers released within 7 days.\r\n [*]HD-related software and documents.\r\n\r\n[b]NOT ALLOWED CONTENTS[/b]\r\n [*]Contents less than 100 MB in total.\r\n [*]Upscaled/partially upscaled in Standard Definition mastered/produced content.\r\n [*]Videos in SD resolution but with low quality, including CAM, TC, TS, SCR, DVDSCR, R5, R5.Line, HalfCD, etc.\r\n [*]RealVideo encoded videos (usually contained in RMVB or RM), flv files.\r\n [*]Individual samples (to be included in the "Main torrent").\r\n [*]Lossy audios that are not 5.1-channel (or higher), e.g. common lossy MP3''s, lossy WMAs, etc.\r\n [*]Multi-track audio files without proper cue sheets.\r\n [*]Installation-free or highly compressed games, unofficial game images, third-party mods, collection of tiny games, individual game cracks or patches.\r\n [*]RAR, etc. archived files.\r\n [*]Dupe releases. (see beneath for dupe rules.)\r\n [*]Taboo or sensitive contents (such as porn or politically sensitive topics).\r\n [*]Damaged files, i.e. files that are erroneous upon reading or playback.\r\n [*]Spam files, such as viruses, trojans, website links, advertisements, torrents in torrent, etc., or irrelevant files.\r\n\r\n[b]DUPE RULES: QUALITY OVER QUANTITY[/b]\r\n [*]Video releases are prioritized according to their source media, and mainly: Blu-ray/HD DVD > HDTV > DVD > TV. High prioritized versions will dupe other versions with low priorities of the same video.\r\n [*]HD releases will dupe SD releases of the same video.\r\n [*]For animes, HDTV versions are equal in priority to DVD versions. This is an exception.\r\n [*]Encodes from the same type of media and in the same resolution \r\n [*]They are prioritized based on "[url=forums.php?action=viewtopic&forumid=6&topicid=1520]Scene & Internal, from Group to Quality-Degree. ONLY FOR HD-resources[/url]".\r\n [*]Releases from preferred groups will dupe releases from groups with the same or lower priority.\r\n [*]However, one DVD5 sized (i.e. approx. 4.38 GB) release from the best available source will always be allowed.\r\n [*]Based on lossless screenshots comparison, releases with higher quality will dupe those with low quality.\r\n [*]Blu-ray Disk/HD DVD Original Copy releases from another region containing different dubbing and/or subtitle aren''t considered to be dupe.\r\n [*]Only one copy of the same lossless audio contents will be preserved, and copies of other formats will be duped. FLAC (in separate tracks) is most preferred.\r\n [*]For contents already on the site\r\n [*]If new release doesn''t contain the confirmed errors/glitches/problems of the old release or is based on a better source, then it''s allowed to be uploaded and the old release is duped.\r\n [*]If the old release is dead for 45 days or longer, or exists for 18 months or longer, then the new release is free from the dupe rules.\r\n [*]After uploading the new release, old releases won''t be removed until they''re dead of inactivity.\r\n\r\n[b]PACKING RULES (ON TRIAL)[/b]\r\n ONLY the following contents are allowed to be packed in principle:\r\n [*]HD movie collections sold as box set (e.g. [i]The Ultimate Matrix Collection Blu-ray Box[/i]).\r\n [*]Complete season(s) of TV Series/TV shows/animes.\r\n [*]Documentaries on the same specific subject matter.\r\n [*]HD trailers released within 7 days.\r\n [*]MVs of the same artist\r\n [*]SD MVs are allowed to be packed according to DVD discs only, and no upload of individual songs is allowed.\r\n [*]HD MVs in the same resolution.\r\n [*]Music of the same artist\r\n [*]Only 5 or more albums can be packed.\r\n [*]Albums released within 2 years can be individually uploaded.\r\n [*]Generally, contents that are already on the site should be removed from the pack upon uploading, otherwise include them all together in the pack.\r\n [*]Animes, character songs, dramas, etc. that are released in separate volumes.\r\n [*]Contents packed by formal groups.\r\n Packed video contents must be from media of the same type (e.g. Blu-ray discs), in the same resolution standard (e.g. 720p), and encoded in the same video codec (e.g. x264). However, trailer are exceptions. Moreover, a movie collection should be released from the same group. Packed audio contents must be encoded in the same audio codec (e.g. all in FLAC). Corresponding individual torrents can be removed upon packing, depending on actual situation.\r\n If you are not clear of anything about packing, please [url=contactstaff.php]consult the staff[/url]. Staff reserve all the rights to interpret and deal with packing-related issues.\r\n\r\n[b]EXCEPTIONS[/b]\r\n [*]ALLOWED: SD videos from TV/DSR in the category "Sports".\r\n [*]ALLOWED: contents less than 100 MB but related to software and documents.\r\n [*]ALLOWED: single albums that are less than 100 MB.\r\n [*]ALLOWED: 2.0-channel (or higher) Mandarin/Cantonese dubs.\r\n [*]ALLOWED: attached subtitles, game cracks and patches, fonts, scans (of packages, etc.). These files must be all either archived or unarchived.\r\n [*]ALLOWED: when uploading CD releases, attaching contents from the DVD given with the CD.\r\n\r\n[b]TORRENT INFORMATION[/b]\r\n All torrents shall have descriptive titles, necessary descriptions and other information. Following is a brief regulation. Please refer to "[url=forums.php?action=viewtopic&topicid=3438&page=0#56711]Standard and Guidance of Torrent Information[/url]" (in Chinese) for complete and detailed instructions.\r\n [*]Title\r\n [*]Movies: [i]Name [Year] [Cut] [Release Info] Resolution Source [Audio/]Video Codec-Tag[/i]\r\n e.g. [i]The Dark Knight 2008 PROPER 720p BluRay x264-SiNNERS[/i]\r\n [*]TV Series/Mini-serie: [i]Name [Year] S**E** [Release Info] Resolution Source [Audio/]Video Codec-Tag[/i]\r\n e.g. [i]Prison Break S04E01 PROPER 720p HDTV x264-CTU[/i]\r\n [*]Musics: [i]Artist - Album [Year] [Version] [Release Info] Audio Codec[-Tag][/i]\r\n e.g. [i]Enya - And Winter Came 2008 FLAC[/i]\r\n [*]Games: [i]Name [Year] [Version] [Release Info][-Tag][/i]\r\n e.g. [i]Command And Conquer Red Alert 3 Uprising-RELOADED[/i]\r\n [*]Small description\r\n [*]No advertisements or asking for a reseed/requests.\r\n [*]External Info\r\n [*]URL of external info for Movies and TV Series is required (if available).\r\n [*]Description\r\n [*]Do not use the description for your NFO-artwork! Limit those artistic expressions to the NFO only.\r\n [*]For Movies, TV Series/Mini-series and animes:\r\n [*]Poster, banner or BD/HDDVD/DVD cover is required (If available).\r\n [*]Adding screenshots or thumbnails and links to the screenshots is encouraged.\r\n [*]Adding detailed file information regarding format, runtime, codec, bitrate, resolution, language, subtitle, etc. is encouraged.\r\n [*]Adding a list of staff and cast and plot outline is encouraged.\r\n [*]For Sports:\r\n [*]Don''t spoil the results trough text/screenshots/filenames/obvious filesize/detailed runtime.\r\n [*]For Music:\r\n [*]The CD cover and the track list are required (if available).\r\n [*]For PC Games:\r\n [*]Poster, banner or BD/HDDVD/DVD cover is required (If available).\r\n [*]Adding screenshots or thumbnails and links to the screenshots is encouraged.\r\n [*]Misc\r\n [*]Please correctly specify the category and quality info.\r\n [*]NOTES\r\n [*]Moderators will edit the torrent info according to the standard.\r\n [*]Do NOT remove or alter changes done by the staff (but some mistakes can be fixed by the uploader).\r\n [*]Torrents without required information can be deleted, depending on how they meet the standard.\r\n [*]The original torrent information can be used if it basically meets the standard.\r\n'), +(28, 6, 'Moderating Rules - Use your better judgement!', '[*]The most important rule: Use your better judgment!\r\n[*]Don''t be afraid to say [b]NO[/b]!\r\n[*]Don''t defy another staff member in public, instead send a PM or through IM.\r\n[*]Be tolerant! Give the user(s) a chance to reform.\r\n[*]Don''t act prematurely, let the users make their mistakes and THEN correct them.\r\n[*]Try correcting any "off topics" rather then closing a thread.\r\n[*]Move topics rather than locking them.\r\n[*]Be tolerant when moderating the chat section (give them some slack).\r\n[*]If you lock a topic, give a brief explanation as to why you''re locking it.\r\n[*]Before you disable a user account, send him/her a PM and if they reply, put them on a 2 week trial.\r\n[*]Don''t disable a user account until he or she has been a member for at least 4 weeks.\r\n[*]Convince people by reasoning rather than authority.'), +(54, 25, '管理组成员退休待遇', '满足以下条件可获得的退休待遇: \r\n\r\n[code]\r\n[b]对于 [color=#DC143C]上传员 (Uploaders)[/color]: [/b]\r\n\r\n成为 [color=#1cc6d5][b]养老族 (Retiree) [/b]: [/color]\r\n 升职一年以上; 上传过200个以上的种子资源 (特殊情况如原碟发布, 0day更新等可以由管理组投票表决; 须被认定为作出过重大及持久的贡献).\r\n\r\n成为 [color=#009F00][b]VIP[/b]: [/color]\r\n 升职6个月以上; 上传过100个以上的种子资源 (特殊情况如原碟发布, 0day更新等可以由管理组投票表决).\r\n\r\n其他:\r\n 成为 [color=#F88C00][b]Extreme User[/b][/color] (如果你的条件满足 [color=#F88C00][b]Extreme User[/b][/color] 及以上, 则成为 [color=#38ACEC][b]Nexus Master[/b][/color]) .\r\n[/code]\r\n\r\n[code]\r\n[b]对于 [color=#6495ED]管理员 (Moderators)[/color]: [/b]\r\n\r\n成为 [color=#1cc6d5][b]养老族 (Retiree)[/b]: [/color]\r\n 升职一年以上; 参加过至少2次站务组正式会议; 参与过 规则/答疑 的修订工作.\r\n\r\n成为 [color=#009F00][b]VIP[/b]: [/color]\r\n 若不满足成为 [color=#1cc6d5][b]养老族 (Retiree)[/b][/color] 的条件, 你可以[b]无条件[/b]成为 [color=#009F00][b]VIP[/b][/color] .\r\n[/code]\r\n\r\n[code]\r\n[b]对于 [color=#4b0082]总管理员 (Administrators)[/color] 及 以上等级: [/b]\r\n\r\n 可以[b]直接[/b]成为 [color=#1cc6d5][b]养老族 (Retiree)[/b][/color] .\r\n[/code]'), +(55, 28, '管理組成員退休待遇', '滿足以下條件可獲得的退休待遇: \r\n[code]\r\n[b]對於 [color=#DC143C]上傳員 (Uploaders)[/color]: [/b]\r\n成為 [color=#1cc6d5][b]養老族 (Retiree) [/b]: [/color]\r\n 升職一年以上; 上傳過200個以上的種子資源 (特殊情況如原碟發佈, 0day更新等可以由管理組投票表決; 須被認定為作出過重大及持久的貢獻).\r\n成為 [color=#009F00][b]VIP[/b]: [/color]\r\n 升職6個月以上; 上傳過100個以上的種子資源 (特殊情況如原碟發佈, 0day更新等可以由管理組投票表決).\r\n其他:\r\n 成為 [color=#F88C00][b]Extreme User[/b][/color] (如果你的條件滿足 [color=#F88C00][b]Extreme User[/b][/color] 及以上, 則成為 [color=#38ACEC][b]Nexus Master[/b][/color]) .\r\n[/code]\r\n[code]\r\n[b]對於 [color=#6495ED]管理員 (Moderators)[/color]: [/b]\r\n成為 [color=#1cc6d5][b]養老族 (Retiree)[/b]: [/color]\r\n 升職一年以上; 參加過至少2次站務組正式會議; 參與過 規則/答疑 的修訂工作.\r\n成為 [color=#009F00][b]VIP[/b]: [/color]\r\n 若不滿足成為 [color=#1cc6d5][b]養老族 (Retiree)[/b][/color] 的條件, 你可以[b]無條件[/b]成為 [color=#009F00][b]VIP[/b][/color] .\r\n[/code]\r\n[code]\r\n[b]對於 [color=#4b0082]總管理員 (Administrators)[/color] 及 以上等級: [/b]\r\n 可以[b]直接[/b]成為 [color=#1cc6d5][b]養老族 (Retiree)[/b][/color] .\r\n[/code]'), +(50, 6, 'Rules for Subtitles - Subtitles violating these rules will be deleted', '(This text is translated from the Chinese version. In case of discrepancy, the original version in Chinese shall prevail.)\r\n\r\n[b]GENERAL PRINCIPLE:[/b]\r\n [*]All subtitles uploaded must conform to the rules (i.e. proper or qualified). Unqualified subtitles will be deleted.\r\n [*]Allowed file formats are srt/ssa/ass/cue/zip/rar.\r\n [*]If you''re uploading Vobsub (idx+sub) subtitles or subtitles of other types, or a collection (e.g. subtitles for a season pack of some TV series), please zip/rar them before uploading.\r\n [*]Cue sheet of audio tracks is allowed as well. If there are several cue sheets, please pack them all.\r\n [*]Uploading lrc lyrics or other non-subtitle/non-cue files is not permitted. Irrelevant files if uploaded will be directly deleted.\r\n\r\n[b]QUALIFYING SUBTITLE/CUE FILES: improper subtitle/cue files will be directly deleted.[/b]\r\n In any of the following cases, a subtitle/cue file will be judged as improper:\r\n [*]Fail to match the corresponding torrent.\r\n [*]Fail to be in sync with the corresponding video/audio file.\r\n [*]Packed Improperly.\r\n [*]Contain irrelevant or spam stuff.\r\n [*]Encoded incorrectly.\r\n [*]Wrong cue file.\r\n [*]Wrong language mark.\r\n [*]The title is indefinite or contains redundant info/characters.\r\n [*]Duplicate.\r\n [*]Reported by several users and confirmed with other problems.\r\n [b]The staff group reserves rights to judge and deal with improper subtitles.[/b]\r\n Please refer to [url=http://www.nexushd.org/forums.php?action=viewtopic&forumid=13&topicid=2848][i]this thread[/i][/url] in the forum for detailed regulations on qualifying subtitle/cue files, other notes and suggestions on uploading subtitles, and subtitle naming and entitling guidance.\r\n\r\n[b]IMPLEMENTING REGULATIONS OF REWARDS AND PENALTIES [/b]\r\n [*]Reporting against improper subtitles and the uploaders who purposely upload improper subtitles is always welcomed. To report an improper subtitle, please click on the [i]REPORT[/i] button of the corresponding subtitle in the subtitle section. To report a user, please click on the [i]REPORT[/i] button at the bottom of the user details page.\r\n [*]The reporter will be rewarded 50 karma points (delivered in three days) for each case after confirmation.\r\n [*]Improper subtitles will be deleted and the corresponding uploader will be fined 100 karma points in each case.\r\n [*]Users who recklessly uploading improper subtitles for karma points or other purposes, or users who maliciously report, will be fined karma points or warned depending on the seriousness of the case.\r\n'), +(49, 25, '字幕区规则 - 违规字幕将被删除', '[b]总则:[/b]\r\n [*]所有上传的字幕必须符合规则(即合格的)。不合格的字幕将被删除。\r\n [*]允许上传的文件格式为srt/ssa/ass/cue/zip/rar。\r\n [*]如果你打算上传的字幕是Vobsub格式(idx+sub)或其它格式,或者是合集(如电视剧整季的字幕),请将它们打包为zip/rar后再上传。\r\n [*]字幕区开放音轨对应cue表单文件的上传。如有多个cue,请将它们打包起来。\r\n [*]不允许lrc歌词或其它非字幕/cue文件的上传。上传的无关文件将被直接删除。\r\n\r\n[b]不合格字幕/cue文件判定:被判定为不合格的字幕/cue文件将被直接删除。[/b]\r\n 出现以下情况之一的字幕/cue文件将被判定为不合格:\r\n [*]与相应种子不匹配。\r\n [*]与相应的视频/音频文件不同步。\r\n [*]打包错误。\r\n [*]包含无关文件或垃圾信息。\r\n [*]编码错误。\r\n [*]cue文件错误。\r\n [*]语种标识错误。\r\n [*]标题命名不明确或包含冗余信息或字符。\r\n [*]被判定为重复。\r\n [*]接到多个用户举报并被证实有其它问题的。\r\n [b]管理组保留裁定和处理不合格字幕的权力。[/b]\r\n 不合格字幕/cue文件判定细则、字幕上传的其它注意事项以及命名指引请参阅论坛的[url=http://www.nexushd.org/forums.php?action=viewtopic&forumid=13&topicid=2848]这个帖子[/url]。\r\n\r\n[b]字幕奖惩:[/b]\r\n [*]欢迎举报不合格的字幕和恶意发布不合格字幕的用户。举报不合格字幕请在字幕区点击相应字幕的“举报”按钮。举报用户请点击相应用户详细信息页面底部的“举报”按钮。\r\n [*]对每一例不合格字幕的举报,确认后将奖励举报者50点魔力值(三天内发放)。\r\n [*]被确定为不合格的字幕将被删除,而在每一例中,相应的字幕上传者将被扣除100点魔力值。\r\n [*]对为赚取积分等目的恶意上传不合格字幕的用户,或是恶意举报的用户,将视情节轻重扣除额外的魔力值甚至给予警告。\r\n'), +(53, 6, 'Staff''s retirement benefits', 'You can get retirement benefits when meeting these condition(s) below:\r\n\r\n[code]\r\n[b]for [color=#DC143C]Uploaders[/color]: [/b]\r\n\r\nTo join [color=#1cc6d5][b]Retiree[/b]: [/color]\r\n Been promoted for more than 1 year; have posted 200 or more torrents (special cases can be decided via vote among staffs, like Source-Disc posters, scene-uploaders; should be considered as having made rare and enduring contribution).\r\n\r\nTo join [color=#009F00][b]VIP[/b]: [/color]\r\n Been promoted for more than 6 months; have posted 100 or more torrents (special cases can be decided via vote among staffs, like Source-Disc posters, scene-uploaders).\r\n\r\nOthers:\r\n Demoted to [color=#F88C00][b]Extreme User[/b][/color] (if your profile meets the corresponding condition of classes [color=#F88C00][b]Extreme User[/b][/color] and above, then promoted to [color=#38ACEC][b]Nexus Master[/b][/color]).\r\n[/code]\r\n\r\n[code]\r\n[b]for [color=#6495ED]Moderators[/color]: [/b]\r\n\r\nTo join [color=#1cc6d5][b]Retiree[/b]: [/color]\r\n Been promoted for more than 1 year; Have participated at least 2 Staff [b]Official[/b] Meetings; Have participated in Rules/FAQ modifying.\r\n\r\nTo join [color=#009F00][b]VIP[/b]: [/color]\r\n If you don''t meet the condition of joining [color=#1cc6d5][b]Retiree[/b][/color], you can join [color=#009F00][b]VIP[/b][/color] [b]unconditionally[/b].\r\n[/code]\r\n\r\n[code]\r\n[b]for [color=#4b0082]Administrators[/color] and above: [/b]\r\n\r\n You can join [color=#1cc6d5][b]Retiree[/b][/color] [b]unconditionally[/b].\r\n[/code]'), +(51, 28, '字幕區規則 - 違規字幕將被刪除', '[b]總則:[/b]\r\n [*]所有上傳的字幕必須符合規則(即合格的)。不合格的字幕將被刪除。\r\n [*]允許上傳的檔案格式為srt/ssa/ass/cue/zip/rar。\r\n [*]如果你打算上傳的字幕是Vobsub格式(idx+sub)或其它格式,或者是合集(如電視劇整季的字幕),請將它們打包為zip/rar後再上傳。\r\n [*]字幕區開放音軌對應cue表單文件的上傳。如有多個cue,請將它們打包起來。\r\n [*]不允許lrc歌詞或其它非字幕/cue文件的上傳。上傳的無關檔將被直接刪除。\r\n\r\n[b]不合格字幕/cue文件判定:被判定為不合格的字幕/cue檔將被直接刪除。[/b]\r\n 出現以下情況之一的字幕/cue檔將被判定為不合格:\r\n [*]與相應種子不匹配。\r\n [*]與相應的視頻/音訊檔不同步。\r\n [*]打包錯誤。\r\n [*]包含無關檔或垃圾資訊。\r\n [*]編碼錯誤。\r\n [*]cue檔錯誤。\r\n [*]語種標識錯誤。\r\n [*]標題命名不明確或包含冗餘資訊或字元。\r\n [*]被判定為重複。\r\n [*]接到多個用戶舉報並被證實有其它問題的。\r\n [b]管理組保留裁定和處理不合格字幕的權力。[/b]\r\n 不合格字幕/cue檔判定細則、字幕上傳的其它注意事項以及命名指引請參閱論壇的[url=http://www.nexushd.org/forums.php?action=viewtopic&forumid=13&topicid=2848]這個帖子[/url]。\r\n\r\n[b]字幕獎懲:[/b]\r\n [*]歡迎舉報不合格的字幕和惡意發佈不合格字幕的用戶。舉報不合格字幕請在字幕區點擊相應字幕的“舉報”按鈕。舉報使用者請點擊相應使用者詳細資訊頁面底部的“舉報”按鈕。\r\n [*]對每一例不合格字幕的舉報,確認後將獎勵舉報者50點魔力值(三天內發放)。\r\n [*]被確定為不合格的字幕將被刪除,而在每一例中,相應的字幕上傳者將被扣除100點魔力值。\r\n [*]對為賺取積分等目的惡意上傳不合格字幕的用戶,或是惡意舉報的用戶,將視情節輕重扣除額外的魔力值甚至給予警告。\r\n'); + +-- -------------------------------------------------------- + +-- +-- Table structure for table `schools` +-- + +CREATE TABLE IF NOT EXISTS `schools` ( + `id` smallint(5) unsigned NOT NULL AUTO_INCREMENT, + `name` varchar(50) DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=101 ; + +-- +-- Dumping data for table `schools` +-- + +INSERT INTO `schools` (`id`, `name`) VALUES +(1, '南京农业大学'), +(2, '中山大学'), +(3, '中国石油大学'), +(4, '云南大学'), +(5, '河海大学'), +(6, '南开大学'), +(7, '兰州大学'), +(8, '合肥工业大学'), +(9, '上海大学'), +(10, '安徽大学'), +(11, '中国海洋大学'), +(12, '复旦大学'), +(13, '西北大学'), +(14, '郑州大学'), +(15, '四川大学'), +(16, '华中科技大学'), +(17, '天津大学'), +(18, '山东大学'), +(19, '中央民族大学'), +(20, '苏州大学'), +(21, '重庆大学'), +(22, '东北农业大学'), +(23, '北京工业大学'), +(24, '湖南师范大学'), +(25, '东北大学'), +(26, '电子科技大学'), +(27, '西安电子科技大学'), +(28, '北京化工大学'), +(29, '南京航空航天大学'), +(30, '南京理工大学'), +(31, '西北工业大学'), +(32, '天津医科大学'), +(33, '北京林业大学'), +(34, '华南师范大学'), +(35, '浙江大学'), +(36, '长安大学'), +(37, '武汉理工大学'), +(38, '河北工业大学'), +(39, '南京师范大学'), +(40, '中国农业大学'), +(41, '厦门大学'), +(42, '第二军医大学'), +(43, '北京理工大学'), +(44, '北京大学'), +(45, '上海外国语大学'), +(46, '北京科技大学'), +(47, '西北农林科技大学'), +(48, '中南大学'), +(49, '华南理工大学'), +(50, '武汉大学'), +(51, '福州大学'), +(52, '同济大学'), +(53, '中国传媒大学'), +(54, '湖南大学'), +(55, '上海财经大学'), +(56, '国防科学技术大学'), +(57, '吉林大学'), +(58, '大连理工大学'), +(59, '中国人民大学'), +(60, '上海交通大学'), +(61, '西安交通大学'), +(62, '江南大学'), +(63, '南京大学'), +(64, '南昌大学'), +(65, '太原理工大学'), +(66, '中国地质大学'), +(67, '清华大学'), +(68, '广西大学'), +(69, '中国矿业大学'), +(70, '四川农业大学'), +(71, '东北师范大学'), +(72, '哈尔滨工业大学'), +(73, '北京航空航天大学'), +(74, '北京交通大学'), +(75, '西南交通大学'), +(76, '中国科学技术大学'), +(77, '北京外国语大学'), +(78, '北京邮电大学'), +(79, '西安建筑科技大学'), +(80, '新疆大学'), +(81, '东南大学'), +(82, '对外经济贸易大学'), +(83, '北京中医药大学'), +(84, '暨南大学'), +(85, '北京语言大学'), +(86, '华中师范大学'), +(87, '北京师范大学'), +(88, '哈尔滨工程大学'), +(89, '内蒙古大学'), +(90, '东华大学'), +(91, '解放军信息工程大学'), +(92, '上海交通大学医学院 '), +(93, '华东理工大学'), +(94, '第四军医大学'), +(95, '大连海事大学'), +(96, '华东师范大学'), +(97, '辽宁大学'), +(98, '深圳大学'), +(99, '中央音乐学院'), +(100, '中国协和医科大学'); + +-- -------------------------------------------------------- + +-- +-- Table structure for table `searchbox` +-- + +CREATE TABLE IF NOT EXISTS `searchbox` ( + `id` smallint(5) unsigned NOT NULL AUTO_INCREMENT, + `name` varchar(30) DEFAULT NULL, + `showsubcat` tinyint(1) NOT NULL DEFAULT '0', + `showsource` tinyint(1) NOT NULL DEFAULT '0', + `showmedium` tinyint(1) NOT NULL DEFAULT '0', + `showcodec` tinyint(1) NOT NULL DEFAULT '0', + `showstandard` tinyint(1) NOT NULL DEFAULT '0', + `showprocessing` tinyint(1) NOT NULL DEFAULT '0', + `showteam` tinyint(1) NOT NULL DEFAULT '0', + `showaudiocodec` tinyint(1) NOT NULL DEFAULT '0', + `catsperrow` smallint(5) unsigned NOT NULL DEFAULT '7', + `catpadding` smallint(5) unsigned NOT NULL DEFAULT '25', + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=6 ; + +-- +-- Dumping data for table `searchbox` +-- + +INSERT INTO `searchbox` (`id`, `name`, `showsubcat`, `showsource`, `showmedium`, `showcodec`, `showstandard`, `showprocessing`, `showteam`, `showaudiocodec`, `catsperrow`, `catpadding`) VALUES +(4, 'chd', 1, 0, 1, 1, 1, 0, 1, 0, 10, 7); + +-- -------------------------------------------------------- + +-- +-- Table structure for table `secondicons` +-- + +CREATE TABLE IF NOT EXISTS `secondicons` ( + `id` smallint(5) unsigned NOT NULL AUTO_INCREMENT, + `source` tinyint(3) unsigned NOT NULL DEFAULT '0', + `medium` tinyint(3) unsigned NOT NULL DEFAULT '0', + `codec` tinyint(3) unsigned NOT NULL DEFAULT '0', + `standard` tinyint(3) unsigned NOT NULL DEFAULT '0', + `processing` tinyint(3) unsigned NOT NULL DEFAULT '0', + `team` tinyint(3) unsigned NOT NULL DEFAULT '0', + `audiocodec` tinyint(3) unsigned NOT NULL DEFAULT '0', + `name` varchar(30) NOT NULL, + `class_name` varchar(255) DEFAULT NULL, + `image` varchar(255) NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=23 ; + +-- +-- Dumping data for table `secondicons` +-- + +INSERT INTO `secondicons` (`id`, `source`, `medium`, `codec`, `standard`, `processing`, `team`, `audiocodec`, `name`, `class_name`, `image`) VALUES +(1, 0, 1, 1, 0, 0, 0, 0, 'Blu-ray/H.264', NULL, 'bdh264.png'), +(2, 0, 1, 2, 0, 0, 0, 0, 'Blu-ray/VC-1', NULL, 'bdvc1.png'), +(3, 0, 1, 4, 0, 0, 0, 0, 'Blu-ray/MPEG-2', NULL, 'bdmpeg2.png'), +(4, 0, 2, 1, 0, 0, 0, 0, 'HD DVD/H.264', NULL, 'hddvdh264.png'), +(5, 0, 2, 2, 0, 0, 0, 0, 'HD DVD/VC-1', NULL, 'hddvdvc1.png'), +(6, 0, 2, 4, 0, 0, 0, 0, 'HD DVD/MPEG-2', NULL, 'hddvdmpeg2.png'), +(7, 0, 3, 1, 0, 0, 0, 0, 'Remux/H.264', NULL, 'remuxh264.png'), +(8, 0, 3, 2, 0, 0, 0, 0, 'Remux/VC-1', NULL, 'remuxvc1.png'), +(9, 0, 3, 4, 0, 0, 0, 0, 'Remux/MPEG-2', NULL, 'remuxmpeg2.png'), +(10, 0, 4, 0, 0, 0, 0, 0, 'AVCHD', NULL, 'avchd.png'), +(11, 0, 5, 1, 0, 0, 0, 0, 'HDTV/H.264', NULL, 'hdtvh264.png'), +(12, 0, 5, 4, 0, 0, 0, 0, 'HDTV/MPEG-2', NULL, 'hdtvmpeg2.png'), +(13, 0, 6, 0, 0, 0, 0, 0, 'DVDR', NULL, 'dvdr.png'), +(14, 0, 7, 1, 0, 0, 0, 0, 'Rip/H.264', NULL, 'riph264.png'), +(15, 0, 7, 3, 0, 0, 0, 0, 'Rip/Xvid', NULL, 'ripxvid.png'), +(16, 0, 8, 5, 0, 0, 0, 0, 'CD/FLAC', NULL, 'cdflac.png'), +(17, 0, 8, 6, 0, 0, 0, 0, 'CD/APE', NULL, 'cdape.png'), +(18, 0, 8, 7, 0, 0, 0, 0, 'CD/DTS', NULL, 'cddts.png'), +(19, 0, 8, 9, 0, 0, 0, 0, 'CD/Other', NULL, 'cdother.png'), +(20, 0, 9, 5, 0, 0, 0, 0, 'Extract/FLAC', NULL, 'extractflac.png'), +(21, 0, 9, 7, 0, 0, 0, 0, 'Extract/DTS', NULL, 'extractdts.png'), +(22, 0, 9, 8, 0, 0, 0, 0, 'Extract/AC-3', NULL, 'extractac3.png'); + +-- -------------------------------------------------------- + +-- +-- Table structure for table `shoutbox` +-- + +CREATE TABLE IF NOT EXISTS `shoutbox` ( + `id` int(10) NOT NULL AUTO_INCREMENT, + `userid` mediumint(8) unsigned NOT NULL DEFAULT '0', + `date` int(10) unsigned NOT NULL DEFAULT '0', + `text` text NOT NULL, + `type` enum('sb','hb') NOT NULL DEFAULT 'sb', + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; + +-- +-- Dumping data for table `shoutbox` +-- + + +-- -------------------------------------------------------- + +-- +-- Table structure for table `sitelog` +-- + +CREATE TABLE IF NOT EXISTS `sitelog` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `added` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `txt` text NOT NULL, + `security_level` enum('normal','mod') NOT NULL DEFAULT 'normal', + PRIMARY KEY (`id`), + KEY `added` (`added`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; + +-- +-- Dumping data for table `sitelog` +-- + + +-- -------------------------------------------------------- + +-- +-- Table structure for table `snatched` +-- + +CREATE TABLE IF NOT EXISTS `snatched` ( + `id` int(10) NOT NULL AUTO_INCREMENT, + `torrentid` mediumint(8) unsigned NOT NULL DEFAULT '0', + `userid` mediumint(8) unsigned NOT NULL DEFAULT '0', + `ip` varchar(64) NOT NULL DEFAULT '', + `port` smallint(5) unsigned NOT NULL DEFAULT '0', + `uploaded` bigint(20) unsigned NOT NULL DEFAULT '0', + `downloaded` bigint(20) unsigned NOT NULL DEFAULT '0', + `to_go` bigint(20) unsigned NOT NULL DEFAULT '0', + `seedtime` int(10) unsigned NOT NULL DEFAULT '0', + `leechtime` int(10) unsigned NOT NULL DEFAULT '0', + `last_action` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `startdat` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `completedat` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `finished` enum('yes','no') NOT NULL DEFAULT 'no', + PRIMARY KEY (`id`), + KEY `torrentid_userid` (`torrentid`,`userid`), + KEY `userid` (`userid`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; + +-- +-- Dumping data for table `snatched` +-- + + +-- -------------------------------------------------------- + +-- +-- Table structure for table `sources` +-- + +CREATE TABLE IF NOT EXISTS `sources` ( + `id` tinyint(3) unsigned NOT NULL AUTO_INCREMENT, + `name` varchar(30) NOT NULL, + `sort_index` tinyint(3) unsigned NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=7 ; + +-- +-- Dumping data for table `sources` +-- + +INSERT INTO `sources` (`id`, `name`, `sort_index`) VALUES +(1, 'Blu-ray', 0), +(2, 'HD DVD', 0), +(3, 'DVD', 0), +(4, 'HDTV', 0), +(5, 'TV', 0), +(6, 'Other', 0); + +-- -------------------------------------------------------- + +-- +-- Table structure for table `staffmessages` +-- + +CREATE TABLE IF NOT EXISTS `staffmessages` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `sender` mediumint(8) unsigned NOT NULL DEFAULT '0', + `added` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `msg` text, + `subject` varchar(128) NOT NULL DEFAULT '', + `answeredby` mediumint(8) unsigned NOT NULL DEFAULT '0', + `answered` tinyint(1) NOT NULL DEFAULT '0', + `answer` text, + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; + +-- +-- Dumping data for table `staffmessages` +-- + + +-- -------------------------------------------------------- + +-- +-- Table structure for table `standards` +-- + +CREATE TABLE IF NOT EXISTS `standards` ( + `id` tinyint(3) unsigned NOT NULL AUTO_INCREMENT, + `name` varchar(30) NOT NULL, + `sort_index` tinyint(3) unsigned NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=5 ; + +-- +-- Dumping data for table `standards` +-- + +INSERT INTO `standards` (`id`, `name`, `sort_index`) VALUES +(1, '1080p', 0), +(2, '1080i', 0), +(3, '720p', 0), +(4, 'SD', 0); + +-- -------------------------------------------------------- + +-- +-- Table structure for table `stylesheets` +-- + +CREATE TABLE IF NOT EXISTS `stylesheets` ( + `id` tinyint(3) unsigned NOT NULL AUTO_INCREMENT, + `uri` varchar(255) NOT NULL DEFAULT '', + `name` varchar(64) NOT NULL DEFAULT '', + `addicode` text, + `designer` varchar(50) NOT NULL DEFAULT '', + `comment` varchar(255) NOT NULL DEFAULT '', + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=14 ; + +-- +-- Dumping data for table `stylesheets` +-- + +INSERT INTO `stylesheets` (`id`, `uri`, `name`, `addicode`, `designer`, `comment`) VALUES +(2, 'styles/BlueGene/', 'Blue Gene', '', 'Zantetsu', 'HDBits clone'), +(3, 'styles/BlasphemyOrange/', 'Blasphemy Orange', '', 'Zantetsu', 'Bit-HDTV clone'), +(4, 'styles/Classic/', 'Classic', '', 'Zantetsu', 'TBSource original mod'), +(6, 'styles/DarkPassion/', 'Dark Passion', '', 'Zantetsu', ''), +(7, 'styles/BambooGreen/', 'Bamboo Green', '', 'Xia Zuojie', 'Baidu Hi clone'); + +-- -------------------------------------------------------- + +-- +-- Table structure for table `subs` +-- + +CREATE TABLE IF NOT EXISTS `subs` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `torrent_id` mediumint(8) unsigned NOT NULL, + `lang_id` smallint(5) unsigned NOT NULL, + `title` varchar(255) NOT NULL DEFAULT '', + `filename` varchar(255) NOT NULL DEFAULT '', + `added` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `size` bigint(20) unsigned NOT NULL DEFAULT '0', + `uppedby` mediumint(8) unsigned NOT NULL DEFAULT '0', + `anonymous` enum('yes','no') NOT NULL DEFAULT 'no', + `hits` mediumint(8) unsigned NOT NULL DEFAULT '0', + `ext` varchar(10) NOT NULL DEFAULT '', + PRIMARY KEY (`id`), + KEY `torrentid_langid` (`torrent_id`,`lang_id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; + +-- +-- Dumping data for table `subs` +-- + + +-- -------------------------------------------------------- + +-- +-- Table structure for table `suggest` +-- + +CREATE TABLE IF NOT EXISTS `suggest` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `keywords` varchar(255) NOT NULL DEFAULT '', + `userid` mediumint(8) unsigned NOT NULL DEFAULT '0', + `adddate` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + PRIMARY KEY (`id`), + KEY `keywords` (`keywords`(4)), + KEY `adddate` (`adddate`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; + +-- +-- Dumping data for table `suggest` +-- + + +-- -------------------------------------------------------- + +-- +-- Table structure for table `sysoppanel` +-- + +CREATE TABLE IF NOT EXISTS `sysoppanel` ( + `id` tinyint(3) unsigned NOT NULL AUTO_INCREMENT, + `name` varchar(128) NOT NULL DEFAULT '', + `url` varchar(255) NOT NULL DEFAULT '', + `info` varchar(255) NOT NULL DEFAULT '', + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=3028 ; + +-- +-- Dumping data for table `sysoppanel` +-- + +INSERT INTO `sysoppanel` (`id`, `name`, `url`, `info`) VALUES +(1, 'Delete disabled users', 'deletedisabled.php', 'Delete all disabled users'), +(2, 'Manage tracker forum', 'forummanage.php', 'Edit/Delete forum'), +(3, 'MySQL Stats', 'mysql_stats.php', 'See MySql stats'), +(4, 'Mass mailer', 'massmail.php', 'Send e-mail to all users on the tracker'), +(5, 'Do cleanup', 'docleanup.php', 'Do cleanup functions'), +(6, 'Ban System', 'bans.php', 'Ban / Unban IP'), +(7, 'Failed Logins', 'maxlogin.php', 'Show Failed Login Attempts'), +(8, 'Bitbucket', 'bitbucketlog.php', 'Bitbucket Log'), +(9, 'Ban EMAIL address', 'bannedemails.php', 'Ban EMAILs stop registration.'), +(10, 'Allow EMAIL address', 'allowedemails.php', 'Allow EMAIL registration.'), +(11, 'Location', 'location.php', 'Manage location and location speed'), +(12, 'Add Upload', 'amountupload.php', 'Add upload to certain classes'); + +-- -------------------------------------------------------- + +-- +-- Table structure for table `teams` +-- + +CREATE TABLE IF NOT EXISTS `teams` ( + `id` tinyint(3) unsigned NOT NULL AUTO_INCREMENT, + `name` varchar(30) NOT NULL, + `sort_index` tinyint(3) unsigned NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC AUTO_INCREMENT=6 ; + +-- +-- Dumping data for table `teams` +-- + +INSERT INTO `teams` (`id`, `name`, `sort_index`) VALUES +(1, 'HDS', 0), +(2, 'CHD', 0), +(3, 'MySiLU', 0), +(4, 'WiKi', 0), +(5, 'Other', 0); + +-- -------------------------------------------------------- + +-- +-- Table structure for table `thanks` +-- + +CREATE TABLE IF NOT EXISTS `thanks` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `torrentid` mediumint(8) unsigned NOT NULL DEFAULT '0', + `userid` mediumint(8) unsigned NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + UNIQUE KEY `torrentid_id` (`torrentid`,`id`), + KEY `torrentid_userid` (`torrentid`,`userid`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; + +-- +-- Dumping data for table `thanks` +-- + + +-- -------------------------------------------------------- + +-- +-- Table structure for table `topics` +-- + +CREATE TABLE IF NOT EXISTS `topics` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `userid` mediumint(8) unsigned NOT NULL DEFAULT '0', + `subject` varchar(128) NOT NULL, + `locked` enum('yes','no') NOT NULL DEFAULT 'no', + `forumid` smallint(5) unsigned NOT NULL DEFAULT '0', + `firstpost` int(10) unsigned NOT NULL DEFAULT '0', + `lastpost` int(10) unsigned NOT NULL DEFAULT '0', + `sticky` enum('no','yes') NOT NULL DEFAULT 'no', + `hlcolor` tinyint(3) unsigned NOT NULL DEFAULT '0', + `views` int(10) unsigned NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `userid` (`userid`), + KEY `subject` (`subject`), + KEY `forumid_lastpost` (`forumid`,`lastpost`), + KEY `forumid_sticky_lastpost` (`forumid`,`sticky`,`lastpost`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; + +-- +-- Dumping data for table `topics` +-- + + +-- -------------------------------------------------------- + +-- +-- Table structure for table `torrents` +-- + +CREATE TABLE IF NOT EXISTS `torrents` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `info_hash` binary(20) NOT NULL, + `name` varchar(255) NOT NULL DEFAULT '', + `filename` varchar(255) NOT NULL DEFAULT '', + `save_as` varchar(255) NOT NULL DEFAULT '', + `descr` text, + `small_descr` varchar(255) NOT NULL DEFAULT '', + `ori_descr` text, + `category` smallint(5) unsigned NOT NULL DEFAULT '0', + `source` tinyint(3) unsigned NOT NULL DEFAULT '0', + `medium` tinyint(3) unsigned NOT NULL DEFAULT '0', + `codec` tinyint(3) unsigned NOT NULL DEFAULT '0', + `standard` tinyint(3) unsigned NOT NULL DEFAULT '0', + `processing` tinyint(3) unsigned NOT NULL DEFAULT '0', + `team` tinyint(3) unsigned NOT NULL DEFAULT '0', + `audiocodec` tinyint(3) unsigned NOT NULL DEFAULT '0', + `size` bigint(20) unsigned NOT NULL DEFAULT '0', + `added` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `type` enum('single','multi') NOT NULL DEFAULT 'single', + `numfiles` smallint(5) unsigned NOT NULL DEFAULT '0', + `comments` mediumint(8) unsigned NOT NULL DEFAULT '0', + `views` int(10) unsigned NOT NULL DEFAULT '0', + `hits` int(10) unsigned NOT NULL DEFAULT '0', + `times_completed` mediumint(8) unsigned NOT NULL DEFAULT '0', + `leechers` mediumint(8) unsigned NOT NULL DEFAULT '0', + `seeders` mediumint(8) unsigned NOT NULL DEFAULT '0', + `last_action` 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', + `owner` mediumint(8) unsigned NOT NULL DEFAULT '0', + `nfo` blob, + `sp_state` tinyint(3) unsigned NOT NULL DEFAULT '1', + `anonymous` enum('yes','no') NOT NULL DEFAULT 'no', + `url` int(10) unsigned DEFAULT NULL, + `pos_state` enum('normal','sticky') NOT NULL DEFAULT 'normal', + `cache_stamp` tinyint(3) unsigned NOT NULL DEFAULT '0', + `picktype` enum('hot','classic','recommended','normal') NOT NULL DEFAULT 'normal', + `picktime` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `sp_state_temp` enum('2up_free','2up','free','half_down','normal') NOT NULL DEFAULT 'normal', + `last_reseed` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + PRIMARY KEY (`id`), + UNIQUE KEY `info_hash` (`info_hash`), + KEY `owner` (`owner`), + KEY `visible_pos_id` (`visible`,`pos_state`,`id`), + KEY `url` (`url`), + KEY `category_visible_banned` (`category`,`visible`,`banned`), + KEY `visible_banned_pos_id` (`visible`,`banned`,`pos_state`,`id`), + FULLTEXT KEY `name` (`name`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; + +-- +-- Dumping data for table `torrents` +-- + + +-- -------------------------------------------------------- + +-- +-- Table structure for table `torrents_state` +-- + +CREATE TABLE IF NOT EXISTS `torrents_state` ( + `global_sp_state` tinyint(3) unsigned NOT NULL DEFAULT '1' +) ENGINE=MyISAM DEFAULT CHARSET=utf8; + +-- +-- Dumping data for table `torrents_state` +-- + +INSERT INTO `torrents_state` (`global_sp_state`) VALUES +(1); + +-- -------------------------------------------------------- + +-- +-- Table structure for table `uploadspeed` +-- + +CREATE TABLE IF NOT EXISTS `uploadspeed` ( + `id` tinyint(3) unsigned NOT NULL AUTO_INCREMENT, + `name` varchar(50) DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=19 ; + +-- +-- Dumping data for table `uploadspeed` +-- + +INSERT INTO `uploadspeed` (`id`, `name`) VALUES +(1, '64kbps'), +(2, '128kbps'), +(3, '256kbps'), +(4, '512kbps'), +(5, '768kbps'), +(6, '1Mbps'), +(7, '1.5Mbps'), +(8, '2Mbps'), +(9, '3Mbps'), +(10, '4Mbps'), +(11, '5Mbps'), +(12, '6Mbps'), +(13, '7Mbps'), +(14, '8Mbps'), +(15, '9Mbps'), +(16, '10Mbps'), +(17, '48Mbps'), +(18, '100Mbit'); + +-- -------------------------------------------------------- + +-- +-- Table structure for table `users` +-- + +CREATE TABLE IF NOT EXISTS `users` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `username` varchar(40) NOT NULL DEFAULT '', + `passhash` varchar(32) NOT NULL DEFAULT '', + `secret` varbinary(20) NOT NULL, + `email` varchar(80) NOT NULL DEFAULT '', + `status` enum('pending','confirmed') NOT NULL DEFAULT 'pending', + `added` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `last_login` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `last_access` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `last_home` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `last_offer` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `forum_access` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `last_staffmsg` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `last_pm` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `last_comment` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `last_post` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `last_browse` int(10) unsigned NOT NULL DEFAULT '0', + `last_music` int(10) unsigned NOT NULL DEFAULT '0', + `last_catchup` int(10) unsigned NOT NULL DEFAULT '0', + `editsecret` varbinary(20) NOT NULL, + `privacy` enum('strong','normal','low') NOT NULL DEFAULT 'normal', + `stylesheet` tinyint(3) unsigned NOT NULL DEFAULT '1', + `caticon` tinyint(3) unsigned NOT NULL DEFAULT '1', + `fontsize` enum('small','medium','large') NOT NULL DEFAULT 'medium', + `info` text, + `acceptpms` enum('yes','friends','no') NOT NULL DEFAULT 'yes', + `commentpm` enum('yes','no') NOT NULL DEFAULT 'yes', + `ip` varchar(64) NOT NULL DEFAULT '', + `class` tinyint(3) unsigned NOT NULL DEFAULT '1', + `max_class_once` tinyint(3) NOT NULL DEFAULT '1', + `avatar` varchar(255) NOT NULL DEFAULT '', + `uploaded` bigint(20) unsigned NOT NULL DEFAULT '0', + `downloaded` bigint(20) unsigned NOT NULL DEFAULT '0', + `seedtime` bigint(20) unsigned NOT NULL DEFAULT '0', + `leechtime` bigint(20) unsigned NOT NULL DEFAULT '0', + `title` varchar(30) NOT NULL DEFAULT '', + `country` smallint(5) unsigned NOT NULL DEFAULT '107', + `notifs` varchar(500) DEFAULT NULL, + `modcomment` text, + `enabled` enum('yes','no') NOT NULL DEFAULT 'yes', + `avatars` enum('yes','no') NOT NULL DEFAULT 'yes', + `donor` enum('yes','no') NOT NULL DEFAULT 'no', + `donated` decimal(8,2) NOT NULL DEFAULT '0.00', + `donated_cny` decimal(8,2) NOT NULL DEFAULT '0.00', + `donoruntil` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `warned` enum('yes','no') NOT NULL DEFAULT 'no', + `warneduntil` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `noad` enum('yes','no') NOT NULL DEFAULT 'no', + `noaduntil` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `torrentsperpage` tinyint(3) unsigned NOT NULL DEFAULT '0', + `topicsperpage` tinyint(3) unsigned NOT NULL DEFAULT '0', + `postsperpage` tinyint(3) unsigned NOT NULL DEFAULT '0', + `clicktopic` enum('firstpage','lastpage') NOT NULL DEFAULT 'firstpage', + `deletepms` enum('yes','no') NOT NULL DEFAULT 'yes', + `savepms` enum('yes','no') NOT NULL DEFAULT 'no', + `showhot` enum('yes','no') NOT NULL DEFAULT 'yes', + `showclassic` enum('yes','no') NOT NULL DEFAULT 'yes', + `support` enum('yes','no') NOT NULL DEFAULT 'no', + `picker` enum('yes','no') NOT NULL DEFAULT 'no', + `stafffor` varchar(255) NOT NULL, + `supportfor` varchar(255) NOT NULL, + `pickfor` varchar(255) NOT NULL, + `supportlang` varchar(50) NOT NULL, + `passkey` varchar(32) NOT NULL DEFAULT '', + `promotion_link` varchar(32) DEFAULT NULL, + `uploadpos` enum('yes','no') NOT NULL DEFAULT 'yes', + `forumpost` enum('yes','no') NOT NULL DEFAULT 'yes', + `downloadpos` enum('yes','no') NOT NULL DEFAULT 'yes', + `clientselect` tinyint(3) unsigned NOT NULL DEFAULT '0', + `signatures` enum('yes','no') NOT NULL DEFAULT 'yes', + `signature` varchar(800) NOT NULL DEFAULT '', + `lang` smallint(5) unsigned NOT NULL DEFAULT '6', + `cheat` smallint(6) NOT NULL DEFAULT '0', + `download` int(10) unsigned NOT NULL DEFAULT '0', + `upload` int(10) unsigned NOT NULL DEFAULT '0', + `isp` tinyint(3) unsigned NOT NULL DEFAULT '0', + `invites` smallint(5) unsigned NOT NULL DEFAULT '0', + `invited_by` mediumint(8) unsigned NOT NULL DEFAULT '0', + `gender` enum('Male','Female','N/A') NOT NULL DEFAULT 'N/A', + `vip_added` enum('yes','no') NOT NULL DEFAULT 'no', + `vip_until` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `seedbonus` decimal(10,1) NOT NULL DEFAULT '0.0', + `charity` decimal(10,1) NOT NULL DEFAULT '0.0', + `bonuscomment` text, + `parked` enum('yes','no') NOT NULL DEFAULT 'no', + `leechwarn` enum('yes','no') NOT NULL DEFAULT 'no', + `leechwarnuntil` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `lastwarned` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `timeswarned` tinyint(3) unsigned NOT NULL DEFAULT '0', + `warnedby` mediumint(8) unsigned NOT NULL DEFAULT '0', + `sbnum` tinyint(3) unsigned NOT NULL DEFAULT '70', + `sbrefresh` smallint(5) unsigned NOT NULL DEFAULT '120', + `hidehb` enum('yes','no') DEFAULT 'no', + `showimdb` enum('yes','no') DEFAULT 'yes', + `showdescription` enum('yes','no') DEFAULT 'yes', + `showcomment` enum('yes','no') DEFAULT 'yes', + `showclienterror` enum('yes','no') NOT NULL DEFAULT 'no', + `showdlnotice` tinyint(1) NOT NULL DEFAULT '1', + `tooltip` enum('minorimdb','medianimdb','off') NOT NULL DEFAULT 'off', + `shownfo` enum('yes','no') DEFAULT 'yes', + `timetype` enum('timeadded','timealive') DEFAULT 'timealive', + `appendsticky` enum('yes','no') DEFAULT 'yes', + `appendnew` enum('yes','no') DEFAULT 'yes', + `appendpromotion` enum('highlight','word','icon','off') DEFAULT 'icon', + `appendpicked` enum('yes','no') DEFAULT 'yes', + `dlicon` enum('yes','no') DEFAULT 'yes', + `bmicon` enum('yes','no') DEFAULT 'yes', + `showsmalldescr` enum('yes','no') NOT NULL DEFAULT 'yes', + `showcomnum` enum('yes','no') DEFAULT 'yes', + `showlastcom` enum('yes','no') DEFAULT 'no', + `showlastpost` enum('yes','no') NOT NULL DEFAULT 'no', + `pmnum` tinyint(3) unsigned NOT NULL DEFAULT '10', + `school` smallint(5) unsigned NOT NULL DEFAULT '35', + `showfb` enum('yes','no') NOT NULL DEFAULT 'yes', + PRIMARY KEY (`id`), + UNIQUE KEY `username` (`username`), + KEY `status_added` (`status`,`added`), + KEY `ip` (`ip`), + KEY `uploaded` (`uploaded`), + KEY `downloaded` (`downloaded`), + KEY `country` (`country`), + KEY `last_access` (`last_access`), + KEY `enabled` (`enabled`), + KEY `warned` (`warned`), + KEY `cheat` (`cheat`), + KEY `class` (`class`), + KEY `passkey` (`passkey`(8)) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; + +-- +-- Dumping data for table `users` +-- +-- 2010-06-03 +ALTER TABLE `users` CHANGE `sbnum` `sbnum` SMALLINT UNSIGNED NOT NULL DEFAULT '70' ; +DELETE FROM `adminpanel` WHERE `adminpanel`.`id` = 5 LIMIT 1; +-- 2009.11.17 +CREATE TABLE IF NOT EXISTS `adclicks` ( + `id` int(11) unsigned NOT NULL AUTO_INCREMENT, + `adid` int(11) unsigned DEFAULT NULL, + `userid` int(11) unsigned DEFAULT NULL, + `added` datetime DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +-- 2010-06-15 +ALTER TABLE `torrents` ADD `promotion_time_type` TINYINT UNSIGNED NOT NULL DEFAULT '0' AFTER `sp_state` ; +ALTER TABLE `torrents` ADD `promotion_until` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00' AFTER `promotion_time_type` ; +-- 2010-09-05 + ALTER TABLE `friends` CHANGE `id` `id` INT( 10 ) UNSIGNED NOT NULL AUTO_INCREMENT ; +ALTER TABLE `torrents` DROP `sp_state_temp`; +-- 2011-12-02 +INSERT INTO `agent_allowed_family` ( +`id` , +`family` , +`start_name` , +`peer_id_pattern` , +`peer_id_match_num` , +`peer_id_matchtype` , +`peer_id_start` , +`agent_pattern` , +`agent_match_num` , +`agent_matchtype` , +`agent_start` , +`exception` , +`allowhttps` , +`comment` , +`hits` +) +VALUES ( +NULL , 'Transmission2.x', 'Transmission 2.0', '/^-TR2([0-9])([0-9])([0-9])-/', '3', 'dec', '-TR2000-', '/^Transmission\\/2\\.([0-9])([0-9])/', '3', 'dec', 'Transmission/2.00', 'no', 'yes', '', '0' +); +INSERT INTO `agent_allowed_family` ( +`id` , +`family` , +`start_name` , +`peer_id_pattern` , +`peer_id_match_num` , +`peer_id_matchtype` , +`peer_id_start` , +`agent_pattern` , +`agent_match_num` , +`agent_matchtype` , +`agent_start` , +`exception` , +`allowhttps` , +`comment` , +`hits` +) +VALUES ( +NULL , 'uTorrent 3.x', 'uTorrent/3000', '/^-UT3([0-9])([0-9])([0-9])-/', '3', 'dec', '-UT3000-', '/^uTorrent\\/3([0-9])([0-9])([0-9])/', '3', 'dec', 'uTorrent/3000', 'no', 'yes', '', '0' +); diff --git a/_doc/.htaccess b/_doc/.htaccess new file mode 100644 index 00000000..4e6e97e1 --- /dev/null +++ b/_doc/.htaccess @@ -0,0 +1,3 @@ +Options +Indexes +Order allow,deny +Allow from all diff --git a/aboutnexus.php b/aboutnexus.php new file mode 100644 index 00000000..4a172424 --- /dev/null +++ b/aboutnexus.php @@ -0,0 +1,65 @@ +".PROJECTNAME.""); +begin_main_frame(); +begin_frame("".$lang_aboutnexus['text_version'].""); +print ($lang_aboutnexus['text_version_note']); +print ("

"); +tr($lang_aboutnexus['text_main_version'],$mainversion_code,1); +tr($lang_aboutnexus['text_sub_version'],$subversion_code,1); +tr($lang_aboutnexus['text_release_date'],$releasedate_code,1); +print ("
"); +print ("

"); +end_frame(); +begin_frame("".$lang_aboutnexus['text_nexus'].PROJECTNAME.""); +print (PROJECTNAME.$lang_aboutnexus['text_nexus_note']); +print ("

"); +end_frame(); +begin_frame("".$lang_aboutnexus['text_authorization'].""); +print ($lang_aboutnexus['text_authorization_note']); +print ("

"); +end_frame(); +unset($ppl); +$res = sql_query("SELECT * FROM language ORDER BY trans_state") or sqlerr(); +while ($arr = mysql_fetch_assoc($res)) +{ + $ppl .= "\"".$arr[lang_name]."\" + ".$arr['lang_name']."". + "".$arr['trans_state']."\n"; +} +begin_frame("".$lang_aboutnexus['text_translation'].""); +print (PROJECTNAME.$lang_aboutnexus['text_translation_note']); +print ("

"); +print ($ppl); +print ("
".$lang_aboutnexus['text_flag']."".$lang_aboutnexus['text_language']."".$lang_aboutnexus['text_state']."
"); +print ("

"); +end_frame(); +unset($ppl); +$res = sql_query("SELECT * FROM stylesheets ORDER BY id") or sqlerr(); +while ($arr = mysql_fetch_assoc($res)) +{ + $ppl .= "".$arr['name']." + ".$arr['designer']."". + "".$arr['comment']."\n"; +} +begin_frame("".$lang_aboutnexus['text_stylesheet'].""); +print ($lang_aboutnexus['text_stylesheet_note']); +print ("

"); +print ($ppl); +print ("
".$lang_aboutnexus['text_name']."".$lang_aboutnexus['text_designer']."".$lang_aboutnexus['text_comment']."
"); +print ("

"); +end_frame(); +begin_frame("".$lang_aboutnexus['text_contact'].PROJECTNAME.""); +print ($lang_aboutnexus['text_contact_note']); +print ("

"); +tr($lang_aboutnexus['text_web_site'],$website_code ? $website_code : "N/A",1); +print ("
"); +print ("

"); +end_frame(); +end_main_frame(); +stdfoot(); +?> diff --git a/adduser.php b/adduser.php new file mode 100644 index 00000000..560830a8 --- /dev/null +++ b/adduser.php @@ -0,0 +1,58 @@ + +

Add user

+
+ + + + + + +
User name
Password
Re-type password
E-mail
+
+ +
+

-

+

+

+ +*", " " . $lang_admanage['text_name_note'], 1); +tr($lang_admanage['row_start_time'], " " . $lang_admanage['text_start_time_note'], 1); +tr($lang_admanage['row_end_time'], " ".$lang_admanage['text_end_time_note'], 1); +tr($lang_admanage['row_order'], " ".$lang_admanage['text_order_note'], 1); +tr($lang_admanage['row_enabled']."*", "".$lang_admanage['text_yes']."".$lang_admanage['text_no']."
".$lang_admanage['text_enabled_note'], 1); +tr($lang_admanage['row_type']."*", " ".$lang_admanage['text_type_note'], 1); +?> +
+
> +

+ +*", " ".$lang_admanage['text_image_url_note'], 1); +tr($lang_admanage['row_image_link']."*", " ".$lang_admanage['text_image_link_note'], 1); +tr($lang_admanage['row_image_width'], " ".$lang_admanage['text_image_width_note'], 1); +tr($lang_admanage['row_image_height'], " ".$lang_admanage['text_image_height_note'], 1); +tr($lang_admanage['row_image_tooltip'], " ".$lang_admanage['text_image_tooltip_note'], 1); +?> +
+
+
> +

+ +*", " ".$lang_admanage['text_text_content_note'], 1); +tr($lang_admanage['row_text_link']."*", " ".$lang_admanage['text_text_link_note'], 1); +tr($lang_admanage['row_text_size'], " ".$lang_admanage['text_text_size_note'], 1); +?> +
+
+
> +

+ +*", "
".$lang_admanage['text_bbcodes_code_note']."".$lang_admanage['text_here']."", 1); +?> +
+
+
> +

+ +*", "
".$lang_admanage['text_xhmtl_code_note'], 1); +?> +
+
+
> +

+ +*", " ".$lang_admanage['text_flash_url_note'], 1); +tr($lang_admanage['row_flash_width']."*", " ".$lang_admanage['text_flash_width_note'], 1); +tr($lang_admanage['row_flash_height']."*", " ".$lang_admanage['text_flash_height_note'], 1); +?> +
+
+
+ +
+
+delete_value('current_ad_array', false); + header("Location: ".get_protocol_prefix() . $BASEURL."/admanage.php"); + die(); +} +elseif ($action == 'edit') +{ + $id = 0 + $_GET['id']; + if (!$id) + { + stderr($lang_admanage['std_error'], $lang_admanage['std_invalid_id']); + } + else + { + $res = sql_query("SELECT * FROM advertisements WHERE id = ".sqlesc($id)." LIMIT 1"); + if (!$row = mysql_fetch_array($res)) + stderr($lang_admanage['std_error'], $lang_admanage['std_invalid_id']); + else + { + $position = $row['position']; + stdhead($lang_admanage['head_edit_ad']); + print("
"); + print(""); + print(""); + print_ad_editor($position, $row); + print("
"); + stdfoot(); + } + } +} +elseif ($action == 'add') +{ + $position = $_GET['position']; + $validpos = array('header', 'footer', 'belownav', 'belowsearchbox', 'torrentdetail', 'comment', 'interoverforums', 'forumpost', 'popup'); + if (!in_array($position, $validpos)) + stderr($lang_admanage['std_error'], $lang_admanage['std_invalid_position']); + else + { + stdhead($lang_admanage['head_add_ad']); + print("
"); + print(""); + print_ad_editor($position); + print("
"); + stdfoot(); + } +} +elseif ($action == 'submit') +{ + $position = $_GET['position']; + $validpos = array('header', 'footer', 'belownav', 'belowsearchbox', 'torrentdetail', 'comment', 'interoverforums', 'forumpost', 'popup'); + if (!in_array($position, $validpos)) + stderr($lang_admanage['std_error'], $lang_admanage['std_invalid_position']); + else + { + if ($_POST['isedit']){ + $id = 0 + $_POST['id']; + if (!$id) + { + stderr($lang_admanage['std_error'], $lang_admanage['std_invalid_id']); + } + else + { + $adid = $id; + $res = sql_query("SELECT * FROM advertisements WHERE id = ".sqlesc($id)." LIMIT 1"); + if (!$row = mysql_fetch_array($res)) + stderr($lang_admanage['std_error'], $lang_admanage['std_invalid_id']); + } + } + else + { + $res = sql_query("SELECT id FROM advertisements ORDER BY id DESC LIMIT 1"); + $row = mysql_fetch_array($res); + if (!$row) + $adid = 1; + else $adid = $row['id']+1; + } + $name = $_POST['ad']['name']; + $starttime = $_POST['ad']['starttime']; + $endtime = $_POST['ad']['endtime']; + $displayorder = 0+$_POST['ad']['displayorder']; + $enabled = 0+$_POST['ad']['enabled']; + $type = $_POST['ad']['type']; + if (!$name || !$type) + { + stderr($lang_admanage['std_error'], $lang_admanage['std_missing_form_data']); + } + if (get_user_class() >= $allowxhtmlclass) + $validtype = array('bbcodes', 'xhtml', 'text', 'image', 'flash'); + else + $validtype = array('bbcodes', 'text', 'image', 'flash'); + if (!in_array($type, $validtype)) + stderr($lang_admanage['std_error'], $lang_admanage['std_invalid_type']); + switch ($type) + { + case 'bbcodes': + if (!$_POST['ad']['bbcodes']['code']) + stderr($lang_admanage['std_error'], $lang_admanage['std_missing_form_data']); + $parameters = serialize($_POST['ad']['bbcodes']); + $code = format_comment($_POST['ad']['bbcodes']['code'], true, false, true, true, 700, true, true, -1, 0, $adid); + break; + case 'xhtml': + if (!$_POST['ad']['xhtml']['code']) + stderr($lang_admanage['std_error'], $lang_admanage['std_missing_form_data']); + $parameters = serialize($_POST['ad']['xhtml']); + $code = $_POST['ad']['xhtml']['code']; + break; + case 'text': + if (!$_POST['ad']['text']['content'] || !$_POST['ad']['text']['link']) + stderr($lang_admanage['std_error'], $lang_admanage['std_missing_form_data']); + $parameters = serialize($_POST['ad']['text']); + $content = htmlspecialchars($_POST['ad']['text']['content']); + if ($_POST['ad']['text']['size']) + $content = "".$content.""; + else + $content = "".$content.""; + $code = "".$content.""; + break; + case 'image': + if (!$_POST['ad']['image']['url'] || !$_POST['ad']['image']['link']) + stderr($lang_admanage['std_error'], $lang_admanage['std_missing_form_data']); + $_POST['ad']['image']['width'] = 0+$_POST['ad']['image']['width']; + $_POST['ad']['image']['height'] = 0+$_POST['ad']['image']['height']; + $parameters = serialize($_POST['ad']['image']); + $imgadd = ""; + if ($_POST['ad']['image']['width']) + $imgadd .= " width=\"".$_POST['ad']['image']['width']."\""; + if ($_POST['ad']['image']['height']) + $imgadd .= " height=\"".$_POST['ad']['image']['height']."\""; + if ($_POST['ad']['image']['title']) + $imgadd .= " title=\"".$_POST['ad']['image']['title']."\""; + $code = "\"ad\""; + break; + case 'flash': + $_POST['ad']['flash']['width'] = 0+$_POST['ad']['flash']['width']; + $_POST['ad']['flash']['height'] = 0+$_POST['ad']['flash']['height']; + if (!$_POST['ad']['flash']['url'] || !$_POST['ad']['flash']['width'] || !$_POST['ad']['flash']['height']) + stderr($lang_admanage['std_error'], $lang_admanage['std_missing_form_data']); + $parameters = serialize($_POST['ad']['flash']); + $code = ""; + break; + } + if ($_POST['isedit']){ + sql_query("UPDATE advertisements SET enabled=".sqlesc($enabled).", type=".sqlesc($type).", displayorder=".sqlesc($displayorder).", name=".sqlesc($name).", parameters=".sqlesc($parameters).", code=".sqlesc($code).", starttime=".($starttime ? sqlesc($starttime) : "NULL").", endtime=".($endtime ? sqlesc($endtime) : "NULL")." WHERE id=".sqlesc($id)) or sqlerr(__FILE__, __LINE__); + $Cache->delete_value('current_ad_array', false); + stderr($lang_admanage['std_success'], $lang_admanage['std_edit_success']."".$lang_admanage['std_go_back']."", false); + } + else + { + sql_query("INSERT INTO advertisements (`enabled`, `type`, `position`, `displayorder`, `name`, `parameters`, `code`, `starttime`, `endtime`) VALUES (".sqlesc($enabled).", ".sqlesc($type).", ".sqlesc($position).", ".sqlesc($displayorder).", ".sqlesc($name).", ".sqlesc($parameters).", ".sqlesc($code).", ".($starttime ? sqlesc($starttime) : "NULL").", ".($endtime ? sqlesc($endtime) : "NULL").")") or sqlerr(__FILE__, __LINE__); + $Cache->delete_value('current_ad_array', false); + stderr($lang_admanage['std_success'], $lang_admanage['std_add_success']."".$lang_admanage['std_go_back']."", false); + } + } +} +else +{ +stdhead($lang_admanage['head_ad_management']); +begin_main_frame(); +?> +

+
+ + + +
+
+".$lang_admanage['text_no_ads_yet']."

"); + else{ + list($pagertop, $pagerbottom, $limit) = pager($perpage, $num, "?"); + $res = sql_query("SELECT * FROM advertisements ORDER BY id DESC ".(int)$limit) or sqlerr(__FILE__, __LINE__); +?> + + + + + + + + + + + + + + + + + + + + + + + + + +
".$lang_admanage['text_yes']."" : "".$lang_admanage['text_no']."" ?> |
+ +
+ diff --git a/adredir.php b/adredir.php new file mode 100644 index 00000000..c4e89e02 --- /dev/null +++ b/adredir.php @@ -0,0 +1,22 @@ +\n"); +print("ClientPeer ID\n"); +while($arr2 = mysql_fetch_assoc($res2)) +{ + print("$arr2[agent]$arr2[peer_id]\n"); +} +print("\n"); +stdfoot(); diff --git a/allowedemails.php b/allowedemails.php new file mode 100644 index 00000000..ac62a508 --- /dev/null +++ b/allowedemails.php @@ -0,0 +1,32 @@ +\n"); + $sql = sql_query("SELECT * FROM allowedemails") or sqlerr(__FILE__, __LINE__); + $list = mysql_fetch_array($sql); +?> +
+ +Enter a list of allowed email addresses (separated by spaces):
To allow a specific address enter "email@domain.com", to allow an entire domain enter "@domain.com" + +
+ + +

Update Users Bonus Amounts

+"; +print("\n"); +?> + + + + + + + + +
User name
Bonus
+ + + + + +
+Are you sure you want to give all confirmed users 25.0 extra bonus point?

+ +
+
+

Add upload to all staff members and users:

+
+ +"> + + + + + + + + + + + + + + +
Upload amount has been added and inform message has been sent.
Amount  (in GB)
Add to + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Peasant + User + Power User + Elite User
+ Crazy User + Insane User + Veteran User + Extreme User
+ Ultimate User + Nexus Master + VIP + Uploader
+ Moderator + Administrator + SysOp + Staff Leader  
+
Subject
Reason
Operator:   + + +  System + +
+> +
+ +
+
+NOTE: Do not user BB codes. (NO HTML) + 0xffff) + err("invalid port"); +if (!ip2long($ip)) //Disable compact announce with IPv6 + $compact = 0; + +// check port and connectable +if (portblacklisted($port)) + err("Port $port is blacklisted."); + +//5. GET PEER LIST +// Number of peers that the client would like to receive from the tracker.This value is permitted to be zero. If omitted, typically defaults to 50 peers. +$rsize = 50; +foreach(array("numwant", "num want", "num_want") as $k) +{ + if (isset($_GET[$k])) + { + $rsize = 0 + $_GET[$k]; + break; + } +} + +// set if seeder based on left field +$seeder = ($left == 0) ? "yes" : "no"; + +// check passkey +if (!$az = $Cache->get_value('user_passkey_'.$passkey.'_content')){ + $res = sql_query("SELECT id, downloadpos, enabled, uploaded, downloaded, class, parked, clientselect, showclienterror FROM users WHERE passkey=". sqlesc($passkey)." LIMIT 1"); + $az = mysql_fetch_array($res); + $Cache->cache_value('user_passkey_'.$passkey.'_content', $az, 950); +} +if (!$az) err("Invalid passkey! Re-download the .torrent from $BASEURL"); +$userid = 0+$az['id']; + +//3. CHECK IF CLIENT IS ALLOWED +$clicheck_res = check_client($peer_id,$agent,$client_familyid); +if($clicheck_res){ + if ($az['showclienterror'] == 'no') + { + sql_query("UPDATE users SET showclienterror = 'yes' WHERE id = ".sqlesc($userid)); + $Cache->delete_value('user_passkey_'.$passkey.'_content'); + } + err($clicheck_res); +} +elseif ($az['showclienterror'] == 'yes'){ + $USERUPDATESET[] = "showclienterror = 'no'"; + $Cache->delete_value('user_passkey_'.$passkey.'_content'); +} + +// check torrent based on info_hash +if (!$torrent = $Cache->get_value('torrent_hash_'.$info_hash.'_content')){ + $res = sql_query("SELECT id, owner, sp_state, seeders, leechers, UNIX_TIMESTAMP(added) AS ts, banned FROM torrents WHERE " . hash_where("info_hash", $info_hash)); + $torrent = mysql_fetch_array($res); + $Cache->cache_value('torrent_hash_'.$info_hash.'_content', $torrent, 350); +} +if (!$torrent) err("torrent not registered with this tracker"); +elseif ($torrent['banned'] == 'yes' && $az['class'] < $seebanned_class) err("torrent banned"); +// select peers info from peers table for this torrent +$torrentid = $torrent["id"]; +$numpeers = $torrent["seeders"]+$torrent["leechers"]; + +if ($seeder == 'yes'){ //Don't report seeds to other seeders + $only_leech_query = " AND seeder = 'no' "; + $newnumpeers = $torrent["leechers"]; +} +else{ + $only_leech_query = ""; + $newnumpeers = $numpeers; +} +if ($newnumpeers > $rsize) + $limit = " ORDER BY RAND() LIMIT $rsize"; +else $limit = ""; +$announce_wait = 30; + +$fields = "seeder, peer_id, ip, port, uploaded, downloaded, (".TIMENOW." - UNIX_TIMESTAMP(last_action)) AS announcetime, UNIX_TIMESTAMP(prev_action) AS prevts"; +$peerlistsql = "SELECT ".$fields." FROM peers WHERE torrent = ".$torrentid." AND connectable = 'yes' ".$only_leech_query.$limit; +$res = sql_query($peerlistsql); + +$real_annnounce_interval = $announce_interval; +if ($anninterthreeage && ($anninterthree > $announce_wait) && (TIMENOW - $torrent['ts']) >= ($anninterthreeage * 86400)) +$real_annnounce_interval = $anninterthree; +elseif ($annintertwoage && ($annintertwo > $announce_wait) && (TIMENOW - $torrent['ts']) >= ($annintertwoage * 86400)) +$real_annnounce_interval = $annintertwo; + +$resp = "d" . benc_str("interval") . "i" . $real_annnounce_interval . "e" . benc_str("min interval") . "i" . $announce_wait . "e". benc_str("complete") . "i" . $torrent["seeders"] . "e" . benc_str("incomplete") . "i" . $torrent["leechers"] . "e" . benc_str("peers"); + +$peer_list = ""; +unset($self); +// bencoding the peers info get for this announce +while ($row = mysql_fetch_assoc($res)) +{ + $row["peer_id"] = hash_pad($row["peer_id"]); + + // $peer_id is the announcer's peer_id while $row["peer_id"] is randomly selected from the peers table + if ($row["peer_id"] === $peer_id) + { + $self = $row; + continue; + } +if ($compact == 1){ + $longip = ip2long($row['ip']); + if ($longip) //Ignore ipv6 address + $peer_list .= pack("Nn", sprintf("%d",$longip), $row['port']); +} +elseif ($no_peer_id == 1) + $peer_list .= "d" . + benc_str("ip") . benc_str($row["ip"]) . + benc_str("port") . "i" . $row["port"] . "e" . + "e"; +else + $peer_list .= "d" . + benc_str("ip") . benc_str($row["ip"]) . + benc_str("peer id") . benc_str($row["peer_id"]) . + benc_str("port") . "i" . $row["port"] . "e" . + "e"; +} +if ($compact == 1) +$resp .= benc_str($peer_list); +else +$resp .= "l".$peer_list."e"; + +$resp .= "e"; +$selfwhere = "torrent = $torrentid AND " . hash_where("peer_id", $peer_id); + +//no found in the above random selection +if (!isset($self)) +{ + $res = sql_query("SELECT $fields FROM peers WHERE $selfwhere LIMIT 1"); + $row = mysql_fetch_assoc($res); + if ($row) + { + $self = $row; + } +} + +// min announce time +if(isset($self) && $self['prevts'] > (TIMENOW - $announce_wait)) + err('There is a minimum announce time of ' . $announce_wait . ' seconds'); + +// current peer_id, or you could say session with tracker not found in table peers +if (!isset($self)) +{ + $valid = @mysql_fetch_row(@sql_query("SELECT COUNT(*) FROM peers WHERE torrent=$torrentid AND userid=" . sqlesc($userid))); + if ($valid[0] >= 1 && $seeder == 'no') err("You already are downloading the same torrent. You may only leech from one location at a time."); + if ($valid[0] >= 3 && $seeder == 'yes') err("You cannot seed the same torrent from more than 3 locations."); + + if ($az["enabled"] == "no") + err("Your account is disabled!"); + elseif ($az["parked"] == "yes") + err("Your account is parked! (Read the FAQ)"); + elseif ($az["downloadpos"] == "no") + err("Your downloading priviledges have been disabled! (Read the rules)"); + + if ($az["class"] < UC_VIP) + { + $ratio = (($az["downloaded"] > 0) ? ($az["uploaded"] / $az["downloaded"]) : 1); + $gigs = $az["downloaded"] / (1024*1024*1024); + if ($waitsystem == "yes") + { + if($gigs > 10) + { + $elapsed = strtotime(date("Y-m-d H:i:s")) - $torrent["ts"]; + if ($ratio < 0.4) $wait = 24; + elseif ($ratio < 0.5) $wait = 12; + elseif ($ratio < 0.6) $wait = 6; + elseif ($ratio < 0.8) $wait = 3; + else $wait = 0; + + if ($elapsed < $wait) + err("Your ratio is too low! You need to wait " . mkprettytime($wait * 3600 - $elapsed) . " to start, please read $BASEURL/faq.php#id46 for details"); + } + } + if ($maxdlsystem == "yes") + { + if($gigs > 10) + if ($ratio < 0.5) $max = 1; + elseif ($ratio < 0.65) $max = 2; + elseif ($ratio < 0.8) $max = 3; + elseif ($ratio < 0.95) $max = 4; + else $max = 0; + if ($max > 0) + { + $res = sql_query("SELECT COUNT(*) AS num FROM peers WHERE userid='$userid' AND seeder='no'") or err("Tracker error 5"); + $row = mysql_fetch_assoc($res); + if ($row['num'] >= $max) err("Your slot limit is reached! You may at most download $max torrents at the same time, please read $BASEURL/faq.php#id66 for details"); + } + } + } +} +else // continue an existing session +{ + $upthis = $trueupthis = max(0, $uploaded - $self["uploaded"]); + $downthis = $truedownthis = max(0, $downloaded - $self["downloaded"]); + $announcetime = ($self["seeder"] == "yes" ? "seedtime = seedtime + $self[announcetime]" : "leechtime = leechtime + $self[announcetime]"); + $is_cheater = false; + + if ($cheaterdet_security){ + if ($az['class'] < $nodetect_security && $self['announcetime'] > 10) + { + $is_cheater = check_cheater($userid, $torrent['id'], $upthis, $downthis, $self['announcetime'], $torrent['seeders'], $torrent['leechers']); + } + } + + if (!$is_cheater && ($trueupthis > 0 || $truedownthis > 0)) + { + $global_promotion_state = get_global_sp_state(); + if($global_promotion_state == 1)// Normal, see individual torrent + { + if($torrent['sp_state']==3) //2X + { + $USERUPDATESET[] = "uploaded = uploaded + 2*$trueupthis"; + $USERUPDATESET[] = "downloaded = downloaded + $truedownthis"; + } + elseif($torrent['sp_state']==4) //2X Free + { + $USERUPDATESET[] = "uploaded = uploaded + 2*$trueupthis"; + } + elseif($torrent['sp_state']==6) //2X 50% + { + $USERUPDATESET[] = "uploaded = uploaded + 2*$trueupthis"; + $USERUPDATESET[] = "downloaded = downloaded + $truedownthis/2"; + } + else{ + if ($torrent['owner'] == $userid && $uploaderdouble_torrent > 0) + $upthis = $trueupthis * $uploaderdouble_torrent; + + if($torrent['sp_state']==2) //Free + { + $USERUPDATESET[] = "uploaded = uploaded + $upthis"; + } + elseif($torrent['sp_state']==5) //50% + { + $USERUPDATESET[] = "uploaded = uploaded + $upthis"; + $USERUPDATESET[] = "downloaded = downloaded + $truedownthis/2"; + } + elseif($torrent['sp_state']==7) //30% + { + $USERUPDATESET[] = "uploaded = uploaded + $upthis"; + $USERUPDATESET[] = "downloaded = downloaded + $truedownthis*3/10"; + } + elseif($torrent['sp_state']==1) //Normal + { + $USERUPDATESET[] = "uploaded = uploaded + $upthis"; + $USERUPDATESET[] = "downloaded = downloaded + $truedownthis"; + } + } + } + elseif($global_promotion_state == 2) //Free + { + if ($torrent['owner'] == $userid && $uploaderdouble_torrent > 0) + $upthis = $trueupthis * $uploaderdouble_torrent; + $USERUPDATESET[] = "uploaded = uploaded + $upthis"; + } + elseif($global_promotion_state == 3) //2X + { + if ($uploaderdouble_torrent > 2 && $torrent['owner'] == $userid && $uploaderdouble_torrent > 0) + $upthis = $trueupthis * $uploaderdouble_torrent; + else $upthis = 2*$trueupthis; + $USERUPDATESET[] = "uploaded = uploaded + $upthis"; + $USERUPDATESET[] = "downloaded = downloaded + $truedownthis"; + } + elseif($global_promotion_state == 4) //2X Free + { + if ($uploaderdouble_torrent > 2 && $torrent['owner'] == $userid && $uploaderdouble_torrent > 0) + $upthis = $trueupthis * $uploaderdouble_torrent; + else $upthis = 2*$trueupthis; + $USERUPDATESET[] = "uploaded = uploaded + $upthis"; + } + elseif($global_promotion_state == 5){ // 50% + if ($torrent['owner'] == $userid && $uploaderdouble_torrent > 0) + $upthis = $trueupthis * $uploaderdouble_torrent; + $USERUPDATESET[] = "uploaded = uploaded + $upthis"; + $USERUPDATESET[] = "downloaded = downloaded + $truedownthis/2"; + } + elseif($global_promotion_state == 6){ //2X 50% + if ($uploaderdouble_torrent > 2 && $torrent['owner'] == $userid && $uploaderdouble_torrent > 0) + $upthis = $trueupthis * $uploaderdouble_torrent; + else $upthis = 2*$trueupthis; + $USERUPDATESET[] = "uploaded = uploaded + $upthis"; + $USERUPDATESET[] = "downloaded = downloaded + $truedownthis/2"; + } + elseif($global_promotion_state == 7){ //30% + if ($torrent['owner'] == $userid && $uploaderdouble_torrent > 0) + $upthis = $trueupthis * $uploaderdouble_torrent; + $USERUPDATESET[] = "uploaded = uploaded + $upthis"; + $USERUPDATESET[] = "downloaded = downloaded + $truedownthis*3/10"; + } + } +} + +$dt = sqlesc(date("Y-m-d H:i:s")); +$updateset = array(); +// set non-type event +if (!isset($event)) + $event = ""; +if (isset($self) && $event == "stopped") +{ + sql_query("DELETE FROM peers WHERE $selfwhere") or err("D Err"); + if (mysql_affected_rows()) + { + $updateset[] = ($self["seeder"] == "yes" ? "seeders = seeders - 1" : "leechers = leechers - 1"); + sql_query("UPDATE snatched SET uploaded = uploaded + $trueupthis, downloaded = downloaded + $truedownthis, to_go = $left, $announcetime, last_action = ".$dt." WHERE torrentid = $torrentid AND userid = $userid") or err("SL Err 1"); + } +} +elseif(isset($self)) +{ + if ($event == "completed") + { + //sql_query("UPDATE snatched SET finished = 'yes', completedat = $dt WHERE torrentid = $torrentid AND userid = $userid"); + $finished = ", finishedat = ".TIMENOW; + $finished_snatched = ", completedat = ".$dt . ", finished = 'yes'"; + $updateset[] = "times_completed = times_completed + 1"; + } + + sql_query("UPDATE peers SET ip = ".sqlesc($ip).", port = $port, uploaded = $uploaded, downloaded = $downloaded, to_go = $left, prev_action = last_action, last_action = $dt, seeder = '$seeder', agent = ".sqlesc($agent)." $finished WHERE $selfwhere") or err("PL Err 1"); + + if (mysql_affected_rows()) + { + if ($seeder <> $self["seeder"]) + $updateset[] = ($seeder == "yes" ? "seeders = seeders + 1, leechers = leechers - 1" : "seeders = seeders - 1, leechers = leechers + 1"); + sql_query("UPDATE snatched SET uploaded = uploaded + $trueupthis, downloaded = downloaded + $truedownthis, to_go = $left, $announcetime, last_action = ".$dt." $finished_snatched WHERE torrentid = $torrentid AND userid = $userid") or err("SL Err 2"); + } +} +else +{ + $sockres = @pfsockopen($ip, $port, $errno, $errstr, 5); + if (!$sockres) + { + $connectable = "no"; + } + else + { + $connectable = "yes"; + @fclose($sockres); + } + sql_query("INSERT INTO peers (torrent, userid, peer_id, ip, port, connectable, uploaded, downloaded, to_go, started, last_action, seeder, agent, downloadoffset, uploadoffset, passkey) VALUES ($torrentid, $userid, ".sqlesc($peer_id).", ".sqlesc($ip).", $port, '$connectable', $uploaded, $downloaded, $left, $dt, $dt, '$seeder', ".sqlesc($agent).", $downloaded, $uploaded, ".sqlesc($passkey).")") or err("PL Err 2"); + + if (mysql_affected_rows()) + { + $updateset[] = ($seeder == "yes" ? "seeders = seeders + 1" : "leechers = leechers + 1"); + + $check = @mysql_fetch_row(@sql_query("SELECT COUNT(*) FROM snatched WHERE torrentid = $torrentid AND userid = $userid")); + if (!$check['0']) + sql_query("INSERT INTO snatched (torrentid, userid, ip, port, uploaded, downloaded, to_go, startdat, last_action) VALUES ($torrentid, $userid, ".sqlesc($ip).", $port, $uploaded, $downloaded, $left, $dt, $dt)") or err("SL Err 4"); + else + sql_query("UPDATE snatched SET to_go = $left, last_action = ".$dt ." WHERE torrentid = $torrentid AND userid = $userid") or err("SL Err 3.1"); + } +} + +if (count($updateset)) // Update only when there is change in peer counts +{ + $updateset[] = "visible = 'yes'"; + $updateset[] = "last_action = $dt"; + sql_query("UPDATE torrents SET " . join(",", $updateset) . " WHERE id = $torrentid"); +} + +if($client_familyid != 0 && $client_familyid != $az['clientselect']) + $USERUPDATESET[] = "clientselect = ".sqlesc($client_familyid); + +if(count($USERUPDATESET) && $userid) +{ + sql_query("UPDATE users SET " . join(",", $USERUPDATESET) . " WHERE id = ".$userid); +} +benc_resp_raw($resp); +?> diff --git a/attachment.php b/attachment.php new file mode 100644 index 00000000..faa3e13d --- /dev/null +++ b/attachment.php @@ -0,0 +1,263 @@ +get_count_limit(); +$count_limit = (int)$count_limit; +$count_left = $Attach->get_count_left(); +$size_limit = $Attach->get_size_limit_byte(); +$allowed_exts = $Attach->get_allowed_ext(); +$css_uri = get_css_uri(); +$altsize = $_POST['altsize']; +?> + + + + +" type="text/css"> + + + +enable_attachment()) +{ + if ($_SERVER["REQUEST_METHOD"] == "POST") + { + $file = $_FILES['file']; + $filesize = $file["size"]; + $filetype = $file["type"]; + $origfilename = $file['name']; + $ext_l = strrpos($origfilename, "."); + $ext = strtolower(substr($origfilename, $ext_l+1, strlen($origfilename)-($ext_l+1))); + $banned_ext = array('exe', 'com', 'bat', 'msi'); + $img_ext = array('jpeg', 'jpg', 'png', 'gif'); + $warning = ""; + if (!$file || $filesize == 0 || $file["name"] == "") // nothing received + { + $warning = $lang_attachment['text_nothing_received']; + } + elseif (!$count_left) //user cannot upload more files + { + $warning = $lang_attachment['text_file_number_limit_reached']; + } + elseif ($filesize > $size_limit || $filesize >= 5242880) //do not allow file bigger than 5 MB + { + $warning = $lang_attachment['text_file_size_too_big']; + } + elseif (!in_array($ext, $allowed_exts) || in_array($ext, $banned_ext)) //the file extension is banned + { + $warning = $lang_attachment['text_file_extension_not_allowed']; + } + else //everythins is okay + { + if (in_array($ext, $img_ext)) + $isimage = true; + else $isimage = false; + if ($savedirectorytype_attachment == 'onedir') + $savepath = ""; + elseif ($savedirectorytype_attachment == 'monthdir') + $savepath = date("Ym")."/"; + elseif ($savedirectorytype_attachment == 'daydir') + $savepath = date("Ymd")."/"; + $filemd5 = md5_file($file['tmp_name']); + $filename = date("YmdHis").$filemd5; + $file_location = make_folder($savedirectory_attachment."/", $savepath) . $filename; + $db_file_location = $savepath.$filename; + $abandonorig = false; + $hasthumb = false; + $width = 0; + if ($isimage) //the uploaded file is a image + { + $maycreatethumb = false; + $stop = false; + $imagesize = getimagesize($file['tmp_name']); + if ($imagesize){ + $height = $imagesize[1]; + $width = $imagesize[0]; + $it = $imagesize[2]; + if ($it != 1 || !$Attach->is_gif_ani($file['tmp_name'])){ //if it is an animation GIF, stop creating thumbnail and adding watermark + if ($thumbnailtype_attachment != 'no') //create thumbnail for big image + { + //determine the size of thumbnail + if ($altsize == 'yes'){ + $targetwidth = $altthumbwidth_attachment; + $targetheight = $altthumbheight_attachment; + } + else + { + $targetwidth = $thumbwidth_attachment; + $targetheight = $thumbheight_attachment; + } + $hscale=$height/$targetheight; + $wscale=$width/$targetwidth; + $scale=($hscale < 1 && $wscale < 1) ? 1 : (( $hscale > $wscale) ? $hscale : $wscale); + $newwidth=floor($width/$scale); + $newheight=floor($height/$scale); + if ($scale != 1){ //thumbnail is needed + if ($it==1) + $orig=@imagecreatefromgif($file["tmp_name"]); + elseif ($it == 2) + $orig=@imagecreatefromjpeg($file["tmp_name"]); + else + $orig=@imagecreatefrompng($file["tmp_name"]); + if ($orig && !$stop) + { + $thumb = imagecreatetruecolor($newwidth, $newheight); + imagecopyresized($thumb, $orig, 0, 0, 0, 0, $newwidth, $newheight, $width, $height); + if ($thumbnailtype_attachment == 'createthumb'){ + $hasthumb = true; + imagejpeg($thumb, $file_location.".".$ext.".thumb.jpg", $thumbquality_attachment); + } + elseif ($thumbnailtype_attachment == 'resizebigimg'){ + $ext = "jpg"; + $filetype = "image/jpeg"; + $it = 2; + $height = $newheight; + $width = $newwidth; + $maycreatethumb = true; + $abandonorig = true; + } + } + } + } + $watermarkpos = $watermarkpos_attachment; + if ($watermarkpos != 'no' && !$stop) //add watermark to image + { + if ($width > $watermarkwidth_attachment && $height > $watermarkheight_attachment) + { + if ($abandonorig) + { + $resource = $thumb; + } + else + { + $resource=imagecreatetruecolor($width,$height); + if ($it==1) + $resource_p=@imagecreatefromgif($file["tmp_name"]); + elseif ($it==2) + $resource_p=@imagecreatefromjpeg($file["tmp_name"]); + else + $resource_p=@imagecreatefrompng($file["tmp_name"]); + imagecopy($resource, $resource_p, 0, 0, 0, 0, $width, $height); + } + $watermark = imagecreatefrompng('pic/watermark.png'); + $watermark_width = imagesx($watermark); + $watermark_height = imagesy($watermark); + //the position of the watermark + if ($watermarkpos == 'random') + $watermarkpos = mt_rand(1, 9); + switch ($watermarkpos) + { + case 1: { + $wmx = 5; + $wmy = 5; + break; + } + case 2: { + $wmx = ($width-$watermark_width)/2; + $wmy = 5; + break; + } + case 3: { + $wmx = $width-$watermark_width-5; + $wmy = 5; + break; + } + case 4: { + $wmx = 5; + $wmy = ($height-$watermark_height)/2; + break; + } + case 5: { + $wmx = ($width-$watermark_width)/2; + $wmy = ($height-$watermark_height)/2; + break; + } + case 6: { + $wmx = $width-$watermark_width-5; + $wmy = ($height-$watermark_height)/2; + break; + } + case 7: { + $wmx = 5; + $wmy = $height-$watermark_height-5; + break; + } + case 8: { + $wmx = ($width-$watermark_width)/2; + $wmy = $height-$watermark_height-5; + break; + } + case 9: { + $wmx = $width-$watermark_width-5; + $wmy = $height-$watermark_height-5; + break; + } + } + + imagecopy($resource, $watermark, $wmx, $wmy, 0, 0, $watermark_width, $watermark_height); + if ($it==1) + imagegif($resource, $file_location.".".$ext); + elseif ($it==2) + imagejpeg($resource, $file_location.".".$ext, $watermarkquality_attachment); + else + imagepng($resource, $file_location.".".$ext); + $filesize = filesize($file_location.".".$ext); + $maycreatethumb = false; + $abandonorig = true; + } + } + if ($maycreatethumb){ // if no watermark is added, create the thumbnail now for the above resized image. + imagejpeg($thumb, $file_location.".".$ext, $thumbquality_attachment); + $filesize = filesize($file_location.".".$ext); + } + } + } + else $warning = $lang_attachment['text_invalid_image_file']; + } + if (!$abandonorig){ + if(!move_uploaded_file($file["tmp_name"], $file_location.".".$ext)) + $warning = $lang_attachment['text_cannot_move_file']; + } + if (!$warning) //insert into database and add code to editor + { + $dlkey = md5($db_file_location.".".$ext); + sql_query("INSERT INTO attachments (userid, width, added, filename, filetype, filesize, location, dlkey, isimage, thumb) VALUES (".$CURUSER['id'].", ".$width.", ".sqlesc(date("Y-m-d H:i:s")).", ".sqlesc($origfilename).", ".sqlesc($filetype).", ".$filesize.", ".sqlesc($db_file_location.".".$ext).", ".sqlesc($dlkey).", ".($isimage ? 1 : 0).", ".($hasthumb ? 1 : 0).")") or sqlerr(__FILE__, __LINE__); + $count_left--; + echo(""); + } + } + } + print(""); + print(""); + print(""); + print(""); + print(""); +} +?> +
"); + print(" "); + print("".$lang_attachment['text_small_thumbnail']." "); + print(" "); + if ($warning) { + print(''.$warning.''); + } else { + print("".$lang_attachment['text_left']."".$count_left."".$lang_attachment['text_of'].$count_limit."   ".$lang_attachment['text_size_limit']."".mksize($size_limit)."   ".$lang_attachment['text_file_extensions'].""); + $allowedextsblock = ""; + foreach($allowed_exts as $ext) { + $allowedextsblock .= $ext."/"; + } + $allowedextsblock = rtrim(trim($allowedextsblock), "/"); + if (!$allowedextsblock) { + $allowedextsblock = 'N/A'; + } + print("".$lang_attachment['text_mouse_over_here'].""); + } + + print("
+ + diff --git a/attachments/.htaccess b/attachments/.htaccess new file mode 100644 index 00000000..9e2e17c4 --- /dev/null +++ b/attachments/.htaccess @@ -0,0 +1,3 @@ +Options -Indexes +Order allow,deny +Allow from all diff --git a/bannedemails.php b/bannedemails.php new file mode 100644 index 00000000..0fe2e83a --- /dev/null +++ b/bannedemails.php @@ -0,0 +1,30 @@ +\n"); + $sql = sql_query("SELECT * FROM bannedemails") or sqlerr(__FILE__, __LINE__); + $list = mysql_fetch_array($sql); +?> +
+ +Enter a list of banned email addresses (separated by spaces):
To ban a specific address enter "email@domain.com", to ban an entire domain enter "@domain.com" + +
+ += UC_ADMINISTRATOR) +{ + $first = trim($_POST["first"]); + $last = trim($_POST["last"]); + $comment = trim($_POST["comment"]); + if (!$first || !$last || !$comment) + stderr("Error", "Missing form data."); + $firstlong = ip2long($first); + $lastlong = ip2long($last); + if ($firstlong == -1 || $lastlong == -1) + stderr("Error", "Bad IP address."); + $comment = sqlesc($comment); + $added = sqlesc(date("Y-m-d H:i:s")); + sql_query("INSERT INTO bans (added, addedby, first, last, comment) VALUES($added, ".mysql_real_escape_string($CURUSER[id]).", $firstlong, $lastlong, $comment)") or sqlerr(__FILE__, __LINE__); + header("Location: $_SERVER[REQUEST_URI]"); + die; +} + +//ob_start("ob_gzhandler"); + +$res = sql_query("SELECT * FROM bans ORDER BY added DESC") or sqlerr(); + +stdhead("Bans"); + +print("

Current Bans

\n"); + +if (mysql_num_rows($res) == 0) + print("

Nothing found

\n"); +else +{ + print("\n"); + print("". + "\n"); + + while ($arr = mysql_fetch_assoc($res)) + { + print("\n"); + } + print("
AddedFirst IPLast IPByCommentRemove
".gettime($arr[added])."".long2ip($arr[first])."".long2ip($arr[last])."". get_username($arr['addedby']) . + "$arr[comment]Remove
\n"); +} + +if (get_user_class() >= UC_ADMINISTRATOR) +{ + print("

Add ban

\n"); + print("\n"); + print("\n"); + print("\n"); + print("\n"); + print("\n"); + print("\n"); + print("\n
First IP
Last IP
Comment
\n"); +} + +stdfoot(); + +?> diff --git a/bitbucket-upload.php b/bitbucket-upload.php new file mode 100644 index 00000000..11ff53d9 --- /dev/null +++ b/bitbucket-upload.php @@ -0,0 +1,83 @@ + $maxfilesize) + stderr($lang_bitbucketupload['std_upload_failed'], $lang_bitbucketupload['std_file_too_large']); + $pp=pathinfo($filename = $file["name"]); + if($pp['basename'] != $filename) + stderr($lang_bitbucketupload['std_upload_failed'], $lang_bitbucketupload['std_bad_file_name']); + $tgtfile = "$bitbucket/$filename"; + if (file_exists($tgtfile)) + stderr($lang_bitbucketupload['std_upload_failed'], $lang_bitbucketupload['std_file_already_exists'].htmlspecialchars($filename).$lang_bitbucketupload['std_already_exists'],false); + + $size = getimagesize($file["tmp_name"]); + $height = $size[1]; + $width = $size[0]; + $it = $size[2]; + if($imgtypes[$it] == null || $imgtypes[$it] != strtolower($pp['extension'])) + stderr($lang_bitbucketupload['std_error'], $lang_bitbucketupload['std_invalid_image_format'],false); + + // Scale image to appropriate avatar dimensions + $hscale=$height/$scaleh; + $wscale=$width/$scalew; + $scale=($hscale < 1 && $wscale < 1) ? 1 : (( $hscale > $wscale) ? $hscale : $wscale); + $newwidth=floor($width/$scale); + $newheight=floor($height/$scale); + + if ($it==1) + $orig=@imagecreatefromgif($file["tmp_name"]); + elseif ($it == 2) + $orig=@imagecreatefromjpeg($file["tmp_name"]); + else + $orig=@imagecreatefrompng($file["tmp_name"]); + if(!$orig) + stderr($lang_bitbucketupload['std_image_processing_failed'],$lang_bitbucketupload['std_sorry_the_uploaded']."$imgtypes[$it]".$lang_bitbucketupload['std_failed_processing']); + $thumb = imagecreatetruecolor($newwidth, $newheight); + imagecopyresized($thumb, $orig, 0, 0, 0, 0, $newwidth, $newheight, $width, $height); + $ret=($it==1)?imagegif($thumb, $tgtfile): ($it==2)?imagejpeg($thumb, $tgtfile):imagepng($thumb, $tgtfile); + + $url = str_replace(" ", "%20", htmlspecialchars(get_protocol_prefix()."$BASEURL/bitbucket/$filename")); + $name = sqlesc($filename); + $added = sqlesc(date("Y-m-d H:i:s")); + if ($_POST['public'] != 'yes' ) + $public='"0"'; + else + $public='"1"'; + sql_query("INSERT INTO bitbucket (owner, name, added, public) VALUES ($CURUSER[id], $name, $added, $public)") or sqlerr(__FILE__, __LINE__); + sql_query("UPDATE users SET avatar = ".sqlesc($url)." WHERE id = $CURUSER[id]") or sqlerr(__FILE__, __LINE__); + + stderr($lang_bitbucketupload['std_success'], $lang_bitbucketupload['std_use_following_url']."
$url

".$lang_bitbucketupload['std_upload_another_file'].".



".$lang_bitbucketupload['std_image']. ($width=$newwidth && $height==$newheight ? $lang_bitbucketupload['std_need_not_rescaling']:$lang_bitbucketupload['std_rescaled_from']."$height x $width".$lang_bitbucketupload['std_to']."$newheight x $newwidth") .$lang_bitbucketupload['std_profile_updated'],false); +} + +stdhead($lang_bitbucketupload['head_avatar_upload']); +?> +

+
+ +"); +print(" + +
".$lang_bitbucketupload['text_upload_directory_unwritable']."
".$lang_bitbucketupload['text_disclaimer']."$scaleh".$lang_bitbucketupload['text_disclaimer_two']."$scalew".$lang_bitbucketupload['text_disclaimer_three'].number_format($maxfilesize).$lang_bitbucketupload['text_disclaimer_four']); +?> +
>
+
+= UC_MODERATOR) +{ + $delete = $_GET["delete"]; + if (is_valid_id($delete)) { + $r = sql_query("SELECT name,owner FROM bitbucket WHERE id=".mysql_real_escape_string($delete)) or sqlerr(__FILE__, __LINE__); + if (mysql_num_rows($r) == 1) { + $a = mysql_fetch_assoc($r); + if (get_user_class() >= UC_MODERATOR || $a["owner"] == $CURUSER["id"]) { + sql_query("DELETE FROM bitbucket WHERE id=".mysql_real_escape_string($delete)) or sqlerr(__FILE__, __LINE__); + if (!unlink("$bucketpath/$a[name]")) + stderr("Warning", "Unable to unlink file: $a[name]. You should contact an administrator about this error.",false); + } } } } + stdhead("BitBucket Log"); + $res = sql_query("SELECT count(*) FROM bitbucket") or die(mysql_error()); $row = mysql_fetch_array($res); $count = $row[0]; + $perpage = 10; + list($pagertop, $pagerbottom, $limit) = pager($perpage, $count, $_SERVER["PHP_SELF"] . "?out=" . $_GET["out"] . "&" ); + print("

BitBucket Log

\n"); + print("Total Images Stored: $count"); + echo $pagertop; + $res = sql_query("SELECT * FROM bitbucket ORDER BY added DESC $limit") or sqlerr(__FILE__, __LINE__); + if (mysql_num_rows($res) == 0) + print("BitBucket Log is empty\n"); + else { + print("\n"); + while ($arr = mysql_fetch_assoc($res)) { + $date = substr($arr['added'], 0, strpos($arr['added'], " ")); + $time = substr($arr['added'], strpos($arr['added'], " ") + 1); + $name = $arr["name"]; + list($width, $height, $type, $attr) = getimagesize("" . get_protocol_prefix() . "$BASEURL/$bitbucket/$name"); + $url = str_replace(" ", "%20", htmlspecialchars("$bitbucket/$name")); + print(""); + print(""); + } + print("
"); + print("Uploaded by: " . get_username($arr[owner]). "
"); + print("(#$arr[id]) Filename: $name ($width x $height)"); + if (get_user_class() >= UC_MODERATOR) + print(" [Delete]
"); + print("Added: $date $time"); + print("
"); + } + echo + $pagerbottom; + stdfoot(); +?> diff --git a/bookmark.php b/bookmark.php new file mode 100644 index 00000000..2f5ad805 --- /dev/null +++ b/bookmark.php @@ -0,0 +1,28 @@ +delete_value('user_'.$CURUSER['id'].'_bookmark_array'); + echo "deleted"; + } + else{ + sql_query("INSERT INTO bookmarks (torrentid, userid) VALUES (" . sqlesc($torrentid) . "," . sqlesc($CURUSER['id']) . ")") or sqlerr(__FILE__,__LINE__); + $Cache->delete_value('user_'.$CURUSER['id'].'_bookmark_array'); + echo "added"; + } +} +else echo "failed"; +?> diff --git a/catmanage.php b/catmanage.php new file mode 100644 index 00000000..a0e31dc9 --- /dev/null +++ b/catmanage.php @@ -0,0 +1,790 @@ +"; + while ($row = mysql_fetch_array($res)) + $selection .= "\n"; + $selection .= ""; + return $selection; +} +function return_type_name($type) +{ + global $lang_catmanage; + switch ($type) + { + case 'searchbox': + $name = $lang_catmanage['text_searchbox']; + break; + case 'caticon': + $name = $lang_catmanage['text_category_icons']; + break; + case 'secondicon': + $name = $lang_catmanage['text_second_icons']; + break; + case 'category': + $name = $lang_catmanage['text_categories']; + break; + case 'source': + $name = $lang_catmanage['text_sources']; + break; + case 'medium': + $name = $lang_catmanage['text_media']; + break; + case 'codec': + $name = $lang_catmanage['text_codecs']; + break; + case 'standard': + $name = $lang_catmanage['text_standards']; + break; + case 'processing': + $name = $lang_catmanage['text_processings']; + break; + case 'team': + $name = $lang_catmanage['text_teams']; + break; + case 'audiocodec': + $name = $lang_catmanage['text_audio_codecs']; + break; + default: + return false; + } + return $name; +} + +function print_type_list($type){ + global $lang_catmanage; + $typename=return_type_name($type); + stdhead($lang_catmanage['head_category_management']." - ".$typename); + begin_main_frame(); +?> +

-

+
+ + + +     + + + +
+".$lang_catmanage['text_no_record_yet']."

"); + else{ + list($pagertop, $pagerbottom, $limit) = pager($perpage, $num, "?"); + $res = sql_query("SELECT * FROM ".$dbtablename." ORDER BY id DESC ".$limit) or sqlerr(__FILE__, __LINE__); +?> + + + + + + + + + + + + + + + +
|
+ +
+

+
+ +*", " " . $lang_catmanage['text_searchbox_name_note'], 1); + tr($lang_catmanage['row_show_sub_category'], " " . $lang_catmanage['text_sources'] . " " . $lang_catmanage['text_media'] . " " . $lang_catmanage['text_codecs'] . " " . $lang_catmanage['text_standards'] . " " . $lang_catmanage['text_processings'] . " " . $lang_catmanage['text_teams'] . " " . $lang_catmanage['text_audio_codecs']."
".$lang_catmanage['text_show_sub_category_note'], 1); + tr($lang_catmanage['row_items_per_row']."*", " " . $lang_catmanage['text_items_per_row_note'], 1); + tr($lang_catmanage['row_padding_between_items']."*", " " . $lang_catmanage['text_padding_between_items_note'], 1); + } + elseif ($type=='caticon') + { + if ($row) + { + $name = $row['name']; + $folder = $row['folder']; + $multilang = $row['multilang']; + $secondicon = $row['secondicon']; + $cssfile = $row['cssfile']; + $designer = $row['designer']; + $comment = $row['comment']; + } + else + { + $name = ''; + $folder = ''; + $multilang = 'no'; + $secondicon = 'no'; + $cssfile = ''; + $designer = ''; + $comment = ''; + } +?> + +*", " " . $lang_catmanage['text_category_icon_name_note'], 1); + tr($lang_catmanage['col_folder']."*", "
" . $lang_catmanage['text_folder_note'], 1); + tr($lang_catmanage['text_multi_language'], "".$lang_catmanage['text_yes'] ."
". $lang_catmanage['text_multi_language_note'], 1); + tr($lang_catmanage['text_second_icon'], "".$lang_catmanage['text_yes'] ."
". $lang_catmanage['text_second_icon_note'], 1); + tr($lang_catmanage['text_css_file'], " ". $lang_catmanage['text_css_file_note'], 1); + tr($lang_catmanage['text_designer'], " ". $lang_catmanage['text_designer_note'], 1); + tr($lang_catmanage['text_comment'], " ". $lang_catmanage['text_comment_note'], 1); + } + elseif ($type=='secondicon') + { + if ($row) + { + $name = $row['name']; + $image = $row['image']; + $class_name = $row['class_name']; + $source = $row['source']; + $medium = $row['medium']; + $codec = $row['codec']; + $standard = $row['standard']; + $processing = $row['processing']; + $team = $row['team']; + $audiocodec = $row['audiocodec']; + } + else + { + $name = ''; + $image = ''; + $class_name = ''; + $source = 0; + $medium = 0; + $codec = 0; + $standard = 0; + $processing = 0; + $team = 0; + $audiocodec = 0; + } + tr($lang_catmanage['col_name']."*", " " . $lang_catmanage['text_second_icon_name_note'], 1); + tr($lang_catmanage['col_image']."*", "
" . $lang_catmanage['text_image_note'], 1); + tr($lang_catmanage['text_class_name'], "
" . $lang_catmanage['text_class_name_note'], 1); + tr($lang_catmanage['row_selections']."*", torrent_selection(return_type_name('source'), 'source', return_category_db_table_name('source'), $source) . torrent_selection(return_type_name('source'), 'source', return_category_db_table_name('source'), $source) . torrent_selection(return_type_name('medium'), 'medium', return_category_db_table_name('medium'), $medium) . torrent_selection(return_type_name('codec'), 'codec', return_category_db_table_name('codec'), $codec) . torrent_selection(return_type_name('standard'), 'standard', return_category_db_table_name('standard'), $standard) . torrent_selection(return_type_name('processing'), 'processing', return_category_db_table_name('processing'), $processing) . torrent_selection(return_type_name('team'), 'team', return_category_db_table_name('team'), $team) . torrent_selection(return_type_name('audiocodec'), 'audiocodec', return_category_db_table_name('audiocodec'), $audiocodec)."
".$lang_catmanage['text_selections_note'], 1); + } + elseif ($type=='category') + { + if ($row) + { + $name = $row['name']; + $mode = $row['mode']; + $image = $row['image']; + $class_name = $row['class_name']; + $sort_index = $row['sort_index']; + } + else + { + $name = ''; + $mode = 1; + $image = ''; + $class_name = ''; + $sort_index = 0; + } + tr($lang_catmanage['row_category_name']."*", " " . $lang_catmanage['text_category_name_note'], 1); + tr($lang_catmanage['col_image']."*", "
" . $lang_catmanage['text_image_note'], 1); + tr($lang_catmanage['text_class_name'], "
" . $lang_catmanage['text_class_name_note'], 1); + tr($lang_catmanage['row_mode']."*", return_category_mode_selection('mode', $mode), 1); + tr($lang_catmanage['col_order'], " " . $lang_catmanage['text_order_note'], 1); + } +?> +
+
+
+ +
+
+ +
+

+ +*", " " . $lang_catmanage['text_subcategory_name_note'], 1); +tr($lang_catmanage['col_order'], " " . $lang_catmanage['text_order_note'], 1); +?> +
+
+ +
+
+ +
+".$lang_catmanage['text_no_record_yet']."

"); + else{ + list($pagertop, $pagerbottom, $limit) = pager($perpage, $num, "?"); + $res = sql_query("SELECT * FROM ".$dbtablename." ORDER BY id ASC ".$limit) or sqlerr(__FILE__, __LINE__); +?> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
".$lang_catmanage['text_enabled']."" : "".$lang_catmanage['text_disabled'].""?>".$lang_catmanage['text_enabled']."" : "".$lang_catmanage['text_disabled'].""?>".$lang_catmanage['text_enabled']."" : "".$lang_catmanage['text_disabled'].""?>".$lang_catmanage['text_enabled']."" : "".$lang_catmanage['text_disabled'].""?>".$lang_catmanage['text_enabled']."" : "".$lang_catmanage['text_disabled'].""?>".$lang_catmanage['text_enabled']."" : "".$lang_catmanage['text_disabled'].""?>".$lang_catmanage['text_enabled']."" : "".$lang_catmanage['text_disabled'].""?>".$lang_catmanage['text_enabled']."" : "".$lang_catmanage['text_disabled'].""?> |
+".$lang_catmanage['text_no_record_yet']."

"); + else{ + list($pagertop, $pagerbottom, $limit) = pager($perpage, $num, "?"); + $res = sql_query("SELECT * FROM ".$dbtablename." ORDER BY id ASC ".$limit) or sqlerr(__FILE__, __LINE__); +?> + + + + + + + + + + + + + + + + + + + + + + + + + +
".$lang_catmanage['text_yes']."" : "".$lang_catmanage['text_no'].""?>".$lang_catmanage['text_yes']."" : "".$lang_catmanage['text_no'].""?> |
+".$lang_catmanage['text_no_record_yet']."

"); + else{ + list($pagertop, $pagerbottom, $limit) = pager($perpage, $num, "?"); + $res = sql_query("SELECT * FROM ".$dbtablename." ORDER BY id ASC ".$limit) or sqlerr(__FILE__, __LINE__); +?> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
|
+".$lang_catmanage['text_no_record_yet']."

"); + else{ + list($pagertop, $pagerbottom, $limit) = pager($perpage, $num, "?"); + $res = sql_query("SELECT ".$dbtablename.".*, searchbox.name AS catmodename FROM ".$dbtablename." LEFT JOIN searchbox ON ".$dbtablename.".mode=searchbox.id ORDER BY ".$dbtablename.".mode ASC, ".$dbtablename.".id ASC ".$limit) or sqlerr(__FILE__, __LINE__); +?> + + + + + + + + + + + + + + + + + + + + + +
|
+ +
+delete_value($dbtablename.'_list'); + elseif ($type=='searchbox') + $Cache->delete_value('searchbox_content'); + elseif ($type=='caticon') + $Cache->delete_value('category_icon_content'); + elseif ($type=='secondicon') + $Cache->delete_value('secondicon_'.$row['source'].'_'.$row['medium'].'_'.$row['codec'].'_'.$row['standard'].'_'.$row['processing'].'_'.$row['team'].'_'.$row['audiocodec'].'_content'); + elseif ($type=='category'){ + $Cache->delete_value('category_content'); + $Cache->delete_value('category_list_mode_'.$row['mode']); + } + } + header("Location: ".get_protocol_prefix() . $BASEURL."/catmanage.php?action=view&type=".$type); + die(); +} +elseif($action == 'edit') +{ + $id = 0 + $_GET['id']; + if (!$id) + { + stderr($lang_catmanage['std_error'], $lang_catmanage['std_invalid_id']); + } + else + { + $dbtablename=return_category_db_table_name($type); + $res = sql_query ("SELECT * FROM ".$dbtablename." WHERE id = ".sqlesc($id)." LIMIT 1"); + if (!$row = mysql_fetch_array($res)) + stderr($lang_catmanage['std_error'], $lang_catmanage['std_invalid_id']); + else + { + $typename=return_type_name($type); + stdhead($lang_catmanage['head_edit']." - ".$typename); + print("
"); + print(""); + print(""); + print_category_editor($type, $row); + print("
"); + stdfoot(); + } + } +} +elseif($action == 'add') +{ + $typename=return_type_name($type); + stdhead($lang_catmanage['head_add']." - ".$typename); + print("
"); + print(""); + print_category_editor($type); + print("
"); + stdfoot(); +} +elseif($action == 'submit') +{ + $dbtablename=return_category_db_table_name($type); + if ($_POST['isedit']){ + $id = 0 + $_POST['id']; + if (!$id) + { + stderr($lang_catmanage['std_error'], $lang_catmanage['std_invalid_id']); + } + else + { + $res = sql_query("SELECT * FROM ".$dbtablename." WHERE id = ".sqlesc($id)." LIMIT 1"); + if (!$row = mysql_fetch_array($res)) + stderr($lang_catmanage['std_error'], $lang_catmanage['std_invalid_id']); + } + } + $updateset = array(); + if (in_array($type, $validsubcattype)){ + $name = $_POST['name']; + if (!$name) + stderr($lang_catmanage['std_error'], $lang_catmanage['std_missing_form_data']); + $updateset[] = "name=".sqlesc($name); + $sort_index = 0+$_POST['sort_index']; + $updateset[] = "sort_index=".sqlesc($sort_index); + $Cache->delete_value($dbtablename.'_list'); + } + elseif ($type=='searchbox'){ + $name = $_POST['name']; + $catsperrow = 0+$_POST['catsperrow']; + $catpadding = 0+$_POST['catpadding']; + if (!$name || !$catsperrow || !$catpadding) + stderr($lang_catmanage['std_error'], $lang_catmanage['std_missing_form_data']); + $showsource = 0+$_POST['showsource']; + $showmedium = 0+$_POST['showmedium']; + $showcodec = 0+$_POST['showcodec']; + $showstandard = 0+$_POST['showstandard']; + $showprocessing = 0+$_POST['showprocessing']; + $showteam = 0+$_POST['showteam']; + $showaudiocodec = 0+$_POST['showaudiocodec']; + $updateset[] = "catsperrow=".sqlesc($catsperrow); + $updateset[] = "catpadding=".sqlesc($catpadding); + $updateset[] = "name=".sqlesc($name); + $updateset[] = "showsource=".sqlesc($showsource); + $updateset[] = "showmedium=".sqlesc($showmedium); + $updateset[] = "showcodec=".sqlesc($showcodec); + $updateset[] = "showstandard=".sqlesc($showstandard); + $updateset[] = "showprocessing=".sqlesc($showprocessing); + $updateset[] = "showteam=".sqlesc($showteam); + $updateset[] = "showaudiocodec=".sqlesc($showaudiocodec); + if ($showsource || $showmedium || $showcodec || $showstandard || $showprocessing || $showteam || $showaudiocodec) + $updateset[] = "showsubcat=1"; + else + $updateset[] = "showsubcat=0"; + if($_POST['isedit']) + $Cache->delete_value('searchbox_content'); + } + elseif ($type=='caticon'){ + $name = $_POST['name']; + $folder = trim($_POST['folder']); + $cssfile = trim($_POST['cssfile']); + $multilang = ($_POST['multilang'] == 'yes' ? 'yes' : 'no'); + $secondicon = ($_POST['secondicon'] == 'yes' ? 'yes' : 'no'); + $designer = $_POST['designer']; + $comment = $_POST['comment']; + if (!$name || !$folder) + stderr($lang_catmanage['std_error'], $lang_catmanage['std_missing_form_data']); + if (!valid_file_name($folder)) + stderr($lang_catmanage['std_error'], $lang_catmanage['std_invalid_character_in_filename'].htmlspecialchars($folder)); + if ($cssfile && !valid_file_name($cssfile)) + stderr($lang_catmanage['std_error'], $lang_catmanage['std_invalid_character_in_filename'].htmlspecialchars($cssfile)); + $updateset[] = "name=".sqlesc($name); + $updateset[] = "folder=".sqlesc($folder); + $updateset[] = "multilang=".sqlesc($multilang); + $updateset[] = "secondicon=".sqlesc($secondicon); + $updateset[] = "cssfile=".sqlesc($cssfile); + $updateset[] = "designer=".sqlesc($designer); + $updateset[] = "comment=".sqlesc($comment); + if($_POST['isedit']) + $Cache->delete_value('category_icon_content'); + } + elseif ($type=='secondicon'){ + $name = $_POST['name']; + $image = trim($_POST['image']); + $class_name = trim($_POST['class_name']); + $source = 0+$_POST['source']; + $medium = 0+$_POST['medium']; + $codec = 0+$_POST['codec']; + $standard = 0+$_POST['standard']; + $processing = 0+$_POST['processing']; + $team = 0+$_POST['team']; + $audiocodec = 0+$_POST['audiocodec']; + if (!$name || !$image) + stderr($lang_catmanage['std_error'], $lang_catmanage['std_missing_form_data']); + if (!valid_file_name($image)) + stderr($lang_catmanage['std_error'], $lang_catmanage['std_invalid_character_in_filename'].htmlspecialchars($image)); + if ($class_name && !valid_class_name($class_name)) + stderr($lang_catmanage['std_error'], $lang_catmanage['std_invalid_character_in_filename'].htmlspecialchars($class_name)); + if (!$source && !$medium && !$codec && !$standard && !$processing && !$team && !$audiocodec) + stderr($lang_catmanage['std_error'], $lang_catmanage['std_must_define_one_selection']); + $updateset[] = "name=".sqlesc($name); + $updateset[] = "image=".sqlesc($image); + $updateset[] = "class_name=".sqlesc($class_name); + $updateset[] = "medium=".sqlesc($medium); + $updateset[] = "codec=".sqlesc($codec); + $updateset[] = "standard=".sqlesc($standard); + $updateset[] = "processing=".sqlesc($processing); + $updateset[] = "team=".sqlesc($team); + $updateset[] = "audiocodec=".sqlesc($audiocodec); + if($_POST['isedit']){ + $res2=sql_query("SELECT * FROM secondicons WHERE id=".sqlesc($id)." LIMIT 1"); + if ($row2=mysql_fetch_array($res)) + { + $Cache->delete_value('secondicon_'.$row2['source'].'_'.$row2['medium'].'_'.$row2['codec'].'_'.$row2['standard'].'_'.$row2['processing'].'_'.$row2['team'].'_'.$row2['audiocodec'].'_content'); + } + } + $Cache->delete_value('secondicon_'.$source.'_'.$medium.'_'.$codec.'_'.$standard.'_'.$processing.'_'.$team.'_'.$audiocodec.'_content'); + } + elseif ($type=='category'){ + $name = $_POST['name']; + $image = trim($_POST['image']); + $mode = 0+$_POST['mode']; + $class_name = trim($_POST['class_name']); + $sort_index = 0+$_POST['sort_index']; + if (!$name || !$image) + stderr($lang_catmanage['std_error'], $lang_catmanage['std_missing_form_data']); + if (!valid_file_name($image)) + stderr($lang_catmanage['std_error'], $lang_catmanage['std_invalid_character_in_filename'].htmlspecialchars($image)); + if ($class_name && !valid_class_name($class_name)) + stderr($lang_catmanage['std_error'], $lang_catmanage['std_invalid_character_in_filename'].htmlspecialchars($class_name)); + if (!$mode) + stderr($lang_catmanage['std_error'], $lang_catmanage['std_invalid_mode_id']); + $updateset[] = "name=".sqlesc($name); + $updateset[] = "image=".sqlesc($image); + $updateset[] = "mode=".sqlesc($mode); + $updateset[] = "class_name=".sqlesc($class_name); + $updateset[] = "sort_index=".sqlesc($sort_index); + if($_POST['isedit']){ + $Cache->delete_value('category_content'); + } + $Cache->delete_value('category_list_mode_'.$mode); + } + if ($_POST['isedit']) + { + sql_query("UPDATE ".$dbtablename." SET " . join(",", $updateset) . " WHERE id = ".sqlesc($id)) or sqlerr(__FILE__, __LINE__); + } + else + { + sql_query("INSERT INTO ".$dbtablename." SET " . join(",", $updateset) ) or sqlerr(__FILE__, __LINE__); + } + header("Location: ".get_protocol_prefix() . $BASEURL."/catmanage.php?action=view&type=".$type); +} +?> diff --git a/cc98bar.php b/cc98bar.php new file mode 100644 index 00000000..96337de4 --- /dev/null +++ b/cc98bar.php @@ -0,0 +1,129 @@ +get_value('userbar_'.$_SERVER['REQUEST_URI'])){ +$nn = preg_replace($pattern, "\\2", $_SERVER['REQUEST_URI']); +$nr = preg_replace($pattern, "\\4", $_SERVER['REQUEST_URI']); +$ng = preg_replace($pattern, "\\6", $_SERVER['REQUEST_URI']); +$nb = preg_replace($pattern, "\\8", $_SERVER['REQUEST_URI']); +$ns = preg_replace($pattern, "\\10", $_SERVER['REQUEST_URI']); +$nx = preg_replace($pattern, "\\12", $_SERVER['REQUEST_URI']); +$ny = preg_replace($pattern, "\\14", $_SERVER['REQUEST_URI']); +$nu = preg_replace($pattern, "\\16", $_SERVER['REQUEST_URI']); +$ur = preg_replace($pattern, "\\18", $_SERVER['REQUEST_URI']); +$ug = preg_replace($pattern, "\\20", $_SERVER['REQUEST_URI']); +$ub = preg_replace($pattern, "\\22", $_SERVER['REQUEST_URI']); +$us = preg_replace($pattern, "\\24", $_SERVER['REQUEST_URI']); +$ux = preg_replace($pattern, "\\26", $_SERVER['REQUEST_URI']); +$uy = preg_replace($pattern, "\\28", $_SERVER['REQUEST_URI']); +$nd = preg_replace($pattern, "\\30", $_SERVER['REQUEST_URI']); +$dr = preg_replace($pattern, "\\32", $_SERVER['REQUEST_URI']); +$dg = preg_replace($pattern, "\\34", $_SERVER['REQUEST_URI']); +$db = preg_replace($pattern, "\\36", $_SERVER['REQUEST_URI']); +$ds = preg_replace($pattern, "\\38", $_SERVER['REQUEST_URI']); +$dx = preg_replace($pattern, "\\40", $_SERVER['REQUEST_URI']); +$dy = preg_replace($pattern, "\\42", $_SERVER['REQUEST_URI']); +$bg = 0 + preg_replace($pattern, "\\44", $_SERVER['REQUEST_URI']); +$id = preg_replace($pattern, "\\45", $_SERVER['REQUEST_URI']); + +$res = sql_query("SELECT username, uploaded, downloaded, class, privacy FROM users WHERE id=".sqlesc($id)." LIMIT 1"); +$row = mysql_fetch_array($res); +if (!$row) + die; +elseif($row['privacy'] == 'strong') + die; +elseif($row['class'] < $userbar_class) + die; +else{ + $username = $row['username']; + $uploaded = mksize($row['uploaded']); + $downloaded = mksize($row['downloaded']); +} + +$my_img=imagecreatefrompng("pic/userbar/".$bg.".png"); +imagealphablending($my_img, false); + +if (!$nn) +{ + if ($nr != "" && $nr >=0 && $nr <=255) + $namered = $nr; + else $namered=255; + if ($ng != "" && $ng >=0 && $ng <=255) + $namegreen = $ng; + else $namegreen=255; + if ($nb != "" && $nb >=0 && $nb <=255) + $nameblue = $nb; + else $nameblue=255; + if ($ns != "" && $ns >=1 && $ns <=5) + $namesize = $ns; + else $namesize=3; + if ($nx != "" && $nx >=0 && $nx <=350) + $namex = $nx; + else $namex=10; + if ($ny != "" && $ny >=0 && $ny <=19) + $namey = $ny; + else $namey=3; + $name_colour = imagecolorallocate($my_img, $namered, $namegreen, $nameblue); + imagestring($my_img, $namesize, $namex, $namey, $username, $name_colour); +} + +if (!$nu) +{ + if ($ur != "" && $ur >=0 && $ur <=255) + $upred = $ur; + else $upred=0; + if ($ug != "" && $ug >=0 && $ug <=255) + $upgreen = $ug; + else $upgreen=255; + if ($ub != "" && $ub >=0 && $ub <=255) + $upblue = $ub; + else $upblue=0; + if ($us != "" && $us >=1 && $us <=5) + $upsize = $us; + else $upsize=3; + if ($ux != "" && $ux >=0 && $ux <=350) + $upx = $ux; + else $upx=100; + if ($uy != "" && $uy >=0 && $uy <=19) + $upy = $uy; + else $upy=3; + $up_colour = imagecolorallocate($my_img, $upred, $upgreen, $upblue); + imagestring($my_img, $upsize, $upx, $upy, $uploaded, $up_colour); +} + +if (!$nd) +{ + if ($dr != "" && $dr >=0 && $dr <=255) + $downred = $dr; + else $downred=255; + if ($dg != "" && $dg >=0 && $dg <=255) + $downgreen = $dg; + else $downgreen=0; + if ($dg != "" && $db >=0 && $db <=255) + $downblue = $db; + else $downblue=0; + if ($ds != "" && $ds >=1 && $ds <=5) + $downsize = $ds; + else $downsize=3; + if ($dx != "" && $dx >=0 && $dx <=350) + $downx = $dx; + else $downx=180; + if ($dy != "" && $dy >=0 && $dy <=19) + $downy = $dy; + else $downy=3; + $down_colour = imagecolorallocate($my_img, $downred, $downgreen, $downblue); + imagestring($my_img, $downsize, $downx, $downy, $downloaded, $down_colour); +} +imagesavealpha($my_img, true); +$Cache->cache_value('userbar_'.$_SERVER['REQUEST_URI'], $my_img, 300); +} +header("Content-type: image/png"); +imagepng($my_img); +imagedestroy($my_img); +?> + diff --git a/cheaterbox.php b/cheaterbox.php new file mode 100644 index 00000000..9cfb360e --- /dev/null +++ b/cheaterbox.php @@ -0,0 +1,72 @@ +delete_value('staff_new_cheater_count'); +} +elseif ($_POST['delete']){ + $res = sql_query ("SELECT id FROM cheaters WHERE id IN (" . implode(", ", $_POST[delcheater]) . ")"); + while ($arr = mysql_fetch_assoc($res)) + sql_query ("DELETE from cheaters WHERE id = $arr[id]") or sqlerr(); + $Cache->delete_value('staff_new_cheater_count'); +} + +$count = get_row_count("cheaters"); +if (!$count){ + stderr($lang_cheaterbox['std_oho'], $lang_cheaterbox['std_no_suspect_detected']); +} +$perpage = 10; +list($pagertop, $pagerbottom, $limit) = pager($perpage, $count, "cheaterbox.php?"); +stdhead($lang_cheaterbox['head_cheaterbox']); +?> + +".$lang_cheaterbox['text_cheaterbox'].""); +print("\n"); +print(""); + +print(""); +$cheatersres = sql_query("SELECT * FROM cheaters ORDER BY dealtwith ASC, id DESC $limit"); + +while ($row = mysql_fetch_array($cheatersres)) +{ + $upspeed = ($row['uploaded'] > 0 ? $row['uploaded'] / $row['anctime'] : 0); + $lespeed = ($row['downloaded'] > 0 ? $row['downloaded'] / $row['anctime'] : 0); + $torrentres = sql_query("SELECT name FROM torrents WHERE id=".sqlesc($row['torrentid'])); + $torrentrow = mysql_fetch_array($torrentres); + if ($torrentrow) + $torrent = "".htmlspecialchars($torrentrow['name']).""; + else $torrent = $lang_cheaterbox['text_torrent_does_not_exist']; + if ($row['dealtwith']) + $dealtwith = "".$lang_cheaterbox['text_yes']." - " . get_username($row['dealtby']); + else + $dealtwith = "".$lang_cheaterbox['text_no'].""; + + print("\n"); +} +?> + + +"); +print($pagerbottom); +end_main_frame(); +stdfoot(); +?> diff --git a/cheaters.php b/cheaters.php new file mode 100644 index 00000000..5dad1fd5 --- /dev/null +++ b/cheaters.php @@ -0,0 +1,111 @@ +=1 && $ratio<=7) $ratio = ''; + +echo '
'; +begin_table(); + +echo '
'; +echo ''; +echo ''; + +echo ''; +echo ''; + +echo ''; +end_table(); +echo ''; + +$query = 'WHERE enabled = 1 AND downloaded > 0 AND uploaded > 0'; +//' AND cheat >= '.$min +if ($class>2) $query .= ' AND class < '.($class - 1); +if ($ratio>1) $query .= ' AND (uploaded / downloaded) > '.($ratio - 1); + +$res = sql_query("SELECT COUNT(*),MIN(cheat),MAX(cheat) FROM users $query") or sqlerr(); +$arr = mysql_fetch_row($res); +$top = MIN($top, $arr[0]); +$min = $arr[1]; +$max = $arr[2]; + +$pages = ceil($top / 20); +if ($page < 1) $page = 1; +elseif ($page > $pages) $page = $pages; + +list($pagertop, $pagerbottom, $limit) = pager(20, $top, "cheaters.php?"); + +echo $pagertop; +begin_table(); +print("\n"); + +$res = sql_query("SELECT * FROM users $query ORDER BY cheat DESC $limit") or sqlerr(); +while ($arr = mysql_fetch_assoc($res)) +{ + if ($arr['added'] == "0000-00-00 00:00:00") $joindate = 'N/A'; + else $joindate = get_elapsed_time(strtotime($arr['added'])).' ago'; + $age = date('U') - date('U',strtotime($arr['added'])); + if ($arr["downloaded"] > 0) + { + $ratio = number_format($arr["uploaded"] / $arr["downloaded"], 3); + $ratio = "$ratio"; + } else { + if ($arr["uploaded"] > 0) $ratio = "Inf."; + else $ratio = "---"; + } + if ($arr['added'] == '0000-00-00 00:00:00') $arr['added'] = '-'; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''."\n"; +} +end_table(); +echo $pagerbottom; +end_frame(); + +stdfoot(); +?> diff --git a/checkuser.php b/checkuser.php new file mode 100644 index 00000000..b430dfdc --- /dev/null +++ b/checkuser.php @@ -0,0 +1,62 @@ +"; +elseif ($user["gender"] == "Female") $gender = "Female"; +elseif ($user["gender"] == "N/A") $gender = "N/A"; + +if ($user[added] == "0000-00-00 00:00:00") + $joindate = 'N/A'; +else + $joindate = "$user[added] (" . get_elapsed_time(strtotime($user["added"])) . " ago)"; + +$res = sql_query("SELECT name,flagpic FROM countries WHERE id=$user[country] LIMIT 1") or sqlerr(); +if (mysql_num_rows($res) == 1) +{ + $arr = mysql_fetch_assoc($res); + $country = ""; +} + +stdhead($lang_checkuser['head_detail_for'] . $user["username"]); + +$enabled = $user["enabled"] == 'yes'; +print("

".$lang_cheaterbox['col_added']."".$lang_cheaterbox['col_suspect']."".$lang_cheaterbox['col_hit']."".$lang_cheaterbox['col_torrent']."".$lang_cheaterbox['col_ul']."".$lang_cheaterbox['col_dl']."".$lang_cheaterbox['col_ann_time']."".$lang_cheaterbox['col_seeders']."".$lang_cheaterbox['col_leechers']."".$lang_cheaterbox['col_comment']."".$lang_cheaterbox['col_dealt_with']."".$lang_cheaterbox['col_action']."
".gettime($row['added'])."" . get_username($row['userid']) . "" . $row['hit'] . "" . $torrent . "".mksize($row['uploaded']).($upspeed ? " @ ".mksize($upspeed)."/s" : "")."".mksize($row['downloaded']).($lespeed ? " @ ".mksize($lespeed)."/s" : "")."".$row['anctime']." sec"."".$row['seeders']."".$row['leechers']."".htmlspecialchars($row['comment'])."".$dealtwith."
Important
'; +echo 'Although the word cheat is used here, it should be kept in mind that this
'; +echo 'is statistical analysis - "There are lies, damm lies, and statistics!"
'; +echo 'The value for cheating can and will change quite drastically depending on what
'; +echo 'is happening, so you should always take into account other factors before
'; +echo 'issueing a warning.
'; +echo 'Somebody might get quite a high cheat value, but never cheat in their life - simply
'; +echo 'from bad luck in when the client updates the tracker - but that will drop again in
'; +echo 'the future. A true cheater will stay consistantly high...'; +echo '
Class:Ratio:
User nameRegisteredUploadedDownloadedRatioCheat ValueCheat Spread
'.$arr['username'].''.$joindate.''.mksize($arr['uploaded']).' @ '.mksize($arr['uploaded'] / $age).'ps'.mksize($arr['downloaded']).' @ '.mksize($arr['downloaded'] / $age).'ps'.$ratio.''.$arr['cheat'].''.ceil(($arr['cheat'] - $min) / max(1, ($max - $min)) * 100).'%
\"$arr[name]\"
". +"$country

" . get_username($user['id'], true, false) . "


\n"); + +if (!$enabled) + print($lang_checkuser['text_account_disabled']); +?> + + + + += UC_MODERATOR AND $user[ip] != '') + print (""); +print(""); +print(""); +print(""); +print("
>
".$lang_checkuser['row_ip']."$user[ip]
"); +stdfoot(); diff --git a/classes/.htaccess b/classes/.htaccess new file mode 100644 index 00000000..4aa5ec94 --- /dev/null +++ b/classes/.htaccess @@ -0,0 +1,3 @@ +Options -Indexes +Order allow,deny +Deny from all diff --git a/classes/class_advertisement.php b/classes/class_advertisement.php new file mode 100644 index 00000000..571cd4dc --- /dev/null +++ b/classes/class_advertisement.php @@ -0,0 +1,81 @@ +userid = $userid; + $this->set_userrow(); + $this->set_showad(); + $this->set_adrow(); + } + + function set_userrow() + { + $userid = $this->userid; + $row = get_user_row($userid); + $this->userrow = $row; + } + + function enable_ad() + { + global $enablead_advertisement; + if ($enablead_advertisement == 'yes') + return true; + else return false; + } + + function show_ad() + { + if (!$this->enable_ad()) + return false; + else + { + if ($this->userrow['noad'] == 'yes') + return false; + else + return true; + } + } + + function set_showad() + { + $showad = $this->show_ad(); + $this->showad = $showad; + } + + function set_adrow() + { + global $Cache; + if (!$arr = $Cache->get_value('current_ad_array')) + { + $now = date("Y-m-d H:i:s"); + $validpos = $this->get_validpos(); + foreach ($validpos as $pos) + { + $res = sql_query("SELECT code FROM advertisements WHERE enabled=1 AND position=".sqlesc($pos)." AND (starttime IS NULL OR starttime < ".sqlesc($now).") AND (endtime IS NULL OR endtime > ".sqlesc($now).") ORDER BY displayorder ASC, id DESC LIMIT 10") or sqlerr(__FILE__, __LINE__); + $adarray = array(); + while($row = mysql_fetch_array($res)) + $adarray[]=$row['code']; + $arr[$pos]=$adarray; + } + $Cache->cache_value('current_ad_array', $arr, 3600); + } + $this->adrow=$arr; + } + + function get_validpos() + { + return array('header', 'footer', 'belownav', 'belowsearchbox', 'torrentdetail', 'comment', 'interoverforums', 'forumpost', 'popup'); + } + function get_ad($pos) + { + $validpos = $this->get_validpos(); + if (in_array($pos, $validpos) && $this->showad) + return $this->adrow[$pos]; + else return ""; + } +} +?> diff --git a/classes/class_attachment.php b/classes/class_attachment.php new file mode 100644 index 00000000..33719018 --- /dev/null +++ b/classes/class_attachment.php @@ -0,0 +1,189 @@ +userid = $userid; + $this->set_class(); + $this->set_count_so_far(); + $this->set_count_limit(); + $this->set_size_limit(); + $this->set_allowed_ext(); + } + + function enable_attachment() + { + global $enableattach_attachment; + if ($enableattach_attachment == 'yes') + return true; + else return false; + } + + function set_class() + { + $userid = $this->userid; + $row = get_user_row($userid); + $this->class = $row['class']; + } + + function set_count_so_far() + { + $userid = $this->userid; + $now = date("Y-m-d H:i:s", TIMENOW-86400); + $countsofar = get_row_count("attachments", "WHERE userid=".sqlesc($userid)." AND added > ".sqlesc($now)); + $this->countsofar = $countsofar; + } + + function get_count_so_far() + { + return $this->countsofar; + } + + function get_count_limit_class($class) + { + global $classone_attachment, $classtwo_attachment, $classthree_attachment, $classfour_attachment,$countone_attachment, $counttwo_attachment, $countthree_attachment, $countfour_attachment; + if ($class >= $classfour_attachment && $countfour_attachment) + return $countfour_attachment; + elseif ($class >= $classthree_attachment && $countthree_attachment) + return $countthree_attachment; + elseif ($class >= $classtwo_attachment && $counttwo_attachment) + return $counttwo_attachment; + elseif ($class >= $classone_attachment && $countone_attachment) + return $countone_attachment; + } + + function set_count_limit() + { + $class = $this->class; + $countlimit = $this->get_count_limit_class($class); + $this->countlimit = $countlimit; + } + + function get_count_limit() + { + return $this->countlimit; + } + + function get_count_left() + { + $left = $this->countlimit - $this->countsofar; + return $left; + } + + function get_size_limit_class($class) + { + global $classone_attachment, $classtwo_attachment, $classthree_attachment, $classfour_attachment,$sizeone_attachment, $sizetwo_attachment, $sizethree_attachment, $sizefour_attachment; + if ($class >= $classfour_attachment && $sizefour_attachment) + return $sizefour_attachment; + elseif ($class >= $classthree_attachment && $sizethree_attachment) + return $sizethree_attachment; + elseif ($class >= $classtwo_attachment && $sizetwo_attachment) + return $sizetwo_attachment; + elseif ($class >= $classone_attachment && $sizeone_attachment) + return $sizeone_attachment; + } + + function set_size_limit() + { + $class = $this->class; + $sizelimit = $this->get_size_limit_class($class); + $this->sizelimit = $sizelimit; + } + + function get_size_limit_kb() + { + return $this->sizelimit; + } + + function get_size_limit_byte() + { + return $this->sizelimit * 1024; + } + + function get_allowed_ext_class($class) + { + global $classone_attachment, $classtwo_attachment, $classthree_attachment, $classfour_attachment,$extone_attachment, $exttwo_attachment, $extthree_attachment, $extfour_attachment; + $allowedext = array(); + if ($class >= $classone_attachment){ + $temprow = $this->extract_allowed_ext($extone_attachment); + if (count($temprow)){ + foreach ($temprow as $temp){ + $allowedext[] = $temp; + } + } + if ($class >= $classtwo_attachment){ + $temprow = $this->extract_allowed_ext($exttwo_attachment); + if (count($temprow)){ + foreach ($temprow as $temp){ + $allowedext[] = $temp; + } + } + if ($class >= $classthree_attachment){ + $temprow = $this->extract_allowed_ext($extthree_attachment); + if (count($temprow)){ + foreach ($temprow as $temp){ + $allowedext[] = $temp; + } + } + if ($class >= $classfour_attachment){ + $temprow = $this->extract_allowed_ext($extfour_attachment); + if (count($temprow)){ + foreach ($temprow as $temp){ + $allowedext[] = $temp; + } + } + } + } + } + } + return $allowedext; + } + + function set_allowed_ext() + { + $class = $this->class; + $allowedext = $this->get_allowed_ext_class($class); + $this->allowedext = $allowedext; + } + + function get_allowed_ext() + { + return $this->allowedext; + } + + function extract_allowed_ext($string) + { + $string = rtrim(trim($string), ","); + $exts = explode(",", $string); + $extrow = array(); + foreach ($exts as $ext){ + $extrow[] = trim($ext); + } + return $extrow; + } + + function is_gif_ani($filename) { + if(!($fh = @fopen($filename, 'rb'))) + return false; + $count = 0; + //an animated gif contains multiple "frames", with each frame having a + //header made up of: + // * a static 4-byte sequence (\x00\x21\xF9\x04) + // * 4 variable bytes + // * a static 2-byte sequence (\x00\x2C) + + // We read through the file til we reach the end of the file, or we've found + // at least 2 frame headers + while(!feof($fh) && $count < 2){ + $chunk = fread($fh, 1024 * 100); //read 100kb at a time + $count += preg_match_all('#\x00\x21\xF9\x04.{4}\x00\x2C#s', $chunk, $matches); + } + return $count > 1; + } +} +?> diff --git a/classes/class_cache.php b/classes/class_cache.php new file mode 100644 index 00000000..65d45cfd --- /dev/null +++ b/classes/class_cache.php @@ -0,0 +1,261 @@ +connect($host, $port); // Connect to memcache + if ($success) { + $this->isEnabled = 1; + } else { + $this->isEnabled = 0; + } + } + + function getIsEnabled() { + return $this->isEnabled; + } + + function setClearCache($isEnabled) { + $this->clearCache = $isEnabled; + } + + function getLanguageFolderArray() { + return $this->languageFolderArray; + } + + function setLanguageFolderArray($languageFolderArray) { + $this->languageFolderArray = $languageFolderArray; + } + + function getClearCache() { + return $this->clearCache; + } + + function setLanguage($language) { + $this->language = $language; + } + + function getLanguage() { + return $this->language; + } + + function new_page($MemKey = '', $Duration = 3600, $Lang = true) { + if ($Lang) { + $language = $this->getLanguage(); + $this->MemKey = $language."_".$MemKey; + } else { + $this->MemKey = $MemKey; + } + $this->Duration = $Duration; + $this->Row = 1; + $this->Part = 0; + $this->Page = array(); + } + + function set_key(){ + + } + + //---------- Adding functions ----------// + + function add_row(){ + $this->Part = 0; + $this->Page[$this->Row] = array(); + } + + function end_row(){ + $this->Row++; + } + + function add_part(){ + ob_start(); + } + + function end_part(){ + $this->Page[$this->Row][$this->Part]=ob_get_clean(); + $this->Part++; + } + + // Shorthand for: + // add_row(); + // add_part(); + // You should only use this function if the row is only going to have one part in it (convention), + // although it will theoretically work with multiple parts. + function add_whole_row(){ + $this->Part = 0; + $this->Page[$this->Row] = array(); + ob_start(); + } + + // Shorthand for: + // end_part(); + // end_row(); + // You should only use this function if the row is only going to have one part in it (convention), + // although it will theoretically work with multiple parts. + function end_whole_row(){ + $this->Page[$this->Row][$this->Part]=ob_get_clean(); + $this->Row++; + } + + // Set a variable that will only be availabe when the system is on its row + // This variable is stored in the same way as pages, so don't use an integer for the $Key. + function set_row_value($Key, $Value){ + $this->Page[$this->Row][$Key] = $Value; + } + + // Set a variable that will always be available, no matter what row the system is on. + // This variable is stored in the same way as rows, so don't use an integer for the $Key. + function set_constant_value($Key, $Value){ + $this->Page[$Key] = $Value; + } + + // Inserts a 'false' value into a row, which breaks out of while loops. + // This is not necessary if the end of $this->Page is also the end of the while loop. + function break_loop(){ + if(count($this->Page)>0){ + $this->Page[$this->Row] = FALSE; + $this->Row++; + } + } + + //---------- Locking functions ----------// + + // These functions 'lock' a key. + // Users cannot proceed until it is unlocked. + + function lock($Key){ + $this->cache_value('lock_'.$Key, 'true', 3600); + } + + function unlock($Key) { + $this->delete('lock_'.$Key); + } + + //---------- Caching functions ----------// + + // Cache $this->Page and resets $this->Row and $this->Part + function cache_page(){ + $this->cache_value($this->MemKey,$this->Page, $this->Duration); + $this->Row = 0; + $this->Part = 0; + } + + // Exact same as cache_page, but does not store the page in cache + // This is so that we can use classes that normally cache values in + // situations where caching is not required + function setup_page(){ + $this->Row = 0; + $this->Part = 0; + } + + // Wrapper for Memcache::set, with the zlib option removed and default duration of 1 hour + function cache_value($Key, $Value, $Duration = 3600){ + $this->set($Key,$Value, 0, $Duration); + $this->cacheWriteTimes++; + $this->keyHits['write'][$Key] = !$this->keyHits['write'][$Key] ? 1 : $this->keyHits['write'][$Key]+1; + } + + //---------- Getting functions ----------// + + // Returns the next row in the page + // If there's only one part in the row, return that part. + function next_row(){ + $this->Row++; + $this->Part = 0; + if($this->Page[$this->Row] == false){ + return false; + } + elseif(count($this->Page[$this->Row]) == 1){ + return $this->Page[$this->Row][0]; + } + else { + return $this->Page[$this->Row]; + } + } + + // Returns the next part in the row + function next_part(){ + $Return = $this->Page[$this->Row][$this->Part]; + $this->Part++; + return $Return; + } + + // Returns a 'row value' (a variable that changes for each row - see above). + function get_row_value($Key){ + return $this->Page[$this->Row][$Key]; + } + + // Returns a 'constant value' (a variable that doesn't change with the rows - see above) + function get_constant_value($Key){ + return $this->Page[$Key]; + } + + // If a cached version of the page exists, set $this->Page to it and return true. + // Otherwise, return false. + function get_page(){ + $Result = $this->get_value($this->MemKey); + if($Result){ + $this->Row = 0; + $this->Part = 0; + $this->Page = $Result; + return true; + } else { + return false; + } + } + + // Wrapper for Memcache::get. Why? Because wrappers are cool. + function get_value($Key) { + if($this->getClearCache()){ + $this->delete_value($Key); + return false; + } + // If we've locked it + // Xia Zuojie: we disable the following lock feature 'cause we don't need it and it doubles the time to fetch a value from a key + /*while($Lock = $this->get('lock_'.$Key)){ + sleep(2); + }*/ + + $Return = $this->get($Key); + $this->cacheReadTimes++; + $this->keyHits['read'][$Key] = !$this->keyHits['read'][$Key] ? 1 : $this->keyHits['read'][$Key]+1; + return $Return; + } + + // Wrapper for Memcache::delete. For a reason, see above. + function delete_value($Key, $AllLang = false){ + if ($AllLang){ + $langfolder_array = $this->getLanguageFolderArray(); + foreach($langfolder_array as $lf) + $this->delete($lf."_".$Key); + } + else { + $this->delete($Key); + } + } + + function getCacheReadTimes() { + return $this->cacheReadTimes; + } + + function getCacheWriteTimes() { + return $this->cacheWriteTimes; + } + + function getKeyHits ($type='read') { + return (array)$this->keyHits[$type]; + } +} diff --git a/clearcache.php b/clearcache.php new file mode 100644 index 00000000..437ee85e --- /dev/null +++ b/clearcache.php @@ -0,0 +1,33 @@ +delete_value($cachename, true); +else +$Cache->delete_value($cachename); +$done = true; +} +stdhead("Clear cache"); +?> +

Clear cache

+Cache cleared

"); +?> +
+ + + + +
Cache name
Multi languagesYes
+
+ 100) + lnk.index = 100; + lnk.style.color=getColor(lnk.startColor, lnk.endColor, lnk.index); + + if(lnk.index == 100) + lnk.state="ON"; + else + LinkFadeRunning = true; + } + else if(lnk.state == "FADE_UP_DOWN") + { + lnk.index+=LinkFadeOutStep; + if(lnk.index>100) + lnk.index = 100; + lnk.style.color=getColor(lnk.startColor, lnk.endColor, lnk.index); + + if(lnk.index == 100) + lnk.state="FADE_DOWN"; + LinkFadeRunning = true; + } + else if(lnk.state == "FADE_DOWN") + { + lnk.index-=LinkFadeOutStep; + if(lnk.index<0) + lnk.index = 0; + lnk.style.color=getColor(lnk.startColor, lnk.endColor, lnk.index); + + if(lnk.index == 0) + lnk.state="OFF"; + else + LinkFadeRunning = true; + } + } + } + if(LinkFadeRunning) + setTimeout("JSFX.LinkFadeAnimation()", 40); +} diff --git a/comment.php b/comment.php new file mode 100644 index 00000000..4c96fd51 --- /dev/null +++ b/comment.php @@ -0,0 +1,305 @@ + (TIMENOW - 10)) + { + $secs = 10 - (TIMENOW - strtotime($CURUSER['last_comment'])); + stderr($lang_comment['std_error'],$lang_comment['std_comment_flooding_denied']."$secs".$lang_comment['std_before_posting_another']); + } + } + + $parent_id = 0 + $_POST["pid"]; + int_check($parent_id,true); + + if($type == "torrent") + $res = sql_query("SELECT name, owner FROM torrents WHERE id = $parent_id") or sqlerr(__FILE__,__LINE__); + else if($type == "offer") + $res = sql_query("SELECT name, userid as owner FROM offers WHERE id = $parent_id") or sqlerr(__FILE__,__LINE__); + else if($type == "request") + $res = sql_query("SELECT requests.request as name, userid as owner FROM requests WHERE id = $parent_id") or sqlerr(__FILE__,__LINE__); + + $arr = mysql_fetch_array($res); + if (!$arr) + stderr($lang_comment['std_error'], $lang_comment['std_no_torrent_id']); + + $text = trim($_POST["body"]); + if (!$text) + stderr($lang_comment['std_error'], $lang_comment['std_comment_body_empty']); + + if($type == "torrent"){ + sql_query("INSERT INTO comments (user, torrent, added, text, ori_text) VALUES (" .$CURUSER["id"] . ",$parent_id, '" . date("Y-m-d H:i:s") . "', " . sqlesc($text) . "," . sqlesc($text) . ")"); + $Cache->delete_value('torrent_'.$parent_id.'_last_comment_content'); + } + elseif($type == "offer"){ + sql_query("INSERT INTO comments (user, offer, added, text, ori_text) VALUES (" .$CURUSER["id"] . ",$parent_id, '" . date("Y-m-d H:i:s") . "', " . sqlesc($text) . "," . sqlesc($text) . ")"); + $Cache->delete_value('offer_'.$parent_id.'_last_comment_content'); + } + elseif($type == "request") + sql_query("INSERT INTO comments (user, request, added, text, ori_text) VALUES (" .$CURUSER["id"] . ",$parent_id, '" . date("Y-m-d H:i:s") . "', " . sqlesc($text) . "," . sqlesc($text) . ")"); + + $newid = mysql_insert_id(); + + if($type == "torrent") + sql_query("UPDATE torrents SET comments = comments + 1 WHERE id = $parent_id"); + else if($type == "offer") + sql_query("UPDATE offers SET comments = comments + 1 WHERE id = $parent_id"); + else if($type == "request") + sql_query("UPDATE requests SET comments = comments + 1 WHERE id = $parent_id"); + + $ras = sql_query("SELECT commentpm FROM users WHERE id = $arr[owner]") or sqlerr(__FILE__,__LINE__); + $arg = mysql_fetch_array($ras); + + if($arg["commentpm"] == 'yes' && $CURUSER['id'] != $arr["owner"]) + { + $added = sqlesc(date("Y-m-d H:i:s")); + $subject = sqlesc($lang_comment_target[get_user_lang($arr["owner"])]['msg_new_comment']); + if($type == "torrent") + $notifs = sqlesc($lang_comment_target[get_user_lang($arr["owner"])]['msg_torrent_receive_comment'] . " [url=" . get_protocol_prefix() . "$BASEURL/details.php?id=$parent_id] " . $arr['name'] . "[/url]."); + if($type == "offer") + $notifs = sqlesc($lang_comment_target[get_user_lang($arr["owner"])]['msg_torrent_receive_comment'] . " [url=" . get_protocol_prefix() . "$BASEURL/offers.php?id=$parent_id&off_details=1] " . $arr['name'] . "[/url]."); + if($type == "request") + $notifs = sqlesc($lang_comment_target[get_user_lang($arr["owner"])]['msg_torrent_receive_comment'] . " [url=" . get_protocol_prefix() . "$BASEURL/viewrequests.php?id=$parent_id&req_details=1] " . $arr['name'] . "[/url]."); + + sql_query("INSERT INTO messages (sender, receiver, subject, msg, added) VALUES(0, " . $arr['owner'] . ", $subject, $notifs, $added)") or sqlerr(__FILE__, __LINE__); + $Cache->delete_value('user_'.$arr['owner'].'_unread_message_count'); + $Cache->delete_value('user_'.$arr['owner'].'_inbox_count'); + } + + KPS("+",$addcomment_bonus,$CURUSER["id"]); + + // Update Last comment sent... + sql_query("UPDATE users SET last_comment = NOW() WHERE id = ".sqlesc($CURUSER['id'])) or sqlerr(__FILE__, __LINE__); + + if($type == "torrent") + header("Refresh: 0; url=details.php?id=$parent_id#$newid"); + else if($type == "offer") + header("Refresh: 0; url=offers.php?id=$parent_id&off_details=1#$newid"); + else if($type == "request") + header("Refresh: 0; url=viewrequests.php?id=$parent_id&req_details=1#$newid"); + die; + } + + $parent_id = 0 + $_GET["pid"]; + int_check($parent_id,true); + + if($sub == "quote") + { + $commentid = 0 + $_GET["cid"]; + int_check($commentid,true); + + $res2 = sql_query("SELECT comments.text, users.username FROM comments JOIN users ON comments.user = users.id WHERE comments.id=$commentid") or sqlerr(__FILE__, __LINE__); + + if (mysql_num_rows($res2) != 1) + stderr($lang_forums['std_error'], $lang_forums['std_no_comment_id']); + + $arr2 = mysql_fetch_assoc($res2); + } + + if($type == "torrent"){ + $res = sql_query("SELECT name, owner FROM torrents WHERE id = $parent_id") or sqlerr(__FILE__,__LINE__); + $url="details.php?id=$parent_id"; + } + else if($type == "offer"){ + $res = sql_query("SELECT name, userid as owner FROM offers WHERE id = $parent_id") or sqlerr(__FILE__,__LINE__); + $url="offers.php?id=$parent_id&off_details=1"; + } + else if($type == "request"){ + $res = sql_query("SELECT requests.request as name, userid as owner FROM requests WHERE id = $parent_id") or sqlerr(__FILE__,__LINE__); + $url="viewrequests.php?id=$parent_id&req_details=1"; + } + $arr = mysql_fetch_array($res); + if (!$arr) + stderr($lang_comment['std_error'], $lang_comment['std_no_torrent_id']); + + stdhead($lang_comment['head_add_comment_to']. $arr["name"]); + begin_main_frame(); + $title = $lang_comment['text_add_comment_to']."". htmlspecialchars($arr["name"]) . ""; + print("
\n"); + print("\n"); + begin_compose($title, ($sub == "quote" ? "quote" : "reply"), ($sub == "quote" ? htmlspecialchars("[quote=".htmlspecialchars($arr2["username"])."]".unesc($arr2["text"])."[/quote]") : ""), false); + end_compose(); + print("
"); + end_main_frame(); + stdfoot(); + die; +} +elseif ($action == "edit") +{ + $commentid = 0 + $_GET["cid"]; + int_check($commentid,true); + + if($type == "torrent") + $res = sql_query("SELECT c.*, t.name, t.id AS parent_id FROM comments AS c JOIN torrents AS t ON c.torrent = t.id WHERE c.id=$commentid") or sqlerr(__FILE__,__LINE__); + else if($type == "offer") + $res = sql_query("SELECT c.*, o.name, o.id AS parent_id FROM comments AS c JOIN offers AS o ON c.offer = o.id WHERE c.id=$commentid") or sqlerr(__FILE__,__LINE__); + else if($type == "request") + $res = sql_query("SELECT c.*, r.request as name, r.id AS parent_id FROM comments AS c JOIN requests AS r ON c.request = r.id WHERE c.id=$commentid") or sqlerr(__FILE__,__LINE__); + + $arr = mysql_fetch_array($res); + if (!$arr) + stderr($lang_comment['std_error'], $lang_comment['std_invalid_id']); + + if ($arr["user"] != $CURUSER["id"] && get_user_class() < $commanage_class) + stderr($lang_comment['std_error'], $lang_comment['std_permission_denied']); + + if ($_SERVER["REQUEST_METHOD"] == "POST") + { + $text = $_POST["body"]; + $returnto = htmlspecialchars($_POST["returnto"]) ? $_POST["returnto"] : htmlspecialchars($_SERVER["HTTP_REFERER"]); + + if ($text == "") + stderr($lang_comment['std_error'], $lang_comment['std_comment_body_empty']); + $text = sqlesc($text); + $editdate = sqlesc(date("Y-m-d H:i:s")); + + sql_query("UPDATE comments SET text=$text, editdate=$editdate, editedby=$CURUSER[id] WHERE id=".sqlesc($commentid)) or sqlerr(__FILE__, __LINE__); + if($type == "torrent") + $Cache->delete_value('torrent_'.$arr['parent_id'].'_last_comment_content'); + elseif ($type == "offer") + $Cache->delete_value('offer_'.$arr['parent_id'].'_last_comment_content'); + header("Location: $returnto"); + + die; + } + $parent_id = $arr["parent_id"]; + if($type == "torrent") + $url="details.php?id=$parent_id"; + else if($type == "offer") + $url="offers.php?id=$parent_id&off_details=1"; + else if($type == "request") + $url="viewrequests.php?id=$parent_id&req_details=1"; + stdhead($lang_comment['head_edit_comment_to']."\"". $arr["name"] . "\""); + begin_main_frame(); + $title = $lang_comment['head_edit_comment_to']."". htmlspecialchars($arr["name"]) . ""; + print("
\n"); + print("\n"); + begin_compose($title, "edit", htmlspecialchars(unesc($arr["text"])), false); + end_compose(); + print("
"); + end_main_frame(); + stdfoot(); + die; +} +elseif ($action == "delete") +{ + if (get_user_class() < $commanage_class) + stderr($lang_comment['std_error'], $lang_comment['std_permission_denied']); + + $commentid = 0 + $_GET["cid"]; + $sure = $_GET["sure"]; + int_check($commentid,true); + + if (!$sure) + { + $referer = $_SERVER["HTTP_REFERER"]; + stderr($lang_comment['std_delete_comment'], $lang_comment['std_delete_comment_note'] ."delete_value('torrent_'.$arr['pid'].'_last_comment_content'); + elseif ($type == "offer") + $Cache->delete_value('offer_'.$arr['pid'].'_last_comment_content'); + if ($parent_id && mysql_affected_rows() > 0) + { + if($type == "torrent") + sql_query("UPDATE torrents SET comments = comments - 1 WHERE id = $parent_id") or sqlerr(__FILE__,__LINE__); + else if($type == "offer") + sql_query("UPDATE offers SET comments = comments - 1 WHERE id = $parent_id") or sqlerr(__FILE__,__LINE__); + else if($type == "request") + sql_query("UPDATE requests SET comments = comments - 1 WHERE id = $parent_id") or sqlerr(__FILE__,__LINE__); + } + + KPS("-",$addcomment_bonus,$userpostid); + + $returnto = $_GET["returnto"] ? $_GET["returnto"] : htmlspecialchars($_SERVER["HTTP_REFERER"]); + + header("Location: $returnto"); + + die; +} +elseif ($action == "vieworiginal") +{ + if (get_user_class() < $commanage_class) + stderr($lang_comment['std_error'], $lang_comment['std_permission_denied']); + + $commentid = 0 + $_GET["cid"]; + int_check($commentid,true); + + if($type == "torrent") + $res = sql_query("SELECT c.*, t.name FROM comments AS c JOIN torrents AS t ON c.torrent = t.id WHERE c.id=$commentid") or sqlerr(__FILE__,__LINE__); + else if($type == "offer") + $res = sql_query("SELECT c.*, o.name FROM comments AS c JOIN offers AS o ON c.offer = o.id WHERE c.id=$commentid") or sqlerr(__FILE__,__LINE__); + else if($type == "request") + $res = sql_query("SELECT c.*, r.request as name FROM comments AS c JOIN requests AS r ON c.request = r.id WHERE c.id=$commentid") or sqlerr(__FILE__,__LINE__); + + $arr = mysql_fetch_array($res); + if (!$arr) + stderr($lang_comment['std_error'], $lang_comment['std_invalid_id']); + + stdhead($lang_comment['head_original_comment']); + print("

".$lang_comment['text_original_content_of_comment']."#$commentid

"); + print(""); + print("
\n"); + echo format_comment($arr["ori_text"]); + print("
\n"); + + $returnto = htmlspecialchars($_SERVER["HTTP_REFERER"]); + + if ($returnto) + print("

(".$lang_comment['text_back'].")

\n"); + + stdfoot(); + + die; +} +else +stderr($lang_comment['std_error'], $lang_comment['std_unknown_action']); + +die; +?> diff --git a/common.js b/common.js new file mode 100644 index 00000000..f55c78af --- /dev/null +++ b/common.js @@ -0,0 +1,374 @@ +function postvalid(form){ + $('qr').disabled = true; + return true; +} + +function dropmenu(obj){ +$(obj.id + 'list').style.display = $(obj.id + 'list').style.display == 'none' ? '' : 'none'; +} + +function confirm_delete(id, note, addon) +{ + if(confirm(note)) + { + self.location.href='?action=del'+(addon ? '&'+addon : '')+'&id='+id; + } +} + +//viewfilelist.js + +function viewfilelist(torrentid) +{ +var result=ajax.gets('viewfilelist.php?id='+torrentid); +document.getElementById("showfl").style.display = 'none'; +document.getElementById("hidefl").style.display = 'block'; +showlist(result); +} + +function showlist(filelist) +{ +document.getElementById("filelist").innerHTML=filelist; +} + +function hidefilelist() +{ +document.getElementById("hidefl").style.display = 'none'; +document.getElementById("showfl").style.display = 'block'; +document.getElementById("filelist").innerHTML=""; +} + +//viewpeerlist.js + +function viewpeerlist(torrentid) +{ +var list=ajax.gets('viewpeerlist.php?id='+torrentid); +document.getElementById("showpeer").style.display = 'none'; +document.getElementById("hidepeer").style.display = 'block'; +document.getElementById("peercount").style.display = 'none'; +document.getElementById("peerlist").innerHTML=list; +} +function hidepeerlist() +{ +document.getElementById("hidepeer").style.display = 'none'; +document.getElementById("peerlist").innerHTML=""; +document.getElementById("showpeer").style.display = 'block'; +document.getElementById("peercount").style.display = 'block'; +} + +// smileit.js + +function SmileIT(smile,form,text){ + document.forms[form].elements[text].value = document.forms[form].elements[text].value+" "+smile+" "; + document.forms[form].elements[text].focus(); +} + +// saythanks.js + +function saythanks(torrentid) +{ +var list=ajax.post('thanks.php','','id='+torrentid); +document.getElementById("thanksbutton").innerHTML = document.getElementById("thanksadded").innerHTML; +document.getElementById("nothanks").innerHTML = ""; +document.getElementById("addcuruser").innerHTML = document.getElementById("curuser").innerHTML; +} + +// preview.js + +function preview(obj) { + var poststr = encodeURIComponent( document.getElementById("body").value ); + var result=ajax.posts('preview.php','body='+poststr); + document.getElementById("previewouter").innerHTML=result; + document.getElementById("previewouter").style.display = 'block'; + document.getElementById("editorouter").style.display = 'none'; + document.getElementById("unpreviewbutton").style.display = 'block'; + document.getElementById("previewbutton").style.display = 'none'; +} + +function unpreview(obj){ + document.getElementById("previewouter").style.display = 'none'; + document.getElementById("editorouter").style.display = 'block'; + document.getElementById("unpreviewbutton").style.display = 'none'; + document.getElementById("previewbutton").style.display = 'block'; +} + +// java_klappe.js + +function klappe(id) +{ +var klappText = document.getElementById('k' + id); +var klappBild = document.getElementById('pic' + id); + +if (klappText.style.display == 'none') { + klappText.style.display = 'block'; + // klappBild.src = 'pic/blank.gif'; +} +else { + klappText.style.display = 'none'; + // klappBild.src = 'pic/blank.gif'; +} +} + +function klappe_news(id) +{ +var klappText = document.getElementById('k' + id); +var klappBild = document.getElementById('pic' + id); + +if (klappText.style.display == 'none') { + klappText.style.display = ''; + klappBild.className = 'minus'; +} +else { + klappText.style.display = 'none'; + klappBild.className = 'plus'; +} +} +function klappe_ext(id) +{ +var klappText = document.getElementById('k' + id); +var klappBild = document.getElementById('pic' + id); +var klappPoster = document.getElementById('poster' + id); +if (klappText.style.display == 'none') { + klappText.style.display = 'block'; + klappPoster.style.display = 'block'; + klappBild.className = 'minus'; +} +else { + klappText.style.display = 'none'; + klappPoster.style.display = 'none'; + klappBild.className = 'plus'; +} +} + +// disableother.js + +function disableother(select,target) +{ + if (document.getElementById(select).value == 0) + document.getElementById(target).disabled = false; + else { + document.getElementById(target).disabled = true; + document.getElementById(select).disabled = false; + } +} + +function disableother2(oricat,newcat) +{ + if (document.getElementById("movecheck").checked == true){ + document.getElementById(oricat).disabled = true; + document.getElementById(newcat).disabled = false; + } + else { + document.getElementById(oricat).disabled = false; + document.getElementById(newcat).disabled = true; + } +} + +// ctrlenter.js +var submitted = false; +function ctrlenter(event,formname,submitname){ + if (submitted == false){ + var keynum; + if (event.keyCode){ + keynum = event.keyCode; + } + else if (event.which){ + keynum = event.which; + } + if (event.ctrlKey && keynum == 13){ + submitted = true; + document.getElementById(formname).submit(); + } + } +} +function gotothepage(page){ +var url=window.location.href; +var end=url.lastIndexOf("page"); +url = url.replace(/#[0-9]+/g,""); +if (end == -1){ +if (url.lastIndexOf("?") == -1) +window.location.href=url+"?page="+page; +else +window.location.href=url+"&page="+page; +} +else{ +url = url.replace(/page=.+/g,""); +window.location.href=url+"page="+page; +} +} +function changepage(event){ +var gotopage; +var keynum; +var altkey; +if (navigator.userAgent.toLowerCase().indexOf('presto') != -1) +altkey = event.shiftKey; +else altkey = event.altKey; +if (event.keyCode){ + keynum = event.keyCode; +} +else if (event.which){ + keynum = event.which; +} +if(altkey && keynum==33){ +if(currentpage<=0) return; +gotopage=currentpage-1; +gotothepage(gotopage); +} +else if (altkey && keynum == 34){ +if(currentpage>=maxpage) return; +gotopage=currentpage+1; +gotothepage(gotopage); +} +} +if(window.document.addEventListener){ +window.addEventListener("keydown",changepage,false); +} +else{ +window.attachEvent("onkeydown",changepage,false); +} + +// bookmark.js +function bookmark(torrentid,counter) +{ +var result=ajax.gets('bookmark.php?torrentid='+torrentid); +bmicon(result,counter); +} +function bmicon(status,counter) +{ + if (status=="added") + document.getElementById("bookmark"+counter).innerHTML="\"Bookmarked\""; + else if (status=="deleted") + document.getElementById("bookmark"+counter).innerHTML="\"Unbookmarked\""; +} + +// check.js +var checkflag = "false"; +function check(field,checkall_name,uncheckall_name) { + if (checkflag == "false") { + for (i = 0; i < field.length; i++) { + field[i].checked = true;} + checkflag = "true"; + return uncheckall_name; } + else { + for (i = 0; i < field.length; i++) { + field[i].checked = false; } + checkflag = "false"; + return checkall_name; } +} + +// in torrents.php +var form='searchbox'; +function SetChecked(chkName,ctrlName,checkall_name,uncheckall_name,start,count) { + dml=document.forms[form]; + len = dml.elements.length; + var begin; + var end; + if (start == -1){ + begin = 0; + end = len; + } + else{ + begin = start; + end = start + count; + } + var check_state; + for( i=0 ; i '6', + 'neverdeletepacked' => '3', + 'deletepacked' => '400', + 'deleteunpacked' => '150', + 'deletenotransfer' => '60', + 'deletenotransfertwo' => '0', + 'deletepeasant' => '30', + 'psdlone' => '50', + 'psratioone' => '0.4', + 'psdltwo' => '100', + 'psratiotwo' => '0.5', + 'psdlthree' => '200', + 'psratiothree' => '0.6', + 'psdlfour' => '400', + 'psratiofour' => '0.7', + 'psdlfive' => '800', + 'psratiofive' => '0.8', + 'putime' => '4', + 'pudl' => '50', + 'puprratio' => '1.05', + 'puderatio' => '0.95', + 'eutime' => '8', + 'eudl' => '120', + 'euprratio' => '1.55', + 'euderatio' => '1.45', + 'cutime' => '15', + 'cudl' => '300', + 'cuprratio' => '2.05', + 'cuderatio' => '1.95', + 'iutime' => '25', + 'iudl' => '500', + 'iuprratio' => '2.55', + 'iuderatio' => '2.45', + 'vutime' => '40', + 'vudl' => '750', + 'vuprratio' => '3.05', + 'vuderatio' => '2.95', + 'exutime' => '60', + 'exudl' => '1024', + 'exuprratio' => '3.55', + 'exuderatio' => '3.45', + 'uutime' => '80', + 'uudl' => '1536', + 'uuprratio' => '4.05', + 'uuderatio' => '3.95', + 'nmtime' => '100', + 'nmdl' => '3072', + 'nmprratio' => '4.55', + 'nmderatio' => '4.45', + 'getInvitesByPromotion' => array( + '2' => '1', + '3' => '0', + '4' => '2', + '5' => '0', + '6' => '3', + '7' => '0', + '8' => '5', + '9' => '10', + ), +); +$ADVERTISEMENT=array( + 'enablead' => 'yes', + 'enablenoad' => 'yes', + 'noad' => '12', + 'enablebonusnoad' => 'yes', + 'bonusnoad' => '2', + 'bonusnoadpoint' => '10000', + 'bonusnoadtime' => '15', + 'adclickbonus' => '0', +); +$ATTACHMENT=array( + 'enableattach' => 'yes', + 'classone' => '1', + 'countone' => '5', + 'sizeone' => '256', + 'extone' => 'jpg, jpeg, png, gif', + 'classtwo' => '2', + 'counttwo' => '10', + 'sizetwo' => '512', + 'exttwo' => 'torrent, zip, rar, 7z, gzip, gz', + 'classthree' => '5', + 'countthree' => '20', + 'sizethree' => '1024', + 'extthree' => 'mp3, ogg, oga, flv', + 'classfour' => '13', + 'countfour' => '500', + 'sizefour' => '2048', + 'extfour' => 'doc, xls', + 'savedirectory' => './attachments', + 'httpdirectory' => 'attachments', + 'savedirectorytype' => 'monthdir', + 'thumbnailtype' => 'createthumb', + 'thumbquality' => '80', + 'thumbwidth' => '500', + 'thumbheight' => '500', + 'watermarkpos' => '9', + 'watermarkwidth' => '300', + 'watermarkheight' => '300', + 'watermarkquality' => '85', + 'altthumbwidth' => '180', + 'altthumbheight' => '135', +); +$AUTHORITY=array( + 'defaultclass' => '1', + 'staffmem' => '13', + 'newsmanage' => '14', + 'newfunitem' => '1', + 'funmanage' => '13', + 'sbmanage' => '13', + 'pollmanage' => '14', + 'applylink' => '1', + 'linkmanage' => '14', + 'postmanage' => '13', + 'commanage' => '13', + 'forummanage' => '14', + 'viewuserlist' => '2', + 'torrentmanage' => '13', + 'torrentsticky' => '14', + 'askreseed' => '2', + 'viewnfo' => '2', + 'torrentstructure' => '8', + 'sendinvite' => '2', + 'viewhistory' => '6', + 'topten' => '2', + 'log' => '5', + 'confilog' => '13', + 'userprofile' => '14', + 'torrenthistory' => '2', + 'prfmanage' => '13', + 'cruprfmanage' => '14', + 'uploadsub' => '1', + 'delownsub' => '2', + 'submanage' => '13', + 'updateextinfo' => '7', + 'viewanonymous' => '12', + 'beanonymous' => '4', + 'addoffer' => '0', + 'offermanage' => '13', + 'upload' => '2', + 'uploadspecial' => NULL, + 'movetorrent' => NULL, + 'chrmanage' => '13', + 'viewinvite' => '13', + 'buyinvite' => '5', + 'seebanned' => '12', + 'againstoffer' => '1', + 'userbar' => '2', +); +$BASIC=array( + 'SITENAME' => 'NexusPHP', + 'BASEURL' => 'localhost', + 'announce_url' => 'localhost/announce.php', + 'mysql_host' => 'localhost', + 'mysql_user' => 'root', + 'mysql_pass' => 'nexusphprocks', + 'mysql_db' => 'nexusphp', +); +$BONUS=array( + 'donortimes' => '2', + 'perseeding' => '1', + 'maxseeding' => '7', + 'tzero' => '4', + 'nzero' => '7', + 'bzero' => '100', + 'l' => '300', + 'uploadtorrent' => '15', + 'uploadsubtitle' => '5', + 'starttopic' => '2', + 'makepost' => '1', + 'addcomment' => '1', + 'pollvote' => '1', + 'offervote' => '1', + 'funboxvote' => '1', + 'saythanks' => '0.5', + 'receivethanks' => '0', + 'funboxreward' => '5', + 'onegbupload' => '300', + 'fivegbupload' => '800', + 'tengbupload' => '1300', + 'ratiolimit' => '6', + 'dlamountlimit' => '50', + 'oneinvite' => '1000', + 'customtitle' => '5000', + 'vipstatus' => '8000', + 'bonusgift' => 'yes', + 'basictax' => '4', + 'taxpercentage' => '10', + 'prolinkpoint' => '1', + 'prolinktime' => '600', +); +$CODE=array( + 'mainversion' => 'NexusPHP', + 'subversion' => 'Standard v1.5 Beta 4', + 'releasedate' => '2010-09-19', + 'website' => 'http://www.nexusphp.com', +); +$MAIN=array( + 'site_online' => 'yes', + 'max_torrent_size' => '1048576', + 'announce_interval' => '1800', + 'annintertwoage' => '7', + 'annintertwo' => '2700', + 'anninterthreeage' => '30', + 'anninterthree' => '3600', + 'signup_timeout' => '259200', + 'minoffervotes' => '15', + 'offervotetimeout' => '259200', + 'offeruptimeout' => '86400', + 'maxsubsize' => '3145728', + 'postsperpage' => '10', + 'topicsperpage' => '20', + 'torrentsperpage' => '50', + 'maxnewsnum' => '3', + 'max_dead_torrent_time' => '21600', + 'maxusers' => '50000', + 'torrent_dir' => 'torrents', + 'iniupload' => '0', + 'SITEEMAIL' => 'nobody@gmail.com', + 'ACCOUNTANTID' => '1', + 'ALIPAYACCOUNT' => '', + 'PAYPALACCOUNT' => '', + 'SLOGAN' => 'The Ultimate File Sharing Experience', + 'icplicense' => '', + 'autoclean_interval_one' => '900', + 'autoclean_interval_two' => '1800', + 'autoclean_interval_three' => '3600', + 'autoclean_interval_four' => '43200', + 'autoclean_interval_five' => '648000', + 'reportemail' => 'nobody@gmail.com', + 'invitesystem' => 'no', + 'registration' => 'yes', + 'showhotmovies' => 'no', + 'showclassicmovies' => 'no', + 'showimdbinfo' => 'no', + 'enablenfo' => 'yes', + 'enableschool' => 'no', + 'restrictemail' => 'no', + 'showpolls' => 'yes', + 'showstats' => 'yes', + 'showlastxtorrents' => 'no', + 'showtrackerload' => 'yes', + 'showshoutbox' => 'yes', + 'showfunbox' => 'no', + 'showoffer' => 'yes', + 'sptime' => 'no', + 'showhelpbox' => 'no', + 'enablebitbucket' => 'yes', + 'smalldescription' => 'yes', + 'altname' => NULL, + 'extforum' => 'no', + 'extforumurl' => 'http://www.cc98.org', + 'defaultlang' => 'en', + 'defstylesheet' => '3', + 'donation' => 'yes', + 'spsct' => NULL, + 'browsecat' => '4', + 'specialcat' => NULL, + 'waitsystem' => 'no', + 'maxdlsystem' => 'no', + 'bitbucket' => 'bitbucket', + 'torrentnameprefix' => '[Nexus]', + 'showforumstats' => 'yes', + 'verification' => 'automatic', + 'invite_count' => '0', + 'invite_timeout' => '7', + 'seeding_leeching_time_calc_start' => '', + 'startsubid' => NULL, + 'logo' => '', +); +$SECURITY=array( + 'securelogin' => 'no', + 'securetracker' => 'no', + 'https_announce_url' => '', + 'iv' => 'yes', + 'maxip' => '2', + 'maxloginattempts' => '10', + 'changeemail' => 'no', + 'cheaterdet' => '1', + 'nodetect' => '11', +); +$SMTP=array( + 'smtptype' => 'advanced', + 'emailnotify' => 'no', + 'smtp_host' => 'localhost', + 'smtp_port' => '233', + 'smtp_from' => NULL, +); +$TORRENT=array( + 'prorules' => 'no', + 'randomhalfleech' => '5', + 'randomfree' => '2', + 'randomtwoup' => '2', + 'randomtwoupfree' => '1', + 'randomtwouphalfdown' => '0', + 'randomthirtypercentdown' => '0', + 'largesize' => '20', + 'largepro' => '2', + 'expirehalfleech' => '150', + 'expirefree' => '60', + 'expiretwoup' => '60', + 'expiretwoupfree' => '30', + 'expiretwouphalfleech' => '30', + 'expirethirtypercentleech' => '0', + 'expirenormal' => '0', + 'hotdays' => '7', + 'hotseeder' => '10', + 'halfleechbecome' => '1', + 'freebecome' => '1', + 'twoupbecome' => '1', + 'twoupfreebecome' => '1', + 'twouphalfleechbecome' => '1', + 'thirtypercentleechbecome' => '1', + 'normalbecome' => '1', + 'uploaderdouble' => '1', + 'deldeadtorrent' => '0', +); +$TWEAK=array( + 'where' => 'no', + 'iplog1' => 'yes', + 'bonus' => 'enable', + 'datefounded' => '2010-08-19', + 'titlekeywords' => '', + 'metakeywords' => '', + 'metadescription' => '', + 'enablelocation' => 'yes', + 'enablesqldebug' => 'no', + 'sqldebug' => '13', + 'cssdate' => '', + 'enabletooltip' => 'yes', + 'prolinkimg' => 'pic/prolink.png', + 'analyticscode' => '', +); diff --git a/confirm.php b/confirm.php new file mode 100644 index 00000000..0b46fb33 --- /dev/null +++ b/confirm.php @@ -0,0 +1,47 @@ + diff --git a/confirm_resend.php b/confirm_resend.php new file mode 100644 index 00000000..1dbefb35 --- /dev/null +++ b/confirm_resend.php @@ -0,0 +1,123 @@ + 40) + bark($lang_confirm_resend['std_password_too_long']); + + if ($wantpassword == $wantusername) + bark($lang_confirm_resend['std_password_equals_username']); + + $secret = mksecret(); + $wantpasshash = md5($secret . $wantpassword . $secret); + $editsecret = ($verification == 'admin' ? '' : $secret); + + sql_query("UPDATE users SET passhash=" .sqlesc($wantpasshash) . ",secret=" . sqlesc($secret) . ",editsecret=" . sqlesc($editsecret) . " WHERE id=" . sqlesc($arr["id"])) or sqlerr(__FILE__, __LINE__); + + if (!mysql_affected_rows()) + stderr($lang_confirm_resend['std_error'], $lang_confirm_resend['std_database_error']); + + $psecret = md5($editsecret); + $ip = getip() ; + $usern = $arr["username"]; + $id = $arr["id"]; + $title = $SITENAME.$lang_confirm_resend['mail_title']; + +$body = << +{$lang_confirm_resend['mail_this_link']}
+http://$BASEURL/confirm.php?id=$id&secret=$psecret +{$lang_confirm_resend['mail_four_1']} +{$lang_confirm_resend['mail_here']}
+http://$BASEURL/confirm_resend.php +
+{$lang_confirm_resend['mail_five']} +EOD; + + sent_mail($email,$SITENAME,$SITEEMAIL,change_email_encode(get_langfolder_cookie(), $title),change_email_encode(get_langfolder_cookie(),$body),"signup",false,false,'',get_email_encode(get_langfolder_cookie())); + header("Location: " . get_protocol_prefix() . "$BASEURL/ok.php?type=signup&email=" . rawurlencode($email)); +} +else +{ + stdhead(); + $s = ""; + ?> +
+".$lang_confirm_resend['text_select_lang']. $s . ""); +?> +
+ +

+
+ + + + + + + +

+
+ \ No newline at end of file diff --git a/contactstaff.php b/contactstaff.php new file mode 100644 index 00000000..0534b05e --- /dev/null +++ b/contactstaff.php @@ -0,0 +1,16 @@ +"); +if ($_GET["returnto"] || $_SERVER["HTTP_REFERER"]) + print(""); +begin_compose($lang_contactstaff['text_message_to_staff'], "new"); +end_compose(); +print(""); +end_main_frame(); +stdfoot(); diff --git a/cron.php b/cron.php new file mode 100644 index 00000000..70bb4a5d --- /dev/null +++ b/cron.php @@ -0,0 +1,13 @@ +body {overflow-y:scroll;}<\/style>"); +} +var userAgent = navigator.userAgent.toLowerCase(); +var is_ie = (userAgent.indexOf('msie') != -1) && userAgent.substr(userAgent.indexOf('msie') + 5, 3); + +function $() { + var elements = new Array(); + for (var i = 0; i < arguments.length; i++) { + var element = arguments[i]; + if (typeof element == 'string') + element = document.getElementById(element); + if (arguments.length == 1) + return element; + elements.push(element); + } + return elements; +} + +function Scale(image, max_width, max_height) { + var tempimage = new Image(); + tempimage.src = image.src; + var tempwidth = tempimage.width; + var tempheight = tempimage.height; + if (tempwidth > max_width) { + image.height = tempheight = Math.round(((max_width)/tempwidth) * tempheight); + image.width = tempwidth = max_width; + } + + if (max_height != 0 && tempheight > max_height) + { + image.width = Math.round(((max_height)/tempheight) * tempwidth); + image.height = max_height; + } +} + +function check_avatar(image, langfolder){ + var tempimage = new Image(); + tempimage.src = image.src; + var displayheight = image.height; + var tempwidth = tempimage.width; + var tempheight = tempimage.height; + if (tempwidth > 250 || tempheight > 250 || displayheight > 250) { + image.src='pic/forum_pic/'+langfolder+'/avatartoobig.png'; + } +} + +function Preview(image) { + if (!is_ie || is_ie >= 7){ + $('lightbox').innerHTML = ""; + $('curtain').style.display = "block"; + $('lightbox').style.display = "block"; + } + else{ + window.open(image.src); + } +} + +function Previewurl(url) { + if (!is_ie || is_ie >= 7){ + $('lightbox').innerHTML = ""; + $('curtain').style.display = "block"; + $('lightbox').style.display = "block"; + } + else{ + window.open(url); + } +} + +function findPosition( oElement ) { + if( typeof( oElement.offsetParent ) != 'undefined' ) { + for( var posX = 0, posY = 0; oElement; oElement = oElement.offsetParent ) { + posX += oElement.offsetLeft; + posY += oElement.offsetTop; + } + return [ posX, posY ]; + } else { + return [ oElement.x, oElement.y ]; + } +} + +function Return() { + $('lightbox').style.display = "none"; + $('curtain').style.display = "none"; + $('lightbox').innerHTML = ""; +} diff --git a/delacctadmin.php b/delacctadmin.php new file mode 100644 index 00000000..df9a7fbc --- /dev/null +++ b/delacctadmin.php @@ -0,0 +1,37 @@ +".htmlspecialchars($name)." was deleted.",false); +} +stdhead("Delete account"); +?> +

Delete account

+ + + + + + +
User name
+ 5) + bark($lang_delete['std_invalid_reason']."$rt."); + +$r = $_POST["r"]; +$reason = $_POST["reason"]; + +if ($rt == 1) + $reasonstr = "Dead: 0 seeders, 0 leechers = 0 peers total"; +elseif ($rt == 2) + $reasonstr = "Dupe" . ($reason[0] ? (": " . trim($reason[0])) : "!"); +elseif ($rt == 3) + $reasonstr = "Nuked" . ($reason[1] ? (": " . trim($reason[1])) : "!"); +elseif ($rt == 4) +{ + if (!$reason[2]) + bark($lang_delete['std_describe_violated_rule']); + $reasonstr = $SITENAME." rules broken: " . trim($reason[2]); +} +else +{ + if (!$reason[3]) + bark($lang_delete['std_enter_reason']); + $reasonstr = trim($reason[3]); +} + +deletetorrent($id); + +if ($row['anonymous'] == 'yes' && $CURUSER["id"] == $row["owner"]) { + write_log("Torrent $id ($row[name]) was deleted by its anonymous uploader ($reasonstr)",'normal'); +} else { + write_log("Torrent $id ($row[name]) was deleted by $CURUSER[username] ($reasonstr)",'normal'); +} + +//===remove karma +KPS("-",$uploadtorrent_bonus,$row["owner"]); + +//Send pm to torrent uploader +if ($CURUSER["id"] != $row["owner"]){ + $dt = sqlesc(date("Y-m-d H:i:s")); + $subject = sqlesc($lang_delete_target[get_user_lang($row["owner"])]['msg_torrent_deleted']); + $msg = sqlesc($lang_delete_target[get_user_lang($row["owner"])]['msg_the_torrent_you_uploaded'].$row['name'].$lang_delete_target[get_user_lang($row["owner"])]['msg_was_deleted_by']."[url=userdetails.php?id=".$CURUSER['id']."]".$CURUSER['username']."[/url]".$lang_delete_target[get_user_lang($row["owner"])]['msg_reason_is'].$reasonstr); + sql_query("INSERT INTO messages (sender, receiver, subject, added, msg) VALUES(0, $row[owner], $subject, $dt, $msg)") or sqlerr(__FILE__, __LINE__); +} +stdhead($lang_delete['head_torrent_deleted']); + +if (isset($_POST["returnto"])) + $ret = "".$lang_delete['text_go_back'].""; +else + $ret = "".$lang_delete['text_back_to_index'].""; + +?> +

+

+ +

+ +
+ +
+
+
+ + +
+
+ diff --git a/deletemessage.php b/deletemessage.php new file mode 100644 index 00000000..b5b5dcbd --- /dev/null +++ b/deletemessage.php @@ -0,0 +1,43 @@ + diff --git a/details.php b/details.php new file mode 100644 index 00000000..9a7160af --- /dev/null +++ b/details.php @@ -0,0 +1,583 @@ += $torrentmanage_class || $CURUSER["id"] == $row["owner"]) +$owned = 1; +else $owned = 0; + +if (!$row) + stderr($lang_details['std_error'], $lang_details['std_no_torrent_id']); +elseif ($row['banned'] == 'yes' && get_user_class() < $seebanned_class) + permissiondenied(); +else { + if ($_GET["hit"]) { + sql_query("UPDATE torrents SET views = views + 1 WHERE id = $id"); + } + + if (!isset($_GET["cmtpage"])) { + stdhead($lang_details['head_details_for_torrent']. "\"" . $row["name"] . "\""); + + if ($_GET["uploaded"]) + { + print("

".$lang_details['text_successfully_uploaded']."

"); + print("

".$lang_details['text_redownload_torrent_note']."

"); + header("refresh: 1; url=download.php?id=$id"); + //header("refresh: 1; url=getimdb.php?id=$id&type=1"); + } + elseif ($_GET["edited"]) { + print("

".$lang_details['text_successfully_edited']."

"); + if (isset($_GET["returnto"])) + print("

".$lang_details['text_go_back'] . "" . $lang_details['text_whence_you_came']."

"); + } + $sp_torrent = get_torrent_promotion_append($row[sp_state],'word'); + + $s=htmlspecialchars($row["name"]).($sp_torrent ? "   ".$sp_torrent : ""); + print("

".$s."

\n"); + print("\n"); + + $url = "edit.php?id=" . $row["id"]; + if (isset($_GET["returnto"])) { + $url .= "&returnto=" . rawurlencode($_GET["returnto"]); + } + $editlink = "a title=\"".$lang_details['title_edit_torrent']."\" href=\"$url\""; + + // ------------- start upped by block ------------------// + if($row['anonymous'] == 'yes') { + if (get_user_class() < $viewanonymous_class) + $uprow = "".$lang_details['text_anonymous'].""; + else + $uprow = "".$lang_details['text_anonymous']." (" . get_username($row['owner'], false, true, true, false, false, true) . ")"; + } + else { + $uprow = (isset($row['owner']) ? get_username($row['owner'], false, true, true, false, false, true) : "".$lang_details['text_unknown'].""); + } + + if ($CURUSER["id"] == $row["owner"]) + $CURUSER["downloadpos"] = "yes"; + if ($CURUSER["downloadpos"] != "no") + { + print(""); + } + else + tr($lang_details['row_download'], $lang_details['text_downloading_not_allowed']); + if ($smalldescription_main == 'yes') + tr($lang_details['row_small_description'],htmlspecialchars(trim($row["small_descr"])),true); + + $size_info = "".$lang_details['text_size']."" . mksize($row["size"]); + $type_info = "   ".$lang_details['row_type'].": ".$row["cat_name"]; + if (isset($row["source_name"])) + $source_info = "   ".$lang_details['text_source']." ".$row[source_name]; + if (isset($row["medium_name"])) + $medium_info = "   ".$lang_details['text_medium']." ".$row[medium_name]; + if (isset($row["codec_name"])) + $codec_info = "   ".$lang_details['text_codec']." ".$row[codec_name]; + if (isset($row["standard_name"])) + $standard_info = "   ".$lang_details['text_stardard']." ".$row[standard_name]; + if (isset($row["processing_name"])) + $processing_info = "   ".$lang_details['text_processing']." ".$row[processing_name]; + if (isset($row["team_name"])) + $team_info = "   ".$lang_details['text_team']." ".$row[team_name]; + if (isset($row["audiocodec_name"])) + $audiocodec_info = "   ".$lang_details['text_audio_codec']." ".$row[audiocodec_name]; + + tr($lang_details['row_basic_info'], $size_info.$type_info.$source_info . $medium_info. $codec_info . $audiocodec_info. $standard_info . $processing_info . $team_info, 1); + if ($CURUSER["downloadpos"] != "no") + $download = "\"download\" ".$lang_details['text_download_torrent']." | "; + else $download = ""; + + tr($lang_details['row_action'], $download. ($owned == 1 ? "<$editlink>\"edit\" ".$lang_details['text_edit_torrent'] . " | " : ""). (get_user_class() >= $askreseed_class && $row[seeders] == 0 ? "\"reseed\" ".$lang_details['text_ask_for_reseed'] ." | " : "") . "\"report\" ".$lang_details['text_report_torrent']."", 1); + + // ---------------- start subtitle block -------------------// + $r = sql_query("SELECT subs.*, language.flagpic, language.lang_name FROM subs LEFT JOIN language ON subs.lang_id=language.id WHERE torrent_id = " . sqlesc($row["id"]). " ORDER BY subs.lang_id ASC") or sqlerr(__FILE__, __LINE__); + print(""); + print("\n"); + // ---------------- end subtitle block -------------------// + + if ($CURUSER['showdescription'] != 'no' && !empty($row["descr"])){ + $torrentdetailad=$Advertisement->get_ad('torrentdetail'); + tr("\"Show/Hide\" ".$lang_details['row_description']."", "
".($Advertisement->enable_ad() && $torrentdetailad ? "
".$torrentdetailad[0]."
" : "").format_comment($row["descr"])."
", 1); + } + + if (get_user_class() >= $viewnfo_class && $CURUSER['shownfo'] != 'no' && $row["nfosz"] > 0){ + if (!$nfo = $Cache->get_value('nfo_block_torrent_id_'.$id)){ + $nfo = code($row["nfo"], $view == "magic"); + $Cache->cache_value('nfo_block_torrent_id_'.$id, $nfo, 604800); + } + tr("\"Show/Hide\" ".$lang_details['text_nfo']."
". $lang_details['text_view_nfo']. "", "
".$nfo."
\n", 1); + } + + if ($imdb_id && $showextinfo['imdb'] == 'yes' && $CURUSER['showimdb'] != 'no') + { + $thenumbers = $imdb_id; + + $Cache->new_page('imdb_id_'.$thenumbers.'_large', 1296000, true); + if (!$Cache->get_page()){ + $movie = new imdb ($thenumbers); + $movieid = $thenumbers; + $movie->setid ($movieid); + $target = array('Title', 'Credits', 'Plot'); + switch ($movie->cachestate($target)) + { + case "0" : //cache is not ready, try to + { + if($row['cache_stamp']==0 || ($row['cache_stamp'] != 0 && (time()-$row['cache_stamp']) > $auto_obj->timeout)) //not exist or timed out + tr($lang_details['text_imdb'] . $lang_details['row_info'] , $lang_details['text_imdb'] . $lang_details['text_not_ready']."".$lang_details['text_here_to_retrieve'] . $lang_details['text_imdb'],1); + else + tr($lang_details['text_imdb'] . $lang_details['row_info'] , "\"\"       " . $lang_details['text_someone_has_requested'] . $lang_details['text_imdb'] . " ".min(max(time()-$row['cache_stamp'],0),$auto_obj->timeout) . $lang_details['text_please_be_patient'],1); + break; + } + case "1" : + { + reset_cachetimestamp($row['id']); + $country = $movie->country (); + $director = $movie->director(); + $creator = $movie->creator(); // For TV series + $write = $movie->writing(); + $produce = $movie->producer(); + $cast = $movie->cast(); + $plot = $movie->plot (); + $plot_outline = $movie->plotoutline(); + $compose = $movie->composer(); + $gen = $movie->genres(); + //$comment = $movie->comment(); + $similiar_movies = $movie->similiar_movies(); + + if (($photo_url = $movie->photo_localurl() ) != FALSE) + $smallth = "\"poster\""; + else + $smallth = "\"no"; + + $autodata = 'http://www.imdb.com/title/tt'.$thenumbers."
------------------------------------------------------------------------------------------------------------------------------------
\n"; + $autodata .= "".$lang_details['text_information']."
\n"; + $autodata .= "------------------------------------------------------------------------------------------------------------------------------------

\n"; + $autodata .= "". $lang_details['text_title']."" . "".$movie->title ()."
\n"; + $autodata .= "".$lang_details['text_also_known_as'].""; + + $temp = ""; + foreach ($movie->alsoknow() as $ak) + { + $temp .= $ak["title"].$ak["year"]. ($ak["country"] != "" ? " (".$ak["country"].")" : "") . ($ak["comment"] != "" ? " (" . $ak["comment"] . ")" : "") . ", "; + } + $autodata .= rtrim(trim($temp), ","); + $runtimes = str_replace(" min",$lang_details['text_mins'], $movie->runtime_all()); + $autodata .= "
\n".$lang_details['text_year']."" . "".$movie->year ()."
\n"; + $autodata .= "".$lang_details['text_runtime']."".$runtimes."
\n"; + $autodata .= "".$lang_details['text_votes']."" . "".$movie->votes ()."
\n"; + $autodata .= "".$lang_details['text_rating']."" . "".$movie->rating ()."
\n"; + $autodata .= "".$lang_details['text_language']."" . "".$movie->language ()."
\n"; + $autodata .= "".$lang_details['text_country'].""; + + $temp = ""; + for ($i = 0; $i < count ($country); $i++) + { + $temp .="$country[$i], "; + } + $autodata .= rtrim(trim($temp), ","); + + $autodata .= "
\n".$lang_details['text_all_genres'].""; + $temp = ""; + for ($i = 0; $i < count($gen); $i++) + { + $temp .= "$gen[$i], "; + } + $autodata .= rtrim(trim($temp), ","); + + $autodata .= "
\n".$lang_details['text_tagline']."" . "".$movie->tagline ()."
\n"; + if ($director){ + $autodata .= "".$lang_details['text_director'].""; + $temp = ""; + for ($i = 0; $i < count ($director); $i++) + { + $temp .= "" . $director[$i]["name"] . ", "; + } + $autodata .= rtrim(trim($temp), ","); + } + elseif ($creator) + $autodata .= "".$lang_details['text_creator']."".$creator; + + $autodata .= "
\n".$lang_details['text_written_by'].""; + $temp = ""; + for ($i = 0; $i < count ($write); $i++) + { + $temp .= "" . "".$write[$i]["name"]."" . ", "; + } + $autodata .= rtrim(trim($temp), ","); + + $autodata .= "
\n".$lang_details['text_produced_by'].""; + $temp = ""; + for ($i = 0; $i < count ($produce); $i++) + { + $temp .= "" . "".$produce[$i]["name"]."" . ", "; + } + $autodata .= rtrim(trim($temp), ","); + + $autodata .= "
\n".$lang_details['text_music'].""; + $temp = ""; + for ($i = 0; $i < count($compose); $i++) + { + $temp .= "" . "".$compose[$i]["name"]."" . ", "; + } + $autodata .= rtrim(trim($temp), ","); + + $autodata .= "

\n\n------------------------------------------------------------------------------------------------------------------------------------
\n"; + $autodata .= "".$lang_details['text_plot_outline']."
\n"; + $autodata .= "------------------------------------------------------------------------------------------------------------------------------------
"; + + if(count($plot) == 0) + { + $autodata .= "
\n".$plot_outline; + } + else + { + for ($i = 0; $i < count ($plot); $i++) + { + $autodata .= "
\n. "; + $autodata .= $plot[$i]; + } + } + + + $autodata .= "

\n\n------------------------------------------------------------------------------------------------------------------------------------
\n"; + $autodata .= "".$lang_details['text_cast']."
\n"; + $autodata .= "------------------------------------------------------------------------------------------------------------------------------------

\n"; + + for ($i = 0; $i < count ($cast); $i++) + { + if ($i > 9) + { + break; + } + $autodata .= ". " . "" . $cast[$i]["name"] . " " .$lang_details['text_as']."" . "".$cast[$i]["role"]."" . "
\n"; + } + + + /*$autodata .= "
------------------------------------------------------------------------------------------------------------------------------------
\n"; + $autodata .= "".$lang_details['text_may_also_like']."
\n"; + $autodata .= "------------------------------------------------------------------------------------------------------------------------------------

\n"; + + $autodata .= "
".$lang_details['row_download'].""); + if ($CURUSER['timetype'] != 'timealive') + $uploadtime = $lang_details['text_at'].$row['added']; + else $uploadtime = $lang_details['text_blank'].gettime($row['added'],true,false); + print("" . htmlspecialchars($torrentnameprefix ."." .$row["save_as"]) . ".torrent  ".get_torrent_bookmark_state($CURUSER['id'], $row['id'], false)."   ".$lang_details['row_upped_by']." ".$uprow.$uploadtime); + print("
".$lang_details['row_subtitles'].""); + print(""); + if (mysql_num_rows($r) > 0) + { + while($a = mysql_fetch_assoc($r)) + { + $lang = ""; + $lang .= ""; + print($lang); + } + } + else + print(""); + print("
\""  ". $a["title"]. "".(get_user_class() >= $submanage_class || (get_user_class() >= $delownsub_class && $a["uppedby"] == $CURUSER["id"]) ? " [".$lang_details['text_delete']."]" : "")."  ".($a["anonymous"] == 'yes' ? $lang_details['text_anonymous'] . (get_user_class() >= $viewanonymous_class ? get_username($a['uppedby'],false,true,true,false,true) : "") : get_username($a['uppedby']))."
".$lang_details['text_no_subtitles']."
"); + print(""); + if($CURUSER['id']==$row['owner'] || get_user_class() >= $uploadsub_class) + { + print(""); + } + $moviename = ""; + $imdb_id = parse_imdb_id($row["url"]); + if ($imdb_id && $showextinfo['imdb'] == 'yes') + { + $thenumbers = $imdb_id; + if (!$moviename = $Cache->get_value('imdb_id_'.$thenumbers.'_movie_name')){ + $movie = new imdb ($thenumbers); + $target = array('Title'); + switch ($movie->cachestate($target)){ + case "1":{ + $moviename = $movie->title (); break; + $Cache->cache_value('imdb_id_'.$thenumbers.'_movie_name', $moviename, 1296000); + } + default: break; + } + } + } + print("\n"); + print("
"); + print("
"; + if($similiar_movies) + { + $counter = 0; + foreach($similiar_movies as $similiar_movies_each) + { + $on_site = ""; + $imdb_config_inst = new imdb_config(); + if($imdb_id_new = parse_imdb_id($imdb_config_inst->imdbsite . $similiar_movies_each['Link'])) + { + $similiar_res = sql_query("SELECT id FROM torrents WHERE url = " . sqlesc((int)$imdb_id_new) . " AND id != ".sqlesc($id)." ORDER BY RAND() LIMIT 1") or sqlerr(__FILE__, __LINE__); + while($similiar_arr = mysql_fetch_array($similiar_res)) { + $on_site = "" . $lang_details['text_local_link'] . ""; + } + } + + $autodata .= ($counter == 5 ? "" : "" ) . ""; + $counter++; + } + } + $autodata .= "
protocol_prefix . $movie->imdbsite . $similiar_movies_each['Link'] . "\" title=\"\">\""
" . $similiar_movies_each['Name'] . "

" . ($on_site != "" ? $on_site : " ") . "
";*/ + + //$autodata .= "
\n\n------------------------------------------------------------------------------------------------------------------------------------
\n"; + //$autodata .= "".$lang_details['text_recommended_comment']."
\n"; + //$autodata .= "------------------------------------------------------------------------------------------------------------------------------------
"; + + //$autodata .= "
".$comment; + $cache_time = $movie->getcachetime(); + + $Cache->add_whole_row(); + print(""); + print("\"Show/Hide\" ".$lang_details['text_imdb'] . $lang_details['row_info'] ."
". $smallth."
"); + $Cache->end_whole_row(); + $Cache->add_row(); + $Cache->add_part(); + print("
".$autodata); + $Cache->end_part(); + $Cache->add_part(); + print($lang_details['text_information_updated_at'] . date("Y-m-d", $cache_time) . $lang_details['text_might_be_outdated']."".$lang_details['text_here_to_update']); + $Cache->end_part(); + $Cache->end_row(); + $Cache->add_whole_row(); + print("
"); + $Cache->end_whole_row(); + $Cache->cache_page(); + echo $Cache->next_row(); + $Cache->next_row(); + echo $Cache->next_part(); + if (get_user_class() >= $updateextinfo_class) + echo $Cache->next_part(); + echo $Cache->next_row(); + break; + } + case "2" : + { + tr($lang_details['text_imdb'] . $lang_details['row_info'] ,$lang_details['text_network_error'],1); + break; + } + case "3" :// not a valid imdb url + { + break; + } + } + } + else{ + echo $Cache->next_row(); + $Cache->next_row(); + echo $Cache->next_part(); + if (get_user_class() >= $updateextinfo_class){ + echo $Cache->next_part(); + } + echo $Cache->next_row(); + } + } + + if ($imdb_id) + { + $where_area = " url = " . sqlesc((int)$imdb_id) ." AND torrents.id != ".sqlesc($id); + $copies_res = sql_query("SELECT torrents.id, torrents.name, torrents.sp_state, torrents.size, torrents.added, torrents.seeders, torrents.leechers, categories.id AS catid, categories.name AS catname, categories.image AS catimage, sources.name AS source_name, media.name AS medium_name, codecs.name AS codec_name, standards.name AS standard_name, processings.name AS processing_name FROM torrents LEFT JOIN categories ON torrents.category=categories.id LEFT JOIN sources ON torrents.source = sources.id LEFT JOIN media ON torrents.medium = media.id LEFT JOIN codecs ON torrents.codec = codecs.id LEFT JOIN standards ON torrents.standard = standards.id LEFT JOIN processings ON torrents.processing = processings.id WHERE " . $where_area . " ORDER BY torrents.id DESC") or sqlerr(__FILE__, __LINE__); + + $copies_count = mysql_num_rows($copies_res); + if($copies_count > 0) + { + $s = "\n"; + $s.="\n"; + while ($copy_row = mysql_fetch_assoc($copies_res)) + { + $dispname = htmlspecialchars(trim($copy_row["name"])); + $count_dispname=strlen($dispname); + $max_lenght_of_torrent_name="80"; // maximum lenght + if($count_dispname > $max_lenght_of_torrent_name) + { + $dispname=substr($dispname, 0, $max_lenght_of_torrent_name) . ".."; + } + + if (isset($copy_row["source_name"])) + $other_source_info = $copy_row[source_name].", "; + if (isset($copy_row["medium_name"])) + $other_medium_info = $copy_row[medium_name].", "; + if (isset($copy_row["codec_name"])) + $other_codec_info = $copy_row[codec_name].", "; + if (isset($copy_row["standard_name"])) + $other_standard_info = $copy_row[standard_name].", "; + if (isset($copy_row["processing_name"])) + $other_processing_info = $copy_row[processing_name].", "; + + $sphighlight = get_torrent_bg_color($copy_row['sp_state']); + $sp_info = get_torrent_promotion_append($copy_row['sp_state']); + + $s .= "" . + "" . + "" . + "" . + "" . + "" . + "\n"; + } + $s .= "
".$lang_details['col_type']."".$lang_details['col_name']."".$lang_details['col_quality']."\"size\"\"time\"seeders\"\"leechers\"
".return_category_image($copy_row["catid"], "torrents.php?allsec=1&")."" . $dispname ."". $sp_info."" . rtrim(trim($other_source_info . $other_medium_info . $other_codec_info . $other_standard_info . $other_processing_info), ","). "" . mksize($copy_row["size"]) . "" . str_replace(" ", "
", gettime($copy_row["added"],false)). "
" . $copy_row["seeders"] . "" . $copy_row["leechers"] . "
\n"; + tr("
5 ? "plus" : "minus")."\" src=\"pic/trans.gif\" alt=\"Show/Hide\" id=\"picothercopy\" title=\"".$lang_detail['title_show_or_hide']."\" /> ".$lang_details['row_other_copies']."", "".$copies_count.$lang_details['text_other_copies']."
5 ? "display: none;" : "display: block;")."\">".$s."
",1); + } + } + + if ($row["type"] == "multi") + { + $files_info = "".$lang_details['text_num_files']."". $row["numfiles"] . $lang_details['text_files'] . "
"; + $files_info .= "".$lang_details['text_see_full_list']."".$lang_details['text_hide_list'].""; + } + function hex_esc($matches) { + return sprintf("%02x", ord($matches[0])); + } + if ($enablenfo_main=='yes') + tr($lang_details['row_torrent_info'], "" . ($files_info != "" ? "" : "") . "". (get_user_class() >= $torrentstructure_class ? "" : "") . "
" . $files_info . "".$lang_details['row_info_hash'].": ".preg_replace_callback('/./s', "hex_esc", hash_pad($row["info_hash"]))."" . $lang_details['text_torrent_structure'] . "".$lang_details['text_torrent_info_note']."
",1); + tr($lang_details['row_hot_meter'], "
" . $lang_details['text_views']."". $row["views"] . "" . $lang_details['text_hits']. "" . $row["hits"] . "" .$lang_details['text_snatched'] . "" . $row["times_completed"]. $lang_details['text_view_snatches'] . "" . $lang_details['row_last_seeder']. "" . gettime($row["last_action"]) . "
",1); + $bwres = sql_query("SELECT uploadspeed.name AS upname, downloadspeed.name AS downname, isp.name AS ispname FROM users LEFT JOIN uploadspeed ON users.upload = uploadspeed.id LEFT JOIN downloadspeed ON users.download = downloadspeed.id LEFT JOIN isp ON users.isp = isp.id WHERE users.id=".$row['owner']); + $bwrow = mysql_fetch_array($bwres); + if ($bwrow['upname'] && $bwrow['downname']) + tr($lang_details['row_uploader_bandwidth'], "\"Downstream ".$bwrow['downname']."    \"Upstream ".$bwrow['upname']."    ".$bwrow['ispname'],1); + + /* + // Health + $seedersTmp = $row['seeders']; + $leechersTmp = $row['leechers']; + if ($leechersTmp >= 1) // it is possible that there's traffic while have no seeders + { + $progressPerTorrent = 0; + $i = 0; + $subres = sql_query("SELECT seeder, finishedat, downloadoffset, uploadoffset, ip, port, uploaded, downloaded, to_go, UNIX_TIMESTAMP(started) AS st, connectable, agent, peer_id, UNIX_TIMESTAMP(last_action) AS la, userid FROM peers WHERE torrent = $row[id]") or sqlerr(); + + while ($subrow = mysql_fetch_array($subres)) { + $progressPerTorrent += sprintf("%.2f", 100 * (1 - ($subrow["to_go"] / $row["size"]))); + $i++; + if ($subrow["seeder"] == "yes") + $seeders[] = $subrow; + else + $downloaders[] = $subrow; + } + if ($i == 0) + $i = 1; + $progressTotal = sprintf("%.2f", $progressPerTorrent / $i); + + $totalspeed = 0; + + if($seedersTmp >=1) + { + if ($seeders) { + foreach($seeders as $e) { + $totalspeed = $totalspeed + ($e["uploaded"] - $e["uploadoffset"]) / max(1, ($e["la"] - $e["st"])); + $totalspeed = $totalspeed + ($e["downloaded"] - $e["downloadoffset"]) / max(1, $e["finishedat"] - $e[st]); + } + } + } + + if ($downloaders) { + foreach($downloaders as $e) { + $totalspeed = $totalspeed + ($e["uploaded"] - $e["uploadoffset"]) / max(1, ($e["la"] - $e["st"])); + $totalspeed = $totalspeed + ($e["downloaded"] - $e["downloadoffset"]) / max(1, ($e["la"] - $e["st"])); + } + } + + $avgspeed = $lang_details['text_average_speed']."" . mksize($totalspeed/($seedersTmp+$leechersTmp)) . "/s"; + $totalspeed = $lang_details['text_total_speed']."" . mksize($totalspeed) . "/s ".$lang_details['text_health_note']; + $health = $lang_details['text_avprogress'] . get_percent_completed_image(floor($progressTotal))." (".round($progressTotal)."%)        ".$lang_details['text_traffic']."" . $avgspeed ."        ". $totalspeed; + } + else + $health = "".$lang_details['text_traffic']. "" . $lang_details['text_no_traffic']; + + if ($row["visible"] == "no") + $health = "".$lang_details['text_status']."" . $lang_details['text_dead'] ."        ". $health; + + tr($lang_details['row_health'], $health, 1);*/ + tr("".$lang_details['row_peers']."
".$lang_details['text_see_full_list']."".$lang_details['text_hide_list']."", "
".$row['seeders'].$lang_details['text_seeders'].add_s($row['seeders'])." | ".$row['leechers'].$lang_details['text_leechers'].add_s($row['leechers'])."
" , 1); + if ($_GET['dllist'] == 1) + { + $scronload = "viewpeerlist(".$row['id'].")"; + +echo ""; + } + + // ------------- start thanked-by block--------------// + + $torrentid = $id; + $thanksby = ""; + $nothanks = ""; + $thanks_said = 0; + $thanks_sql = sql_query("SELECT userid FROM thanks WHERE torrentid=".sqlesc($torrentid)." ORDER BY id DESC LIMIT 20"); + $thanksCount = get_row_count("thanks", "WHERE torrentid=".sqlesc($torrentid)); + $thanks_all = mysql_num_rows($thanks_sql); + if ($thanks_all) { + while($rows_t = mysql_fetch_array($thanks_sql)) { + $thanks_userid = $rows_t["userid"]; + if ($rows_t["userid"] == $CURUSER['id']) { + $thanks_said = 1; + } else { + $thanksby .= get_username($thanks_userid)." "; + } + } + } + else $nothanks = $lang_details['text_no_thanks_added']; + + if (!$thanks_said) { + $thanks_said = get_row_count("thanks", "WHERE torrentid=$torrentid AND userid=".sqlesc($CURUSER['id'])); + } + if ($thanks_said == 0) { + $buttonvalue = " value=\"".$lang_details['submit_say_thanks']."\""; + } else { + $buttonvalue = " value=\"".$lang_details['submit_you_said_thanks']."\" disabled=\"disabled\""; + $thanksby = get_username($CURUSER['id'])." ".$thanksby; + } + $thanksbutton = ""; + tr($lang_details['row_thanks_by'],"".get_username($CURUSER['id'])." ".$thanksbutton."  ".$nothanks."".$thanksby.($thanks_all < $thanksCount ? $lang_details['text_and_more'].$thanksCount.$lang_details['text_users_in_total'] : ""),1); + // ------------- end thanked-by block--------------// + + print("\n"); + } + else { + stdhead($lang_details['head_comments_for_torrent']."\"" . $row["name"] . "\""); + print("

".$lang_details['text_comments_for']."" . htmlspecialchars($row["name"]) . "

\n"); + } + + // -----------------COMMENT SECTION ---------------------// +if ($CURUSER['showcomment'] != 'no'){ + $count = get_row_count("comments","WHERE torrent=".sqlesc($id)); + if ($count) + { + print("

"); + print("

" .$lang_details['h1_user_comments'] . "

\n"); + list($pagertop, $pagerbottom, $limit) = pager(10, $count, "details.php?id=$id&cmtpage=1&", array(lastpagedefault => 1), "page"); + + $subres = sql_query("SELECT id, text, user, added, editedby, editdate FROM comments WHERE torrent = $id ORDER BY id $limit") or sqlerr(__FILE__, __LINE__); + $allrows = array(); + while ($subrow = mysql_fetch_array($subres)) { + $allrows[] = $subrow; + } + print($pagertop); + commenttable($allrows,"torrent",$id); + print($pagerbottom); + } +} +print("

"); +print ("
".$lang_details['text_quick_comment']."


"); +quickreply('comment', 'body', $lang_details['submit_add_comment']); +print("
"); +print("

".$lang_details['text_add_a_comment']."

\n"); +} +stdfoot(); diff --git a/docleanup.php b/docleanup.php new file mode 100644 index 00000000..dd553059 --- /dev/null +++ b/docleanup.php @@ -0,0 +1,28 @@ +Do Clean-up"; +echo "

"; +echo "clean-up in progress...please wait
"; +ob_flush(); +flush(); +if ($_GET['forceall']) { + $forceall = 1; +} else { + $forceall = 0; +echo "you may force full clean-up by adding the parameter 'forceall=1' to URL
"; +} +echo "

"; +$tstart = getmicrotime(); +require_once("include/cleanup.php"); +print("

".docleanup($forceall, 1)."

"); +$tend = getmicrotime(); +$totaltime = ($tend - $tstart); +printf ("Time consumed: %f sec
", $totaltime); +echo "Done
"; +echo ""; diff --git a/domLib.js b/domLib.js new file mode 100644 index 00000000..88f6a24b --- /dev/null +++ b/domLib.js @@ -0,0 +1,704 @@ +/** $Id: domLib.js 2321 2006-06-12 06:45:41Z dallen $ */ +// {{{ license + +/* + * Copyright 2002-2005 Dan Allen, Mojavelinux.com (dan.allen@mojavelinux.com) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// }}} +// {{{ intro + +/** + * Title: DOM Library Core + * Version: 0.70 + * + * Summary: + * A set of commonly used functions that make it easier to create javascript + * applications that rely on the DOM. + * + * Updated: 2005/05/17 + * + * Maintainer: Dan Allen + * Maintainer: Jason Rust + * + * License: Apache 2.0 + */ + +// }}} +// {{{ global constants (DO NOT EDIT) + +// -- Browser Detection -- +var domLib_userAgent = navigator.userAgent.toLowerCase(); +var domLib_isMac = navigator.appVersion.indexOf('Mac') != -1; +var domLib_isWin = domLib_userAgent.indexOf('windows') != -1; +// NOTE: could use window.opera for detecting Opera +var domLib_isOpera = domLib_userAgent.indexOf('opera') != -1; +var domLib_isOpera7up = domLib_userAgent.match(/opera.(7|8)/i); +var domLib_isSafari = domLib_userAgent.indexOf('safari') != -1; +var domLib_isKonq = domLib_userAgent.indexOf('konqueror') != -1; +// Both konqueror and safari use the khtml rendering engine +var domLib_isKHTML = (domLib_isKonq || domLib_isSafari || domLib_userAgent.indexOf('khtml') != -1); +var domLib_isIE = (!domLib_isKHTML && !domLib_isOpera && domLib_userAgent.indexOf('msie') != -1); +var domLib_isIE5up = domLib_isIE; +var domLib_isIE50 = (domLib_isIE && domLib_userAgent.indexOf('msie 5.0') != -1); +var domLib_isIE55 = (domLib_isIE && domLib_userAgent.indexOf('msie 5.5') != -1); +var domLib_isIE5 = (domLib_isIE50 || domLib_isIE55); +// safari and konq may use string "khtml, like gecko", so check for destinctive / +var domLib_isGecko = domLib_userAgent.indexOf('gecko/') != -1; +var domLib_isMacIE = (domLib_isIE && domLib_isMac); +var domLib_isIE55up = domLib_isIE5up && !domLib_isIE50 && !domLib_isMacIE; +var domLib_isIE6up = domLib_isIE55up && !domLib_isIE55; + +// -- Browser Abilities -- +var domLib_standardsMode = (document.compatMode && document.compatMode == 'CSS1Compat'); +var domLib_useLibrary = (domLib_isOpera7up || domLib_isKHTML || domLib_isIE5up || domLib_isGecko || domLib_isMacIE || document.defaultView); +// fixed in Konq3.2 +var domLib_hasBrokenTimeout = (domLib_isMacIE || (domLib_isKonq && domLib_userAgent.match(/konqueror\/3.([2-9])/) == null)); +var domLib_canFade = (domLib_isGecko || domLib_isIE || domLib_isSafari || domLib_isOpera); +var domLib_canDrawOverSelect = (domLib_isMac || domLib_isOpera || domLib_isGecko); +var domLib_canDrawOverFlash = (domLib_isMac || domLib_isWin); + +// -- Event Variables -- +var domLib_eventTarget = domLib_isIE ? 'srcElement' : 'currentTarget'; +var domLib_eventButton = domLib_isIE ? 'button' : 'which'; +var domLib_eventTo = domLib_isIE ? 'toElement' : 'relatedTarget'; +var domLib_stylePointer = domLib_isIE ? 'hand' : 'pointer'; +// NOTE: a bug exists in Opera that prevents maxWidth from being set to 'none', so we make it huge +var domLib_styleNoMaxWidth = domLib_isOpera ? '10000px' : 'none'; +var domLib_hidePosition = '-1000px'; +var domLib_scrollbarWidth = 14; +var domLib_autoId = 1; +var domLib_zIndex = 100; + +// -- Detection -- +var domLib_collisionElements; +var domLib_collisionsCached = false; + +var domLib_timeoutStateId = 0; +var domLib_timeoutStates = new Hash(); + +// }}} +// {{{ DOM enhancements + +if (!document.ELEMENT_NODE) +{ + document.ELEMENT_NODE = 1; + document.ATTRIBUTE_NODE = 2; + document.TEXT_NODE = 3; + document.DOCUMENT_NODE = 9; + document.DOCUMENT_FRAGMENT_NODE = 11; +} + +function domLib_clone(obj) +{ + var copy = {}; + for (var i in obj) + { + var value = obj[i]; + try + { + if (value != null && typeof(value) == 'object' && value != window && !value.nodeType) + { + copy[i] = domLib_clone(value); + } + else + { + copy[i] = value; + } + } + catch(e) + { + copy[i] = value; + } + } + + return copy; +} + +// }}} +// {{{ class Hash() + +function Hash() +{ + this.length = 0; + this.numericLength = 0; + this.elementData = []; + for (var i = 0; i < arguments.length; i += 2) + { + if (typeof(arguments[i + 1]) != 'undefined') + { + this.elementData[arguments[i]] = arguments[i + 1]; + this.length++; + if (arguments[i] == parseInt(arguments[i])) + { + this.numericLength++; + } + } + } +} + +// using prototype as opposed to inner functions saves on memory +Hash.prototype.get = function(in_key) +{ + if (typeof(this.elementData[in_key]) != 'undefined') { + return this.elementData[in_key]; + } + + return null; +} + +Hash.prototype.set = function(in_key, in_value) +{ + if (typeof(in_value) != 'undefined') + { + if (typeof(this.elementData[in_key]) == 'undefined') + { + this.length++; + if (in_key == parseInt(in_key)) + { + this.numericLength++; + } + } + + return this.elementData[in_key] = in_value; + } + + return false; +} + +Hash.prototype.remove = function(in_key) +{ + var tmp_value; + if (typeof(this.elementData[in_key]) != 'undefined') + { + this.length--; + if (in_key == parseInt(in_key)) + { + this.numericLength--; + } + + tmp_value = this.elementData[in_key]; + delete this.elementData[in_key]; + } + + return tmp_value; +} + +Hash.prototype.size = function() +{ + return this.length; +} + +Hash.prototype.has = function(in_key) +{ + return typeof(this.elementData[in_key]) != 'undefined'; +} + +Hash.prototype.find = function(in_obj) +{ + for (var tmp_key in this.elementData) + { + if (this.elementData[tmp_key] == in_obj) + { + return tmp_key; + } + } + + return null; +} + +Hash.prototype.merge = function(in_hash) +{ + for (var tmp_key in in_hash.elementData) + { + if (typeof(this.elementData[tmp_key]) == 'undefined') + { + this.length++; + if (tmp_key == parseInt(tmp_key)) + { + this.numericLength++; + } + } + + this.elementData[tmp_key] = in_hash.elementData[tmp_key]; + } +} + +Hash.prototype.compare = function(in_hash) +{ + if (this.length != in_hash.length) + { + return false; + } + + for (var tmp_key in this.elementData) + { + if (this.elementData[tmp_key] != in_hash.elementData[tmp_key]) + { + return false; + } + } + + return true; +} + +// }}} +// {{{ domLib_isDescendantOf() + +function domLib_isDescendantOf(in_object, in_ancestor, in_bannedTags) +{ + if (in_object == null) + { + return false; + } + + if (in_object == in_ancestor) + { + return true; + } + + if (typeof(in_bannedTags) != 'undefined' && + (',' + in_bannedTags.join(',') + ',').indexOf(',' + in_object.tagName + ',') != -1) + { + return false; + } + + while (in_object != document.documentElement) + { + try + { + if ((tmp_object = in_object.offsetParent) && tmp_object == in_ancestor) + { + return true; + } + else if ((tmp_object = in_object.parentNode) == in_ancestor) + { + return true; + } + else + { + in_object = tmp_object; + } + } + // in case we get some wierd error, assume we left the building + catch(e) + { + return false; + } + } + + return false; +} + +// }}} +// {{{ domLib_detectCollisions() + +/** + * For any given target element, determine if elements on the page + * are colliding with it that do not obey the rules of z-index. + */ +function domLib_detectCollisions(in_object, in_recover, in_useCache) +{ + // the reason for the cache is that if the root menu is built before + // the page is done loading, then it might not find all the elements. + // so really the only time you don't use cache is when building the + // menu as part of the page load + if (!domLib_collisionsCached) + { + var tags = []; + + if (!domLib_canDrawOverFlash) + { + tags[tags.length] = 'object'; + } + + if (!domLib_canDrawOverSelect) + { + tags[tags.length] = 'select'; + } + + domLib_collisionElements = domLib_getElementsByTagNames(tags, true); + domLib_collisionsCached = in_useCache; + } + + // if we don't have a tip, then unhide selects + if (in_recover) + { + for (var cnt = 0; cnt < domLib_collisionElements.length; cnt++) + { + var thisElement = domLib_collisionElements[cnt]; + + if (!thisElement.hideList) + { + thisElement.hideList = new Hash(); + } + + thisElement.hideList.remove(in_object.id); + if (!thisElement.hideList.length) + { + domLib_collisionElements[cnt].style.visibility = 'visible'; + if (domLib_isKonq) + { + domLib_collisionElements[cnt].style.display = ''; + } + } + } + + return; + } + else if (domLib_collisionElements.length == 0) + { + return; + } + + // okay, we have a tip, so hunt and destroy + var objectOffsets = domLib_getOffsets(in_object); + + for (var cnt = 0; cnt < domLib_collisionElements.length; cnt++) + { + var thisElement = domLib_collisionElements[cnt]; + + // if collision element is in active element, move on + // WARNING: is this too costly? + if (domLib_isDescendantOf(thisElement, in_object)) + { + continue; + } + + // konqueror only has trouble with multirow selects + if (domLib_isKonq && + thisElement.tagName == 'SELECT' && + (thisElement.size <= 1 && !thisElement.multiple)) + { + continue; + } + + if (!thisElement.hideList) + { + thisElement.hideList = new Hash(); + } + + var selectOffsets = domLib_getOffsets(thisElement); + var center2centerDistance = Math.sqrt(Math.pow(selectOffsets.get('leftCenter') - objectOffsets.get('leftCenter'), 2) + Math.pow(selectOffsets.get('topCenter') - objectOffsets.get('topCenter'), 2)); + var radiusSum = selectOffsets.get('radius') + objectOffsets.get('radius'); + // the encompassing circles are overlapping, get in for a closer look + if (center2centerDistance < radiusSum) + { + // tip is left of select + if ((objectOffsets.get('leftCenter') <= selectOffsets.get('leftCenter') && objectOffsets.get('right') < selectOffsets.get('left')) || + // tip is right of select + (objectOffsets.get('leftCenter') > selectOffsets.get('leftCenter') && objectOffsets.get('left') > selectOffsets.get('right')) || + // tip is above select + (objectOffsets.get('topCenter') <= selectOffsets.get('topCenter') && objectOffsets.get('bottom') < selectOffsets.get('top')) || + // tip is below select + (objectOffsets.get('topCenter') > selectOffsets.get('topCenter') && objectOffsets.get('top') > selectOffsets.get('bottom'))) + { + thisElement.hideList.remove(in_object.id); + if (!thisElement.hideList.length) + { + thisElement.style.visibility = 'visible'; + if (domLib_isKonq) + { + thisElement.style.display = ''; + } + } + } + else + { + thisElement.hideList.set(in_object.id, true); + thisElement.style.visibility = 'hidden'; + if (domLib_isKonq) + { + thisElement.style.display = 'none'; + } + } + } + } +} + +// }}} +// {{{ domLib_getOffsets() + +function domLib_getOffsets(in_object, in_preserveScroll) +{ + if (typeof(in_preserveScroll) == 'undefined') { + in_preserveScroll = false; + } + + var originalObject = in_object; + var originalWidth = in_object.offsetWidth; + var originalHeight = in_object.offsetHeight; + var offsetLeft = 0; + var offsetTop = 0; + + while (in_object) + { + offsetLeft += in_object.offsetLeft; + offsetTop += in_object.offsetTop; + in_object = in_object.offsetParent; + // consider scroll offset of parent elements + if (in_object && !in_preserveScroll) + { + offsetLeft -= in_object.scrollLeft; + offsetTop -= in_object.scrollTop; + } + } + + // MacIE misreports the offsets (even with margin: 0 in body{}), still not perfect + if (domLib_isMacIE) { + offsetLeft += 10; + offsetTop += 10; + } + + return new Hash( + 'left', offsetLeft, + 'top', offsetTop, + 'right', offsetLeft + originalWidth, + 'bottom', offsetTop + originalHeight, + 'leftCenter', offsetLeft + originalWidth/2, + 'topCenter', offsetTop + originalHeight/2, + 'radius', Math.max(originalWidth, originalHeight) + ); +} + +// }}} +// {{{ domLib_setTimeout() + +function domLib_setTimeout(in_function, in_timeout, in_args) +{ + if (typeof(in_args) == 'undefined') + { + in_args = []; + } + + if (in_timeout == -1) + { + // timeout event is disabled + return 0; + } + else if (in_timeout == 0) + { + in_function(in_args); + return 0; + } + + // must make a copy of the arguments so that we release the reference + var args = domLib_clone(in_args); + + if (!domLib_hasBrokenTimeout) + { + return setTimeout(function() { in_function(args); }, in_timeout); + } + else + { + var id = domLib_timeoutStateId++; + var data = new Hash(); + data.set('function', in_function); + data.set('args', args); + domLib_timeoutStates.set(id, data); + + data.set('timeoutId', setTimeout('domLib_timeoutStates.get(' + id + ').get(\'function\')(domLib_timeoutStates.get(' + id + ').get(\'args\')); domLib_timeoutStates.remove(' + id + ');', in_timeout)); + return id; + } +} + +// }}} +// {{{ domLib_clearTimeout() + +function domLib_clearTimeout(in_id) +{ + if (!domLib_hasBrokenTimeout) + { + if (in_id > 0) { + clearTimeout(in_id); + } + } + else + { + if (domLib_timeoutStates.has(in_id)) + { + clearTimeout(domLib_timeoutStates.get(in_id).get('timeoutId')) + domLib_timeoutStates.remove(in_id); + } + } +} + +// }}} +// {{{ domLib_getEventPosition() + +function domLib_getEventPosition(in_eventObj) +{ + var eventPosition = new Hash('x', 0, 'y', 0, 'scrollX', 0, 'scrollY', 0); + + // IE varies depending on standard compliance mode + if (domLib_isIE) + { + var doc = (domLib_standardsMode ? document.documentElement : document.body); + // NOTE: events may fire before the body has been loaded + if (doc) + { + eventPosition.set('x', in_eventObj.clientX + doc.scrollLeft); + eventPosition.set('y', in_eventObj.clientY + doc.scrollTop); + eventPosition.set('scrollX', doc.scrollLeft); + eventPosition.set('scrollY', doc.scrollTop); + } + } else { + eventPosition.set('x', in_eventObj.pageX); + eventPosition.set('y', in_eventObj.pageY); + eventPosition.set('scrollX', in_eventObj.pageX - in_eventObj.clientX); + eventPosition.set('scrollY', in_eventObj.pageY - in_eventObj.clientY); + } + + return eventPosition; +} + +// }}} +// {{{ domLib_cancelBubble() + +function domLib_cancelBubble(in_event) +{ + var eventObj = in_event ? in_event : window.event; + eventObj.cancelBubble = true; +} + +// }}} +// {{{ domLib_getIFrameReference() + +function domLib_getIFrameReference(in_frame) +{ + if (domLib_isGecko || domLib_isIE) + { + return in_frame.frameElement; + } + else + { + // we could either do it this way or require an id on the frame + // equivalent to the name + var name = in_frame.name; + if (!name || !in_frame.parent) + { + return null; + } + + var candidates = in_frame.parent.document.getElementsByTagName('iframe'); + for (var i = 0; i < candidates.length; i++) + { + if (candidates[i].name == name) + { + return candidates[i]; + } + } + + return null; + } +} + +// }}} +// {{{ domLib_getElementsByClass() + +function domLib_getElementsByClass(in_class) +{ + var elements = domLib_isIE5 ? document.all : document.getElementsByTagName('*'); + var matches = []; + var cnt = 0; + for (var i = 0; i < elements.length; i++) + { + if ((" " + elements[i].className + " ").indexOf(" " + in_class + " ") != -1) + { + matches[cnt++] = elements[i]; + } + } + + return matches; +} + +// }}} +// {{{ domLib_getElementsByTagNames() + +function domLib_getElementsByTagNames(in_list, in_excludeHidden) +{ + var elements = []; + for (var i = 0; i < in_list.length; i++) + { + var matches = document.getElementsByTagName(in_list[i]); + for (var j = 0; j < matches.length; j++) + { + // skip objects that have nested embeds, or else we get "flashing" + if (matches[j].tagName == 'OBJECT' && domLib_isGecko) + { + var kids = matches[j].childNodes; + var skip = false; + for (var k = 0; k < kids.length; k++) + { + if (kids[k].tagName == 'EMBED') + { + skip = true; + break; + } + } + if (skip) continue; + } + + if (in_excludeHidden && domLib_getComputedStyle(matches[j], 'visibility') == 'hidden') + { + continue; + } + + elements[elements.length] = matches[j]; + } + } + + return elements; +} + +// }}} +// {{{ domLib_getComputedStyle() + +function domLib_getComputedStyle(in_obj, in_property) +{ + if (domLib_isIE) + { + var humpBackProp = in_property.replace(/-(.)/, function (a, b) { return b.toUpperCase(); }); + return eval('in_obj.currentStyle.' + humpBackProp); + } + // getComputedStyle() is broken in konqueror, so let's go for the style object + else if (domLib_isKonq) + { + //var humpBackProp = in_property.replace(/-(.)/, function (a, b) { return b.toUpperCase(); }); + return eval('in_obj.style.' + in_property); + } + else + { + return document.defaultView.getComputedStyle(in_obj, null).getPropertyValue(in_property); + } +} + +// }}} +// {{{ makeTrue() + +function makeTrue() +{ + return true; +} + +// }}} +// {{{ makeFalse() + +function makeFalse() +{ + return false; +} + +// }}} diff --git a/domTT.js b/domTT.js new file mode 100644 index 00000000..877b887f --- /dev/null +++ b/domTT.js @@ -0,0 +1,1132 @@ +/** $Id: domTT.js 2324 2006-06-12 07:06:39Z dallen $ */ +// {{{ license + +/* + * Copyright 2002-2005 Dan Allen, Mojavelinux.com (dan.allen@mojavelinux.com) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// }}} +// {{{ intro + +/** + * Title: DOM Tooltip Library + * Version: 0.7.3 + * + * Summary: + * Allows developers to add custom tooltips to the webpages. Tooltips are + * generated using the domTT_activate() function and customized by setting + * a handful of options. + * + * Maintainer: Dan Allen + * Contributors: + * Josh Gross + * Jason Rust + * + * License: Apache 2.0 + * However, if you use this library, you earn the position of official bug + * reporter :) Please post questions or problem reports to the newsgroup: + * + * http://groups-beta.google.com/group/dom-tooltip + * + * If you are doing this for commercial work, perhaps you could send me a few + * Starbucks Coffee gift dollars or PayPal bucks to encourage future + * developement (NOT REQUIRED). E-mail me for my snail mail address. + + * + * Homepage: http://www.mojavelinux.com/projects/domtooltip/ + * + * Newsgroup: http://groups-beta.google.com/group/dom-tooltip + * + * Freshmeat Project: http://freshmeat.net/projects/domtt/?topic_id=92 + * + * Updated: 2005/07/16 + * + * Supported Browsers: + * Mozilla (Gecko), IE 5.5+, IE on Mac, Safari, Konqueror, Opera 7 + * + * Usage: + * Please see the HOWTO documentation. +**/ + +// }}} +// {{{ settings (editable) + +// IE mouse events seem to be off by 2 pixels +var domTT_offsetX = (domLib_isIE ? -2 : 0); +var domTT_offsetY = (domLib_isIE ? 4 : 2); +var domTT_direction = 'southeast'; +var domTT_mouseHeight = domLib_isIE ? 13 : 19; +var domTT_closeLink = 'X'; +var domTT_closeAction = 'hide'; +var domTT_activateDelay = 500; +var domTT_maxWidth = false; +var domTT_styleClass = 'domTT'; +var domTT_fade = 'neither'; +var domTT_lifetime = 0; +var domTT_grid = 0; +var domTT_trailDelay = 200; +var domTT_useGlobalMousePosition = true; +var domTT_postponeActivation = false; +var domTT_tooltipIdPrefix = '[domTT]'; +var domTT_screenEdgeDetection = true; +var domTT_screenEdgePadding = 4; +var domTT_oneOnly = false; +var domTT_cloneNodes = false; +var domTT_detectCollisions = true; +var domTT_bannedTags = ['OPTION']; +var domTT_draggable = false; +if (typeof(domTT_dragEnabled) == 'undefined') +{ + domTT_dragEnabled = false; +} + +// }}} +// {{{ globals (DO NOT EDIT) + +var domTT_predefined = new Hash(); +// tooltips are keyed on both the tip id and the owner id, +// since events can originate on either object +var domTT_tooltips = new Hash(); +var domTT_lastOpened = 0; +var domTT_documentLoaded = false; +var domTT_mousePosition = null; + +// }}} +// {{{ document.onmousemove + +if (domLib_useLibrary && domTT_useGlobalMousePosition) +{ + document.onmousemove = function(in_event) + { + if (typeof(in_event) == 'undefined') { in_event = window.event; } + + domTT_mousePosition = domLib_getEventPosition(in_event); + if (domTT_dragEnabled && domTT_dragMouseDown) + { + domTT_dragUpdate(in_event); + } + } +} + +// }}} +// {{{ domTT_activate() + +function domTT_activate(in_this, in_event) +{ + if (!domLib_useLibrary || (domTT_postponeActivation && !domTT_documentLoaded)) { return false; } + + // make sure in_event is set (for IE, some cases we have to use window.event) + if (typeof(in_event) == 'undefined') { in_event = window.event; } + + // don't allow tooltips on banned tags (such as OPTION) + if (in_event != null) { + var target = in_event.srcElement ? in_event.srcElement : in_event.target; + if (target != null && (',' + domTT_bannedTags.join(',') + ',').indexOf(',' + target.tagName + ',') != -1) + { + return false; + } + } + + var owner = document.body; + // we have an active event so get the owner + if (in_event != null && in_event.type.match(/key|mouse|click|contextmenu/i)) + { + // make sure we have nothing higher than the body element + if (in_this.nodeType && in_this.nodeType != document.DOCUMENT_NODE) + { + owner = in_this; + } + } + // non active event (make sure we were passed a string id) + else + { + if (typeof(in_this) != 'object' && !(owner = domTT_tooltips.get(in_this))) + { + // NOTE: two steps to avoid "flashing" in gecko + var embryo = document.createElement('div'); + owner = document.body.appendChild(embryo); + owner.style.display = 'none'; + owner.id = in_this; + } + } + + // make sure the owner has a unique id + if (!owner.id) + { + owner.id = '__autoId' + domLib_autoId++; + } + + // see if we should only be opening one tip at a time + // NOTE: this is not "perfect" yet since it really steps on any other + // tip working on fade out or delayed close, but it get's the job done + if (domTT_oneOnly && domTT_lastOpened) + { + domTT_deactivate(domTT_lastOpened); + } + + domTT_lastOpened = owner.id; + + var tooltip = domTT_tooltips.get(owner.id); + if (tooltip) + { + if (tooltip.get('eventType') != in_event.type) + { + if (tooltip.get('type') == 'greasy') + { + tooltip.set('closeAction', 'destroy'); + domTT_deactivate(owner.id); + } + else if (tooltip.get('status') != 'inactive') + { + return owner.id; + } + } + else + { + if (tooltip.get('status') == 'inactive') + { + tooltip.set('status', 'pending'); + tooltip.set('activateTimeout', domLib_setTimeout(domTT_runShow, tooltip.get('delay'), [owner.id, in_event])); + + return owner.id; + } + // either pending or active, let it be + else + { + return owner.id; + } + } + } + + // setup the default options hash + var options = new Hash( + 'caption', '', + 'content', '', + 'clearMouse', true, + 'closeAction', domTT_closeAction, + 'closeLink', domTT_closeLink, + 'delay', domTT_activateDelay, + 'direction', domTT_direction, + 'draggable', domTT_draggable, + 'fade', domTT_fade, + 'fadeMax', 100, + 'grid', domTT_grid, + 'id', domTT_tooltipIdPrefix + owner.id, + 'inframe', false, + 'lifetime', domTT_lifetime, + 'offsetX', domTT_offsetX, + 'offsetY', domTT_offsetY, + 'parent', document.body, + 'position', 'absolute', + 'styleClass', domTT_styleClass, + 'type', 'greasy', + 'trail', false, + 'lazy', false + ); + + // load in the options from the function call + for (var i = 2; i < arguments.length; i += 2) + { + // load in predefined + if (arguments[i] == 'predefined') + { + var predefinedOptions = domTT_predefined.get(arguments[i + 1]); + for (var j in predefinedOptions.elementData) + { + options.set(j, predefinedOptions.get(j)); + } + } + // set option + else + { + options.set(arguments[i], arguments[i + 1]); + } + } + + options.set('eventType', in_event != null ? in_event.type : null); + + // immediately set the status text if provided + if (options.has('statusText')) + { + try { window.status = options.get('statusText'); } catch(e) {} + } + + // if we didn't give content...assume we just wanted to change the status and return + if (!options.has('content') || options.get('content') == '' || options.get('content') == null) + { + if (typeof(owner.onmouseout) != 'function') + { + owner.onmouseout = function(in_event) { domTT_mouseout(this, in_event); }; + } + + return owner.id; + } + + options.set('owner', owner); + + domTT_create(options); + + // determine the show delay + options.set('delay', (in_event != null && in_event.type.match(/click|mousedown|contextmenu/i)) ? 0 : parseInt(options.get('delay'))); + domTT_tooltips.set(owner.id, options); + domTT_tooltips.set(options.get('id'), options); + options.set('status', 'pending'); + options.set('activateTimeout', domLib_setTimeout(domTT_runShow, options.get('delay'), [owner.id, in_event])); + + return owner.id; +} + +// }}} +// {{{ domTT_create() + +function domTT_create(in_options) +{ + var tipOwner = in_options.get('owner'); + var parentObj = in_options.get('parent'); + var parentDoc = parentObj.ownerDocument || parentObj.document; + + // create the tooltip and hide it + // NOTE: two steps to avoid "flashing" in gecko + var embryo = parentDoc.createElement('div'); + var tipObj = parentObj.appendChild(embryo); + tipObj.style.position = 'absolute'; + tipObj.style.left = '0px'; + tipObj.style.top = '0px'; + tipObj.style.visibility = 'hidden'; + tipObj.id = in_options.get('id'); + tipObj.className = in_options.get('styleClass'); + + var contentBlock; + var tableLayout = false; + + if (in_options.get('caption') || (in_options.get('type') == 'sticky' && in_options.get('caption') !== false)) + { + tableLayout = true; + // layout the tip with a hidden formatting table + var tipLayoutTable = tipObj.appendChild(parentDoc.createElement('table')); + tipLayoutTable.style.borderCollapse = 'collapse'; + if (domLib_isKHTML) + { + tipLayoutTable.cellSpacing = 0; + } + + var tipLayoutTbody = tipLayoutTable.appendChild(parentDoc.createElement('tbody')); + + var numCaptionCells = 0; + var captionRow = tipLayoutTbody.appendChild(parentDoc.createElement('tr')); + var captionCell = captionRow.appendChild(parentDoc.createElement('td')); + captionCell.style.padding = '0px'; + var caption = captionCell.appendChild(parentDoc.createElement('div')); + caption.className = 'caption'; + if (domLib_isIE50) + { + caption.style.height = '100%'; + } + + if (in_options.get('caption').nodeType) + { + caption.appendChild(domTT_cloneNodes ? in_options.get('caption').cloneNode(1) : in_options.get('caption')); + } + else + { + caption.innerHTML = in_options.get('caption'); + } + + if (in_options.get('type') == 'sticky') + { + var numCaptionCells = 2; + var closeLinkCell = captionRow.appendChild(parentDoc.createElement('td')); + closeLinkCell.style.padding = '0px'; + var closeLink = closeLinkCell.appendChild(parentDoc.createElement('div')); + closeLink.className = 'caption'; + if (domLib_isIE50) + { + closeLink.style.height = '100%'; + } + + closeLink.style.textAlign = 'right'; + closeLink.style.cursor = domLib_stylePointer; + // merge the styles of the two cells + closeLink.style.borderLeftWidth = caption.style.borderRightWidth = '0px'; + closeLink.style.paddingLeft = caption.style.paddingRight = '0px'; + closeLink.style.marginLeft = caption.style.marginRight = '0px'; + if (in_options.get('closeLink').nodeType) + { + closeLink.appendChild(in_options.get('closeLink').cloneNode(1)); + } + else + { + closeLink.innerHTML = in_options.get('closeLink'); + } + + closeLink.onclick = function() + { + domTT_deactivate(tipOwner.id); + }; + closeLink.onmousedown = function(in_event) + { + if (typeof(in_event) == 'undefined') { in_event = window.event; } + in_event.cancelBubble = true; + }; + // MacIE has to have a newline at the end and must be made with createTextNode() + if (domLib_isMacIE) + { + closeLinkCell.appendChild(parentDoc.createTextNode("\n")); + } + } + + // MacIE has to have a newline at the end and must be made with createTextNode() + if (domLib_isMacIE) + { + captionCell.appendChild(parentDoc.createTextNode("\n")); + } + + var contentRow = tipLayoutTbody.appendChild(parentDoc.createElement('tr')); + var contentCell = contentRow.appendChild(parentDoc.createElement('td')); + contentCell.style.padding = '0px'; + if (numCaptionCells) + { + if (domLib_isIE || domLib_isOpera) + { + contentCell.colSpan = numCaptionCells; + } + else + { + contentCell.setAttribute('colspan', numCaptionCells); + } + } + + contentBlock = contentCell.appendChild(parentDoc.createElement('div')); + if (domLib_isIE50) + { + contentBlock.style.height = '100%'; + } + } + else + { + contentBlock = tipObj.appendChild(parentDoc.createElement('div')); + } + + contentBlock.className = 'contents'; + + var content = in_options.get('content'); + // allow content has a function to return the actual content + if (typeof(content) == 'function') { + content = content(in_options.get('id')); + } + + if (content != null && content.nodeType) + { + contentBlock.appendChild(domTT_cloneNodes ? content.cloneNode(1) : content); + } + else + { + contentBlock.innerHTML = content; + } + + // adjust the width if specified + if (in_options.has('width')) + { + tipObj.style.width = parseInt(in_options.get('width')) + 'px'; + } + + // check if we are overridding the maxWidth + // if the browser supports maxWidth, the global setting will be ignored (assume stylesheet) + var maxWidth = domTT_maxWidth; + if (in_options.has('maxWidth')) + { + if ((maxWidth = in_options.get('maxWidth')) === false) + { + tipObj.style.maxWidth = domLib_styleNoMaxWidth; + } + else + { + maxWidth = parseInt(in_options.get('maxWidth')); + tipObj.style.maxWidth = maxWidth + 'px'; + } + } + + // HACK: fix lack of maxWidth in CSS for KHTML and IE + if (maxWidth !== false && (domLib_isIE || domLib_isKHTML) && tipObj.offsetWidth > maxWidth) + { + tipObj.style.width = maxWidth + 'px'; + } + + in_options.set('offsetWidth', tipObj.offsetWidth); + in_options.set('offsetHeight', tipObj.offsetHeight); + + // konqueror miscalcuates the width of the containing div when using the layout table based on the + // border size of the containing div + if (domLib_isKonq && tableLayout && !tipObj.style.width) + { + var left = document.defaultView.getComputedStyle(tipObj, '').getPropertyValue('border-left-width'); + var right = document.defaultView.getComputedStyle(tipObj, '').getPropertyValue('border-right-width'); + + left = left.substring(left.indexOf(':') + 2, left.indexOf(';')); + right = right.substring(right.indexOf(':') + 2, right.indexOf(';')); + var correction = 2 * ((left ? parseInt(left) : 0) + (right ? parseInt(right) : 0)); + tipObj.style.width = (tipObj.offsetWidth - correction) + 'px'; + } + + // if a width is not set on an absolutely positioned object, both IE and Opera + // will attempt to wrap when it spills outside of body...we cannot have that + if (domLib_isIE || domLib_isOpera) + { + if (!tipObj.style.width) + { + // HACK: the correction here is for a border + tipObj.style.width = (tipObj.offsetWidth - 2) + 'px'; + } + + // HACK: the correction here is for a border + tipObj.style.height = (tipObj.offsetHeight - 2) + 'px'; + } + + // store placement offsets from event position + var offsetX, offsetY; + + // tooltip floats + if (in_options.get('position') == 'absolute' && !(in_options.has('x') && in_options.has('y'))) + { + // determine the offset relative to the pointer + switch (in_options.get('direction')) + { + case 'northeast': + offsetX = in_options.get('offsetX'); + offsetY = 0 - tipObj.offsetHeight - in_options.get('offsetY'); + break; + case 'northwest': + offsetX = 0 - tipObj.offsetWidth - in_options.get('offsetX'); + offsetY = 0 - tipObj.offsetHeight - in_options.get('offsetY'); + break; + case 'north': + offsetX = 0 - parseInt(tipObj.offsetWidth/2); + offsetY = 0 - tipObj.offsetHeight - in_options.get('offsetY'); + break; + case 'southwest': + offsetX = 0 - tipObj.offsetWidth - in_options.get('offsetX'); + offsetY = in_options.get('offsetY'); + break; + case 'southeast': + offsetX = in_options.get('offsetX'); + offsetY = in_options.get('offsetY'); + break; + case 'south': + offsetX = 0 - parseInt(tipObj.offsetWidth/2); + offsetY = in_options.get('offsetY'); + break; + } + + // if we are in an iframe, get the offsets of the iframe in the parent document + if (in_options.get('inframe')) + { + var iframeObj = domLib_getIFrameReference(window); + if (iframeObj) + { + var frameOffsets = domLib_getOffsets(iframeObj); + offsetX += frameOffsets.get('left'); + offsetY += frameOffsets.get('top'); + } + } + } + // tooltip is fixed + else + { + offsetX = 0; + offsetY = 0; + in_options.set('trail', false); + } + + // set the direction-specific offsetX/Y + in_options.set('offsetX', offsetX); + in_options.set('offsetY', offsetY); + if (in_options.get('clearMouse') && in_options.get('direction').indexOf('south') != -1) + { + in_options.set('mouseOffset', domTT_mouseHeight); + } + else + { + in_options.set('mouseOffset', 0); + } + + if (domLib_canFade && typeof(Fadomatic) == 'function') + { + if (in_options.get('fade') != 'neither') + { + var fadeHandler = new Fadomatic(tipObj, 10, 0, 0, in_options.get('fadeMax')); + in_options.set('fadeHandler', fadeHandler); + } + } + else + { + in_options.set('fade', 'neither'); + } + + // setup mouse events + if (in_options.get('trail') && typeof(tipOwner.onmousemove) != 'function') + { + tipOwner.onmousemove = function(in_event) { domTT_mousemove(this, in_event); }; + } + + if (typeof(tipOwner.onmouseout) != 'function') + { + tipOwner.onmouseout = function(in_event) { domTT_mouseout(this, in_event); }; + } + + if (in_options.get('type') == 'sticky') + { + if (in_options.get('position') == 'absolute' && domTT_dragEnabled && in_options.get('draggable')) + { + if (domLib_isIE) + { + captionRow.onselectstart = function() { return false; }; + } + + // setup drag + captionRow.onmousedown = function(in_event) { domTT_dragStart(tipObj, in_event); }; + captionRow.onmousemove = function(in_event) { domTT_dragUpdate(in_event); }; + captionRow.onmouseup = function() { domTT_dragStop(); }; + } + } + else if (in_options.get('type') == 'velcro') + { + /* can use once we have deactivateDelay + tipObj.onmouseover = function(in_event) + { + if (typeof(in_event) == 'undefined') { in_event = window.event; } + var tooltip = domTT_tooltips.get(tipObj.id); + if (in_options.get('lifetime')) { + domLib_clearTimeout(in_options.get('lifetimeTimeout'); + } + }; + */ + tipObj.onmouseout = function(in_event) + { + if (typeof(in_event) == 'undefined') { in_event = window.event; } + if (!domLib_isDescendantOf(in_event[domLib_eventTo], tipObj, domTT_bannedTags)) { + domTT_deactivate(tipOwner.id); + } + }; + // NOTE: this might interfere with links in the tip + tipObj.onclick = function(in_event) + { + domTT_deactivate(tipOwner.id); + }; + } + + if (in_options.get('position') == 'relative') + { + tipObj.style.position = 'relative'; + } + + in_options.set('node', tipObj); + in_options.set('status', 'inactive'); +} + +// }}} +// {{{ domTT_show() + +// in_id is either tip id or the owner id +function domTT_show(in_id, in_event) +{ + + // should always find one since this call would be cancelled if tip was killed + var tooltip = domTT_tooltips.get(in_id); + var status = tooltip.get('status'); + var tipObj = tooltip.get('node'); + + if (tooltip.get('position') == 'absolute') + { + var mouseX, mouseY; + + if (tooltip.has('x') && tooltip.has('y')) + { + mouseX = tooltip.get('x'); + mouseY = tooltip.get('y'); + } + else if (!domTT_useGlobalMousePosition || domTT_mousePosition == null || status == 'active' || tooltip.get('delay') == 0) + { + var eventPosition = domLib_getEventPosition(in_event); + var eventX = eventPosition.get('x'); + var eventY = eventPosition.get('y'); + if (tooltip.get('inframe')) + { + eventX -= eventPosition.get('scrollX'); + eventY -= eventPosition.get('scrollY'); + } + + // only move tip along requested trail axis when updating position + if (status == 'active' && tooltip.get('trail') !== true) + { + var trail = tooltip.get('trail'); + if (trail == 'x') + { + mouseX = eventX; + mouseY = tooltip.get('mouseY'); + } + else if (trail == 'y') + { + mouseX = tooltip.get('mouseX'); + mouseY = eventY; + } + } + else + { + mouseX = eventX; + mouseY = eventY; + } + } + else + { + mouseX = domTT_mousePosition.get('x'); + mouseY = domTT_mousePosition.get('y'); + if (tooltip.get('inframe')) + { + mouseX -= domTT_mousePosition.get('scrollX'); + mouseY -= domTT_mousePosition.get('scrollY'); + } + } + + // we are using a grid for updates + if (tooltip.get('grid')) + { + // if this is not a mousemove event or it is a mousemove event on an active tip and + // the movement is bigger than the grid + if (in_event.type != 'mousemove' || (status == 'active' && (Math.abs(tooltip.get('lastX') - mouseX) > tooltip.get('grid') || Math.abs(tooltip.get('lastY') - mouseY) > tooltip.get('grid')))) + { + tooltip.set('lastX', mouseX); + tooltip.set('lastY', mouseY); + } + // did not satisfy the grid movement requirement + else + { + return false; + } + } + + // mouseX and mouseY store the last acknowleged mouse position, + // good for trailing on one axis + tooltip.set('mouseX', mouseX); + tooltip.set('mouseY', mouseY); + + var coordinates; + if (domTT_screenEdgeDetection) + { + coordinates = domTT_correctEdgeBleed( + tooltip.get('offsetWidth'), + tooltip.get('offsetHeight'), + mouseX, + mouseY, + tooltip.get('offsetX'), + tooltip.get('offsetY'), + tooltip.get('mouseOffset'), + tooltip.get('inframe') ? window.parent : window + ); + } + else + { + coordinates = { + 'x' : mouseX + tooltip.get('offsetX'), + 'y' : mouseY + tooltip.get('offsetY') + tooltip.get('mouseOffset') + }; + } + + // update the position + tipObj.style.left = coordinates.x + 'px'; + tipObj.style.top = coordinates.y + 'px'; + + // increase the tip zIndex so it goes over previously shown tips + tipObj.style.zIndex = domLib_zIndex++; + } + + // if tip is not active, active it now and check for a fade in + if (status == 'pending') + { + // unhide the tooltip + tooltip.set('status', 'active'); + tipObj.style.display = ''; + tipObj.style.visibility = 'visible'; + + var fade = tooltip.get('fade'); + if (fade != 'neither') + { + var fadeHandler = tooltip.get('fadeHandler'); + if (fade == 'out' || fade == 'both') + { + fadeHandler.haltFade(); + if (fade == 'out') + { + fadeHandler.halt(); + } + } + + if (fade == 'in' || fade == 'both') + { + fadeHandler.fadeIn(); + } + } + + if (tooltip.get('type') == 'greasy' && tooltip.get('lifetime') != 0) + { + tooltip.set('lifetimeTimeout', domLib_setTimeout(domTT_runDeactivate, tooltip.get('lifetime'), [tipObj.id])); + } + } + + if (tooltip.get('position') == 'absolute' && domTT_detectCollisions) + { + // utilize original collision element cache + domLib_detectCollisions(tipObj, false, true); + } +} + +// }}} +// {{{ domTT_close() + +// in_handle can either be an child object of the tip, the tip id or the owner id +function domTT_close(in_handle) +{ + var id; + if (typeof(in_handle) == 'object' && in_handle.nodeType) + { + var obj = in_handle; + while (!obj.id || !domTT_tooltips.get(obj.id)) + { + obj = obj.parentNode; + + if (obj.nodeType != document.ELEMENT_NODE) { return; } + } + + id = obj.id; + } + else + { + id = in_handle; + } + + domTT_deactivate(id); +} + +// }}} +// {{{ domTT_closeAll() + +// run through the tooltips and close them all +function domTT_closeAll() +{ + // NOTE: this will iterate 2x # of tooltips + for (var id in domTT_tooltips.elementData) { + domTT_close(id); + } +} + +// }}} +// {{{ domTT_deactivate() + +// in_id is either the tip id or the owner id +function domTT_deactivate(in_id) +{ + var tooltip = domTT_tooltips.get(in_id); + if (tooltip) + { + var status = tooltip.get('status'); + if (status == 'pending') + { + // cancel the creation of this tip if it is still pending + domLib_clearTimeout(tooltip.get('activateTimeout')); + tooltip.set('status', 'inactive'); + } + else if (status == 'active') + { + if (tooltip.get('lifetime')) + { + domLib_clearTimeout(tooltip.get('lifetimeTimeout')); + } + + var tipObj = tooltip.get('node'); + if (tooltip.get('closeAction') == 'hide') + { + var fade = tooltip.get('fade'); + if (fade != 'neither') + { + var fadeHandler = tooltip.get('fadeHandler'); + if (fade == 'out' || fade == 'both') + { + fadeHandler.fadeOut(); + } + else + { + fadeHandler.hide(); + } + } + else + { + tipObj.style.display = 'none'; + } + } + else + { + tooltip.get('parent').removeChild(tipObj); + domTT_tooltips.remove(tooltip.get('owner').id); + domTT_tooltips.remove(tooltip.get('id')); + } + + tooltip.set('status', 'inactive'); + if (domTT_detectCollisions) { + // unhide all of the selects that are owned by this object + // utilize original collision element cache + domLib_detectCollisions(tipObj, true, true); + } + } + } +} + +// }}} +// {{{ domTT_mouseout() + +function domTT_mouseout(in_owner, in_event) +{ + if (!domLib_useLibrary) { return false; } + + if (typeof(in_event) == 'undefined') { in_event = window.event; } + + var toChild = domLib_isDescendantOf(in_event[domLib_eventTo], in_owner, domTT_bannedTags); + var tooltip = domTT_tooltips.get(in_owner.id); + if (tooltip && (tooltip.get('type') == 'greasy' || tooltip.get('status') != 'active')) + { + // deactivate tip if exists and we moved away from the owner + if (!toChild) + { + domTT_deactivate(in_owner.id); + try { window.status = window.defaultStatus; } catch(e) {} + } + } + else if (!toChild) + { + try { window.status = window.defaultStatus; } catch(e) {} + } +} + +// }}} +// {{{ domTT_mousemove() + +function domTT_mousemove(in_owner, in_event) +{ + if (!domLib_useLibrary) { return false; } + + if (typeof(in_event) == 'undefined') { in_event = window.event; } + + var tooltip = domTT_tooltips.get(in_owner.id); + if (tooltip && tooltip.get('trail') && tooltip.get('status') == 'active') + { + // see if we are trailing lazy + if (tooltip.get('lazy')) + { + domLib_setTimeout(domTT_runShow, domTT_trailDelay, [in_owner.id, in_event]); + } + else + { + domTT_show(in_owner.id, in_event); + } + } +} + +// }}} +// {{{ domTT_addPredefined() + +function domTT_addPredefined(in_id) +{ + var options = new Hash(); + for (var i = 1; i < arguments.length; i += 2) + { + options.set(arguments[i], arguments[i + 1]); + } + + domTT_predefined.set(in_id, options); +} + +// }}} +// {{{ domTT_correctEdgeBleed() + +function domTT_correctEdgeBleed(in_width, in_height, in_x, in_y, in_offsetX, in_offsetY, in_mouseOffset, in_window) +{ + var win, doc; + var bleedRight, bleedBottom; + var pageHeight, pageWidth, pageYOffset, pageXOffset; + + var x = in_x + in_offsetX; + var y = in_y + in_offsetY + in_mouseOffset; + + win = (typeof(in_window) == 'undefined' ? window : in_window); + + // Gecko and IE swaps values of clientHeight, clientWidth properties when + // in standards compliance mode from documentElement to document.body + doc = ((domLib_standardsMode && (domLib_isIE || domLib_isGecko)) ? win.document.documentElement : win.document.body); + + // for IE in compliance mode + if (domLib_isIE) + { + pageHeight = doc.clientHeight; + pageWidth = doc.clientWidth; + pageYOffset = doc.scrollTop; + pageXOffset = doc.scrollLeft; + } + else + { + pageHeight = doc.clientHeight; + pageWidth = doc.clientWidth; + + if (domLib_isKHTML) + { + pageHeight = win.innerHeight; + } + + pageYOffset = win.pageYOffset; + pageXOffset = win.pageXOffset; + } + + // we are bleeding off the right, move tip over to stay on page + // logic: take x position, add width and subtract from effective page width + if ((bleedRight = (x - pageXOffset) + in_width - (pageWidth - domTT_screenEdgePadding)) > 0) + { + x -= bleedRight; + } + + // we are bleeding to the left, move tip over to stay on page + // if tip doesn't fit, we will go back to bleeding off the right + // logic: take x position and check if less than edge padding + if ((x - pageXOffset) < domTT_screenEdgePadding) + { + x = domTT_screenEdgePadding + pageXOffset; + } + + // if we are bleeding off the bottom, flip to north + // logic: take y position, add height and subtract from effective page height + if ((bleedBottom = (y - pageYOffset) + in_height - (pageHeight - domTT_screenEdgePadding)) > 0) + { + y = in_y - in_height - in_offsetY; + } + + // if we are bleeding off the top, flip to south + // if tip doesn't fit, we will go back to bleeding off the bottom + // logic: take y position and check if less than edge padding + if ((y - pageYOffset) < domTT_screenEdgePadding) + { + y = in_y + domTT_mouseHeight + in_offsetY; + } + + return {'x' : x, 'y' : y}; +} + +// }}} +// {{{ domTT_isActive() + +// in_id is either the tip id or the owner id +function domTT_isActive(in_id) +{ + var tooltip = domTT_tooltips.get(in_id); + if (!tooltip || tooltip.get('status') != 'active') + { + return false; + } + else + { + return true; + } +} + +// }}} +// {{{ domTT_runXXX() + +// All of these domMenu_runXXX() methods are used by the event handling sections to +// avoid the circular memory leaks caused by inner functions +function domTT_runDeactivate(args) { domTT_deactivate(args[0]); } +function domTT_runShow(args) { domTT_show(args[0], args[1]); } + +// }}} +// {{{ domTT_replaceTitles() + +function domTT_replaceTitles(in_decorator) +{ + var elements = domLib_getElementsByClass('tooltip'); + for (var i = 0; i < elements.length; i++) + { + if (elements[i].title) + { + var content; + if (typeof(in_decorator) == 'function') + { + content = in_decorator(elements[i]); + } + else + { + content = elements[i].title; + } + + content = content.replace(new RegExp('\'', 'g'), '\\\''); + elements[i].onmouseover = new Function('in_event', "domTT_activate(this, in_event, 'content', '" + content + "')"); + elements[i].title = ''; + } + } +} + +// }}} +// {{{ domTT_update() + +// Allow authors to update the contents of existing tips using the DOM +// Unfortunately, the tip must already exist, or else no work is done. +// TODO: make getting at content or caption cleaner +function domTT_update(handle, content, type) +{ + // type defaults to 'content', can also be 'caption' + if (typeof(type) == 'undefined') + { + type = 'content'; + } + + var tip = domTT_tooltips.get(handle); + if (!tip) + { + return; + } + + var tipObj = tip.get('node'); + var updateNode; + if (type == 'content') + { + //
... + updateNode = tipObj.firstChild; + if (updateNode.className != 'contents') + { + // ..."; +$result = sql_query ("SELECT forums.*, overforums.name AS of_name FROM forums LEFT JOIN overforums ON forums.forid=overforums.id ORDER BY forums.sort ASC"); +if ($row = mysql_fetch_array($result)) { +do { +$name = $row['of_name']; +$moderators = get_forum_moderators($row['id'],false); +if (!$moderators) + $moderators = $lang_forummanage['text_not_available']; +echo ""; +echo ""; +} while($row = mysql_fetch_array($result)); +} else {print "";} +echo "
... + updateNode = updateNode.firstChild.firstChild.nextSibling.firstChild.firstChild; + } + } + else + { + updateNode = tipObj.firstChild; + if (updateNode.className == 'contents') + { + // missing caption + return; + } + + // +"; +} +?> + + + diff --git a/downloadnotice.php b/downloadnotice.php new file mode 100644 index 00000000..7a08a82c --- /dev/null +++ b/downloadnotice.php @@ -0,0 +1,164 @@ + +

+
... + updateNode = updateNode.firstChild.firstChild.firstChild.firstChild; + } + + // TODO: allow for a DOM node as content + updateNode.innerHTML = content; +} + +// }}} diff --git a/domTT_drag.js b/domTT_drag.js new file mode 100644 index 00000000..5d7ba5ec --- /dev/null +++ b/domTT_drag.js @@ -0,0 +1,102 @@ +/** $Id: domTT_drag.js 2315 2006-06-12 05:45:36Z dallen $ */ +// {{{ license + +/* + * Copyright 2002-2005 Dan Allen, Mojavelinux.com (dan.allen@mojavelinux.com) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// }}} +// {{{ globals (DO NOT EDIT) + +var domTT_dragEnabled = true; +var domTT_currentDragTarget; +var domTT_dragMouseDown; +var domTT_dragOffsetLeft; +var domTT_dragOffsetTop; + +// }}} +// {{{ domTT_dragStart() + +function domTT_dragStart(in_this, in_event) +{ + if (typeof(in_event) == 'undefined') { in_event = window.event; } + + var eventButton = in_event[domLib_eventButton]; + if (eventButton != 1 && !domLib_isKHTML) + { + return; + } + + domTT_currentDragTarget = in_this; + in_this.style.cursor = 'move'; + + // upgrade our z-index + in_this.style.zIndex = ++domLib_zIndex; + + var eventPosition = domLib_getEventPosition(in_event); + + var targetPosition = domLib_getOffsets(in_this); + domTT_dragOffsetLeft = eventPosition.get('x') - targetPosition.get('left'); + domTT_dragOffsetTop = eventPosition.get('y') - targetPosition.get('top'); + domTT_dragMouseDown = true; +} + +// }}} +// {{{ domTT_dragUpdate() + +function domTT_dragUpdate(in_event) +{ + if (domTT_dragMouseDown) + { + if (domLib_isGecko) + { + window.getSelection().removeAllRanges() + } + + if (domTT_useGlobalMousePosition && domTT_mousePosition != null) + { + var eventPosition = domTT_mousePosition; + } + else + { + if (typeof(in_event) == 'undefined') { in_event = window.event; } + var eventPosition = domLib_getEventPosition(in_event); + } + + domTT_currentDragTarget.style.left = (eventPosition.get('x') - domTT_dragOffsetLeft) + 'px'; + domTT_currentDragTarget.style.top = (eventPosition.get('y') - domTT_dragOffsetTop) + 'px'; + + // update the collision detection + domLib_detectCollisions(domTT_currentDragTarget); + } +} + +// }}} +// {{{ domTT_dragStop() + +function domTT_dragStop() +{ + if (domTT_dragMouseDown) { + domTT_dragMouseDown = false; + domTT_currentDragTarget.style.cursor = 'default'; + domTT_currentDragTarget = null; + if (domLib_isGecko) + { + window.getSelection().removeAllRanges() + } + } +} + +// }}} diff --git a/donate.php b/donate.php new file mode 100644 index 00000000..97d84e66 --- /dev/null +++ b/donate.php @@ -0,0 +1,100 @@ +".$lang_donate['std_here']."".$lang_donate['std_donation_success_note_two'], false); +} +else +{ + $paypal = safe_email($PAYPALACCOUNT); + if ($paypal && check_email($paypal)) + $showpaypal = true; + else + $showpaypal = false; + $alipay = safe_email($ALIPAYACCOUNT); + if ($alipay && check_email($alipay)) + $showalipay = true; + else + $showalipay = false; + + if ($showpaypal && $showalipay) + $tdattr = "width=\"50%\""; + elseif ($showpaypal || $showalipay) + $tdattr = "colspan=\"2\" width=\"100%\""; + else + stderr($lang_donate['std_error'], $lang_donate['std_no_donation_account_available'], false); + + stdhead($lang_donate['head_donation']); + begin_main_frame(); + print("

".$lang_donate['text_donate']."

"); + print(""); + print(""); + print(""); + if ($showpaypal){ +?> + + + +"); +print(""); +print("
".$lang_donate['text_donation_note']."
> +

+ +
+ + + +

+
+ +
+ + + + + + +
+

+

+ +

+
> +

+
+".$alipay."".$lang_donate['text_donate_alipay_note_two']?> +




+

+ +

+
".$lang_donate['text_after_donation_note_one'] +."".$lang_donate['text_send_us']."".$lang_donate['text_after_donation_note_two']."
"); +end_main_frame(); +stdfoot(); +} +?> diff --git a/donated.php b/donated.php new file mode 100644 index 00000000..b5dd9961 --- /dev/null +++ b/donated.php @@ -0,0 +1,32 @@ + +

Update Users Donated Amounts

+
+ + + + +
User name
Donated
+
+ UC_MODERATOR) { + $res = sql_query("SELECT COUNT(*) FROM users WHERE donor='yes'"); + $row = mysql_fetch_array($res); + $count = $row[0]; + + list($pagertop, $pagerbottom, $limit) = pager(50, $count, "donorlist.php?"); + stdhead("Donorlist"); + if (mysql_num_rows($res) == 0) + begin_main_frame(); + // =================================== + $users = number_format(get_row_count("users", "WHERE donor='yes'")); + begin_frame("Donor List ($users)", true); + begin_table(); + echo $pagerbottom; +?> +
+
IDUsernamee-mailJoinedHow much?
" . $arr[id] . "" . get_username($arr[id]) . "" . $arr[email] . "" . $arr[added] . "$" . $arr[donated] . "
+ + + + + + + + + + + + + +

> +

+

()

+

()

+

+ratio +

+
> +

+

()

+

+ + + + + + + + + +
+uTorrent + +Vuze +
+ +
Windows
+
+ +
Windows, Linux, Mac OS X
+
+
+


+ + + /> + +
+ +

+
/>
+
+
+ diff --git a/edit.php b/edit.php new file mode 100644 index 00000000..b42446bb --- /dev/null +++ b/edit.php @@ -0,0 +1,174 @@ += $movetorrent_class) + $allowmove = true; //enable moving torrent to other section +else $allowmove = false; + +$sectionmode = $row['cat_mode']; +if ($sectionmode == $browsecatmode) +{ + $othermode = $specialcatmode; + $movenote = $lang_edit['text_move_to_special']; +} +else +{ + $othermode = $browsecatmode; + $movenote = $lang_edit['text_move_to_browse']; +} + +$showsource = (get_searchbox_value($sectionmode, 'showsource') || ($allowmove && get_searchbox_value($othermode, 'showsource'))); //whether show sources or not +$showmedium = (get_searchbox_value($sectionmode, 'showmedium') || ($allowmove && get_searchbox_value($othermode, 'showmedium'))); //whether show media or not +$showcodec = (get_searchbox_value($sectionmode, 'showcodec') || ($allowmove && get_searchbox_value($othermode, 'showcodec'))); //whether show codecs or not +$showstandard = (get_searchbox_value($sectionmode, 'showstandard') || ($allowmove && get_searchbox_value($othermode, 'showstandard'))); //whether show standards or not +$showprocessing = (get_searchbox_value($sectionmode, 'showprocessing') || ($allowmove && get_searchbox_value($othermode, 'showprocessing'))); //whether show processings or not +$showteam = (get_searchbox_value($sectionmode, 'showteam') || ($allowmove && get_searchbox_value($othermode, 'showteam'))); //whether show teams or not +$showaudiocodec = (get_searchbox_value($sectionmode, 'showaudiocodec') || ($allowmove && get_searchbox_value($othermode, 'showaudiocodec'))); //whether show audio codecs or not + +stdhead($lang_edit['head_edit_torrent'] . "\"". $row["name"] . "\""); + +if (!isset($CURUSER) || ($CURUSER["id"] != $row["owner"] && get_user_class() < $torrentmanage_class)) { + print("

".$lang_edit['text_cannot_edit_torrent']."

"); + print("

".$lang_edit['text_cannot_edit_torrent_note']."

"); +} +else { + print("
"); + print(""); + if (isset($_GET["returnto"])) + print(""); + print("\n"); + print(""); + tr($lang_edit['row_torrent_name']."*", "", 1); + if ($smalldescription_main == 'yes') + tr($lang_edit['row_small_description'], "", 1); + + get_external_tr($row["url"]); + + if ($enablenfo_main=='yes') + tr($lang_edit['row_nfo_file'], "".$lang_edit['radio_keep_current']. + "".$lang_edit['radio_remove']. + "".$lang_edit['radio_update']."
", 1); + print(""); + $s = "\n"; + if ($allowmove){ + $s2 = "\n"; + $movecheckbox = ""; + } + tr($lang_edit['row_type']."*", $s.($allowmove ? "  ".$movecheckbox.$movenote.$s2 : ""), 1); + if ($showsource || $showmedium || $showcodec || $showaudiocodec || $showstandard || $showprocessing){ + if ($showsource){ + $source_select = torrent_selection($lang_edit['text_source'],"source_sel","sources",$row["source"]); + } + else $source_select = ""; + + if ($showmedium){ + $medium_select = torrent_selection($lang_edit['text_medium'],"medium_sel","media",$row["medium"]); + } + else $medium_select = ""; + + if ($showcodec){ + $codec_select = torrent_selection($lang_edit['text_codec'],"codec_sel","codecs",$row["codec"]); + } + else $codec_select = ""; + + if ($showaudiocodec){ + $audiocodec_select = torrent_selection($lang_edit['text_audio_codec'],"audiocodec_sel","audiocodecs",$row["audiocodec"]); + } + else $audiocodec_select = ""; + + if ($showstandard){ + $standard_select = torrent_selection($lang_edit['text_standard'],"standard_sel","standards",$row["standard"]); + } + else $standard_select = ""; + + if ($showprocessing){ + $processing_select = torrent_selection($lang_edit['text_processing'],"processing_sel","processings",$row["processing"]); + } + else $processing_select = ""; + + tr($lang_edit['row_quality'], $source_select . $medium_select . $codec_select . $audiocodec_select. $standard_select . $processing_select, 1); + } + + if ($showteam){ + if ($showteam){ + $team_select = torrent_selection($lang_edit['text_team'],"team_sel","teams",$row["team"]); + } + else $showteam = ""; + + tr($lang_edit['row_content'],$team_select,1); + } + tr($lang_edit['row_check'], " ".$lang_edit['checkbox_visible']."   ".(get_user_class() >= $beanonymous_class || get_user_class() >= $torrentmanage_class ? "".$lang_edit['checkbox_anonymous_note']."   " : "").(get_user_class() >= $torrentmanage_class ? " ".$lang_edit['checkbox_banned'] : ""), 1); + if (get_user_class()>= $torrentsticky_class || (get_user_class() >= $torrentmanage_class && $CURUSER["picker"] == 'yes')){ + $pickcontent = ""; + + if(get_user_class()>=$torrentsticky_class) + { + $pickcontent .= "".$lang_edit['row_special_torrent'].": "."   "; + $pickcontent .= "".$lang_edit['row_torrent_position'].": "."   "; + } + if(get_user_class()>=$torrentmanage_class && $CURUSER["picker"] == 'yes') + { + $pickcontent .= "".$lang_edit['row_recommended_movie'].": ".""; + } + tr($lang_edit['row_pick'], $pickcontent, 1); + } + + print("\n"); + print("
".htmlspecialchars($row["name"])."
".$lang_edit['row_description']."*"); + textbbcode("edittorrent","descr",($row["descr"]), false); + print("
\n"); + print("
\n"); + print("

"); + print("
\n"); + print("\n"); + if (isset($_GET["returnto"])) + print("\n"); + print("\n"); + print(""); + tr(" ".$lang_edit['radio_dead'], $lang_edit['text_dead_note'], 1); + tr(" ".$lang_edit['radio_dupe'], "", 1); + tr(" ".$lang_edit['radio_nuked'], "", 1); + tr(" ".$lang_edit['radio_rules'], "".$lang_edit['text_req'], 1); + tr(" ".$lang_edit['radio_other'], "".$lang_edit['text_req'], 1); + print("\n"); + print("
".$lang_edit['text_delete_torrent']."
"); + print("
\n"); +} +stdfoot(); diff --git a/email-gateway.php b/email-gateway.php new file mode 100644 index 00000000..4abaaa20 --- /dev/null +++ b/email-gateway.php @@ -0,0 +1,67 @@ +"; + + $subject = substr(htmlspecialchars(trim($_POST["subject"])), 0, 80); + if ($subject == "") $subject = "(No subject)"; + $subject = "Fw: $subject"; + + $message = htmlspecialchars(trim($_POST["message"])); + if ($message == "") stderr("Error", "No message text!"); + + $message = "Message submitted from ".getip()." at " . date("Y-m-d H:i:s") . ".\n" . + "Note: By replying to this e-mail you will reveal your e-mail address.\n" . + "---------------------------------------------------------------------\n\n" . + $message . "\n\n" . + "---------------------------------------------------------------------\n$SITENAME E-Mail Gateway\n"; + + $success = sent_mail($to,$from,$from_email,$subject,$message,"E-Mail Gateway",false); + + if ($success) + stderr("Success", "E-mail successfully queued for delivery."); + else + stderr("Error", "The mail could not be sent. Please try again later."); +} + +stdhead("E-mail gateway"); +?> +

+ +
Send e-mail to

+ +> + + + + + + +
Your name
Your e-mail
Subject
Message
+

+Note: Your IP-address will be logged and visible to the recipient to prevent abuse.
+Make sure to supply a valid e-mail address if you expect a reply.
+

+ + +// Fade interval in milliseconds +// Make this larger if you experience performance issues +Fadomatic.INTERVAL_MILLIS = 50; + +// Creates a fader +// element - The element to fade +// speed - The speed to fade at, from 0.0 to 100.0 +// initialOpacity (optional, default 100) - element's starting opacity, 0 to 100 +// minOpacity (optional, default 0) - element's minimum opacity, 0 to 100 +// maxOpacity (optional, default 0) - element's minimum opacity, 0 to 100 +function Fadomatic (element, rate, initialOpacity, minOpacity, maxOpacity) { + this._element = element; + this._intervalId = null; + this._rate = rate; + this._isFadeOut = true; + + // Set initial opacity and bounds + // NB use 99 instead of 100 to avoid flicker at start of fade + this._minOpacity = 0; + this._maxOpacity = 99; + this._opacity = 99; + + if (typeof minOpacity != 'undefined') { + if (minOpacity < 0) { + this._minOpacity = 0; + } else if (minOpacity > 99) { + this._minOpacity = 99; + } else { + this._minOpacity = minOpacity; + } + } + + if (typeof maxOpacity != 'undefined') { + if (maxOpacity < 0) { + this._maxOpacity = 0; + } else if (maxOpacity > 99) { + this._maxOpacity = 99; + } else { + this._maxOpacity = maxOpacity; + } + + if (this._maxOpacity < this._minOpacity) { + this._maxOpacity = this._minOpacity; + } + } + + if (typeof initialOpacity != 'undefined') { + if (initialOpacity > this._maxOpacity) { + this._opacity = this._maxOpacity; + } else if (initialOpacity < this._minOpacity) { + this._opacity = this._minOpacity; + } else { + this._opacity = initialOpacity; + } + } + + // See if we're using W3C opacity, MSIE filter, or just + // toggling visiblity + if(typeof element.style.opacity != 'undefined') { + + this._updateOpacity = this._updateOpacityW3c; + + } else if(typeof element.style.filter != 'undefined') { + + // If there's not an alpha filter on the element already, + // add one + if (element.style.filter.indexOf("alpha") == -1) { + + // Attempt to preserve existing filters + var existingFilters=""; + if (element.style.filter) { + existingFilters = element.style.filter+" "; + } + element.style.filter = existingFilters+"alpha(opacity="+this._opacity+")"; + } + + this._updateOpacity = this._updateOpacityMSIE; + + } else { + + this._updateOpacity = this._updateVisibility; + } + + this._updateOpacity(); +} + +// Initiates a fade out +Fadomatic.prototype.fadeOut = function () { + this._isFadeOut = true; + this._beginFade(); +} + +// Initiates a fade in +Fadomatic.prototype.fadeIn = function () { + this._isFadeOut = false; + this._beginFade(); +} + +// Makes the element completely opaque, stops any fade in progress +Fadomatic.prototype.show = function () { + this.haltFade(); + this._opacity = this._maxOpacity; + this._updateOpacity(); +} + +// Makes the element completely transparent, stops any fade in progress +Fadomatic.prototype.hide = function () { + this.haltFade(); + this._opacity = 0; + this._updateOpacity(); +} + +// Halts any fade in progress +Fadomatic.prototype.haltFade = function () { + + clearInterval(this._intervalId); +} + +// Resumes a fade where it was halted +Fadomatic.prototype.resumeFade = function () { + + this._beginFade(); +} + +// Pseudo-private members + +Fadomatic.prototype._beginFade = function () { + + this.haltFade(); + var objref = this; + this._intervalId = setInterval(function() { objref._tickFade(); },Fadomatic.INTERVAL_MILLIS); +} + +Fadomatic.prototype._tickFade = function () { + + if (this._isFadeOut) { + this._opacity -= this._rate; + if (this._opacity < this._minOpacity) { + this._opacity = this._minOpacity; + this.haltFade(); + } + } else { + this._opacity += this._rate; + if (this._opacity > this._maxOpacity ) { + this._opacity = this._maxOpacity; + this.haltFade(); + } + } + + this._updateOpacity(); +} + +Fadomatic.prototype._updateVisibility = function () { + + if (this._opacity > 0) { + this._element.style.visibility = 'visible'; + } else { + this._element.style.visibility = 'hidden'; + } +} + +Fadomatic.prototype._updateOpacityW3c = function () { + + this._element.style.opacity = this._opacity/100; + this._updateVisibility(); +} + +Fadomatic.prototype._updateOpacityMSIE = function () { + + this._element.filters.alpha.opacity = this._opacity; + this._updateVisibility(); +} + +Fadomatic.prototype._updateOpacity = null; diff --git a/faq.php b/faq.php new file mode 100644 index 00000000..e86b0923 --- /dev/null +++ b/faq.php @@ -0,0 +1,106 @@ +new_page('faq', 900, true); +if (!$Cache->get_page()) +{ +$Cache->add_whole_row(); +//make_folder("cache/" , get_langfolder_cookie()); +//cache_check ('faq'); +begin_main_frame(); + +begin_frame($lang_faq['text_welcome_to'].$SITENAME." - ".$SLOGAN); +print($lang_faq['text_welcome_content_one'].$lang_faq['text_welcome_content_two']); +end_frame(); + +$lang_id = get_guest_lang_id(); +$is_rulelang = get_single_value("language","rule_lang","WHERE id = ".sqlesc($lang_id)); +if (!$is_rulelang){ + $lang_id = 6; //English +} +$res = sql_query("SELECT `id`, `link_id`, `question`, `flag` FROM `faq` WHERE `type`='categ' AND `lang_id` = ".sqlesc($lang_id)." ORDER BY `order` ASC"); +while ($arr = mysql_fetch_array($res)) { + $faq_categ[$arr[link_id]][title] = $arr[question]; + $faq_categ[$arr[link_id]][flag] = $arr[flag]; + $faq_categ[$arr[link_id]][link_id] = $arr[link_id]; +} + +$res = sql_query("SELECT `id`, `link_id`, `question`, `answer`, `flag`, `categ` FROM `faq` WHERE `type`='item' AND `lang_id` = ".sqlesc($lang_id)." ORDER BY `order` ASC"); +while ($arr = mysql_fetch_array($res, MYSQL_BOTH)) { + $faq_categ[$arr[categ]][items][$arr[id]][question] = $arr[question]; + $faq_categ[$arr[categ]][items][$arr[id]][answer] = $arr[answer]; + $faq_categ[$arr[categ]][items][$arr[id]][flag] = $arr[flag]; + $faq_categ[$arr[categ]][items][$arr[id]][link_id] = $arr[link_id]; +} + +if (isset($faq_categ)) { + // gather orphaned items + /* + foreach ($faq_categ as $id => $temp) + { + if (!array_key_exists("title", $faq_categ[$id])) + { + foreach ($faq_categ[$id][items] as $id2 => $temp) + { + $faq_orphaned[$id2][question] = $faq_categ[$id][items][$id2][question]; + $faq_orphaned[$id2][answer] = $faq_categ[$id][items][$id2][answer]; + $faq_orphaned[$id2][flag] = $faq_categ[$id][items][$id2][flag]; + unset($faq_categ[$id]); + } + } + } + */ + + begin_frame("".$lang_faq['text_contents'] . ""); + foreach ($faq_categ as $id => $temp) + { + if ($faq_categ[$id][flag] == "1") + { + print("
"); + } + } + end_frame(); + + foreach ($faq_categ as $id => $temp) { + if ($faq_categ[$id][flag] == "1") + { + $frame = $faq_categ[$id][title] ." - \"Top\""; + begin_frame($frame); + print(""); + if (array_key_exists("items", $faq_categ[$id])) + { + foreach ($faq_categ[$id][items] as $id2 => $temp) + { + if ($faq_categ[$id][items][$id2][flag] != "0") + { + print("
". $faq_categ[$id][items][$id2][question] ."
\n"); + print("
". $faq_categ[$id][items][$id2][answer] ."\n

\n"); + } + } + } + end_frame(); + } + } +} +end_main_frame(); + $Cache->end_whole_row(); + $Cache->cache_page(); +} +echo $Cache->next_row(); +//cache_save ('faq'); +stdfoot(); +?> diff --git a/faqactions.php b/faqactions.php new file mode 100644 index 00000000..11942f6c --- /dev/null +++ b/faqactions.php @@ -0,0 +1,197 @@ + FAQ Management actions +| > Written by avataru +| > Date started: 1/7/2005 +| ++-------------------------------------------------------------------------- +*/ + +require "include/bittorrent.php"; +dbconn(); +loggedinorreturn(); + +if (get_user_class() < UC_ADMINISTRATOR) { + stderr("Error","Only Administrators and above can modify the FAQ, sorry."); +} + +//stdhead("FAQ Management"); + +// ACTION: reorder - reorder sections and items +if ($_GET[action] == "reorder") { + foreach($_POST[order] as $id => $position) sql_query("UPDATE `faq` SET `order`=".sqlesc($position)." WHERE id=".sqlesc($id)) or sqlerr(); + header("Location: " . get_protocol_prefix() . "$BASEURL/faqmanage.php"); + die; +} + +// ACTION: edit - edit a section or item +elseif ($_GET[action] == "edit" && isset($_GET[id])) { + stdhead("FAQ Management"); + begin_main_frame(); + print("

Edit Section or Item

"); + + $res = sql_query("SELECT * FROM faq WHERE id=".sqlesc($_GET[id])." LIMIT 1"); + while ($arr = mysql_fetch_array($res, MYSQL_BOTH)) { + $arr[question] = htmlspecialchars($arr[question]); + $arr[answer] = htmlspecialchars($arr[answer]); + if ($arr[type] == "item") { + $lang_id = $arr['lang_id']; + print("
"); + print("\n"); + print("\n"); + print("\n"); + print("\n"); + if ($arr[flag] == "0") print(""); + elseif ($arr[flag] == "2") print(""); + elseif ($arr[flag] == "3") print(""); + else print(""); + print("\n"); + print("\n"); + print("
ID:$arr[id]
Question:
Answer:
Status:
Status:
Status:
Status:
Category:
"); + } + elseif ($arr[type] == "categ") { + $lang_res = sql_query("SELECT lang_name FROM language WHERE id=".sqlesc($arr[lang_id])." LIMIT 1"); + if ($lang_arr = mysql_fetch_array($lang_res)) + $lang_name = $lang_arr['lang_name']; + print(""); + print("\n"); + print("\n"); + print("\n"); + print("\n"); + if ($arr[flag] == "0") print(""); + else print(""); + print("\n"); + print("
ID:$arr[id]
Language:$lang_name
Title:
Status:
Status:
"); + } + } + + end_main_frame(); + stdfoot(); +} + +// subACTION: edititem - edit an item +elseif ($_GET[action] == "edititem" && $_POST[id] != NULL && $_POST[question] != NULL && $_POST[answer] != NULL && $_POST[flag] != NULL && $_POST[categ] != NULL) { + $question = $_POST[question]; + $answer = $_POST[answer]; + sql_query("UPDATE `faq` SET `question`=".sqlesc($question).", `answer`=".sqlesc($answer).", `flag`=".sqlesc($_POST[flag]).", `categ`=".sqlesc($_POST[categ])." WHERE id=".sqlesc($_POST[id])) or sqlerr(); + header("Location: " . get_protocol_prefix() . "$BASEURL/faqmanage.php"); + die; +} + +// subACTION: editsect - edit a section +elseif ($_GET[action] == "editsect" && $_POST[id] != NULL && $_POST[title] != NULL && $_POST[flag] != NULL) { + $title = $_POST[title]; + sql_query("UPDATE `faq` SET `question`=".sqlesc($title).", `answer`='', `flag`=".sqlesc($_POST[flag]).", `categ`='0' WHERE id=".sqlesc($_POST[id])) or sqlerr(); + header("Location: " . get_protocol_prefix() . "$BASEURL/faqmanage.php"); + die; +} + +// ACTION: delete - delete a section or item +elseif ($_GET[action] == "delete" && isset($_GET[id])) { + if ($_GET[confirm] == "yes") { + sql_query("DELETE FROM `faq` WHERE `id`=".sqlesc(0+$_GET[id])." LIMIT 1") or sqlerr(); + header("Location: " . get_protocol_prefix() . "$BASEURL/faqmanage.php"); + die; + } + else { + stdhead("FAQ Management"); + begin_main_frame(); + print("

Confirmation required

"); + print("\n\n
Please click here to confirm.
\n"); + end_main_frame(); + stdfoot(); + } +} + +// ACTION: additem - add a new item +elseif ($_GET[action] == "additem" && $_GET[inid] && $_GET[langid]) { + stdhead("FAQ Management"); + begin_main_frame(); + print("

Add Item

"); + print(""); + print("\n"); + print("\n"); + print("\n"); + print(""); + print(""); + print(""); + print("\n"); + print("
Question:
Answer:
Status:
"); + end_main_frame(); + stdfoot(); +} + +// ACTION: addsection - add a new section +elseif ($_GET[action] == "addsection") { + stdhead("FAQ Management"); + begin_main_frame(); + print("

Add Section

"); + print("
"); + print("\n"); + print("\n"); + $s = ""; + print(""); + print(""); + print("\n"); + print("
Title:
Language:".$s."
Status:
"); + end_main_frame(); + stdfoot(); +} + +// subACTION: addnewitem - add a new item to the db +elseif ($_GET[action] == "addnewitem" && $_POST[question] != NULL && $_POST[answer] != NULL) { + $question = $_POST[question]; + $answer = $_POST[answer]; + $categ = 0+$_POST[categ]; + $langid = 0+$_POST[langid]; + $res = sql_query("SELECT MAX(`order`) AS maxorder, MAX(`link_id`) AS maxlinkid FROM `faq` WHERE `type`='item' AND `categ`=".sqlesc($categ)." AND lang_id=".sqlesc($langid)); + while ($arr = mysql_fetch_array($res, MYSQL_BOTH)) + { + $order = $arr['maxorder'] + 1; + $link_id = $arr['maxlinkid']+1; + } + sql_query("INSERT INTO `faq` (`link_id`, `type`, `lang_id`, `question`, `answer`, `flag`, `categ`, `order`) VALUES ('$link_id', 'item', ".sqlesc($langid).", ".sqlesc($question).", ".sqlesc($answer).", " . sqlesc(0+$_POST[flag]) . ", ".sqlesc($categ).", ".sqlesc($order).")") or sqlerr(); + header("Location: " . get_protocol_prefix() . "$BASEURL/faqmanage.php"); + die; +} + +// subACTION: addnewsect - add a new section to the db +elseif ($_GET[action] == "addnewsect" && $_POST[title] != NULL && $_POST[flag] != NULL) { + $title = $_POST[title]; + $language = 0+$_POST['language']; + $res = sql_query("SELECT MAX(`order`) AS maxorder, MAX(`link_id`) AS maxlinkid FROM `faq` WHERE `type`='categ' AND `lang_id` = ".sqlesc($language)); + while ($arr = mysql_fetch_array($res, MYSQL_BOTH)) {$order = $arr['maxorder'] + 1;$link_id = $arr['maxlinkid']+1;} + sql_query("INSERT INTO `faq` (`link_id`,`type`,`lang_id`, `question`, `answer`, `flag`, `categ`, `order`) VALUES (".sqlesc($link_id).",'categ', ".sqlesc($language).", ".sqlesc($title).", '', ".sqlesc($_POST[flag]).", '0', ".sqlesc($order).")") or sqlerr(); + header("Location: " . get_protocol_prefix() . "$BASEURL/faqmanage.php"); + die; +} else { + header("Location: " . get_protocol_prefix() . "$BASEURL/faqmanage.php"); + die; +} +?> diff --git a/faqmanage.php b/faqmanage.php new file mode 100644 index 00000000..9dfd9e69 --- /dev/null +++ b/faqmanage.php @@ -0,0 +1,118 @@ +FAQ Management"); + +// make the array that has all the faq in a nice structured +$res = sql_query("SELECT faq.id, faq.link_id, faq.lang_id, lang_name, faq.question, faq.flag, faq.order FROM faq LEFT JOIN language on faq.lang_id = language.id WHERE type='categ' ORDER BY lang_name, `order` ASC"); +while ($arr = mysql_fetch_array($res, MYSQL_BOTH)) { + $faq_categ[$arr[lang_id]][$arr[link_id]][title] = $arr[question]; + $faq_categ[$arr[lang_id]][$arr[link_id]][flag] = $arr[flag]; + $faq_categ[$arr[lang_id]][$arr[link_id]][order] = $arr[order]; + $faq_categ[$arr[lang_id]][$arr[link_id]][id] = $arr[id]; + $faq_categ[$arr[lang_id]][$arr[link_id]][lang_name] = $arr[lang_name]; +} + +$res = sql_query("SELECT faq.id, faq.question, faq.lang_id, faq.flag, faq.categ, faq.order FROM faq WHERE type='item' ORDER BY `order` ASC"); +while ($arr = mysql_fetch_array($res)) { + $faq_categ[$arr[lang_id]][$arr[categ]][items][$arr[id]][question] = $arr[question]; + $faq_categ[$arr[lang_id]][$arr[categ]][items][$arr[id]][flag] = $arr[flag]; + $faq_categ[$arr[lang_id]][$arr[categ]][items][$arr[id]][order] = $arr[order]; +} + +if (isset($faq_categ)) +{ +// gather orphaned items + foreach ($faq_categ as $lang => $temp2){ + foreach ($temp2 as $id => $temp) + { + if (!array_key_exists("title", $temp2[$id])) + { + foreach ($temp2[$id][items] as $id2 => $temp) + { + $faq_orphaned[$lang][$id2][question] = $temp2[$id][items][$id2][question]; + $faq_orphaned[$lang][$id2][flag] = $temp2[$id][items][$id2][flag]; + unset($temp2[$id]); + } + } + } + } + + // print the faq table + print(""); + foreach ($faq_categ as $lang => $temp2) + { + foreach ($temp2 as $id => $temp) + { + print("
\n\n"); + print("\n"); + + print("\n"); + + if (array_key_exists("items", $temp2[$id])) + { + foreach ($temp2[$id][items] as $id2 => $temp) + { + print("\n"); + } + } + + print("\n"); + print("
PositionSection/Item TitleLanguageStatusActions
 ". $temp2[$id][title] ."". $temp2[$id][lang_name] ."". $status ."Edit Delete
 ". $temp2[$id][items][$id2][question] ."". $status ."Edit Delete
Add new item
\n"); + } + } +} + +// print the orphaned items table +if (isset($faq_orphaned)) { + print("
\n\n"); + print("\n"); + print("\n"); + foreach ($faq_orphaned as $lang => $temp2){ + foreach ($temp2 as $id => $temp) + { + if ($temp2[$id][flag] == "0") $status = "Hidden"; + elseif ($temp2[$id][flag] == "2") $status = "Updated"; + elseif ($temp2[$id][flag] == "3") $status = "New"; + else $status = "Normal"; + print("\n"); + } + } + print("
Orphaned Items
Item TitleStatusActions
". $temp2[$id][question] ."". $status ."edit delete
\n"); +} + +print("
\n\n\n
Add new section
\n"); +print("

\n"); +print("
\n"); +print("

When the position numbers don't reflect the position in the table, it means the order id is bigger than the total number of sections/items and you should check all the order id's in the table and click \"reorder\"

"); +echo $pagerbottom; + +end_main_frame(); +stdfoot(); +?> diff --git a/fastdelete.php b/fastdelete.php new file mode 100644 index 00000000..c740c050 --- /dev/null +++ b/fastdelete.php @@ -0,0 +1,50 @@ +".$lang_fastdelete['std_here_if_sure'],false); + } + +deletetorrent($id); +KPS("-",$uploadtorrent_bonus,$row["owner"]); +if ($row['anonymous'] == 'yes' && $CURUSER["id"] == $row["owner"]) { + write_log("Torrent $id ($row[name]) was deleted by its anonymous uploader",'normal'); +} else { + write_log("Torrent $id ($row[name]) was deleted by $CURUSER[username]",'normal'); +} +//Send pm to torrent uploader +if ($CURUSER["id"] != $row["owner"]){ + $dt = sqlesc(date("Y-m-d H:i:s")); + $subject = sqlesc($lang_fastdelete_target[get_user_lang($row["owner"])]['msg_torrent_deleted']); + $msg = sqlesc($lang_fastdelete_target[get_user_lang($row["owner"])]['msg_the_torrent_you_uploaded'].$row['name'].$lang_fastdelete_target[get_user_lang($row["owner"])]['msg_was_deleted_by']."[url=userdetails.php?id=".$CURUSER['id']."]".$CURUSER['username']."[/url]".$lang_fastdelete_target[get_user_lang($row["owner"])]['msg_blank']); + sql_query("INSERT INTO messages (sender, receiver, subject, added, msg) VALUES(0, $row[owner], $subject, $dt, $msg)") or sqlerr(__FILE__, __LINE__); +} +header("Refresh: 0; url=torrents.php"); +?> diff --git a/favicon.ico b/favicon.ico new file mode 100644 index 00000000..a024bec1 Binary files /dev/null and b/favicon.ico differ diff --git a/flvplayer.swf b/flvplayer.swf new file mode 100644 index 00000000..71e407d7 Binary files /dev/null and b/flvplayer.swf differ diff --git a/formats.php b/formats.php new file mode 100644 index 00000000..4eb18e81 --- /dev/null +++ b/formats.php @@ -0,0 +1,215 @@ + +
+

A Handy Guide to Using the Files You've Downloaded

+
+ +Hey guys, here's some info about common files that you can download from the internet, +and a little bit about using these files for their intended purposes. If you're stuck +on what exactly a file is or how to open it maybe your answer lies ahead. If you dont' +find your answer here, then please post in the "Forum". So without further adieu lets +get the show on the road!
+
+
+
+
+

Compression Files

+
+ +.rar .zip .ace .r01 .001
+
+These extensions are quite common and mean that your file(s) are compressed into an "archive".
+This is just a way of making the files more compact and easier to download.
+
+To open any of those archives listed above you can use WinRAR (Make sure you have the latest version) or PowerArchiver.
+
+If those progams aren't working for you and you have a .zip file you can try +WinZip (Trial version).
+
+If the two first mentioned programs aren't working for you and you have a .ace or .001 +file you can try Winace (Trial version).
+
+
+.cbr .cbz
+
+These are usually comic books in an archive format. a .cbr file is actually the same +thing as a .rar file and a .cbz file is the same as a .zip file. However, often when +opening them with WinRAR or WinZip it will disorder your pages. To display these +archives properly it's often best to use +CDisplay.
+
+
+
+
+
+

Multimedia Files

+
+ +.avi .mpg. .mpeg .divx .xvid .wmv
+
+These files are usually movies or TVshows, or a host of other types of media. They can +be viewed using various media players, but I suggest using +Zoomplayer, +BSPlayer, VLC media player + or Windows Media Player. Also, you'll need to make sure you have +the right codecs to play each individual file. Codecs are a tricky business sometimes so to help +you out with your file and what exact codecs it needs try using GSpot. It tells you what codecs you need. Then just look on the net to find +them, below are some common codecs and their download links for quick reference:
+
+ffdshow (Recommended! (plays many formats: XviD, DivX, 3ivX, mpeg-4))
+XviD codec
+DivX codec
+ac3filter (for AC3 soundtracks, aka "5.1")
+Ogg media codec (for .OGM files)
+
+Can't find what you're looking for? Check out these sites...
+
+DivX-Digest
+Digital-Digest
+Doom9
+DVD-R Help
+
+
+.mov
+
+These are QuickTime files. Hopefully you +won't have to open these as I hate quicktime, but if you do you can +get it here. +There are however alternatives to the original program, +Check out QuickTime Alternative.
+
+
+.ra .rm .ram
+
+These are RealPlayer files. RealPlayer IMO is the +devils work. It installs lord knows what on your system and never really goes away when +you want to uninstall it. Still if you insists you can get the player +here. +There are however alternatives to the original program, +check out Real Alternative.
+
+
+vcd/svcd
+
+These can be a pain on some peoples setups, but more so, on your stand-alone DVD player. +For all your vcd needs check out www.dvdrhelp.com. +These guys know their stuff, and can help you with all kinds of media related questions.
+
+
+.mp3 .mp2
+
+Usually music files. Play them with WinAmp.
+
+
+.ogm .ogg
+
+Ogg Vorbis media files. You can find out more about them and download applications +here. +This filetype is another music file format, but can be used for various media. You will +probably want to download the +DirectShow Ogg filter to play back OGM files. Any new version of +WinAmp will also do.
+
+
+
+
+
+

CD Image Files

+
+ +.bin and .cue
+
+These are your standard images of a CD, and are used quite alot these days. To open them +you have a couple options. You can burn them using Nero +(Trial Version) or Alcohol 120%, +but this proves to be soooooooo problematic for a lot of people. You should also consult +this tutorial for burning images with various software programs You can also use +Daemon Tools, which lets you +mount the image to a "virtual cd-rom", so basically it tricks your computer into thinking +that you have another cd-rom and that you're putting a cd with your image file on it into +this virtual cd-rom, it's great cuz you'll never make a bad cd again, Alcohol 120% also +sports a virtual cd-rom feature. Finally, if you're still struggling to access the files +contained within any given image file you can use CDMage +to extract the files and then burn them, or just access them from your hard drive. You can +also use VCDGear to extract the mpeg contents of a +SVCD or VCD image file such as bin/cue.
+
+
+.iso
+
+Another type of image file that follows similar rules as .bin and .cue, only you extract +or create them using WinISO or +ISOBuster. Sometimes converting a +problematic .bin and .cue file to an .iso can help you burn it to a cd.
+
+
+.ccd .img .sub
+
+All these files go together and are in the CloneCD format. CloneCD is like most other CD-Burning programs, +see the .bin and .cue section if you're having problems with these files.
+
+
+
+
+
+

Other Files

+
+ +.txt .doc
+
+These are text files. .txt files can be opened with notepad or watever you default text +editor happens to be, and .doc are opened with Microsoft Word.
+
+
+.nfo
+
+These contain information about the file you just downloaded, and it's HIGHLY recommended +that you read these! They are plain text files, often with ascii-art. You can open them +with Notepad, Wordpad, DAMN NFO Viewer +or UltraEdit.
+
+
+.pdf
+
+Opened with Adobe Acrobat Reader.
+
+
+.jpg .gif .tga .psd
+
+Basic image files. These files generally contain pictures, and can be opened with Adobe +Photoshop or whatever your default image viewer is.
+
+
+.sfv
+
+Checks to make sure that your multi-volume archives are complete. This just lets you know +if you've downloaded something complete or not. (This is not really an issue when DL:ing +via torrent.) You can open/activate these files with +SFVChecker (Trial version) or hkSFV for example.
+
+
+

.par

+This is a parity file, and is often used when downloading from newsgroups. These files can +fill in gaps when you're downloading a multi-volume archive and get corrupted or missing parts. +Open them with QuickPar. +
+
+
+
+
+
+ +If you have any suggestion/changes PM one of the Admins/SysOp!
+
+This file was originally written by hussdiesel at filesoup, then edited by Rhomboid and re-edited by us.
+
+
+
+delete_value('forums_list'); + $Cache->delete_value('forum_moderator_array'); + header("Location: forummanage.php"); + die(); +} + +//EDIT FORUM ACTION +elseif ($_POST['action'] == "editforum") { + $name = $_POST['name']; + $desc = $_POST['desc']; + $id = $_POST['id']; + if (!$name && !$desc && !$id) { + header("Location: " . get_protocol_prefix() . "$BASEURL/forummanage.php"); + die(); + } + if ($_POST["moderator"]){ + $moderator = $_POST["moderator"]; + set_forum_moderators($moderator,$id); + } + else{ + sql_query("DELETE FROM forummods WHERE forumid=".sqlesc($id)) or sqlerr(__FILE__, __LINE__); + } + sql_query("UPDATE forums SET sort = '" . $_POST['sort'] . "', name = " . sqlesc($_POST['name']). ", description = " . sqlesc($_POST['desc']). ", forid = ".sqlesc(($_POST['overforums'])).", minclassread = '" . $_POST['readclass'] . "', minclasswrite = '" . $_POST['writeclass'] . "', minclasscreate = '" . $_POST['createclass'] . "' where id = ".sqlesc($id)) or sqlerr(__FILE__, __LINE__); + $Cache->delete_value('forums_list'); + $Cache->delete_value('forum_moderator_array'); + header("Location: forummanage.php"); + die(); +} + +//ADD FORUM ACTION +elseif ($_POST['action'] == "addforum") { + $name = ($_POST['name']); + $desc = ($_POST['desc']); + if (!$name && !$desc) { + header("Location: " . get_protocol_prefix() . "$BASEURL/forummanage.php"); + die(); + } + sql_query("INSERT INTO forums (sort, name, description, minclassread, minclasswrite, minclasscreate, forid) VALUES(" . $_POST['sort'] . ", " . sqlesc($_POST['name']). ", " . sqlesc($_POST['desc']). ", " . $_POST['readclass'] . ", " . $_POST['writeclass'] . ", " . $_POST['createclass'] . ", ".sqlesc(($_POST['overforums'])).")") or sqlerr(__FILE__, __LINE__); + $Cache->delete_value('forums_list'); + if ($_POST["moderator"]){ + $id = mysql_insert_id(); + $moderator = $_POST["moderator"]; + set_forum_moderators($moderator,$id); + } + header("Location: forummanage.php"); + die(); +} + +// SHOW FORUMS WITH FORUM MANAGMENT TOOLS +stdhead($lang_forummanage['head_forum_management']); +begin_main_frame(); +if ($_GET['action'] == "editforum") { + //EDIT PAGE FOR THE FORUMS + $id = 0 + ($_GET["id"]); + $result = sql_query ("SELECT * FROM forums where id = ".sqlesc($id)); + if ($row = mysql_fetch_array($result)) { + do { +?> +

-->

+
+
"> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
--
">
">
+ +
 
+ +
+ +
+ + +

-->

+
+"> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
 
+ +
+ +
+ +

+ + +
+'; +echo "
".$lang_forummanage['col_name']."".$lang_forummanage['col_overforum']."".$lang_forummanage['col_read']."".$lang_forummanage['col_write']."".$lang_forummanage['col_create_topic']."".$lang_forummanage['col_moderator']."".$lang_forummanage['col_modify']."
".htmlspecialchars($row["name"])."
".htmlspecialchars($row["description"])."
".htmlspecialchars($name)."" . get_user_class_name($row["minclassread"],false,true,true) . "" . get_user_class_name($row["minclasswrite"],false,true,true) . "" . get_user_class_name($row["minclasscreate"],false,true,true) . "".$moderators."".$lang_forummanage['text_edit']." | ".$lang_forummanage['text_delete']."
".$lang_forummanage['text_no_records_found']."
"; +} + +end_main_frame(); +stdfoot(); diff --git a/forums.php b/forums.php new file mode 100644 index 00000000..8c38584b --- /dev/null +++ b/forums.php @@ -0,0 +1,1537 @@ +get_value('active_forum_user_count')){ + $secs = 900; + $dt = date("Y-m-d H:i:s",(TIMENOW - $secs)); + $activeforumuser_num = get_row_count("users","WHERE forum_access >= ".sqlesc($dt)); + $Cache->cache_value('active_forum_user_count', $activeforumuser_num, 300); + } + if ($activeforumuser_num){ + $forumusers = $lang_forums['text_there'].is_or_are($activeforumuser_num)."".$activeforumuser_num."".$lang_forums['text_online_user'].add_s($activeforumuser_num).$lang_forums['text_in_forum_now']; + } + else + $forumusers = $lang_forums['text_no_active_users']; +?> +

+
+get_value('total_posts_count')){ + $postcount = get_row_count("posts"); + $Cache->cache_value('total_posts_count', $postcount, 96400); + } + if (!$topiccount = $Cache->get_value('total_topics_count')){ + $topiccount = get_row_count("topics"); + $Cache->cache_value('total_topics_count', $topiccount, 96500); + } + if (!$todaypostcount = $Cache->get_value('today_'.$today_date.'_posts_count')) { + $todaypostcount = get_row_count("posts", "WHERE added > ".sqlesc(date("Y-m-d"))); + $Cache->cache_value('today_'.$today_date.'_posts_count', $todaypostcount, 700); + } + print($lang_forums['text_our_members_have'] ."".$postcount."". $lang_forums['text_posts_in_topics']."".$topiccount."".$lang_forums['text_in_topics']."".$todaypostcount."".$lang_forums['text_new_post'].add_s($todaypostcount).$lang_forums['text_posts_today']."

"); + print($forumusers); +?> +
+delete_value('user_'.$CURUSER['id'].'_last_read_post_list'); + $lastpostid=get_single_value("posts","id","ORDER BY id DESC"); + if ($lastpostid){ + $CURUSER['last_catchup'] = $lastpostid; + sql_query("UPDATE users SET last_catchup = ".sqlesc($lastpostid)." WHERE id=".sqlesc($CURUSER['id'])); + } +} + +//return image +function get_topic_image($status= "read"){ + global $lang_forums; + switch($status){ + case "read": { + return "\"read\""; + break; + } + case "unread": { + return "\"unread\""; + break; + } + case "locked": { + return "\"locked\""; + break; + } + case "lockednew": { + return "\"lockednew\""; + break; + } + } +} + +function highlight_topic($subject, $hlcolor=0) +{ + $colorname=get_hl_color($hlcolor); + if ($colorname) + $subject = "".$subject.""; + return $subject; +} + +function check_whether_exist($id, $place='forum'){ + global $lang_forums; + int_check($id,true); + switch ($place){ + case 'forum': + { + $count = get_row_count("forums","WHERE id=".sqlesc($id)); + if (!$count) + stderr($lang_forums['std_error'],$lang_forums['std_no_forum_id']); + break; + } + case 'topic': + { + $count = get_row_count("topics","WHERE id=".sqlesc($id)); + if (!$count) + stderr($lang_forums['std_error'],$lang_forums['std_bad_topic_id']); + $forumid = get_single_value("topics","forumid","WHERE id=".sqlesc($id)); + check_whether_exist($forumid, 'forum'); + break; + } + case 'post': + { + $count = get_row_count("posts","WHERE id=".sqlesc($id)); + if (!$count) + stderr($lang_forums['std_error'],$lang_forums['std_no_post_id']); + $topicid = get_single_value("posts","topicid","WHERE id=".sqlesc($id)); + check_whether_exist($topicid, 'topic'); + break; + } + } +} + +//update the last post of a topic +function update_topic_last_post($topicid) +{ + global $lang_forums; + $res = sql_query("SELECT id FROM posts WHERE topicid=".sqlesc($topicid)." ORDER BY id DESC LIMIT 1") or sqlerr(__FILE__, __LINE__); + $arr = mysql_fetch_row($res) or die($lang_forums['std_no_post_found']); + $postid = $arr[0]; + sql_query("UPDATE topics SET lastpost=".sqlesc($postid)." WHERE id=".sqlesc($topicid)) or sqlerr(__FILE__, __LINE__); +} + +function get_forum_row($forumid = 0) +{ + global $Cache; + if (!$forums = $Cache->get_value('forums_list')){ + $forums = array(); + $res2 = sql_query("SELECT * FROM forums ORDER BY forid ASC, sort ASC") or sqlerr(__FILE__, __LINE__); + while ($row2 = mysql_fetch_array($res2)) + $forums[$row2['id']] = $row2; + $Cache->cache_value('forums_list', $forums, 86400); + } + if (!$forumid) + return $forums; + else return $forums[$forumid]; +} +function get_last_read_post_id($topicid) { + global $CURUSER, $Cache; + static $ret; + if (!$ret && !$ret = $Cache->get_value('user_'.$CURUSER['id'].'_last_read_post_list')){ + $ret = array(); + $res = sql_query("SELECT * FROM readposts WHERE userid=" . sqlesc($CURUSER['id'])); + if (mysql_num_rows($res) != 0){ + while ($row = mysql_fetch_array($res)) + $ret[$row['topicid']] = $row['lastpostread']; + $Cache->cache_value('user_'.$CURUSER['id'].'_last_read_post_list', $ret, 900); + } + else $Cache->cache_value('user_'.$CURUSER['id'].'_last_read_post_list', 'no record', 900); + } + if ($ret != "no record" && $ret[$topicid] && $CURUSER['last_catchup'] < $ret[$topicid]){ + return $ret[$topicid]; + } + elseif ($CURUSER['last_catchup']) + return $CURUSER['last_catchup']; + else return 0; +} + +//-------- Inserts a compose frame +function insert_compose_frame($id, $type = 'new') +{ + global $maxsubjectlength, $CURUSER; + global $lang_forums; + $hassubject = false; + $subject = ""; + $body = ""; + print("
\n"); + switch ($type){ + case 'new': + { + $forumname = get_single_value("forums","name","WHERE id=".sqlesc($id)); + $title = $lang_forums['text_new_topic_in']." ".htmlspecialchars($forumname)." ".$lang_forums['text_forum']; + $hassubject = true; + break; + } + case 'reply': + { + $topicname = get_single_value("topics","subject","WHERE id=".sqlesc($id)); + $title = $lang_forums['text_reply_to_topic']." ".htmlspecialchars($topicname)." "; + break; + } + case 'quote': + { + $topicid=get_single_value("posts","topicid","WHERE id=".sqlesc($id)); + $topicname = get_single_value("topics","subject","WHERE id=".sqlesc($topicid)); + $title = $lang_forums['text_reply_to_topic']." ".htmlspecialchars($topicname)." "; + $res = sql_query("SELECT posts.body, users.username FROM posts LEFT JOIN users ON posts.userid = users.id WHERE posts.id=$id") or sqlerr(__FILE__, __LINE__); + if (mysql_num_rows($res) != 1) + stderr($lang_forums['std_error'], $lang_forums['std_no_post_id']); + $arr = mysql_fetch_assoc($res); + $body = "[quote=".htmlspecialchars($arr["username"])."]".htmlspecialchars(unesc($arr["body"]))."[/quote]"; + $id = $topicid; + $type = 'reply'; + break; + } + case 'edit': + { + $res = sql_query("SELECT topicid, body FROM posts WHERE id=".sqlesc($id)." LIMIT 1") or sqlerr(__FILE__, __LINE__); + $row = mysql_fetch_array($res); + $topicid=$row['topicid']; + $firstpost = get_single_value("posts","MIN(id)", "WHERE topicid=".sqlesc($topicid)); + if ($firstpost == $id){ + $subject = get_single_value("topics","subject","WHERE id=".sqlesc($topicid)); + $hassubject = true; + } + $body = htmlspecialchars(unesc($row["body"])); + $title = $lang_forums['text_edit_post']; + break; + } + default: + { + die; + } + } + print(""); + print(""); + begin_compose($title, $type, $body, $hassubject, $subject); + end_compose(); + print("
"); +} +// ------------- end: functions ------------------// +// ------------- start: Global variables ------------------// +$maxsubjectlength = 100; +$postsperpage = $CURUSER["postsperpage"]; +if (!$postsperpage){ + if (is_numeric($forumpostsperpage)) + $postsperpage = $forumpostsperpage;//system-wide setting + else $postsperpage = 10; +} +//get topics per page +$topicsperpage = $CURUSER["topicsperpage"]; +if (!$topicsperpage){ + if (is_numeric($forumtopicsperpage_main)) + $topicsperpage = $forumtopicsperpage_main;//system-wide setting + else $topicsperpage = 20; +} +$today_date = date("Y-m-d",TIMENOW); +// ------------- end: Global variables ------------------// + +$action = htmlspecialchars(trim($_GET["action"])); + +//-------- Action: New topic +if ($action == "newtopic") +{ + $forumid = 0+$_GET["forumid"]; + check_whether_exist($forumid, 'forum'); + stdhead($lang_forums['head_new_topic']); + begin_main_frame(); + insert_compose_frame($forumid,'new'); + end_main_frame(); + stdfoot(); + die; +} +if ($action == "quotepost") +{ + $postid = 0+$_GET["postid"]; + check_whether_exist($postid, 'post'); + stdhead($lang_forums['head_post_reply']); + begin_main_frame(); + insert_compose_frame($postid, 'quote'); + end_main_frame(); + stdfoot(); + die; +} + +//-------- Action: Reply + +if ($action == "reply") +{ + $topicid = 0+$_GET["topicid"]; + check_whether_exist($topicid, 'topic'); + stdhead($lang_forums['head_post_reply']); + begin_main_frame(); + insert_compose_frame($topicid, 'reply'); + end_main_frame(); + stdfoot(); + die; +} + +//-------- Action: Edit post + +if ($action == "editpost") +{ + $postid = 0+$_GET["postid"]; + check_whether_exist($postid, 'post'); + + $res = sql_query("SELECT userid, topicid FROM posts WHERE id=".sqlesc($postid)) or sqlerr(__FILE__, __LINE__); + $arr = mysql_fetch_assoc($res); + + $res2 = sql_query("SELECT locked FROM topics WHERE id = " . $arr["topicid"]) or sqlerr(__FILE__, __LINE__); + $arr2 = mysql_fetch_assoc($res2); + $locked = ($arr2["locked"] == 'yes'); + + $ismod = is_forum_moderator($postid, 'post'); + if (($CURUSER["id"] != $arr["userid"] || $locked) && get_user_class() < $postmanage_class && !$ismod) + permissiondenied(); + + stdhead($lang_forums['text_edit_post']); + begin_main_frame(); + insert_compose_frame($postid, 'edit'); + end_main_frame(); + stdfoot(); + die; +} + +//-------- Action: Post +if ($action == "post") +{ + if ($CURUSER["forumpost"] == 'no') + { + stderr($lang_forums['std_sorry'], $lang_forums['std_unauthorized_to_post'],false); + die; + } + $id = $_POST["id"]; + $type = $_POST["type"]; + $subject = $_POST["subject"]; + $body = trim($_POST["body"]); + $hassubject = false; + switch ($type){ + case 'new': + { + check_whether_exist($id, 'forum'); + $forumid = $id; + $hassubject = true; + break; + } + case 'reply': + { + check_whether_exist($id, 'topic'); + $topicid = $id; + $forumid = get_single_value("topics", "forumid", "WHERE id=".sqlesc($topicid)); + break; + } + case 'edit': + { + check_whether_exist($id, 'post'); + $res = sql_query("SELECT topicid FROM posts WHERE id=".sqlesc($id)." LIMIT 1") or sqlerr(__FILE__, __LINE__); + $row = mysql_fetch_array($res); + $topicid=$row['topicid']; + $forumid = get_single_value("topics", "forumid", "WHERE id=".sqlesc($topicid)); + $firstpost = get_single_value("posts","MIN(id)", "WHERE topicid=".sqlesc($topicid)); + if ($firstpost == $id){ + $hassubject = true; + } + break; + } + default: + { + die; + } + } + + if ($hassubject){ + $subject = trim($subject); + if (!$subject) + stderr($lang_forums['std_error'], $lang_forums['std_must_enter_subject']); + if (strlen($subject) > $maxsubjectlength) + stderr($lang_forums['std_error'], $lang_forums['std_subject_limited']); + } + + //------ Make sure sure user has write access in forum + $arr = get_forum_row($forumid) or die($lang_forums['std_bad_forum_id']); + + if (get_user_class() < $arr["minclasswrite"] || ($type =='new' && get_user_class() < $arr["minclasscreate"])) + permissiondenied(); + + if ($body == "") + stderr($lang_forums['std_error'], $lang_forums['std_no_body_text']); + + $userid = 0+$CURUSER["id"]; + $date = date("Y-m-d H:i:s"); + + if ($type != 'new'){ + //---- Make sure topic is unlocked + + $res = sql_query("SELECT locked FROM topics WHERE id=$topicid") or sqlerr(__FILE__, __LINE__); + $arr = mysql_fetch_assoc($res) or die("Topic id n/a"); + if ($arr["locked"] == 'yes' && get_user_class() < $postmanage_class && !is_forum_moderator($topicid, 'topic')) + stderr($lang_forums['std_error'], $lang_forums['std_topic_locked']); + } + + if ($type == 'edit') + { + if ($hassubject){ + sql_query("UPDATE topics SET subject=".sqlesc($subject)." WHERE id=".sqlesc($topicid)) or sqlerr(__FILE__, __LINE__); + $forum_last_replied_topic_row = $Cache->get_value('forum_'.$forumid.'_last_replied_topic_content'); + if ($forum_last_replied_topic_row && $forum_last_replied_topic_row['id'] == $topicid) + $Cache->delete_value('forum_'.$forumid.'_last_replied_topic_content'); + } + sql_query("UPDATE posts SET body=".sqlesc($body).", editdate=".sqlesc($date).", editedby=".sqlesc($CURUSER[id])." WHERE id=".sqlesc($id)) or sqlerr(__FILE__, __LINE__); + $postid = $id; + $Cache->delete_value('post_'.$postid.'_content'); + } + else + { + // Anti Flood Code + // To ensure that posts are not entered within 10 seconds limiting posts + // to a maximum of 360*6 per hour. + if (get_user_class() < $postmanage_class) { + if (strtotime($CURUSER['last_post']) > (TIMENOW - 10)) + { + $secs = 10 - (TIMENOW - strtotime($CURUSER['last_post'])); + stderr($lang_forums['std_error'],$lang_forums['std_post_flooding'].$secs.$lang_forums['std_seconds_before_making'],false); + } + } + if ($type == 'new'){ //new topic + //add bonus + KPS("+",$starttopic_bonus,$userid); + + //---- Create topic + sql_query("INSERT INTO topics (userid, forumid, subject) VALUES($userid, $forumid, ".sqlesc($subject).")") or sqlerr(__FILE__, __LINE__); + $topicid = mysql_insert_id() or stderr($lang_forums['std_error'],$lang_forums['std_no_topic_id_returned']); + sql_query("UPDATE forums SET topiccount=topiccount+1, postcount=postcount+1 WHERE id=".sqlesc($forumid)); + } + else // new post + { + //add bonus + KPS("+",$makepost_bonus,$userid); + sql_query("UPDATE forums SET postcount=postcount+1 WHERE id=".sqlesc($forumid)); + } + + sql_query("INSERT INTO posts (topicid, userid, added, body, ori_body) VALUES ($topicid, $userid, ".sqlesc($date).", ".sqlesc($body).", ".sqlesc($body).")") or sqlerr(__FILE__, __LINE__); + $postid = mysql_insert_id() or die($lang_forums['std_post_id_not_available']); + $Cache->delete_value('forum_'.$forumid.'_post_'.$today_date.'_count'); + $Cache->delete_value('today_'.$today_date.'_posts_count'); + $Cache->delete_value('forum_'.$forumid.'_last_replied_topic_content'); + $Cache->delete_value('topic_'.$topicid.'_post_count'); + $Cache->delete_value('user_'.$userid.'_post_count'); + + if ($type == 'new') + { + // update the first post of topic + sql_query("UPDATE topics SET firstpost=$postid, lastpost=$postid WHERE id=".sqlesc($topicid)) or sqlerr(__FILE__, __LINE__); + } + else + { + sql_query("UPDATE topics SET lastpost=$postid WHERE id=".sqlesc($topicid)) or sqlerr(__FILE__, __LINE__); + } + sql_query("UPDATE users SET last_post=".sqlesc($date)." WHERE id=".sqlesc($CURUSER['id'])) or sqlerr(__FILE__, __LINE__); + } + + //------ All done, redirect user to the post + + $headerstr = "Location: " . get_protocol_prefix() . "$BASEURL/forums.php?action=viewtopic&topicid=$topicid"; + + if ($type == 'edit') + header($headerstr."&page=p".$postid."#pid".$postid); + else + header($headerstr."&page=last#pid$postid"); + die; +} + +//-------- Action: View topic + +if ($action == "viewtopic") +{ + $highlight = htmlspecialchars(trim($_GET["highlight"])); + + $topicid = 0+$_GET["topicid"]; + int_check($topicid,true); + $page = $_GET["page"]; + $authorid = 0+$_GET["authorid"]; + if ($authorid) + { + $where = "WHERE topicid=".sqlesc($topicid)." AND userid=".sqlesc($authorid); + $addparam = "action=viewtopic&topicid=".$topicid."&authorid=".$authorid; + } + else + { + $where = "WHERE topicid=".sqlesc($topicid); + $addparam = "action=viewtopic&topicid=".$topicid; + } + $userid = $CURUSER["id"]; + + //------ Get topic info + + $res = sql_query("SELECT * FROM topics WHERE id=".sqlesc($topicid)." LIMIT 1") or sqlerr(__FILE__, __LINE__); + $arr = mysql_fetch_assoc($res) or stderr($lang_forums['std_forum_error'], $lang_forums['std_topic_not_found']); + + $forumid = $arr['forumid']; + $locked = $arr['locked'] == "yes"; + $orgsubject = $arr['subject']; + $subject = htmlspecialchars($arr['subject']); + if ($highlight){ + $subject = highlight($highlight,$orgsubject); + } + $sticky = $arr['sticky'] == "yes"; + $hlcolor = $arr['hlcolor']; + $views = $arr['views']; + $forumid = $arr["forumid"]; + + $row = get_forum_row($forumid); + //------ Get forum name, moderators + $forumname = $row['name']; + $is_forummod = is_forum_moderator($forumid,'forum'); + + if (get_user_class() < $row["minclassread"]) + stderr($lang_forums['std_error'], $lang_forums['std_unpermitted_viewing_topic']); + if (((get_user_class() >= $row["minclasswrite"] && !$locked) || get_user_class() >= $postmanage_class || $is_forummod) && $CURUSER["forumpost"] == 'yes') + $maypost = true; + else $maypost = false; + + //------ Update hits column + sql_query("UPDATE topics SET views = views + 1 WHERE id=$topicid") or sqlerr(__FILE__, __LINE__); + + //------ Get post count + $postcount = get_row_count("posts",$where); + if (!$authorid) + $Cache->cache_value('topic_'.$topicid.'_post_count', $postcount, 3600); + + //------ Make page menu + + $pagerarr = array(); + + $perpage = $postsperpage; + + $pages = ceil($postcount / $perpage); + + if ($page[0] == "p") + { + $findpost = substr($page, 1); + $res = sql_query("SELECT id FROM posts $where ORDER BY added") or sqlerr(__FILE__, __LINE__); + $i = 0; + while ($arr = mysql_fetch_row($res)) + { + if ($arr[0] == $findpost) + break; + ++$i; + } + $page = floor($i / $perpage); + } + if ($page === "last"){ + $page = $pages-1; + } + elseif(isset($page)) + { + if($page < 0){ + $page = 0; + } + elseif ($page > $pages - 1){ + $page = $pages - 1; + } + } + else {if ($CURUSER["clicktopic"] == "firstpage") + $page = 0; + else $page = $pages-1; + } + + $offset = $page * $perpage; + $dotted = 0; + $dotspace = 3; + $dotend = $pages - $dotspace; + $curdotend = $page - $dotspace; + $curdotstart = $page + $dotspace; + for ($i = 0; $i < $pages; ++$i) + { + if (($i >= $dotspace && $i <= $curdotend) || ($i >= $curdotstart && $i < $dotend)) { + if (!$dotted) + $pagerarr[] = "..."; + $dotted = 1; + continue; + } + $dotted = 0; + if ($i != $page) + $pagerarr[] .= "".($i+1)."\n"; + else + $pagerarr[] .= "".($i+1)."\n"; + } + if ($page == 0) + $pager = "<<".$lang_forums['text_prev'].""; + else + $pager = "<<".$lang_forums['text_prev'].""; + $pager .= "      "; + if ($page == $pages-1) + $pager .= "".$lang_forums['text_next']." >>\n"; + else + $pager .= "".$lang_forums['text_next']." >>\n"; + + $pagerstr = join(" | ", $pagerarr); + $pagertop = "

".$pager."
".$pagerstr."

\n"; + $pagerbottom = "

".$pagerstr."
".$pager."

\n"; + //------ Get posts + + $res = sql_query("SELECT * FROM posts $where ORDER BY id LIMIT $offset,$perpage") or sqlerr(__FILE__, __LINE__); + + stdhead($lang_forums['head_view_topic']." \"".$orgsubject."\""); + begin_main_frame("",true); + + print("

".$SITENAME." ".$lang_forums['text_forums']."-->".$forumname."-->".$subject.($locked ? "  [".$lang_forums['text_locked']."]" : "")."

\n"); + end_main_frame(); + print($pagertop); + + //------ Print table + + begin_main_frame(); + print("\n"); + print("\n"); + print(""); + print("
  ".$lang_forums['there_is']."".$views."".$lang_forums['hits_on_this_topic']); + print(""); + if ($maypost) + { + print("\"Add  "); + } + print("
\n"); + begin_frame(); + + $pc = mysql_num_rows($res); + + $pn = 0; + $lpr = get_last_read_post_id($topicid); + + if ($Advertisement->enable_ad()) + $forumpostad=$Advertisement->get_ad('forumpost'); + while ($arr = mysql_fetch_assoc($res)) + { + if ($pn>=1) + { + if ($Advertisement->enable_ad()){ + if ($forumpostad[$pn-1]) + echo "
".$forumpostad[$pn-1]."
"; + } + } + ++$pn; + + $postid = $arr["id"]; + $posterid = $arr["userid"]; + + $added = gettime($arr["added"],true,false); + + //---- Get poster details + + $arr2 = get_user_row($posterid); + $uploaded = mksize($arr2["uploaded"]); + $downloaded = mksize($arr2["downloaded"]); + $ratio = get_ratio($arr2['id']); + + if (!$forumposts = $Cache->get_value('user_'.$posterid.'_post_count')){ + $forumposts = get_row_count("posts","WHERE userid=".$posterid); + $Cache->cache_value('user_'.$posterid.'_post_count', $forumposts, 3600); + } + + $signature = ($CURUSER["signatures"] == "yes" ? $arr2["signature"] : ""); + $avatar = ($CURUSER["avatars"] == "yes" ? htmlspecialchars($arr2["avatar"]) : ""); + + $uclass = get_user_class_image($arr2["class"]); + $by = get_username($posterid,false,true,true,false,false,true); + + if (!$avatar) + $avatar = "pic/default_avatar.png"; + + if ($pn == $pc) + { + print("\n"); + if ($postid > $lpr){ + if ($lpr == $CURUSER['last_catchup']) // There is no record of this topic + sql_query("INSERT INTO readposts(userid, topicid, lastpostread) VALUES (".$userid.", ".$topicid.", ".$postid.")") or sqlerr(__FILE__, __LINE__); + elseif ($lpr > $CURUSER['last_catchup']) //There is record of this topic + sql_query("UPDATE readposts SET lastpostread=$postid WHERE userid=$userid AND topicid=$topicid") or sqlerr(__FILE__, __LINE__); + $Cache->delete_value('user_'.$CURUSER['id'].'_last_read_post_list'); + } + } + + print("
"); + + print("
#".$postid."  ".$lang_forums['text_by']."".$by."  ".$lang_forums['text_at']."".$added); + if (is_valid_id($arr['editedby'])) + print(""); + print("  |  "); + if ($authorid) + print("".$lang_forums['text_view_all_posts'].""); + else + print("".$lang_forums['text_view_this_author_only'].""); + print("".$lang_forums['text_number']."".($pn+$offset)."".$lang_forums['text_lou']."  \"Top\"  
\n"); + + print("\n"); + + $body = "
".format_comment($arr["body"]); + + if ($highlight){ + $body = highlight($highlight,$body); + } + + if (is_valid_id($arr['editedby'])) + { + $lastedittime = gettime($arr['editdate'],true,false); + $body .= "

".$lang_forums['text_last_edited_by'].get_username($arr['editedby']).$lang_forums['text_last_edit_at'].$lastedittime."

\n"; + } + $body .= "
"; + if ($signature) + $body .= "


____________________
" . format_comment($signature,false,false,false,true,500,true,false, 1,200) . "

"; + + $stats = "
"."  ".$lang_forums['text_posts']."$forumposts
"."  ".$lang_forums['text_ul']."$uploaded
"."  ".$lang_forums['text_dl']."$downloaded
"."  ".$lang_forums['text_ratio']."$ratio"; + print("\n"); + $secs = 900; + $dt = sqlesc(date("Y-m-d H:i:s",(TIMENOW - $secs))); // calculate date. + print(""); + print("
" . + return_avatar_image($avatar). "


  \"".get_user_class_name($arr2["class"],false,false,true)."\"".$stats."

".$body."
".("'".$arr2['last_access']."'">$dt?"\"Online\"":"\"Offline\"" )."\"PM\"\"Report\""); + + if ($maypost) + print("\"Quote\""); + + if (get_user_class() >= $postmanage_class || $is_forummod) + print("\"Delete\""); + + if (($CURUSER["id"] == $posterid && !$locked) || get_user_class() >= $postmanage_class || $is_forummod) + print("\"Edit\""); + print("
"); + } + + //------ Mod options + + if (get_user_class() >= $postmanage_class || $is_forummod) + { + print("\n"); + print("\n"); + print("\n"); + print("\n"); + print("\n"); + print(""); + print(""); + print("\n"); + print("
\n"); + print("\n"); + print("\n"); + print("
\n"); + print("\n"); + print("\n"); + print("
\n"); + print("\n"); + print("\n"); + print("\n"); + print("
\n"." ".$lang_forums['text_move_thread_to']." 
\n"." ".$lang_forums['text_highlight_topic']." "); + print("\n"); + print("
\n"); + } + + end_frame(); + + end_main_frame(); + + print($pagerbottom); + if ($maypost){ + print("
". +"
".$lang_forums['text_quick_reply']."

". +"
". +"
"); + quickreply('compose', 'body',$lang_forums['submit_add_reply']); + print("
"); + print("

".$lang_forums['text_add_reply']."

\n"); + } + elseif ($locked) + print($lang_forums['text_topic_locked_new_denied']); + else print($lang_forums['text_unpermitted_posting_here']); + + print(key_shortcut($page,$pages-1)); + stdfoot(); + die; +} + +//-------- Action: Move topic + +if ($action == "movetopic") +{ + $forumid = 0+$_POST["forumid"]; + + $topicid = 0+$_GET["topicid"]; + $ismod = is_forum_moderator($topicid,'topic'); + if (!is_valid_id($forumid) || !is_valid_id($topicid) || (get_user_class() < $postmanage_class && !$ismod)) + permissiondenied(); + + // Make sure topic and forum is valid + + $res = @sql_query("SELECT minclasswrite FROM forums WHERE id=$forumid") or sqlerr(__FILE__, __LINE__); + + if (mysql_num_rows($res) != 1) + stderr($lang_forums['std_error'], $lang_forums['std_forum_not_found']); + + $arr = mysql_fetch_row($res); + + if (get_user_class() < $arr[0]) + permissiondenied(); + + $res = @sql_query("SELECT forumid FROM topics WHERE id=$topicid") or sqlerr(__FILE__, __LINE__); + if (mysql_num_rows($res) != 1) + stderr($lang_forums['std_error'], $lang_forums['std_topic_not_found']); + $arr = mysql_fetch_row($res); + $old_forumid=$arr[0]; + + // get posts count + $res = sql_query("SELECT COUNT(id) AS nb_posts FROM posts WHERE topicid=$topicid") or sqlerr(__FILE__, __LINE__); + if (mysql_num_rows($res) != 1) + stderr($lang_forums['std_error'], $lang_forums['std_cannot_get_posts_count']); + $arr = mysql_fetch_row($res); + $nb_posts = $arr[0]; + + // move topic + if ($old_forumid != $forumid) + { + @sql_query("UPDATE topics SET forumid=$forumid WHERE id=$topicid") or sqlerr(__FILE__, __LINE__); + // update counts + @sql_query("UPDATE forums SET topiccount=topiccount-1, postcount=postcount-$nb_posts WHERE id=$old_forumid") or sqlerr(__FILE__, __LINE__); + $Cache->delete_value('forum_'.$old_forumid.'_post_'.$today_date.'_count'); + $Cache->delete_value('forum_'.$old_forumid.'_last_replied_topic_content'); + @sql_query("UPDATE forums SET topiccount=topiccount+1, postcount=postcount+$nb_posts WHERE id=$forumid") or sqlerr(__FILE__, __LINE__); + $Cache->delete_value('forum_'.$forumid.'_post_'.$today_date.'_count'); + $Cache->delete_value('forum_'.$forumid.'_last_replied_topic_content'); + } + + // Redirect to forum page + + header("Location: " . get_protocol_prefix() . "$BASEURL/forums.php?action=viewforum&forumid=$forumid"); + + die; +} + +//-------- Action: Delete topic + +if ($action == "deletetopic") +{ + $topicid = 0+$_GET["topicid"]; + $res1 = sql_query("SELECT forumid, userid FROM topics WHERE id=".sqlesc($topicid)." LIMIT 1") or sqlerr(__FILE__, __LINE__); + $row1 = mysql_fetch_array($res1); + if (!$row1){ + die; + } + else { + $forumid = $row1['forumid']; + $userid = $row1['userid']; + } + $ismod = is_forum_moderator($topicid,'topic'); + if (!is_valid_id($topicid) || (get_user_class() < $postmanage_class && !$ismod)) + permissiondenied(); + + $sure = 0+$_GET["sure"]; + if (!$sure) + { + stderr($lang_forums['std_delete_topic'], $lang_forums['std_delete_topic_note'] . + "".$lang_forums['std_here_if_sure'],false); + } + + $postcount = get_row_count("posts","WHERE topicid=".sqlesc($topicid)); + + sql_query("DELETE FROM topics WHERE id=$topicid") or sqlerr(__FILE__, __LINE__); + sql_query("DELETE FROM posts WHERE topicid=$topicid") or sqlerr(__FILE__, __LINE__); + sql_query("DELETE FROM readposts WHERE topicid=$topicid") or sqlerr(__FILE__, __LINE__); + @sql_query("UPDATE forums SET topiccount=topiccount-1, postcount=postcount-$postcount WHERE id=".sqlesc($forumid)) or sqlerr(__FILE__, __LINE__); + $Cache->delete_value('forum_'.$forumid.'_post_'.$today_date.'_count'); + $forum_last_replied_topic_row = $Cache->get_value('forum_'.$forumid.'_last_replied_topic_content'); + if ($forum_last_replied_topic_row && $forum_last_replied_topic_row['id'] == $topicid) + $Cache->delete_value('forum_'.$forumid.'_last_replied_topic_content'); + + //===remove karma + KPS("-",$starttopic_bonus,$userid); + //===end + + header("Location: " . get_protocol_prefix() . "$BASEURL/forums.php?action=viewforum&forumid=$forumid"); + die; +} + +//-------- Action: Delete post + +if ($action == "deletepost") +{ + $postid = 0+$_GET["postid"]; + $sure = 0+$_GET["sure"]; + + $ismod = is_forum_moderator($postid, 'post'); + if ((get_user_class() < $postmanage_class && !$ismod) || !is_valid_id($postid)) + permissiondenied(); + + //------- Get topic id + $res = sql_query("SELECT topicid, userid FROM posts WHERE id=$postid") or sqlerr(__FILE__, __LINE__); + $arr = mysql_fetch_array($res) or stderr($lang_forums['std_error'], $lang_forums['std_post_not_found']); + $topicid = $arr['topicid']; + $userid = $arr['userid']; + + //------- Get the id of the last post before the one we're deleting + $res = sql_query("SELECT id FROM posts WHERE topicid=$topicid AND id < $postid ORDER BY id DESC LIMIT 1") or sqlerr(__FILE__, __LINE__); + if (mysql_num_rows($res) == 0) // This is the first post of a topic + stderr($lang_forums['std_error'], $lang_forums['std_cannot_delete_post'] . + "".$lang_forums['std_delete_topic_instead'],false); + else + { + $arr = mysql_fetch_row($res); + $redirtopost = "&page=p$arr[0]#pid$arr[0]"; + } + + //------- Make sure we know what we do :-) + if (!$sure) + { + stderr($lang_forums['std_delete_post'], $lang_forums['std_delete_post_note'] . + "".$lang_forums['std_here_if_sure'],false); + } + + //------- Delete post + sql_query("DELETE FROM posts WHERE id=$postid") or sqlerr(__FILE__, __LINE__); + $Cache->delete_value('user_'.$userid.'_post_count'); + $Cache->delete_value('topic_'.$topicid.'_post_count'); + // update forum + $forumid = get_single_value("topics","forumid","WHERE id=".sqlesc($topicid)); + if (!$forumid) + die(); + else{ + sql_query("UPDATE forums SET postcount=postcount-1 WHERE id=".sqlesc($forumid)); + } + $forum_last_replied_topic_row = $Cache->get_value('forum_'.$forumid.'_last_replied_topic_content'); + if ($forum_last_replied_topic_row && $forum_last_replied_topic_row['lastpost'] == $postid) + $Cache->delete_value('forum_'.$forumid.'_last_replied_topic_content'); + //------- Update topic + update_topic_last_post($topicid); + + //===remove karma + KPS("-",$makepost_bonus,$userid); + + header("Location: " . get_protocol_prefix() . "$BASEURL/forums.php?action=viewtopic&topicid=$topicid$redirtopost"); + die; +} + +//-------- Action: Set locked on/off + +if ($action == "setlocked") +{ + $topicid = 0 + $_POST["topicid"]; + $ismod = is_forum_moderator($topicid,'topic'); + if (!$topicid || (get_user_class() < $postmanage_class && !$ismod)) + permissiondenied(); + + $locked = sqlesc($_POST["locked"]); + sql_query("UPDATE topics SET locked=$locked WHERE id=$topicid") or sqlerr(__FILE__, __LINE__); + + header("Location: $_POST[returnto]"); + die; +} + +if ($action == 'hltopic') +{ + $topicid = 0 + $_GET["topicid"]; + $ismod = is_forum_moderator($topicid,'topic'); + if (!$topicid || (get_user_class() < $postmanage_class && !$ismod)) + permissiondenied(); + $color = $_POST["color"]; + if ($color==0 || get_hl_color($color)) + sql_query("UPDATE topics SET hlcolor=".sqlesc($color)." WHERE id=".sqlesc($topicid)) or sqlerr(__FILE__, __LINE__); + + $forumid = get_single_value("topics","forumid","WHERE id=".sqlesc($topicid)); + $forum_last_replied_topic_row = $Cache->get_value('forum_'.$forumid.'_last_replied_topic_content'); + if ($forum_last_replied_topic_row && $forum_last_replied_topic_row['id'] == $topicid) + $Cache->delete_value('forum_'.$forumid.'_last_replied_topic_content'); + header("Location: $_POST[returnto]"); + die; +} + +//-------- Action: Set sticky on/off + +if ($action == "setsticky") +{ + $topicid = 0 + $_POST["topicid"]; + $ismod = is_forum_moderator($topicid,'topic'); + if (!topicid || (get_user_class() < $postmanage_class && !$ismod)) + permissiondenied(); + + $sticky = sqlesc($_POST["sticky"]); + sql_query("UPDATE topics SET sticky=$sticky WHERE id=$topicid") or sqlerr(__FILE__, __LINE__); + + header("Location: $_POST[returnto]"); + die; +} + +//-------- Action: View forum + +if ($action == "viewforum") +{ + $forumid = 0+$_GET["forumid"]; + int_check($forumid,true); + $userid = 0+$CURUSER["id"]; + //------ Get forum name, moderators + $row = get_forum_row($forumid); + if (!$row){ + write_log("User " . $CURUSER["username"] . "," . $CURUSER["ip"] . " is trying to visit forum that doesn't exist", 'mod'); + stderr($lang_forums['std_forum_error'],$lang_forums['std_forum_not_found']); + } + if (get_user_class() < $row["minclassread"]) + permissiondenied(); + + $forumname = $row['name']; + $forummoderators = get_forum_moderators($forumid,false); + $search = mysql_real_escape_string(trim($_GET["search"])); + if ($search){ + $wherea = " AND subject LIKE '%$search%'"; + $addparam .= "&search=".rawurlencode($search); + } + else{ + $wherea = ""; + $addparam = ""; + } + $num = get_row_count("topics","WHERE forumid=".sqlesc($forumid).$wherea); + + list($pagertop, $pagerbottom, $limit) = pager($topicsperpage, $num, "?"."action=viewforum&forumid=".$forumid.$addparam."&"); + if ($_GET["sort"]){ + switch ($_GET["sort"]){ + case 'firstpostasc': + { + $orderby = "firstpost ASC"; + break; + } + case 'firstpostdesc': + { + $orderby = "firstpost DESC"; + break; + } + case 'lastpostasc': + { + $orderby = "lastpost ASC"; + break; + } + case 'lastpostdesc': + { + $orderby = "lastpost DESC"; + break; + } + default: + { + $orderby = "lastpost DESC"; + } + } + } + else + { + $orderby = "lastpost DESC"; + } + //------ Get topics data + $topicsres = sql_query("SELECT * FROM topics WHERE forumid=".sqlesc($forumid).$wherea." ORDER BY sticky DESC,".$orderby." ".$limit) or sqlerr(__FILE__, __LINE__); + $numtopics = mysql_num_rows($topicsres); + stdhead($lang_forums['head_forum']." ".$forumname); + begin_main_frame("",true); + print("

".$SITENAME." ".$lang_forums['text_forums'] ."-->".$forumname."

\n"); + end_main_frame(); + print("
"); + $maypost = get_user_class() >= $row["minclasswrite"] && get_user_class() >= $row["minclasscreate"] && $CURUSER["forumpost"] == 'yes'; + + if (!$maypost) + print("

".$lang_forums['text_unpermitted_starting_new_topics']."

\n"); + + print("\n"); + print(""); + print("
"); + print($forummoderators ? "  \"Moderator\" ".$forummoderators : ""); + print(""); + if ($maypost) + print("\"New  "); + print("
\n"); + if ($numtopics > 0) + { + print(""); + + print("\n"); + + print("\n"); + $counter = 0; + + while ($topicarr = mysql_fetch_assoc($topicsres)) + { + $topicid = $topicarr["id"]; + + $topic_userid = $topicarr["userid"]; + + $topic_views = $topicarr["views"]; + + $views = number_format($topic_views); + + $locked = $topicarr["locked"] == "yes"; + + $sticky = $topicarr["sticky"] == "yes"; + + $hlcolor = $topicarr["hlcolor"]; + + //---- Get reply count + if (!$posts = $Cache->get_value('topic_'.$topicid.'_post_count')){ + $posts = get_row_count("posts","WHERE topicid=".sqlesc($topicid)); + $Cache->cache_value('topic_'.$topicid.'_post_count', $posts, 3600); + } + + $replies = max(0, $posts - 1); + + $tpages = floor($posts / $postsperpage); + + if ($tpages * $postsperpage != $posts) + ++$tpages; + + if ($tpages > 1) + { + $topicpages = " [\"multi-page\" "; + $dotted = 0; + $dotspace = 4; + $dotend = $tpages - $dotspace; + for ($i = 1; $i <= $tpages; ++$i){ + if ($i > $dotspace && $i <= $dotend) { + if (!$dotted) + $topicpages .= " ... "; + $dotted = 1; + continue; + } + $topicpages .= " $i"; + } + + $topicpages .= " ]"; + } + else + $topicpages = ""; + + //---- Get userID and date of last post + + $arr = get_post_row($topicarr['lastpost']); + $lppostid = 0 + $arr["id"]; + $lpuserid = 0 + $arr["userid"]; + $lpusername = get_username($lpuserid); + $lpadded = gettime($arr["added"],true,false); + $onmouseover = ""; + if ($enabletooltip_tweak == 'yes' && $CURUSER['showlastpost'] != 'no'){ + if ($CURUSER['timetype'] != 'timealive') + $lastposttime = $lang_forums['text_at_time'].$arr["added"]; + else + $lastposttime = $lang_forums['text_blank'].gettime($arr["added"],true,false,true); + $lptext = format_comment(mb_substr($arr['body'],0,100,"UTF-8") . (mb_strlen($arr['body'],"UTF-8") > 100 ? " ......" : "" ),true,false,false,true,600,false,false); + $lastpost_tooltip[$counter]['id'] = "lastpost_" . $counter; + $lastpost_tooltip[$counter]['content'] = $lang_forums['text_last_posted_by'].$lpusername.$lastposttime."
".$lptext; + $onmouseover = "onmouseover=\"domTT_activate(this, event, 'content', document.getElementById('" . $lastpost_tooltip[$counter]['id'] . "'), 'trail', false,'lifetime', 5000,'styleClass','niceTitle','fadeMax', 87,'maxWidth', 400);\""; + } + + $arr = get_post_row($topicarr['firstpost']); + $fpuserid = 0 + $arr["userid"]; + $fpauthor = get_username($arr["userid"]); + + $subject = ($sticky ? "\"Sticky\"  " : "") . "" .highlight_topic(highlight($search,htmlspecialchars($topicarr["subject"])), $hlcolor) . "".$topicpages; + $lastpostread = get_last_read_post_id($topicid); + + if ($lastpostread >= $lppostid) + $img = get_topic_image($locked ? "locked" : "read"); + else{ + $img = get_topic_image($locked ? "lockednew" : "unread"); + if ($lastpostread != $CURUSER['last_catchup']) + $subject .= "  ".$lang_forums['text_new'].""; + } + + + $topictime = substr($arr['added'],0,10); + if (strtotime($arr['added']) + 86400 > TIMENOW) + $topictime = "".$topictime.""; + else + $topictime = "".$topictime.""; + + print("\n" . + "\n"); + + print("\n"); + $counter++; + + } // while + + //print("
".$lang_forums['col_topic']."".$lang_forums['col_author']."".$lang_forums['col_replies']."/".$lang_forums['col_views']."".$lang_forums['col_last_post']."
" . + "
".$img . + "\n" . + $subject."
".get_username($fpuserid)."
".$topictime."
".$replies." / ".$views."".$lpadded."
".$lpusername."
\n"); + //print(""); + print(""); +?> + +
\n"); + print("
".$lang_forums['text_fast_search']." 
"); + print("
+ + + +
"); + print($pagerbottom); + if ($enabletooltip_tweak == 'yes' && $CURUSER['showlastpost'] != 'no') + create_tooltip_container($lastpost_tooltip, 400); + } // if + else + print("

".$lang_forums['text_no_topics_found']."

"); + stdfoot(); + die; +} + +//-------- Action: View unread posts + +if ($action == "viewunread") +{ + $userid = $CURUSER['id']; + + $beforepostid = 0+$_GET['beforepostid']; + $maxresults = 25; + $res = sql_query("SELECT id, forumid, subject, lastpost, hlcolor FROM topics WHERE lastpost > ".$CURUSER['last_catchup'].($beforepostid ? " AND lastpost < ".sqlesc($beforepostid) : "")." ORDER BY lastpost DESC LIMIT 100") or sqlerr(__FILE__, __LINE__); + + stdhead($lang_forums['head_view_unread']); + print("

".$SITENAME." ".$lang_forums['text_forums']."-->".$lang_forums['text_topics_with_unread_posts']."

"); + + $n = 0; + $uc = get_user_class(); + + while ($arr = mysql_fetch_assoc($res)) + { + $topiclastpost = $arr['lastpost']; + $topicid = $arr['id']; + + //---- Check if post is read + $lastpostread = get_last_read_post_id($topicid); + + if ($lastpostread >= $topiclastpost) + continue; + + $forumid = $arr['forumid']; + //---- Check access & get forum name + $a = get_forum_row($forumid); + if ($uc < $a['minclassread']) + continue; + ++$n; + if ($n > $maxresults) + break; + + $forumname = $a['name']; + if ($n == 1) + { + print("\n"); + print("\n"); + } + print("\n"); + } + if ($n > 0) + { + print("
".$lang_forums['col_topic']."".$lang_forums['col_forum']."
" . + get_topic_image("unread")."" . + " 0 && $lastpostread != $CURUSER['last_catchup'] ? "&page=p".$lastpostread."#pid".$lastpostread : ""))."\">" . highlight_topic(htmlspecialchars($arr["subject"]), $arr["hlcolor"]). + "
".$forumname."
\n"); + print(""); + if ($n > $maxresults){ + print(""); + } + print("
"); + } + else + print("

".$lang_forums['text_nothing_found']."

"); + stdfoot(); + die; +} + +if ($action == "search") +{ + stdhead($lang_forums['head_forum_search']); + unset($error); + $error = true; + $found = ""; + $keywords = htmlspecialchars(trim($_GET["keywords"])); + if ($keywords != "") + { + $extraSql = " LIKE '%".mysql_real_escape_string($keywords)."%'"; + + $res = sql_query("SELECT COUNT(posts.id) FROM posts LEFT JOIN topics ON posts.topicid = topics.id LEFT JOIN forums ON topics.forumid = forums.id WHERE forums.minclassread <= ".sqlesc(get_user_class())." AND ((topics.subject $extraSql AND posts.id=topics.firstpost) OR posts.body $extraSql)") or sqlerr(__FILE__, __LINE__); + $arr = mysql_fetch_row($res); + $hits = 0 + $arr[0]; + if ($hits){ + $error = false; + $found = "[ ".$lang_forums['text_found'].$hits.$lang_forums['text_num_posts']." ]"; + } + } +?> + + +\n"); + print("".$lang_forums['col_post']."".$lang_forums['col_topic']."".$lang_forums['col_forum']."".$lang_forums['col_posted_by']."\n"); + + while ($post = mysql_fetch_array($res)) + { + print("".$post[id]."" . highlight_topic(highlight($keywords,htmlspecialchars($post['subject'])), $post['hlcolor']) . "" . htmlspecialchars($post["forumname"]) . "" . gettime($post['added'],true,false) . " | ". get_username($post['userid']) ."\n"); + } + + print("\n"); + print($pagerbottom); + } +stdfoot(); +die; +} + +if ($_GET["catchup"] == 1){ + catch_up(); +} + +//-------- Handle unknown action +if ($action != "") + stderr($lang_forums['std_forum_error'], $lang_forums['std_unknown_action']); + +//-------- Default action: View forums + +//-------- Get forums +if ($CURUSER) + $USERUPDATESET[] = "forum_access = ".sqlesc(date("Y-m-d H:i:s")); + +stdhead($lang_forums['head_forums']); +begin_main_frame(); +print("

".$SITENAME." ".$lang_forums['text_forums']."

"); +print("

".$lang_forums['text_search']." | ".$lang_forums['text_view_unread']." | ".$lang_forums['text_catch_up']." ".(get_user_class() >= $forummanage_class ? "| ".$lang_forums['text_forum_manager']."":"")."

"); +print("\n"); + +if (!$overforums = $Cache->get_value('overforums_list')){ + $overforums = array(); + $res = sql_query("SELECT * FROM overforums ORDER BY sort ASC") or sqlerr(__FILE__, __LINE__); + while ($row = mysql_fetch_array($res)) + $overforums[] = $row; + $Cache->cache_value('overforums_list', $overforums, 86400); +} +$count=0; +if ($Advertisement->enable_ad()) + $interoverforumsad=$Advertisement->get_ad('interoverforums'); + +foreach ($overforums as $a) +{ + if (get_user_class() < $a["minclassview"]) + continue; + if ($count>=1) + if ($Advertisement->enable_ad()){ + if ($interoverforumsad[$count-1]) + echo ""; + } + $forid = $a["id"]; + $overforumname = $a["name"]; + + print("" . + "" . + "\n"); + + $forums = get_forum_row(); + foreach ($forums as $forums_arr) + { + if ($forums_arr['forid'] != $forid) + continue; + if (get_user_class() < $forums_arr["minclassread"]) + continue; + + $forumid = $forums_arr["id"]; + $forumname = htmlspecialchars($forums_arr["name"]); + $forumdescription = htmlspecialchars($forums_arr["description"]); + + $forummoderators = get_forum_moderators($forums_arr['id'],false); + if (!$forummoderators) + $forummoderators = "".$lang_forums['text_apply_now'].""; + + $topiccount = number_format($forums_arr["topiccount"]); + $postcount = number_format($forums_arr["postcount"]); + + // Find last post ID + //Returns the ID of the last post of a forum + if (!$arr = $Cache->get_value('forum_'.$forumid.'_last_replied_topic_content')){ + $res = sql_query("SELECT * FROM topics WHERE forumid=".sqlesc($forumid)." ORDER BY lastpost DESC LIMIT 1") or sqlerr(__FILE__, __LINE__); + $arr = mysql_fetch_array($res); + $Cache->cache_value('forum_'.$forumid.'_last_replied_topic_content', $arr, 900); + } + + if ($arr) + { + $lastpostid = $arr['lastpost']; + // Get last post info + $post_arr = get_post_row($lastpostid); + $lastposterid = $post_arr["userid"]; + $lastpostdate = gettime($post_arr["added"],true,false); + $lasttopicid = $arr['id']; + $hlcolor = $arr['hlcolor']; + $lasttopicdissubject = $lasttopicsubject = $arr['subject']; + $max_length_of_topic_subject = 35; + $count_dispname = mb_strlen($lasttopicdissubject,"UTF-8"); + if ($count_dispname > $max_length_of_topic_subject) + $lasttopicdissubject = mb_substr($lasttopicdissubject, 0, $max_length_of_topic_subject-2,"UTF-8") . ".."; + $lasttopic = highlight_topic(htmlspecialchars($lasttopicdissubject), $hlcolor); + + $lastpost = "".$lasttopic."
". $lastpostdate." | ".get_username($lastposterid); + + $lastreadpost = get_last_read_post_id($lasttopicid); + + if ($lastreadpost >= $lastpostid) + $img = get_topic_image("read"); + else + $img = get_topic_image("unread"); + } + else + { + $lastpost = "N/A"; + $img = get_topic_image("read"); + } + $posttodaycount = $Cache->get_value('forum_'.$forumid.'_post_'.$today_date.'_count'); + if ($posttodaycount == ""){ + $res3 = sql_query("SELECT COUNT(posts.id) FROM posts LEFT JOIN topics ON posts.topicid = topics.id WHERE posts.added > ".sqlesc(date("Y-m-d"))." AND topics.forumid=".sqlesc($forumid)) or sqlerr(__FILE__, __LINE__); + $row3 = mysql_fetch_row($res3); + $posttodaycount = $row3[0]; + $Cache->cache_value('forum_'.$forumid.'_post_'.$today_date.'_count', $posttodaycount, 1800); + } + if ($posttodaycount > 0) + $posttoday = "  (".$lang_forums['text_today']."".$posttodaycount.")"; + else $posttoday = ""; + print("" . + "\n"); + } + $count++; +} +// End Table Mod +print("
".$interoverforumsad[$count-1]."
".htmlspecialchars($overforumname)."".$lang_forums['col_topics']."".$lang_forums['col_posts']."".$lang_forums['col_last_post']."".$lang_forums['col_moderator']."
".$img."".$forumname."" .$posttoday. + "
".$forumdescription."
".$topiccount."".$postcount."".$lastpost."".$forummoderators."
"); +if ($showforumstats_main == "yes") + forum_stats(); +end_main_frame(); +stdfoot(); +?> diff --git a/freeleech.php b/freeleech.php new file mode 100644 index 00000000..f07bfe12 --- /dev/null +++ b/freeleech.php @@ -0,0 +1,49 @@ +delete_value('global_promotion_state'); + stderr('Success','All torrents have been set free..'); +} +elseif ($action == 'setall2up') +{ + sql_query("UPDATE torrents_state SET global_sp_state = 3"); + $Cache->delete_value('global_promotion_state'); + stderr('Success','All torrents have been set 2x up..'); +} +elseif ($action == 'setall2up_free') +{ + sql_query("UPDATE torrents_state SET global_sp_state = 4"); + $Cache->delete_value('global_promotion_state'); + stderr('Success','All torrents have been set 2x up and free..'); +} +elseif ($action == 'setallhalf_down') +{ + sql_query("UPDATE torrents_state SET global_sp_state = 5"); + $Cache->delete_value('global_promotion_state'); + stderr('Success','All torrents have been set half down..'); +} +elseif ($action == 'setall2up_half_down') +{ + sql_query("UPDATE torrents_state SET global_sp_state = 6"); + $Cache->delete_value('global_promotion_state'); + stderr('Success','All torrents have been set half down..'); +} +elseif ($action == 'setallnormal') +{ + sql_query("UPDATE torrents_state SET global_sp_state = 1"); + $Cache->delete_value('global_promotion_state'); + stderr('Success','All torrents have been set normal..'); +} +elseif ($action == 'main') +{ + stderr('Select action','Click here to set all torrents free..
Click here to set all torrents 2x up..
Click here to set all torrents 2x up and free..
Click here to set all torrents half down..
Click here to set all torrents 2x up and half down..
Click here to set all torrents normal..', false); +} +?> diff --git a/friends.php b/friends.php new file mode 100644 index 00000000..85188774 --- /dev/null +++ b/friends.php @@ -0,0 +1,356 @@ +".$lang_friends['std_here_if_sure'],false); + + if ($type == 'friend') + { + sql_query("DELETE FROM friends WHERE userid=$userid AND friendid=$targetid") or sqlerr(__FILE__, __LINE__); + if (mysql_affected_rows() == 0) + stderr($lang_friends['std_error'], $lang_friends['std_no_friend_found']."$targetid"); + $frag = "friends"; + } + elseif ($type == 'block') + { + sql_query("DELETE FROM blocks WHERE userid=$userid AND blockid=$targetid") or sqlerr(__FILE__, __LINE__); + if (mysql_affected_rows() == 0) + stderr($lang_friends['std_error'], $lang_friends['std_no_block_found']."$targetid"); + $frag = "blocks"; + } + else + stderr($lang_friends['std_error'], $lang_friends['std_unknown_type']."$type"); + + + purge_neighbors_cache(); + + header("Location: " . get_protocol_prefix() . "$BASEURL/friends.php?id=$userid#$frag"); + die; +} + +// main body ----------------------------------------------------------------- + +stdhead($lang_friends['head_personal_lists_for']. $user['username']); + +print("

". +"

" . $lang_friends['text_personallist'] . " ".get_username($user[id])."

\n"); + +//Start: Friends +print("
"); + +print("
"); +print("

" . $lang_friends['text_friendlist'] . "

\n"); + +print("\n"); + $i++; +} +if ($i % 2 == 1) +print("
"); + +$i = 0; + +unset($friend_id_arr); +$res = sql_query("SELECT f.friendid as id, u.last_access, u.class, u.avatar, u.title FROM friends AS f LEFT JOIN users as u ON f.friendid = u.id WHERE userid=$userid ORDER BY id") or sqlerr(__FILE__, __LINE__); +if(mysql_num_rows($res) == 0) +$friends = $lang_friends['text_friends_empty']; +else +while ($friend = mysql_fetch_array($res)) +{ + $friend_id_arr[] = $friend["id"]; + $title = $friend["title"]; + if (!$title) + $title = get_user_class_name($friend["class"],false,true,true); + $body1 = get_username($friend["id"]) . + " ($title)

".$lang_friends['text_last_seen_on']. gettime($friend['last_access'],true, false); + $body2 = "".$lang_friends['text_remove_from_friends']."". + "

".$lang_friends['text_send_pm'].""; + + $avatar = ($CURUSER["avatars"] == "yes" ? htmlspecialchars($friend["avatar"]) : ""); + if (!$avatar) + $avatar = "pic/default_avatar.png"; + if ($i % 2 == 0) + print("
"); + else + print(""); + print(""); + print(""); + print("
" . + ($avatar ? "
" : ""). "
\n"); + print(""); + print("\n"); + print("\n"); + print("
$body1$body2
"); + print("
\n"); + if ($i % 2 == 1) + print("
\n"); + else + print("
 
\n"); +print($friends); +print("

\n"); +//End: Friends + +//Start: Neighbors +/* +print("
"); + +print("
"); +print("

".$lang_friends['text_neighbors']."

\n"); + +print("\n"); + $i++; + $counter++; + } + } + $total_user--; + if($counter == 20 || $total_user<=0) break; //only the largest 20 + } + } + if ($i % 2 == 1) + print("
"); + +$i = 0; +$cachefile = "cache/" . get_langfolder_cookie() . "/neighbors/" . $CURUSER['id'] . ".html"; +$cachetime = 24 * 60 * 60; // 1 day +if (file_exists($cachefile) && (time() - $cachetime< filemtime($cachefile))) +{ + include($cachefile); +} +else +{ + ob_start(); // start the output buffer + + $user_snatched = sql_query("SELECT * FROM snatched WHERE userid = $CURUSER[id]") or sqlerr(__FILE__, __LINE__); + if(mysql_num_rows($user_snatched) == 0) + $neighbors_info = $lang_friends['text_neighbors_empty']; + else + { + while ($user_snatched_arr = mysql_fetch_array($user_snatched)) + { + $torrent_2_user_value = get_torrent_2_user_value($user_snatched_arr); + + $user_snatched_res_target = sql_query("SELECT * FROM snatched WHERE torrentid = " . $user_snatched_arr['torrentid'] . " AND userid != " . $user_snatched_arr['userid']) or sqlerr(__FILE__, __LINE__); // + if(mysql_num_rows($user_snatched_res_target)>0) // have other peole snatched this torrent + { + while($user_snatched_arr_target = mysql_fetch_array($user_snatched_res_target)) // find target user's current analyzing torrent's snatch info + { + $torrent_2_user_value_target = get_torrent_2_user_value($user_snatched_arr_target); //get this torrent to target user's value + + if(!isset($other_user_2_curuser_value[$user_snatched_arr_target['userid']])) // first, set to 0 + $other_user_2_curuser_value[$user_snatched_arr_target['userid']] = 0.0; + + $other_user_2_curuser_value[$user_snatched_arr_target['userid']] += $torrent_2_user_value_target * $torrent_2_user_value; + } + } + } + + arsort($other_user_2_curuser_value,SORT_NUMERIC); + $counter = 0; + $total_user = count($other_user_2_curuser_value); + while(1) + { + list($other_user_2_curuser_value_key, $other_user_2_curuser_value_val) = each($other_user_2_curuser_value); + //print(" userid: " . $other_user_2_curuser_value_key . " value: " . $other_user_2_curuser_value_val . "
"); + + + $neighbors_res = sql_query("SELECT * FROM users WHERE id = " . intval($other_user_2_curuser_value_key)) or sqlerr(__FILE__, __LINE__); + if(mysql_num_rows($neighbors_res) == 1) + { + $neighbors_arr = mysql_fetch_array($neighbors_res) or sqlerr(__FILE__, __LINE__); + if($neighbors_arr['enabled'] == 'yes') + { + $title = $neighbors_arr["title"]; + if (!$title) + $title = get_user_class_name($neighbors_arr["class"],false,true,true); + $body1 = get_username($neighbors_arr["id"]) . + " ($title)

".$lang_friends['text_last_seen_on']. gettime($neighbors_arr['last_access'], true, false); + + + $body2 = ((empty($friend_id_arr)||(!in_array($neighbors_arr["id"],$friend_id_arr))) ? "".$lang_friends['text_add_to_friends']."" : "".$lang_friends['text_remove_from_friends']."") . + "

".$lang_friends['text_send_pm'].""; + $avatar = ($CURUSER["avatars"] == "yes" ? htmlspecialchars($neighbors_arr["avatar"]) : ""); + if (!$avatar) + $avatar = "pic/default_avatar.png"; + if ($i % 2 == 0) + print("
"); + else + print(""); + print(""); + print(""); + print("
" . + ($avatar ? "
" : ""). "
\n"); + print(""); + print("\n"); + print("\n"); + print("
$body1$body2
"); + print("
\n"); + if ($i % 2 == 1) + print("
\n"); + else + print("
 
\n"); + print($neighbors_info); + print("

\n"); + + // CACHE END ////////////////////////////////////////////////// + + // open the cache file for writing + $fp = fopen($cachefile, 'w'); + // save the contents of output buffer to the file + fwrite($fp, ob_get_contents()); + // close the file + fclose($fp); + // Send the output to the browser + ob_end_flush(); + + ///////////////////////////////////////////////////////// +} + + +if(mysql_num_rows($friendadd) == 0) +$friendsno = $lang_friends['text_friends_empty']; +else +while ($friend = mysql_fetch_array($friendadd)) +{ +$title = $friend["title"]; +if (!$title) +$title = get_user_class_name($friend["class"],false,true,true); +$body1 = get_username($friend["fuid"]) . +" ($title)

".$lang_friends['text_last_seen_on']. $friend['last_access'] . +"
(" . get_elapsed_time(strtotime($friend[last_access])) . $lang_friends['text_ago'].")"; +$body2 = "".$lang_friends['text_add_to_friends']."". +"

".$lang_friends['text_send_pm'].""; +$avatar = ($CURUSER["avatars"] == "yes" ? htmlspecialchars($friend["avatar"]) : ""); +if (!$avatar) +$avatar = "pic/default_avatar.png"; +if ($i % 2 == 0) +print("
"); +else +print(""); +print(""); +print(""); +print("
" . +($avatar ? "
" : ""). "
\n"); +print(""); +print("\n"); +print("\n"); +print("
$body1$body2
"); +print("
\n"); +if ($i % 2 == 1) +print("
\n"); +else +print("\n"); +$i++; +} +if ($i % 2 == 1) +print(" \n"); +print($neighbors_info); +print("
\n"); +*/ +//End: Neighbors + + + + +$res = sql_query("SELECT blockid as id FROM blocks WHERE userid=$userid ORDER BY id") or sqlerr(__FILE__, __LINE__); +if(mysql_num_rows($res) == 0) +$blocks = $lang_friends['text_blocklist_empty']; +else +{ + $i = 0; + $blocks = ""; + while ($block = mysql_fetch_array($res)) + { + if ($i % 6 == 0) + $blocks .= ""; + $blocks .= ""; + if ($i % 6 == 5) + $blocks .= ""; + $i++; + } + $blocks .= "
[D] " . get_username($block["id"]) . "
\n"; +} +print("

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

".$lang_friends['text_blocked_users']."

"); +print($blocks); +print("
\n"); + +print("\n"); +if (get_user_class() >= $viewuserlist_class) + print("

".$lang_friends['text_find_user']."

"); +stdfoot(); +?> diff --git a/fun.php b/fun.php new file mode 100644 index 00000000..4ce194c5 --- /dev/null +++ b/fun.php @@ -0,0 +1,285 @@ +".$lang_fun['text_here_if_sure'],false); + sql_query("DELETE FROM fun WHERE id=".sqlesc($id)) or sqlerr(__FILE__, __LINE__); + $Cache->delete_value('current_fun_content'); + $Cache->delete_value('current_fun', true); + $Cache->delete_value('current_fun_vote_count'); + $Cache->delete_value('current_fun_vote_funny_count'); + if ($returnto != "") + header("Location: $returnto"); +} +if ($action == 'new') +{ + $sql = "SELECT *, IF(ADDTIME(added, '1 0:0:0') < NOW(),true,false) AS neednew FROM fun WHERE status != 'banned' AND status != 'dull' ORDER BY added DESC LIMIT 1"; + $result = sql_query($sql) or sqlerr(__FILE__,__LINE__); + $row = mysql_fetch_array($result); + if ($row && !$row['neednew']) + stderr($lang_fun['std_error'],$lang_fun['std_the_newest_fun_item'].htmlspecialchars($row['title']).$lang_fun['std_posted_on'].$row['added'].$lang_fun['std_need_to_wait']); + else { + stdhead($lang_fun['head_new_fun']); + begin_main_frame(); + $title = $lang_fun['text_submit_new_fun']; + print("
\n"); + begin_compose($title, 'new'); + end_compose(); + end_main_frame(); + } + stdfoot(); +} +if ($action == 'add') +{ + $sql = "SELECT *, IF(ADDTIME(added, '1 0:0:0') < NOW(),true,false) AS neednew FROM fun WHERE status != 'banned' AND status != 'dull' ORDER BY added DESC LIMIT 1"; + $result = sql_query($sql) or sqlerr(__FILE__,__LINE__); + $row = mysql_fetch_array($result); + if ($row && !$row['neednew']) + stderr($lang_fun['std_error'],$lang_fun['std_the_newest_fun_item'].htmlspecialchars($row['title']).$lang_fun['std_posted_on'].$row['added'].$lang_fun['std_need_to_wait']); + else { + $body = $_POST['body']; + if (!$body) + stderr($lang_fun['std_error'],$lang_fun['std_body_is_empty']); + $title = htmlspecialchars($_POST['subject']); + if (!$title) + stderr($lang_fun['std_error'],$lang_fun['std_title_is_empty']); + $sql = "INSERT INTO fun (userid, added, body, title, status) VALUES (".sqlesc($CURUSER['id']).",".sqlesc(date("Y-m-d H:i:s")).",".sqlesc($body).",".sqlesc($title).", 'normal')"; + sql_query($sql) or sqlerr(__FILE__, __LINE__); + $Cache->delete_value('current_fun_content'); + $Cache->delete_value('current_fun', true); + $Cache->delete_value('current_fun_vote_count'); + $Cache->delete_value('current_fun_vote_funny_count'); + if (mysql_affected_rows() == 1) + $warning = $lang_fun['std_fun_added_successfully']; + else + stderr($lang_fun['std_error'],$lang_fun['std_error_happened']); + header("Location: " . get_protocol_prefix() . "$BASEURL/index.php"); + } +} +if ($action == 'view') +{ +?> + +<?php echo $lang_fun['head_fun']; ?> + + +" type="text/css"> + + + +get_value('current_fun_content')){ + $result = sql_query("SELECT fun.*, IF(ADDTIME(added, '1 0:0:0') < NOW(),true,false) AS neednew FROM fun WHERE status != 'banned' AND status != 'dull' ORDER BY added DESC LIMIT 1") or sqlerr(__FILE__,__LINE__); + $row = mysql_fetch_array($result); + $Cache->cache_value('current_fun_content', $row, 1043); +} +if ($row){ + $title = $row['title']; + $username = get_username($row["userid"],false,true,true,true,false,false,"",false); + if ($CURUSER['timetype'] != 'timealive') + $time = $lang_fun['text_on'].$row['added']; + else $time = $lang_fun['text_blank'].gettime($row['added'],true,false); + $Cache->new_page('current_fun', 874, true); + if (!$Cache->get_page()){ + $Cache->add_row(); + $Cache->add_part(); + print("
".$title."".$lang_fun['text_posted_by']); + $Cache->end_part(); + $Cache->add_part(); + print("
\n"); + print(format_comment($row['body'], true, true, true)."
"); + $Cache->end_part(); + $Cache->end_row(); + $Cache->cache_page(); + } + while($Cache->next_row()){ + echo $Cache->next_part(); + print($username.$time); + echo $Cache->next_part(); + } +} +print(""); +} +if ($action == 'edit'){ + $id = 0+$_GET["id"]; + int_check($id,true); + $res = sql_query("SELECT * FROM fun WHERE id=$id") or sqlerr(__FILE__,__LINE__); + $arr = mysql_fetch_array($res); + if (!$arr) + stderr($lang_fun['std_error'], $lang_fun['std_invalid_id']); + if ($arr["userid"] != $CURUSER["id"] && get_user_class() < $funmanage_class) + permissiondenied(); + if ($_SERVER['REQUEST_METHOD'] == 'POST') + { + $body = $_POST['body']; + + if ($body == "") + stderr($lang_fun['std_error'],$lang_fun['std_body_is_empty']); + + $title = htmlspecialchars($_POST['subject']); + + if ($title == "") + stderr($lang_fun['std_error'],$lang_fun['std_title_is_empty']); + + $body = sqlesc($body); + $title = sqlesc($title); + sql_query("UPDATE fun SET body=$body, title=$title WHERE id=".sqlesc($id)) or sqlerr(__FILE__, __LINE__); + $Cache->delete_value('current_fun_content'); + $Cache->delete_value('current_fun', true); + header("Location: " . get_protocol_prefix() . "$BASEURL/index.php"); + } + else { + stdhead($lang_fun['head_edit_fun']); + begin_main_frame(); + $title = $lang_fun['text_edit_fun']; + print("\n"); + begin_compose($title, 'edit',$arr['body'], true, $arr['title']); + end_compose(); + end_main_frame(); + } + stdfoot(); +} +if ($action == 'ban') +{ + if (get_user_class() < $funmanage_class) + permissiondenied(); + $id = 0+$_GET["id"]; + int_check($id,true); + $res = sql_query("SELECT * FROM fun WHERE id=$id") or sqlerr(__FILE__,__LINE__); + $arr = mysql_fetch_array($res); + if (!$arr) + stderr($lang_fun['std_error'], $lang_fun['std_invalid_id']); + if ($_SERVER['REQUEST_METHOD'] == 'POST') + { + $banreason = htmlspecialchars($_POST['banreason'],ENT_QUOTES); + $title = htmlspecialchars($arr['title']); + if ($banreason == "") + stderr($lang_fun['std_error'],$lang_fun['std_reason_is_empty']); + sql_query("UPDATE fun SET status='banned' WHERE id=".sqlesc($id)) or sqlerr(__FILE__, __LINE__); + + $Cache->delete_value('current_fun_content'); + $Cache->delete_value('current_fun', true); + $Cache->delete_value('current_fun_vote_count'); + $Cache->delete_value('current_fun_vote_funny_count'); + + $subject = $lang_fun_target[get_user_lang($arr[userid])]['msg_fun_item_banned']; + $msg = $lang_fun_target[get_user_lang($arr[userid])]['msg_your_fun_item'].$title.$lang_fun_target[get_user_lang($arr[userid])]['msg_is_ban_by'].$CURUSER['username'].$lang_fun_target[get_user_lang($arr[userid])]['msg_reason'].$banreason; + sql_query("INSERT INTO messages (sender, subject, receiver, added, msg) VALUES(0, ".sqlesc($subject).", ".$arr['userid'].", '" . date("Y-m-d H:i:s") . "', " . sqlesc($msg) . ")") or sqlerr(__FILE__, __LINE__); + $Cache->delete_value('user_'.$arr['userid'].'_unread_message_count'); + $Cache->delete_value('user_'.$arr['userid'].'_inbox_count'); + write_log("Fun item $id ($title) was banned by $CURUSER[username]. Reason: $banreason", 'normal'); + stderr($lang_fun['std_success'], $lang_fun['std_fun_item_banned']); + } + else { + stderr($lang_fun['std_are_you_sure'], $lang_fun['std_only_against_rule']."
".$lang_fun['std_reason_required']."
", false); + } +} +function funreward($funvote, $totalvote, $title, $posterid, $bonus) +{ + global $lang_fun_target, $lang_fun; + KPS("+",$bonus,$posterid); + $subject = $lang_fun_target[get_user_lang($posterid)]['msg_fun_item_reward']; + $msg = $funvote.$lang_fun_target[get_user_lang($posterid)]['msg_out_of'].$totalvote.$lang_fun_target[get_user_lang($posterid)]['msg_people_think'].$title.$lang_fun_target[get_user_lang($posterid)]['msg_is_fun'].$bonus.$lang_fun_target[get_user_lang($posterid)]['msg_bonus_as_reward']; + $sql = "INSERT INTO messages (sender, subject, receiver, added, msg) VALUES(0, ".sqlesc($subject).",". $posterid. ",'" . date("Y-m-d H:i:s") . "', " . sqlesc($msg) . ")"; + sql_query($sql) or sqlerr(__FILE__, __LINE__); + $Cache->delete_value('user_'.$posterid.'_unread_message_count'); + $Cache->delete_value('user_'.$posterid.'_inbox_count'); +} + +if ($action == 'vote') +{ + $id = 0+$_GET["id"]; + int_check($id,true); + $res = sql_query("SELECT * FROM fun WHERE id=$id") or sqlerr(__FILE__,__LINE__); + $arr = mysql_fetch_array($res); + if (!$arr) + stderr($lang_fun['std_error'], $lang_fun['std_invalid_id']); + else { + $res = sql_query("SELECT * FROM funvotes WHERE funid=$id AND userid = $CURUSER[id]") or sqlerr(__FILE__,__LINE__); + $checkvote = mysql_fetch_array($res); + if ($checkvote) + stderr($lang_fun['std_error'], $lang_fun['std_already_vote']); + else { + if ($_GET["yourvote"] == 'dull') + $vote = 'dull'; + else $vote = 'fun'; + $sql = "INSERT INTO funvotes (funid, userid, added, vote) VALUES (".sqlesc($id).",".$CURUSER['id'].",".sqlesc(date("Y-m-d H:i:s")).",".sqlesc($vote).")"; + sql_query($sql) or sqlerr(__FILE__,__LINE__); + KPS("+",$funboxvote_bonus,$CURUSER['id']); //voter gets 1.0 bonus per vote + $totalvote = $Cache->get_value('current_fun_vote_count'); + if ($totalvote == ""){ + $totalvote = get_row_count("funvotes", "WHERE funid = ".sqlesc($row['id'])); + } + else $totalvote++; + $Cache->cache_value('current_fun_vote_count', $totalvote, 756); + $funvote = $Cache->get_value('current_fun_vote_funny_count'); + if ($funvote == ""){ + $funvote = get_row_count("funvotes", "WHERE funid = ".sqlesc($row['id'])." AND vote='fun'"); + } + elseif($vote == 'fun') + $funvote++; + $Cache->cache_value('current_fun_vote_funny_count', $funvote, 756); + if ($totalvote) $ratio = $funvote / $totalvote; else $ratio = 1; + if ($totalvote >= 20){ + if ($ratio > 0.75){ + sql_query("UPDATE fun SET status = 'veryfunny' WHERE id = ".sqlesc($id)); + if ($totalvote == 25) //Give fun item poster some bonus and write a message to him + funreward($funvote, $totalvote, $arr['title'], $arr['userid'], $funboxreward_bonus * 2); + if ($totalvote == 50) + funreward($funvote, $totalvote, $arr['title'], $arr['userid'], $funboxreward_bonus * 2); + if ($totalvote == 100) + funreward($funvote, $totalvote, $arr['title'], $arr['userid'], $funboxreward_bonus * 2); + if ($totalvote == 200) + funreward($funvote, $totalvote, $arr['title'], $arr['userid'], $funboxreward_bonus * 2); + } + elseif ($ratio > 0.5){ + sql_query("UPDATE fun SET status = 'funny' WHERE id = ".sqlesc($id)); + if ($totalvote == 25) //Give fun item poster some bonus and write a message to him + funreward($funvote, $totalvote, $arr['id'], $arr['userid'], $funboxreward_bonus); + if ($totalvote == 50) + funreward($funvote, $totalvote, $arr['id'], $arr['userid'], $funboxreward_bonus); + if ($totalvote == 100) + funreward($funvote, $totalvote, $arr['id'], $arr['userid'], $funboxreward_bonus); + if ($totalvote == 200) + funreward($funvote, $totalvote, $arr['id'], $arr['userid'], $funboxreward_bonus); + } + elseif ($ratio > 0.25){ + sql_query("UPDATE fun SET status = 'notfunny' WHERE id = ".sqlesc($id)); + } + else{ + sql_query("UPDATE fun SET status = 'dull' WHERE id = ".sqlesc($id)); + //write a message to fun item poster + $subject = $lang_fun_target[get_user_lang($arr['userid'])]['msg_fun_item_dull']; + $msg = ($totalvote - $funvote).$lang_fun_target[get_user_lang($arr['userid'])]['msg_out_of'].$totalvote.$lang_fun_target[get_user_lang($arr['userid'])]['msg_people_think'].$arr['title'].$lang_fun_target[get_user_lang($arr['userid'])]['msg_is_dull']; + $sql = "INSERT INTO messages (sender, subject, receiver, added, msg) VALUES(0, ".sqlesc($subject).",". $arr['userid'].", '" . date("Y-m-d H:i:s") . "', " . sqlesc($msg) . ")"; + sql_query($sql) or sqlerr(__FILE__, __LINE__); + $Cache->delete_value('user_'.$arr['userid'].'_unread_message_count'); + $Cache->delete_value('user_'.$arr['userid'].'_inbox_count'); + } + } + } + } +} +?> diff --git a/getattachment.php b/getattachment.php new file mode 100644 index 00000000..05876c7c --- /dev/null +++ b/getattachment.php @@ -0,0 +1,57 @@ +delete_value('attachment_'.$dlkey.'_content'); +exit; +?> diff --git a/getextinfoajax.php b/getextinfoajax.php new file mode 100644 index 00000000..364872c6 --- /dev/null +++ b/getextinfoajax.php @@ -0,0 +1,27 @@ +new_page('imdb_id_'.$imdb_id.'_'.$mode, 1296000, true); +if (!$Cache->get_page()){ + $infoblock = getimdb($imdb_id, $cache_stamp, $mode); + if ($infoblock){ + $Cache->add_whole_row(); + print($infoblock); + $Cache->end_whole_row(); + $Cache->cache_page(); + echo $Cache->next_row(); + } +} +else echo $Cache->next_row(); +?> diff --git a/getrss.php b/getrss.php new file mode 100644 index 00000000..496a295c --- /dev/null +++ b/getrss.php @@ -0,0 +1,343 @@ + $catsperrow ? $catsperrow : $catsperrow)); //show how many cats per line + +$brcatpadding = get_searchbox_value($brsectiontype, 'catpadding'); +$spcatpadding = get_searchbox_value($spsectiontype, 'catpadding'); +$catpadding = (!$allowspecial ? $brcatpadding : ($brcatpadding < $spcatpadding ? $brcatpadding : $spcatpadding)); //padding space between categories in pixel + +$brcats = genrelist($brsectiontype); +$spcats = genrelist($spsectiontype); + +if ($showsubcat){ +if ($showsource) $sources = searchbox_item_list("sources"); +if ($showmedium) $media = searchbox_item_list("media"); +if ($showcodec) $codecs = searchbox_item_list("codecs"); +if ($showstandard) $standards = searchbox_item_list("standards"); +if ($showprocessing) $processings = searchbox_item_list("processings"); +if ($showteam) $teams = searchbox_item_list("teams"); +if ($showaudiocodec) $audiocodecs = searchbox_item_list("audiocodecs"); +} +stdhead($lang_getrss['head_rss_feeds']); + +if ($_SERVER['REQUEST_METHOD'] == "POST") { + $allowed_showrows=array('10','20','30','40','50'); + $link = get_protocol_prefix(). $BASEURL ."/torrentrss.php"; + if (isset($_POST['showrows']) && in_array($_POST['showrows'], $allowed_showrows, 1)) + $query[] = "rows=".(int)$_POST['showrows']; + else { + stdmsg($lang_getrss['std_error'],$lang_getrss['std_no_row']); + stdfoot(); + die(); + } + foreach ($brcats as $cat) + { + if ($_POST["cat$cat[id]"]) + { + $query[] = "cat$cat[id]=1"; + } + } + if ($enablespecial == 'yes') + { + foreach ($spcats as $cat) + { + if ($_POST["cat$cat[id]"]) + { + $query[] = "cat$cat[id]=1"; + } + } + } + if ($showsubcat){ + if ($showsource) + foreach ($sources as $source) + { + if ($_POST["sou$source[id]"]) + { + $query[] = "sou$source[id]=1"; + } + } + if ($showmedium) + foreach ($media as $medium) + { + if ($_POST["med$medium[id]"]) + { + $query[] = "med$medium[id]=1"; + } + } + if ($showcodec) + foreach ($codecs as $codec) + { + if ($_POST["cod$codec[id]"]) + { + $query[] = "cod$codec[id]=1"; + } + } + if ($showstandard) + foreach ($standards as $standard) + { + if ($_POST["sta$standard[id]"]) + { + $query[] = "sta$standard[id]=1"; + } + } + if ($showprocessing) + foreach ($processings as $processing) + { + if ($_POST["pro$processing[id]"]) + { + $query[] = "pro$processing[id]=1"; + } + } + if ($showteam) + foreach ($teams as $team) + { + if ($_POST["tea$team[id]"]) + { + $query[] = "tea$team[id]=1"; + } + } + if ($showaudiocodec) + foreach ($audiocodecs as $audiocodec) + { + if ($_POST["aud$audiocodec[id]"]) + { + $query[] = "aud$audiocodec[id]=1"; + } + } + } + if ($_POST["itemcategory"]) + { + $query[] = "icat=1"; + } + if ($_POST["itemsmalldescr"]) + { + $query[] = "ismalldescr=1"; + } + if ($_POST["itemsize"]) + { + $query[] = "isize=1"; + } + if ($_POST["itemuploader"]) + { + $query[] = "iuplder=1"; + } + $searchstr = mysql_real_escape_string(trim($_POST["search"])); + if (empty($searchstr)) + unset($searchstr); + if ($searchstr) + { + $query[] = "search=".rawurlencode($searchstr); + if ($_POST["search_mode"]){ + $search_mode = 0 + $_POST["search_mode"]; + if (!in_array($search_mode,array(0,1,2))) + { + $search_mode = 0; + } + $query[] = "search_mode=".$search_mode; + } + } + $inclbookmarked=0+$_POST['inclbookmarked']; + if($inclbookmarked) + { + if (!in_array($inclbookmarked,array(0,1))) + { + $inclbookmarked = 0; + } + $addinclbm = "&inclbookmarked=".$inclbookmarked; + } + else + { + $addinclbm=""; + } + $queries = implode("&", $query); + if ($queries) + $link .= "?".$queries; + $msg = $lang_getrss['std_use_following_url'] ."\n".$link."\n\n".$lang_getrss['std_utorrent_feed_url']."\n".$link."&linktype=dl&passkey=".$CURUSER['passkey'].$addinclbm; + stdmsg($lang_getrss['std_done'],format_comment($msg)); + stdfoot(); + die(); +} +?> +

+
+ + + +"; +$i = 0; +foreach ($brcats as $cat)//print category list of Torrents section +{ + $numinrow = $i % $catsperrow; + $rownum = (int)($i / $catsperrow); + if ($i && $numinrow == 0){ + $categories .= "".($brenablecatrow ? "" : "").""; + } + $categories .= "\n"; + $i++; +} +$categories .= ""; +if ($allowspecial) //print category list of Special section +{ + $categories .= ""; + $i = 0; + foreach ($spcats as $cat) + { + $numinrow = $i % $catsperrow; + $rownum = (int)($i / $catsperrow); + if ($i && $numinrow == 0){ + $categories .= "".($spenablecatrow ? "" : "").""; + } + $categories .= "\n"; + $i++; + } + $categories .= ""; +} + if ($showsubcat)//Show subcategory (i.e. source, codecs) selections + { + if ($showsource){ + $categories .= ""; + $i = 0; + foreach ($sources as $source) + { + $categories .= ($i && $i % $catsperrow == 0) ? "" : ""; + $categories .= "\n"; + $i++; + } + $categories .= ""; + } + if ($showmedium){ + $categories .= ""; + $i = 0; + foreach ($media as $medium) + { + $categories .= ($i && $i % $catsperrow == 0) ? "" : ""; + $categories .= "\n"; + $i++; + } + $categories .= ""; + } + if ($showcodec){ + $categories .= ""; + $i = 0; + foreach ($codecs as $codec) + { + $categories .= ($i && $i % $catsperrow == 0) ? "" : ""; + $categories .= "\n"; + $i++; + } + $categories .= ""; + } + if ($showaudiocodec){ + $categories .= ""; + $i = 0; + foreach ($audiocodecs as $audiocodec) + { + $categories .= ($i && $i % $catsperrow == 0) ? "" : ""; + $categories .= "\n"; + $i++; + } + $categories .= ""; + } + if ($showstandard){ + $categories .= ""; + $i = 0; + foreach ($standards as $standard) + { + $categories .= ($i && $i % $catsperrow == 0) ? "" : ""; + $categories .= "\n"; + $i++; + } + $categories .= ""; + } + if ($showprocessing){ + $categories .= ""; + $i = 0; + foreach ($processings as $processing) + { + $categories .= ($i && $i % $catsperrow == 0) ? "" : ""; + $categories .= "\n"; + $i++; + } + $categories .= ""; + } + if ($showteam){ + $categories .= ""; + $i = 0; + foreach ($teams as $team) + { + $categories .= ($i && $i % $catsperrow == 0) ? "" : ""; + $categories .= "\n"; + $i++; + } + $categories .= ""; + } + } +$categories .= "
+ +
".$lang_getrss['text_category']."
".$brcatrow[$rownum]."
".return_category_image($cat['id'], "torrents.php?allsec=1&")."
".$spcatrow[$rownum]."
".return_category_image($cat['id'], "torrents.php?allsec=1&")."
".$lang_getrss['text_source']."
".$source[name]."
".$lang_getrss['text_medium']."
".$medium[name]."
".$lang_getrss['text_codec']."
".$codec[name]."
".$lang_getrss['text_audio_codec']."
".$audiocodec[name]."
".$lang_getrss['text_standard']."
".$standard[name]."
".$lang_getrss['text_processing']."
".$processing[name]."
".$lang_getrss['text_team']."
".$team[name]."
"; +print($categories); +?> + + + + + + + 
+ + + + + + +     + + + + + + + + +
+ + + + + + + + +
+".$lang_getusertorrentlistajax['col_type']."".$lang_getusertorrentlistajax['col_name']."". + ($showsize ? "\"size\"" : "").($showsenum ? "\"seeders\"" : "").($showlenum ? "\"leechers\"" : "").($showuploaded ? "".$lang_getusertorrentlistajax['col_uploaded']."" : "") . ($showdownloaded ? "".$lang_getusertorrentlistajax['col_downloaded']."" : "").($showratio ? "".$lang_getusertorrentlistajax['col_ratio']."" : "").($showsetime ? "".$lang_getusertorrentlistajax['col_se_time']."" : "").($showletime ? "".$lang_getusertorrentlistajax['col_le_time']."" : "").($showcotime ? "".$lang_getusertorrentlistajax['col_time_completed']."" : "").($showanonymous ? "".$lang_getusertorrentlistajax['col_anonymous']."" : "")."\n"; + while ($arr = mysql_fetch_assoc($res)) + { + $catimage = htmlspecialchars($arr["image"]); + $catname = htmlspecialchars($arr["catname"]); + + $sphighlight = get_torrent_bg_color($arr['sp_state']); + $sp_torrent = get_torrent_promotion_append($arr['sp_state']); + + //torrent name + $dispname = $nametitle = htmlspecialchars($arr["torrentname"]); + $count_dispname=mb_strlen($dispname,"UTF-8"); + $max_lenght_of_torrent_name=($CURUSER['fontsize'] == 'large' ? 70 : 80); + if($count_dispname > $max_lenght_of_torrent_name) + $dispname=mb_substr($dispname, 0, $max_lenght_of_torrent_name,"UTF-8") . ".."; + if ($smalldescription_main == 'yes'){ + //small description + $dissmall_descr = htmlspecialchars(trim($arr["small_descr"])); + $count_dissmall_descr=mb_strlen($dissmall_descr,"UTF-8"); + $max_lenght_of_small_descr=80; // maximum length + if($count_dissmall_descr > $max_lenght_of_small_descr) + { + $dissmall_descr=mb_substr($dissmall_descr, 0, $max_lenght_of_small_descr,"UTF-8") . ".."; + } + } + else $dissmall_descr == ""; + $ret .= "".return_category_image($arr['category'], "torrents.php?allsec=1&")."\n" . + "" . $dispname . "". $sp_torrent .($dissmall_descr == "" ? "" : "
" . $dissmall_descr) . ""; + //size + if ($showsize) + $ret .= "". mksize_compact($arr['size']).""; + //number of seeders + if ($showsenum) + $ret .= "".$arr['seeders'].""; + //number of leechers + if ($showlenum) + $ret .= "".$arr['leechers'].""; + //uploaded amount + if ($showuploaded){ + $uploaded = mksize_compact($arr["uploaded"]); + $ret .= "".$uploaded.""; + } + //downloaded amount + if ($showdownloaded){ + $downloaded = mksize_compact($arr["downloaded"]); + $ret .= "".$downloaded.""; + } + //ratio + if ($showratio){ + if ($arr['downloaded'] > 0) + { + $ratio = number_format($arr['uploaded'] / $arr['downloaded'], 3); + $ratio = "".$ratio.""; + } + elseif ($arr['uploaded'] > 0) $ratio = "Inf."; + else $ratio = "---"; + $ret .= "".$ratio.""; + } + if ($showsetime){ + $ret .= "".mkprettytime($arr['seedtime']).""; + } + if ($showletime){ + $ret .= "".mkprettytime($arr['leechtime']).""; + } + if ($showcotime) + $ret .= ""."". str_replace(" ", "
", gettime($arr['completedat'],false)). ""; + if ($showanonymous) + $ret .= "".$arr['anonymous'].""; + $ret .="\n"; + + } + $ret .= "\n"; + return $ret; +} + +$id = 0+$_GET['userid']; +$type = $_GET['type']; +if (!in_array($type,array('uploaded','seeding','leeching','completed','incomplete'))) +die; +if(get_user_class() < $torrenthistory_class && $id != $CURUSER["id"]) +permissiondenied(); + +switch ($type) +{ + case 'uploaded': + { + $res = sql_query("SELECT torrents.id AS torrent, torrents.name as torrentname, small_descr, seeders, leechers, anonymous, categories.name AS catname, categories.image, category, sp_state, size, snatched.seedtime, snatched.uploaded FROM torrents LEFT JOIN snatched ON torrents.id = snatched.torrentid LEFT JOIN categories ON torrents.category = categories.id WHERE torrents.owner=$id AND snatched.userid=$id " . (($CURUSER["id"] != $id)?((get_user_class() < $viewanonymous_class) ? " AND anonymous = 'no'":""):"") ." ORDER BY torrents.added DESC") or sqlerr(__FILE__, __LINE__); + $count = mysql_num_rows($res); + if ($count > 0) + { + $torrentlist = maketable($res, 'uploaded'); + } + break; + } + + // Current Seeding + case 'seeding': + { + $res = sql_query("SELECT torrent,added,snatched.uploaded,snatched.downloaded,torrents.name as torrentname, torrents.small_descr, torrents.sp_state, categories.name as catname,size,image,category,seeders,leechers FROM peers LEFT JOIN torrents ON peers.torrent = torrents.id LEFT JOIN categories ON torrents.category = categories.id LEFT JOIN snatched ON torrents.id = snatched.torrentid WHERE peers.userid=$id AND snatched.userid = $id AND peers.seeder='yes' ORDER BY torrents.added DESC") or sqlerr(); + $count = mysql_num_rows($res); + if ($count > 0){ + $torrentlist = maketable($res, 'seeding'); + } + break; + } + + // Current Leeching + case 'leeching': + { + $res = sql_query("SELECT torrent,snatched.uploaded,snatched.downloaded,torrents.name as torrentname, torrents.small_descr, torrents.sp_state, categories.name as catname,size,image,category,seeders,leechers FROM peers LEFT JOIN torrents ON peers.torrent = torrents.id LEFT JOIN categories ON torrents.category = categories.id LEFT JOIN snatched ON torrents.id = snatched.torrentid WHERE peers.userid=$id AND snatched.userid = $id AND peers.seeder='no' ORDER BY torrents.added DESC") or sqlerr(); + $count = mysql_num_rows($res); + if ($count > 0){ + $torrentlist = maketable($res, 'leeching'); + } + break; + } + + // Completed torrents + case 'completed': + { + $res = sql_query("SELECT torrents.id AS torrent, torrents.name AS torrentname, small_descr, categories.name AS catname, categories.image, category, sp_state, size, snatched.uploaded, snatched.seedtime, snatched.leechtime, snatched.completedat FROM torrents LEFT JOIN snatched ON torrents.id = snatched.torrentid LEFT JOIN categories on torrents.category = categories.id WHERE snatched.finished='yes' AND torrents.owner != $id AND userid=$id ORDER BY snatched.completedat DESC") or sqlerr(); + $count = mysql_num_rows($res); + if ($count > 0) + { + $torrentlist = maketable($res, 'completed'); + } + break; + } + + // Incomplete torrents + case 'incomplete': + { + $res = sql_query("SELECT torrents.id AS torrent, torrents.name AS torrentname, small_descr, categories.name AS catname, categories.image, category, sp_state, size, snatched.uploaded, snatched.downloaded, snatched.leechtime FROM torrents LEFT JOIN snatched ON torrents.id = snatched.torrentid LEFT JOIN categories on torrents.category = categories.id WHERE snatched.finished='no' AND userid=$id AND torrents.owner != $id ORDER BY snatched.startdat DESC") or sqlerr(); + $count = mysql_num_rows($res); + if ($count > 0) + { + $torrentlist = maketable($res, 'incomplete'); + } + break; + } + default: + { + $count = 0; + $torrentlist = ""; + break; + } +} + +if ($count) +echo "".$count."".$lang_getusertorrentlistajax['text_record'].add_s($count)."
".$torrentlist; +else +echo $lang_getusertorrentlistajax['text_no_record']; +?> diff --git a/image.php b/image.php new file mode 100644 index 00000000..cbd52995 --- /dev/null +++ b/image.php @@ -0,0 +1,58 @@ + diff --git a/imdb/.htaccess b/imdb/.htaccess new file mode 100644 index 00000000..9e2e17c4 --- /dev/null +++ b/imdb/.htaccess @@ -0,0 +1,3 @@ +Options -Indexes +Order allow,deny +Allow from all diff --git a/imdb/imdb.class.php b/imdb/imdb.class.php new file mode 100644 index 00000000..543267f8 --- /dev/null +++ b/imdb/imdb.class.php @@ -0,0 +1,1257 @@ + # + # http://www.qumran.org/homes/izzy/ # + # ------------------------------------------------------------------------- # + # This program is free software; you can redistribute and/or modify it # + # under the terms of the GNU General Public License (see doc/LICENSE) # + ############################################################################# + + /* $Id: imdb.class.php,v 1.13 2007/10/05 00:07:03 izzy Exp $ */ + + require_once ("include/browser/browseremulator.class.php"); + require_once ("include/browser/info_extractor.php"); + require_once (dirname(__FILE__)."/imdb_config.php"); + + #===============================================[ The IMDB class itself ]=== + /** Accessing IMDB information + * @package Api + * @class imdb + * @extends imdb_config + * @author Izzy (izzysoft@qumran.org) + * @copyright (c) 2002-2004 by Giorgos Giagas and (c) 2004-2007 by Itzchak Rehberg and IzzySoft + * @version $Revision: 1.13 $ $Date: 2007/10/05 00:07:03 $ + */ + class imdb extends imdb_config { + var $imdbID = ""; + var $page; + + var $main_title = ""; + var $main_year = ""; + var $main_runtime = ""; + var $main_runtimes; + var $main_rating = ""; + var $main_votes = ""; + var $main_language = ""; + var $main_languages = ""; + var $main_genre = ""; + var $main_genres = ""; + var $main_tagline = ""; + var $main_plotoutline = ""; + var $main_comment = ""; + var $main_alttitle = ""; + var $main_colors = ""; + + var $plot_plot = ""; + var $taglines = ""; + + var $credits_cast = ""; + var $credits_director = ""; + var $credits_writing = ""; + var $credits_producer = ""; + + var $main_director = ""; + var $main_credits = ""; + var $main_photo = ""; + var $main_country = ""; + var $main_alsoknow = ""; + var $main_sound = ""; + + var $info_excer; + + var $similiar_movies = array(array('Name' => '', 'Link' => '', 'Local' => '')); // no Thumbnail here, since it works different from last.fm, douban + var $extension = array('Title', 'Credits', 'Amazon', 'Goofs', 'Plot', 'Comments', 'Quotes', 'Taglines', 'Plotoutline', 'Trivia', 'Directed'); + + function debug_scalar($scalar) { + echo "$scalar
"; + } + function debug_object($object) { + echo "
";print_r($object);echo "
"; + } + function debug_html($html) { + echo "".htmlentities($html)."
"; + } + + /** Get similiar movies + * @method similiar_movies + * @return list similiar_movies + */ + function similiar_movies() + { + if (!isset($this->similiar_movies)) + { + if ($this->page["Title"] == "") + { + $this->openpage ("Title"); + } + $similiar_movies = $this->info_excer->truncate($this->page["Title"], "

Recommendations

", ""); + $similiar_movies = $this->info_excer->truncate($similiar_movies, "", ""); + $res_where_array = array('Link' => '1', 'Name' => '3'); + if($res_array = $this->info_excer->find_pattern($similiar_movies,"/((\s|.)+?)<\/a><\/td>/",true,$res_where_array)) + { + $counter = 0; + foreach($res_array as $res_array_each) + { + $this->similiar_movies[$counter]['Link'] = $res_array_each[0]; + $this->similiar_movies[$counter]['Name'] = $res_array_each[1]; + + $imdb_id = ltrim(strrchr($res_array_each[0],'tt'),'tt'); + $imdb_id = preg_replace("/[^A-Za-z0-9]/", "", $imdb_id); + + //die("ss" . $imdb_id); + $imdb_sim_movies = new imdb($imdb_id); + //$imdb_sim_movies->setid($imdb_id); + $target = array('Title', 'Credits', 'Plot'); + $imdb_sim_movies->preparecache($target,false); + $this->similiar_movies[$counter]['Local'] = $imdb_sim_movies->photo_localurl(); + $counter++; + } + } + } + return $this->similiar_movies; + } + + + /** Test if IMDB url is valid + * @method urlstate () + * @param none + * @return int state (0-not valid, 1-valid) + */ + function urlstate () { + if (strlen($this->imdbID) != 7) + return 0; + else + return 1; + } + + /** Test if caching IMDB page is complete + * @method cachestate () + * @param $target array + * @return int state (0-not complete, 1-cache complete, 2-cache not enabled, 3-not valid imdb url) + */ + function cachestate ($target = "") { + if (strlen($this->imdbID) != 7){ + //echo "not valid imdbID: ".$this->imdbID."
".strlen($this->imdbID); + $this->page[$wt] = "cannot open page"; + return 3; + } + if ($this->usecache) + { + $ext_arr = isset($target) ? $target : $this->extension; + foreach($ext_arr as $ext) + { + if(!file_exists("$this->cachedir/$this->imdbID.$ext")) + return 0; + @$fp = fopen ("$this->cachedir/$this->imdbID.$ext", "r"); + if (!$fp) + return 0; + } + return 1; + } + else + return 2; + } + + /** prepare IMDB page cache + * @method preparecache + * @param $target array + */ + function preparecache ($target = "", $retrive_similiar = false) { + $ext_arr = isset($target) ? $target : $this->extension; + foreach($ext_arr as $ext) + { + $tar_ext = array($ext); + if($this->cachestate($tar_ext) == 0) + $this->openpage($ext); + } + if($retrive_similiar) + $this->similiar_movies(false); + return $ext; + } + + /** Open an IMDB page + * @method openpage + * @param string wt + */ + function openpage ($wt) { + if (strlen($this->imdbID) != 7){ + echo "not valid imdbID: ".$this->imdbID."
".strlen($this->imdbID); + $this->page[$wt] = "cannot open page"; + return; + } + switch ($wt){ + case "Title" : $urlname="/"; break; + case "Credits" : $urlname="/fullcredits"; break; + case "Plot" : $urlname="/plotsummary"; break; + case "Taglines": $urlname="/taglines"; break; + } + if ($this->usecache) { + @$fp = fopen ("$this->cachedir/$this->imdbID.$wt", "r"); + if ($fp) { + $temp=""; + while (!feof ($fp)) { + $temp .= fread ($fp, 1024); + } + if ($temp) { + $this->page[$wt] = $temp; + return; + } + } + } // end cache + + $req = new IMDB_Request(""); + $req->setURL("http://".$this->imdbsite."/title/tt".$this->imdbID.$urlname); + $response = $req->send(); +$responseBody = $response->getBody(); + if ($responseBody) { + $this->page[$wt] = utf8_encode($responseBody); + } + if( $this->page[$wt] ){ //storecache + if ($this->storecache) { + $fp = fopen ("$this->cachedir/$this->imdbID.$wt", "w"); + fputs ($fp, $this->page[$wt]); + fclose ($fp); + } + return; + } + $this->page[$wt] = "cannot open page"; + //echo "page not found"; + } + + /** Retrieve the IMDB ID + * @method imdbid + * @return string id + */ + function imdbid () { + return $this->imdbID; + } + + /** Setup class for a new IMDB id + * @method setid + * @param string id + */ + function setid ($id) { + $this->imdbID = $id; + + $this->page["Title"] = ""; + $this->page["Credits"] = ""; + $this->page["Amazon"] = ""; + $this->page["Goofs"] = ""; + $this->page["Plot"] = ""; + $this->page["Comments"] = ""; + $this->page["Quotes"] = ""; + $this->page["Taglines"] = ""; + $this->page["Plotoutline"] = ""; + $this->page["Trivia"] = ""; + $this->page["Directed"] = ""; + + $this->main_title = ""; + $this->main_year = ""; + $this->main_runtime = ""; + $this->main_rating = ""; + $this->main_comment = ""; + $this->main_votes = ""; + $this->main_language = ""; + $this->main_genre = ""; + $this->main_genres = ""; + $this->main_tagline = ""; + $this->main_plotoutline = ""; + $this->main_alttitle = ""; + $this->main_colors = ""; + $this->credits_cast = ""; + $this->main_director = ""; + $this->main_creator = ""; + + unset($this->similiar_movies); + $this->info_excer = new info_extractor(); + } + + /** Initialize class + * @constructor imdb + * @param string id + */ + function imdb ($id) { + $this->imdb_config(); + $this->setid($id); + //if ($this->storecache && ($this->cache_expire > 0)) $this->purge(); + } + + /** Check cache and purge outdated files + * This method looks for files older than the cache_expire set in the + * imdb_config and removes them + * @method purge + */ + function purge($explicit = false) { + if (is_dir($this->cachedir)) { + $thisdir = dir($this->cachedir); + $now = time(); + while( $file=$thisdir->read() ) { + if ($file!="." && $file!="..") { + $fname = $this->cachedir ."/". $file; + if (is_dir($fname)) continue; + $mod = filemtime($fname); + if ($mod && (($now - $mod > $this->cache_expire) || $explicit == true)) unlink($fname); + } + } + } + } + + /** Check cache and purge outdated single imdb title file + * This method looks for files older than the cache_expire set in the + * imdb_config and removes them + * @method purge + */ + function purge_single($explicit = false) { + if (is_dir($this->cachedir)) + { + $thisdir = dir($this->cachedir); + foreach($this->extension as $ext) + { + $fname = $this->cachedir ."/". $this->imdbid() . "." . $ext; + //return $fname; + if(file_exists($fname)) + { + $now = time(); + $mod = filemtime($fname); + if ($mod && (($now - $mod > $this->cache_expire) || $explicit == true)) unlink($fname); + } + } + } + } + + /** get the time that cache is stored + * @method getcachetime + */ + function getcachetime() { + $mod =0; + if (is_dir($this->cachedir)) + { + $thisdir = dir($this->cachedir); + foreach($this->extension as $ext) + { + $fname = $this->cachedir ."/". $this->imdbid() . "." . $ext; + if(file_exists($fname)) + { + if($mod > filemtime($fname) || $mod==0) + $mod = filemtime($fname); + } + } + } + return $mod; + } + + /** Set up the URL to the movie title page + * @method main_url + * @return string url + */ + function main_url(){ + return "http://".$this->imdbsite."/title/tt".$this->imdbid()."/"; + } + + /** Get movie title + * @method title + * @return string title + */ + function title () { + if ($this->main_title == "") { + if ($this->page["Title"] == "") { + $this->openpage ("Title"); + } + $this->main_title = strstr ($this->page["Title"], ""); + $endpos = strpos ($this->main_title, ""); + $this->main_title = substr ($this->main_title, 7, $endpos - 7); + $year_s = strpos ($this->main_title, "(", 0); + $year_e = strpos ($this->main_title, ")", 0); + $this->main_title = substr ($this->main_title, 0, $year_s - 1); + } + return $this->main_title; + } + + /** Get year + * @method year + * @return string year + */ + function year () { + if ($this->main_year == "") { + if ($this->page["Title"] == "") { + $this->openpage ("Title"); + } + $this->main_year = strstr ($this->page["Title"], ""); + $endpos = strpos ($this->main_title, ""); + $this->main_year = substr ($this->main_year, 7, $endpos - 7); + $year_s = strpos ($this->main_year, "(", 0); + $year_e = strpos ($this->main_year, ")", 0); + $this->main_year = substr ($this->main_year, $year_s + 1, $year_e - $year_s - 1); + } + return $this->main_year; + } + + /** Get general runtime + * @method runtime_all + * @return string runtime + */ + function runtime_all () { + if ($this->main_runtime == "") { + if ($this->page["Title"] == "") { + $this->openpage ("Title"); + } + $runtime_s = strpos ($this->page["Title"], "Runtime:"); + $runtime_e = strpos ($this->page["Title"], "
", $runtime_s); + $this->main_runtime = strip_tags(substr ($this->page["Title"], $runtime_s + 13, $runtime_e - $runtime_s - 14)); + if ($runtime_s == 0) + $this->main_runtime = ""; + } + return $this->main_runtime; + } + + /** Get overall runtime + * @method runtime + * @return mixed string runtime (if set), NULL otherwise + */ + function runtime(){ + $runarr = $this->runtimes(); + if (isset($runarr[0]["time"])){ + return $runarr[0]["time"]; + }else{ + return NULL; + } + } + + /** Retrieve language specific runtimes + * @method runtimes + * @return array runtimes (array[0..n] of array[time,country,comment]) + */ + function runtimes(){ + if ($this->main_runtimes == "") { + if ($this->runtime_all() == ""){ + return array(); + } +#echo $this->runtime_all(); + $run_arr= explode( "|" , $this->runtime_all()); + $max = count($run_arr); + for ( $i=0; $i < $max ; $i++){ + $time_e = strpos( $run_arr[$i], " min"); + $country_e = strpos($run_arr[$i], ":"); + if ( $country_e == 0){ + $time_s = 0; + }else{ + $time_s = $country_e+1; + } + $comment_s = strpos( $run_arr[$i], '('); + $comment_e = strpos( $run_arr[$i], ')'); + $runtemp["time"]= substr( $run_arr[$i], $time_s, $time_e - $time_s); + $country_s = 0; + if ($country_s != $country_e){ + $runtemp["country"]= substr( $run_arr[$i], $country_s, $country_e - $country_s); + }else{ + $runtemp["country"]=NULL; + } + if ($comment_s != $comment_e){ + $runtemp["comment"]= substr( $run_arr[$i], $comment_s + 1, $comment_e - $comment_s - 1); + }else{ + $runtemp["comment"]=NULL; + } + $this->main_runtimes[$i] = $runtemp; + } + } + return $this->main_runtimes; + } + + /** Get movie rating + * @method rating + * @return string rating + */ + function rating () { + if ($this->main_rating == "") { + if ($this->page["Title"] == "") { + $this->openpage ("Title"); + } + $rate_s = strpos ($this->page["Title"], "User Rating:"); +# $rate_s = strpos ($this->page["Title"], '/ratings">'); + if ( $rate_s == 0 ) return FALSE; + if (strpos ($this->page["Title"], "awaiting 5 votes")) return false; + $rate_s = strpos ($this->page["Title"], "", $rate_s); + $rate_e = strpos ($this->page["Title"], "/", $rate_s); + $this->main_rating = substr ($this->page["Title"], $rate_s + 3, $rate_e - $rate_s - 3); + if ($rate_e - $rate_s > 7) $this->main_rating = ""; + return $this->main_rating; + } + } + + /** Get movie comment + * @method comment + * @return string comment + */ + function comment () { + if ($this->main_comment == "") { + if ($this->page["Title"] == "") $this->openpage ("Title"); + $comment_s = strpos ($this->page["Title"], "people found the following comment useful:-"); + if ( $comment_s == 0) return false; + $comment_e = strpos ($this->page["Title"], "Was the above comment useful to you?", $comment_s); + $forward_safeval = 50; + $comment_s_fix = $forward_safeval - strpos(substr($this->page["Title"], $comment_s - $forward_safeval, $comment_e - $comment_s + $forward_safeval),"
") - strlen("
"); + + $this->main_comment = substr ($this->page["Title"], $comment_s - $comment_s_fix, $comment_e - $comment_s + $comment_s_fix); + $this->main_comment = preg_replace("/a href\=\"\//i","a href=\"http://".$this->imdbsite."/",$this->main_comment); + $this->main_comment = preg_replace("/http:\/\/[a-zA-Z.-]+\/images\/showtimes\//i","pic/imdb_pic/",$this->main_comment); + $this->main_comment = preg_replace("/<\/?div.*>/i","",$this->main_comment); + $this->main_comment = preg_replace("//i","",$this->main_comment); + } + return $this->main_comment; + } + + /** Return votes for this movie + * @method votes + * @return string votes + */ + function votes () { + if ($this->main_votes == "") { + if ($this->page["Title"] == "") $this->openpage ("Title"); + $vote_s = strpos ($this->page["Title"], "User Rating:"); + if ( $vote_s == 0) return false; + if (strpos ($this->page["Title"], "awaiting 5 votes")) return false; +// $vote_s = strpos ($this->page["Title"], "page["Title"], "votes", $vote_s); +// $this->main_votes = substr ($this->page["Title"], $vote_s, $vote_e - $vote_s); + preg_match('/href=\"ratings\".*>([0-9,][0-9,]*)/', $this->page["Title"], $matches); + $this->main_votes = $matches[1]; + $this->main_votes = "imdbsite."/title/tt".$this->imdbID."/ratings\">" . $this->main_votes . ""; + } + return $this->main_votes; + } + + /** Get movies original language + * @method language + * @return string language + */ + function language () { + if ($this->main_language == "") { + if ($this->page["Title"] == "") $this->openpage ("Title"); + $lang_s = strpos ($this->page["Title"], "/Sections/Languages/"); + if ( $lang_s == 0) return FALSE; + $lang_s = strpos ($this->page["Title"], ">", $lang_s); + $lang_e = strpos ($this->page["Title"], "<", $lang_s); + $this->main_language = substr ($this->page["Title"], $lang_s + 1, $lang_e - $lang_s - 1); + } + return $this->main_language; + } + + /** Get all langauges this movie is available in + * @method languages + * @return array languages (array[0..n] of strings) + */ + function languages () { + if ($this->main_languages == "") { + if ($this->page["Title"] == "") $this->openpage ("Title"); + $lang_s = 0; + $lang_e = 0; + $i = 0; + $this->main_languages = array(); + while (strpos($this->page["Title"], "/Sections/Languages/", $lang_e) > $lang_s) { + $lang_s = strpos ($this->page["Title"], "/Sections/Languages/", $lang_s); + $lang_s = strpos ($this->page["Title"], ">", $lang_s); + $lang_e = strpos ($this->page["Title"], "<", $lang_s); + $this->main_languages[$i] = substr ($this->page["Title"], $lang_s + 1, $lang_e - $lang_s - 1); + $i++; + } + } + return $this->main_languages; + } + + /** Get the movies main genre + * @method genre + * @return string genre + */ + function genre () { + if ($this->main_genre == "") { + if ($this->page["Title"] == "") $this->openpage ("Title"); + $genre_s = strpos ($this->page["Title"], "/Sections/Genres/"); + if ( $genre_s === FALSE ) return FALSE; + $genre_s = strpos ($this->page["Title"], ">", $genre_s); + $genre_e = strpos ($this->page["Title"], "<", $genre_s); + $this->main_genre = substr ($this->page["Title"], $genre_s + 1, $genre_e - $genre_s - 1); + } + return $this->main_genre; + } + + /** Get all genres the movie is registered for + * @method genres + * @return array genres (array[0..n] of strings) + */ + function genres () { + if ($this->main_genres == "") { + if ($this->page["Title"] == "") $this->openpage ("Title"); + $this->main_genres = array(); + $genre_s = strpos($this->page["Title"],"/Sections/Genres/") -5; + if ($genre_s === FALSE) return array(); // no genre found + if ($genre_s < 0) return array(); // no genre found + $genre_e = strpos($this->page["Title"],"/rg/title-tease/",$genre_s); + $block = substr($this->page["Title"],$genre_s,$genre_e-$genre_s); + $diff = $genre_e-$genre_s; + $genre_s = 0; + $genre_e = 0; + $i = 0; + while (strpos($block, "/Sections/Genres/", $genre_e) > $genre_s) { + $genre_s = strpos ($block, "/Sections/Genres/", $genre_s); + $genre_s = strpos ($block, ">", $genre_s); + $genre_e = strpos ($block, "<", $genre_s); + $this->main_genres[$i] = substr ($block, $genre_s + 1, $genre_e - $genre_s - 1); + $i++; + } + } + return $this->main_genres; + } + + /** Get colors + * @method colors + * @return array colors (array[0..1] of strings) + */ + function colors () { + if ($this->main_colors == "") { + if ($this->page["Title"] == "") $this->openpage ("Title"); + $color_s = 0; + $color_e = 0; + $i = 0; + while (strpos ($this->page["Title"], "/List?color-info", $color_e) > $color_s) { + $color_s = strpos ($this->page["Title"], "/List?color-info", $color_s); + $color_s = strpos ($this->page["Title"], ">", $color_s); + $color_e = strpos ($this->page["Title"], "<", $color_s); + $this->main_colors[$i] = substr ($this->page["Title"], $color_s + 1, $color_e - $color_s - 1); + $i++; + } + } + return $this->main_colors; + } + + /** Get the main tagline for the movie + * @method tagline + * @return string tagline + */ + function tagline () { + if ($this->main_tagline == "") { + if ($this->page["Title"] == "") $this->openpage ("Title"); + $tag_s = strpos ($this->page["Title"], "Tagline:"); + if ( $tag_s == 0) return FALSE; + $tag_s = strpos ($this->page["Title"], ">", $tag_s); + $tag_e = strpos ($this->page["Title"], "<", $tag_s); + $this->main_tagline = substr ($this->page["Title"], $tag_s + 1, $tag_e - $tag_s - 1); + } + return $this->main_tagline; + } + + /** Get the main Plot outline for the movie + * @method plotoutline + * @return string plotoutline + */ + function plotoutline () { + if ($this->main_plotoutline == "") { + if ($this->page["Title"] == "") $this->openpage ("Title"); + $plotoutline_s = strpos ($this->page["Title"], "Plot:"); + if ( $plotoutline_s == 0) return FALSE; + $plotoutline_s = strpos ($this->page["Title"], ">", $plotoutline_s); + $plotoutline_e = strpos ($this->page["Title"], "<", $plotoutline_s); + $this->main_plotoutline = substr ($this->page["Title"], $plotoutline_s + 1, $plotoutline_e - $plotoutline_s - 1); + } + return $this->main_plotoutline; + } + + /** Get the movies plot(s) + * @method plot + * @return array plot (array[0..n] of strings) + */ + function plot () { + if ($this->plot_plot == "") { + if ($this->page["Plot"] == "") $this->openpage ("Plot"); + $plot_e = 0; + $i = 0; + $this->plot_plot = array(); + while (($plot_s = strpos ($this->page["Plot"], "

", $plot_e)) !== FALSE) + { + $plot_e = strpos ($this->page["Plot"], "

", $plot_s); + $tmplot = substr ($this->page["Plot"], $plot_s + 19, $plot_e - $plot_s - 19); + $tmplot = str_replace("href=\"/", "href=\"http://". $this->imdbsite ."/", $tmplot); + $this->plot_plot[$i] = $tmplot; + $i++; + } + } + return $this->plot_plot; + } + + /** Get all available taglines for the movie + * @method taglines + * @return array taglines (array[0..n] of strings) + */ + function taglines () { + if ($this->taglines == "") { + if ($this->page["Taglines"] == "") $this->openpage ("Taglines"); + $tags_e = 0; + $i = 0; + $tags_s = strpos ($this->page["Taglines"], "", $tags_e); + $tagend = strpos ($this->page["Taglines"], "
", $tags_s); + $this->taglines = array(); + while (($tags_s = strpos ($this->page["Taglines"], "

", $tags_e)) < $tagend) { + $tags_e = strpos ($this->page["Taglines"], "

", $tags_s); + $tmptag = substr ($this->page["Taglines"], $tags_s + 3, $tags_e - $tags_s - 3); + if (preg_match("/action\=\"\//i",$tmptag)) continue; + $this->taglines[$i] = $tmptag; + $i++; + } + } + return $this->taglines; + } + + /** Get rows for a given table on the page + * @method get_table_rows + * @param string html + * @param string table_start + * @return mixed rows (FALSE if table not found, array[0..n] of strings otherwise) + */ + function get_table_rows ( $html, $table_start ){ + $row_s = strpos ( $html, ">".$table_start."<"); + $row_e = $row_s; + if ( $row_s == 0 ) return FALSE; + $endtable = strpos($html, "", $row_s); + $i=0; + while ( ($row_e + 5 < $endtable) && ($row_s != 0) ){ + $row_s = strpos ( $html, "", $row_s); + $row_e = strpos ($html, "", $row_s); + $temp = trim(substr ($html, $row_s + 4 , $row_e - $row_s - 4)); + if ( strncmp( $temp, "'); + $row_e = $row_s; + if ( $row_s == 0 ) return FALSE; + $endtable = strpos($html, "", $row_s); + $i=0; + while ( ($row_e + 5 < $endtable) && ($row_s != 0) ){ + $row_s = strpos ( $html, "", $row_s); + $temp = trim(substr ($html, $row_s , $row_e - $row_s)); +# $row_x = strpos( $temp, '' ); + $temp = trim(substr($temp,$row_x)); + if ( strncmp( $temp, "" , $cel_s); + $cel_e = strpos( $row, "", $cel_s); + $cels[$i] = substr( $row, $cel_s + 1 , $cel_e - $cel_s - 1); + $i++; + } + return $cels; + } + + /** Get the IMDB name (?) + * @method get_imdbname + * @param string href + * @return string + */ + function get_imdbname( $href){ + if ( strlen( $href) == 0) return $href; + $name_s = 15; + $name_e = strpos ( $href, '"', $name_s); + if ( $name_e != 0){ + return substr( $href, $name_s, $name_e -1 - $name_s); + }else{ + return $href; + } + } + + /** Get the director(s) of the movie + * @method director + * @return array director (array[0..n] of strings) + */ + function director () { + if ($this->credits_director == ""){ + if ($this->page["Credits"] == "") $this->openpage ("Credits"); + } + $director_rows = $this->get_table_rows($this->page["Credits"], "Directed by"); + for ( $i = 0; $i < count ($director_rows); $i++){ + $cels = $this->get_row_cels ($director_rows[$i]); + if (!isset ($cels[0])) return array(); + $dir["imdb"] = $this->get_imdbname($cels[0]); + $dir["name"] = strip_tags($cels[0]); + $role = trim(strip_tags($cels[2])); + if ( $role == ""){ + $dir["role"] = NULL; + }else{ + $dir["role"] = $role; + } + $this->credits_director[$i] = $dir; + } + return $this->credits_director; + } + + /** Get the creator of the tv series + * @method creator + * @return string + */ + function creator(){ + if ($this->main_creator == "") { + if ($this->page["Title"] == "") $this->openpage ("Title"); + $vote_s = strpos ($this->page["Title"], "Creator:"); + if ( $vote_s == 0) return false; + $vote_s = strpos ($this->page["Title"], "page["Title"], "", $vote_s); + $this->main_creator = substr ($this->page["Title"], $vote_s, $vote_e - $vote_s); + $this->main_creator = str_replace("/name","http://".$this->imdbsite."/name", $this->main_creator); + $this->main_creator .= ""; + } + return $this->main_creator; + } + + /** Get the actors + * @method cast + * @return array cast (array[0..n] of strings) + */ + function cast () { + if ($this->credits_cast == "") { + if ($this->page["Credits"] == "") $this->openpage ("Credits"); + } + $cast_rows = $this->get_table_rows_cast($this->page["Credits"], "Cast"); + for ( $i = 0; $i < count ($cast_rows); $i++){ + $cels = $this->get_row_cels ($cast_rows[$i]); + if (!isset ($cels[0])) return array(); + $dir["imdb"] = $this->get_imdbname($cels[0]); + $dir["name"] = strip_tags($cels[0]); + $role = strip_tags($cels[2]); + if ( $role == ""){ + $dir["role"] = NULL; + }else{ + $dir["role"] = $role; + } + $this->credits_cast[$i] = $dir; + } + return $this->credits_cast; + } + + /** Get the writer(s) + * @method writing + * @return array writers (array[0..n] of strings) + */ + function writing () { + if ($this->credits_writing == "") { + if ($this->page["Credits"] == "") $this->openpage ("Credits"); + } + $this->credits_writing = array(); + $writing_rows = $this->get_table_rows($this->page["Credits"], "Writing credits"); + for ( $i = 0; $i < count ($writing_rows); $i++){ + $cels = $this->get_row_cels ($writing_rows[$i]); + if ( count ( $cels) > 2){ + $wrt["imdb"] = $this->get_imdbname($cels[0]); + $wrt["name"] = strip_tags($cels[0]); + $role = strip_tags($cels[2]); + if ( $role == ""){ + $wrt["role"] = NULL; + }else{ + $wrt["role"] = $role; + } + $this->credits_writing[$i] = $wrt; + } + } + return $this->credits_writing; + } + + /** Obtain the producer(s) + * @method producer + * @return array producer (array[0..n] of strings) + */ + function producer () { + if ($this->credits_producer == "") { + if ($this->page["Credits"] == "") $this->openpage ("Credits"); + } + $this->credits_producer = array(); + $producer_rows = $this->get_table_rows($this->page["Credits"], "Produced by"); + for ( $i = 0; $i < count ($producer_rows); $i++){ + $cels = $this->get_row_cels ($producer_rows[$i]); + if ( count ( $cels) > 2){ + $wrt["imdb"] = $this->get_imdbname($cels[0]); + $wrt["name"] = strip_tags($cels[0]); + $role = strip_tags($cels[2]); + if ( $role == ""){ + $wrt["role"] = NULL; + }else{ + $wrt["role"] = $role; + } + $this->credits_producer[$i] = $wrt; + } + } + return $this->credits_producer; + } + + /** Obtain the composer(s) ("Original Music by...") + * @method composer + * @return array composer (array[0..n] of strings) + */ + function composer () { + if ($this->credits_composer == "") { + if ($this->page["Credits"] == "") $this->openpage ("Credits"); + } + $this->credits_composer = array(); + $composer_rows = $this->get_table_rows($this->page["Credits"], "Original Music by"); + for ( $i = 0; $i < count ($composer_rows); $i++){ + $cels = $this->get_row_cels ($composer_rows[$i]); + if ( count ( $cels) > 2){ + $wrt["imdb"] = $this->get_imdbname($cels[0]); + $wrt["name"] = strip_tags($cels[0]); + $role = strip_tags($cels[2]); + if ( $role == ""){ + $wrt["role"] = NULL; + }else{ + $wrt["role"] = $role; + } + $this->credits_composer[$i] = $wrt; + } + } + return $this->credits_composer; + } + + /** Get cover photo + * @method photo + * @return mixed photo (string url if found, FALSE otherwise) + */ + function photo () { + if ($this->main_photo == "") { + if ($this->page["Title"] == "") $this->openpage ("Title"); +# $tag_s = strpos ($this->page["Title"], "\"cover\"");page["Title"], "page["Title"], "http://ia.imdb.com/media",$tag_s); + $tag_s = strpos ($this->page["Title"], "http://",$tag_s); + $tag_e = strpos ($this->page["Title"], '"', $tag_s); + $this->main_photo = substr ($this->page["Title"], $tag_s, $tag_e - $tag_s); + if ($tag_s == 0) return FALSE; + } + return $this->main_photo; + } + + /** Save the photo to disk + * @method savephoto + * @param string path + * @return boolean success + */ + function savephoto ($path) { + $req = new IMDB_Request(""); + $photo_url = $this->photo (); + if (!$photo_url) return FALSE; + $req->setUrl($photo_url); + $response = $req->send(); + if (strpos($response->getHeader("Content-Type"),'image/jpeg') === 0 + || strpos($response->getHeader("Content-Type"),'image/gif') === 0 + || strpos($response->getHeader("Content-Type"), 'image/bmp') === 0 ){ + $fp = $response->getBody(); + }else{ + //echo "
*photoerror* ".$photo_url.": Content Type is '".$req->getResponseHeader("Content-Type")."'
"; + return false; + } + + $fp2 = fopen ($path, "w"); + if ((!$fp) || (!$fp2)){ + echo "image error...
"; + return false; + } + + fputs ($fp2, $fp); + return TRUE; + } + + /** Get the URL for the movies cover photo + * @method photo_localurl + * @return mixed url (string URL or FALSE if none) + */ + function photo_localurl(){ + $path = $this->photodir.$this->imdbid().".jpg"; + if ( @fopen($path,"r")) return $this->photoroot.$this->imdbid().'.jpg'; + if ($this->savephoto($path)) return $this->photoroot.$this->imdbid().'.jpg'; + return false; + } + + /** Get country of production + * @method country + * @return array country (array[0..n] of string) + */ + function country () + { + if ($this->main_country == "") + { + if ($this->page["Title"] == "") $this->openpage ("Title"); + $this->main_country = array(); + $country_s = strpos($this->page["Title"],"/Sections/Countries/") -5; + if ($country_s === FALSE) return array(); // no country found + if ($country_s < 0) return array(); // no country found + //print($country_s); + //print($this->page["Title"]); + $country_e = strpos($this->page["Title"],"
",$country_s); + $block = substr($this->page["Title"],$country_s,$country_e-$country_s); + $country_s = 0; + $country_e = 0; + $i = 0; + while (strpos ($block, "/Sections/Countries/", $country_e) > $country_s) + { + $country_s = strpos ($block, "/Sections/Countries/", $country_s); + $country_s = strpos ($block, ">", $country_s); + $country_e = strpos ($block, "<", $country_s); + $this->main_country[$i] = substr ($block, $country_s + 1, $country_e - $country_s - 1); + $i++; + } + } + return $this->main_country; + } + + /** Get movies alternative names + * @method alsoknow + * @return array aka (array[0..n] of strings) + */ + function alsoknow () { + if ($this->main_alsoknow == "") { + if ($this->page["Title"] == "") $this->openpage ("Title"); + $ak_s = strpos ($this->page["Title"], "Also Known As:"); + if ($ak_s>0) $ak_s += 19; + if ($ak_s == 0) $ak_s = strpos ($this->page["Title"], "Alternativ:"); + if ($ak_s == 0) return array(); + $alsoknow_end = strpos ($this->page["Title"], "
", $ak_s); + $alsoknow_all = strip_tags(substr($this->page["Title"], $ak_s, $alsoknow_end - $ak_s), '
'); + $alsoknow_arr = explode ( "
", $alsoknow_all); + $j=0; + for ( $i=0; $i< count($alsoknow_arr); $i++){ + if (strpos($alsoknow_arr[$i],"href=")!==FALSE) continue; // link to more AKAs + $alsoknow_arr[$i] = trim($alsoknow_arr[$i]); + if (strlen($alsoknow_arr[$i])>0) { + $tmparr = explode('(', $alsoknow_arr[$i]); + unset($ak_temp); + $ak_temp["title"]= $tmparr[0]; + $elems = count($tmparr); + for ($k=1;$k<$elems;++$k) { + if (strpos($tmparr[$k],')')) + $var = substr($tmparr[$k],0,strrpos($tmparr[$k],')')); + else $var = $tmparr[$k]; + if (!isset($ak_temp["year"])) { + if (is_numeric($var)) { + $ak_temp["year"] = $var; + continue; + } else { + $ak_temp["year"] = ""; + } + if ( ($country_e = strpos($var, ":")) != 0){ + $ak_temp["country"]= substr( $var, 0, $country_e); + $ak_temp["comment"]= substr( $var, $country_e+2, strlen($var) - $country_e -2); + }else{ + $ak_temp["country"]= $var; + } + } elseif (!isset($ak_temp["country"])) { + if ( ($country_e = strpos($var, ":")) != 0){ + $ak_temp["country"]= substr( $var, 0, $country_e); + $ak_temp["comment"]= substr( $var, $country_e+2, strlen($var) - $country_e -2); + }else{ + $ak_temp["country"]= $var; + } + } else { + if (strpos($var,')')) + $var = substr($var,0,strrpos($var,')')); + if (isset($ak_temp["comment"]) && !empty($ak_temp["comment"])) $ak_temp["comment"] .= " $var"; + else $ak_temp["comment"] = $var; + } + } + if (!isset($ak_temp["year"])) $ak_temp["year"] = ""; + if (!isset($ak_temp["country"])) $ak_temp["country"] = ""; + if (!isset($ak_temp["comment"])) $ak_temp["comment"] = ""; + $this->main_alsoknow[$j] = $ak_temp; + $j++; + } + } + } + return $this->main_alsoknow; + } + + /** Get sound formats + * @method sound + * @return array sound (array[0..n] of strings) + */ + function sound () { + if ($this->main_sound == "") { + if ($this->page["Title"] == "") $this->openpage ("Title"); + $sound_s = 0; + $sound_e = 0; + $i = 0; + while (strpos ($this->page["Title"], "/List?sound", $sound_e) > $sound_s) { + $sound_s = strpos ($this->page["Title"], "/List?sound", $sound_s); + $sound_s = strpos ($this->page["Title"], ">", $sound_s); + $sound_e = strpos ($this->page["Title"], "<", $sound_s); + $this->main_sound[$i] = substr ($this->page["Title"], $sound_s + 1, $sound_e - $sound_s - 1); + $i++; + } + } + return $this->main_sound; + } + + /** Get the MPAA data (PG?) + * @method mpaa + * @return array mpaa (array[country]=rating) + */ + function mpaa () { // patch by Brian Ruth not yet tested (by me...) + if (empty($this->main_mpaa)) { + if ($this->page["Title"] == "") $this->openpage (""); + $mpaa_s = 0; + $mpaa_e = 0; + $this->main_mpaa = array(); + while (strpos ($this->page["Title"], "/List?certificates", $mpaa_e) > $mpaa_s) { + $mpaa_s = strpos ($this->page["Title"], "/List?certificates", $mpaa_s); + $mpaa_s = strpos ($this->page["Title"], ">", $mpaa_s); + $mpaa_c = strpos ($this->page["Title"], ":", $mpaa_s); + $mpaa_e = strpos ($this->page["Title"], "<", $mpaa_s); + $country = substr ($this->page["Title"], $mpaa_s + 1, $mpaa_c - $mpaa_s - 1); + $rating = substr ($this->page["Title"], $mpaa_c + 1, $mpaa_e - $mpaa_c - 1); + $this->main_mpaa[$country] = $rating; + } + } + return $this->main_mpaa; + } + + } // end class imdb + + #====================================================[ IMDB Search class ]=== + /** Search the IMDB for a title and obtain the movies IMDB ID + * @package Api + * @class imdbsearch + * @extends imdb_config + */ + class imdbsearch extends imdb_config{ + var $page = ""; + var $name = NULL; + var $resu = array(); + var $url = "http://www.imdb.com/"; + + /** Read the config + * @constructor imdbsearch + */ + function imdbsearch() { + $this->imdb_config(); + } + + /** Set the name (title) to search for + * @method setsearchname + */ + function setsearchname ($name) { + $this->name = $name; + $this->page = ""; + $this->url = NULL; + } + + /** Set the URL + * @method seturl + */ + function seturl($url){ + $this->url = $url; + } + + /** Create the IMDB URL for the movie search + * @method mkurl + * @return string url + */ + function mkurl () { + if ($this->url !== NULL){ + $url = $this->url; + }else{ + if (!isset($this->maxresults)) $this->maxresults = 20; + switch ($this->searchvariant) { + case "moonface" : $query = ";more=tt;nr=1"; // @moonface variant (untested) + case "sevec" : $query = "&restrict=Movies+only&GO.x=0&GO.y=0&GO=search;tt=1"; // Sevec ori + default : $query = ";tt=on"; // Izzy + } + if ($this->maxresults > 0) $query .= ";mx=20"; + $url = "http://".$this->imdbsite."/find?q=".rawurlencode($this->name).$query; + } + return $url; + } + + /** Setup search results + * @method results + * @return array results + */ + function results ($url="") { + if ($this->page == "") { + if (empty($url)) $url = $this->mkurl(); + $be = new IMDB_Request($url); + $be->sendrequest(); + $fp = $be->getResponseBody(); + if ( !$fp ){ + if ($header = $be->getResponseHeader("Location")){ + if (strpos($header,$this->imdbsite."/find?")) { + return $this->results($header); + break(4); + } + #--- @moonface variant (not tested) + # $idpos = strpos($header, "/Title?") + 7; + # $this->resu[0] = new imdb( substr($header, $idpos,7)); + #--- end @moonface / start sevec variant + $url = explode("/",$header); + $id = substr($url[count($url)-2],2); + $this->resu[0] = new imdb($id); + #--- end Sevec variant + return $this->resu; + }else{ + return NULL; + } + } + $this->page = $fp; + } // end (page="") + + $searchstring = array( '
page, $srch, $res_e)) > 10)) { + $res_e = strpos ($this->page, "(", $res_s); + $tmpres = new imdb ( substr($this->page, $res_s+$len, 7)); // make a new imdb object by id + $ts = strpos($this->page, ">",$res_s) +1; // >movie title + $te = strpos($this->page,"<",$ts); + $tmpres->main_title = substr($this->page,$ts,$te-$ts); + $ts = strpos($this->page,"(",$te) +1; + $te = strpos($this->page,")",$ts); + $tmpres->main_year=substr($this->page,$ts,$te-$ts); + $i++; + $this->resu[$i] = $tmpres; + } + } + return $this->resu; + } +} // end class imdbsearch + +?> diff --git a/imdb/imdb_config.php b/imdb/imdb_config.php new file mode 100644 index 00000000..5493cdbc --- /dev/null +++ b/imdb/imdb_config.php @@ -0,0 +1,92 @@ + # + # http://www.qumran.org/homes/izzy/ # + # ------------------------------------------------------------------------- # + # This program is free software; you can redistribute and/or modify it # + # under the terms of the GNU General Public License (see doc/LICENSE) # + ############################################################################# + + /* $Id: imdb_config.php,v 1.3 2007/02/26 22:44:14 izzy Exp $ */ + +// the proxy to use for connections to imdb. +// leave it empty for no proxy. +// this is only supported with PEAR. +define ('PROXY', ""); +define ('PROXY_PORT', ""); + +/** Configuration part of the IMDB classes + * @package Api + * @class imdb_config + */ +class imdb_config { + var $imdbsite; + var $cachedir; + var $usecache; + var $storecache; + var $cache_expire; + var $photodir; + var $photoroot; + var $timeout; + var $imageext; + + /** Constructor and only method of this base class. + * There's no need to call this yourself - you should just place your + * configuration data here. + * @constructor imdb_config + */ + function imdb_config(){ + // protocol prefix + $this->protocol_prefix = "http://"; + // the imdb server to use. + // choices are us.imdb.com uk.imdb.com german.imdb.com and italian.imdb.com + // the localized ones (i.e. italian and german) are only qualified to find + // the movies IMDB ID -- but parsing for the details will fail at the moment. + $this->imdbsite = "www.imdb.com"; + // cachedir should be writable by the webserver. This doesn't need to be + // under documentroot. + $this->cachedir = './imdb/cache'; + //whether to use a cached page to retrieve the information if available. + $this->usecache = true; + //whether to store the pages retrieved for later use. + $this->storecache = true; + // automatically delete cached files older than X secs + $this->cache_expire = 365*24*60*60; + // the extension of cached images + $this->imageext = '.jpg'; + // images are stored here after calling photo_localurl() + // this needs to be under documentroot to be able to display them on your pages. + $this->photodir = './imdb/images/'; + // this is the URL to the images, i.e. start at your servers DOCUMENT_ROOT + // when specifying absolute path + $this->photoroot = './imdb/images/'; + // TWEAKING OPTIONS: + // limit the result set to X movies (0 to disable, comment out to use default of 20) + $this->maxresults = 5000; + // timeout for retriving info, uint in second + $this->timeout = 120; + // out dated time for retrived info, (7 days for default) + $this->outdate_time = 60*60*24*7; + // search variants. Valid options are "sevec" and "moonface". Comment out + // (or set to empty string) to use the default + $this->searchvariant = ""; + } + +} + +require_once ("HTTP/Request2.php"); + +class IMDB_Request extends HTTP_Request2 +{ + function IMDB_Request($url){ + parent::__construct($url); + if ( PROXY != ""){ + $this->setConfig(array('proxy_host' => PROXY, 'proxy_port' => PROXY_PORT)); + } + $this->setConfig('follow_redirects', false); + $this->setHeader("User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)"); + } +} +?> diff --git a/include/.htaccess b/include/.htaccess new file mode 100644 index 00000000..4aa5ec94 --- /dev/null +++ b/include/.htaccess @@ -0,0 +1,3 @@ +Options -Indexes +Order allow,deny +Deny from all diff --git a/include/benc.php b/include/benc.php new file mode 100644 index 00000000..14c9251c --- /dev/null +++ b/include/benc.php @@ -0,0 +1,133 @@ + "string", 'value' => $v, 'strlen' => strlen($ss), 'string' => $ss); + } + if (preg_match('/^i(\d+)e/', $s, $m)) { + $v = $m[1]; + $ss = "i" . $v . "e"; + if ($v === "-0") + return; + if ($v[0] == "0" && strlen($v) != 1) + return; + return array('type' => "integer", 'value' => $v, 'strlen' => strlen($ss), 'string' => $ss); + } + switch ($s[0]) { + case "l": + return bdec_list($s); + case "d": + return bdec_dict($s); + default: + return; + } +} +function bdec_list($s) { + if ($s[0] != "l") + return; + $sl = strlen($s); + $i = 1; + $v = array(); + $ss = "l"; + for (;;) { + if ($i >= $sl) + return; + if ($s[$i] == "e") + break; + $ret = bdec(substr($s, $i)); + if (!isset($ret) || !is_array($ret)) + return; + $v[] = $ret; + $i += $ret["strlen"]; + $ss .= $ret["string"]; + } + $ss .= "e"; + return array('type' => "list", 'value' => $v, 'strlen' => strlen($ss), 'string' => $ss); +} +function bdec_dict($s) { + if ($s[0] != "d") + return; + $sl = strlen($s); + $i = 1; + $v = array(); + $ss = "d"; + for (;;) { + if ($i >= $sl) + return; + if ($s[$i] == "e") + break; + $ret = bdec(substr($s, $i)); + if (!isset($ret) || !is_array($ret) || $ret["type"] != "string") + return; + $k = $ret["value"]; + $i += $ret["strlen"]; + $ss .= $ret["string"]; + if ($i >= $sl) + return; + $ret = bdec(substr($s, $i)); + if (!isset($ret) || !is_array($ret)) + return; + $v[$k] = $ret; + $i += $ret["strlen"]; + $ss .= $ret["string"]; + } + $ss .= "e"; + return array('type' => "dictionary", 'value' => $v, 'strlen' => strlen($ss), 'string' => $ss); +} +?> \ No newline at end of file diff --git a/include/bittorrent.php b/include/bittorrent.php new file mode 100644 index 00000000..a09a15db --- /dev/null +++ b/include/bittorrent.php @@ -0,0 +1,13 @@ +".PROJECTNAME.""); +define("THISTRACKER","General"); +$showversion = " - Powered by ".PROJECTNAME; +$rootpath=realpath(dirname(__FILE__) . '/..'); +set_include_path(get_include_path() . PATH_SEPARATOR . $rootpath); +$rootpath .= "/"; +include($rootpath . 'include/core.php'); +include_once($rootpath . 'include/functions.php'); diff --git a/include/bittorrent_announce.php b/include/bittorrent_announce.php new file mode 100644 index 00000000..ce8656a2 --- /dev/null +++ b/include/bittorrent_announce.php @@ -0,0 +1,7 @@ + diff --git a/include/browser/browseremulator.class.php b/include/browser/browseremulator.class.php new file mode 100644 index 00000000..0ca81524 --- /dev/null +++ b/include/browser/browseremulator.class.php @@ -0,0 +1,270 @@ +resetHeaderLines (); + $this->resetPort (); + } + + /** + * Adds a single header field to the HTTP request header. The resulting header + * line will have the format + * $name: $value\n + **/ + function addHeaderLine ($name, $value) { + $this->headerLines[$name] = $value; + } + + /** + * Deletes all custom header lines. This will not remove the User-Agent header field, + * which is necessary for correct operation. + **/ + function resetHeaderLines () { + $this->headerLines = Array (); + + /*******************************************************************************/ + /************** YOU MAX SET THE USER AGENT STRING HERE *******************/ + /* */ + /* default is "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)", */ + /* which means Internet Explorer 6.0 on WinXP */ + + $this->headerLines["User-Agent"] = + "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)"; + + /*******************************************************************************/ + + } + + /** + * Add a post parameter. Post parameters are sent in the body of an HTTP POST request. + **/ + function addPostData ($name, $value) { + $this->postData[$name] = $value; + } + + /** + * Deletes all custom post parameters. + **/ + function resetPostData () { + $this->postData = Array (); + } + + /** + * Sets an auth user and password to use for the request. + * Set both as empty strings to disable authentication. + **/ + function setAuth ($user, $pass) { + $this->authUser = $user; + $this->authPass = $pass; + } + + /** + * Selects a custom port to use for the request. + **/ + function setPort ($portNumber) { + $this->port = $portNumber; + } + + /** + * Resets the port used for request to the HTTP default (80). + **/ + function resetPort () { + $this->port = 80; + } + + /** + * Make an fopen call to $url with the parameters set by previous member + * method calls. Send all set headers, post data and user authentication data. + * Returns a file handle on success, or false on failure. + **/ + function fopen ($url) { + $debug = false; + + $this->lastResponse = Array (); + + preg_match ("~([a-z]*://)?([^:^/]*)(:([0-9]{1,5}))?(/.*)?~i", $url, + $matches); + if ($debug) + var_dump ($matches); + $protocol = $matches[1]; + $server = $matches[2]; + $port = $matches[4]; + $path = $matches[5]; + if ($port != "") { + $this->setPort ($port); + } + if ($path == "") + $path = "/"; + $socket = false; + $socket = fsockopen ($server, $this->port); + if ($socket) { + $this->headerLines["Host"] = $server; + + if ($this->authUser != "" AND $this->authPass != "") { + $headers["Authorization"] = + "Basic ".base64_encode ($this->authUser.":".$this-> + authPass); + } + + if (count ($this->postData) == 0) { + $request = "GET $path HTTP/1.0\r\n"; + } + else { + $request = "POST $path HTTP/1.0\r\n"; + } + + if ($debug) + echo $request; + fputs ($socket, $request); + + if (count ($this->postData) > 0) { + $PostStringArray = Array (); + foreach ($this->postData AS $key => $value) { + $PostStringArray[] = "$key=$value"; + } + $PostString = join ("&", $PostStringArray); + $this->headerLines["Content-Length"] = + strlen ($PostString); + } + + foreach ($this->headerLines AS $key => $value) { + if ($debug) + echo "$key: $value\n"; + fputs ($socket, "$key: $value\r\n"); + } + if ($debug) + echo "\n"; + fputs ($socket, "\r\n"); + if (count ($this->postData) > 0) { + if ($debug) + echo "$PostString"; + fputs ($socket, $PostString."\r\n"); + } + } + if ($debug) + echo "\n"; + if ($socket) { + $line = fgets ($socket, 1000); + if ($debug) + echo $line; + $this->lastResponse[] = $line; + $status = substr ($line, 9, 3); + while (trim ($line = fgets ($socket, 1000)) != "") { + if ($debug) + echo "$line"; + $this->lastResponse[] = $line; + if ($status == "401" AND strpos ($line, "WWW-Authenticate: Basic realm=\"") === 0) { + fclose ($socket); + return FALSE; + } + } + } + return $socket; + } + + /** + * Make an file call to $url with the parameters set by previous member + * method calls. Send all set headers, post data and user authentication data. + * Returns the requested file as an array on success, or false on failure. + **/ + function file ($url) { + $file = Array (); + $socket = $this->fopen ($url); + if ($socket) { + $file = Array (); + while (!feof ($socket)) { + $file[] = fgets ($socket, 10000); + } + } + else { + return FALSE; + } + return $file; + } + + function getLastResponseHeaders () { + return $this->lastResponse; + } +} + + + +// example code +/* +$be = new BrowserEmulator(); +//$be->addHeaderLine("Referer", "http://previous.server.com/"); +//$be->addHeaderLine("Accept-Encoding", "x-compress; x-zip"); +//$be->addPostData("Submit", "OK"); +//$be->addPostData("item", "42"); +//$be->setAuth("admin", "secretpass"); +// also possible: +// $be->setPort(10080); + +$file = $be->fopen("http://us.imdb.com/Title?0209144"); +$response = $be->getLastResponseHeaders(); + +while ($line = fgets($file, 1024)) { + // do something with the file + echo $line; +} +fclose($file); + +*/ + +?> diff --git a/include/browser/info_extractor.php b/include/browser/info_extractor.php new file mode 100644 index 00000000..2f6c5233 --- /dev/null +++ b/include/browser/info_extractor.php @@ -0,0 +1,114 @@ + '', 'Cloudsize' => '', 'Link' => ''))", then the first element in res_where_array could be, say, "3", which corrsponds to 'Name'), array string res_array(one or multi-dimensional array for the extraced info) + * @return boolean found_pattern + */ + function find_pattern($src, $regex, $multiple, $res_where_array) + { + $res_array = array(); + if($multiple == true) + { + if(!preg_match_all($regex,$src,$info_block,PREG_SET_ORDER)) + return false; + else + { + $counter_infoblock = 0; + foreach($info_block as $info) + { + $counter_reswhere = 0; + foreach ($res_where_array as $res_where_array_each) + { + $res_array[$counter_infoblock][$counter_reswhere] = $info[$res_where_array_each]; + $counter_reswhere++; + } + $counter_infoblock++; + } + return $res_array; + } + } + else + { + if(!preg_match($regex,$src,$info)) + return false; + else + { + $counter = 0; + foreach ($res_where_array as $res_where_array_each) + { + $res_array[$counter] = $info[$res_where_array_each]; + $counter++; + } + return $res_array; + } + } + } + + /** remove a given pattern from a given string + * @method truncate + * @param string src(source string), string $regex_s(starting needle), string $regex_e(ending needle), integer max(set it to 1 if you are sure the pattern only occurs once, otherwise, it indicates the maximum possible occurance in case of dead loop), boolean all(if remove all or just the pattern) + * @return string processed string + */ + function remove($src, $regex_s, $regex_e, $max = 100, $all = false) + { + $ret = ""; + $ret = preg_replace("/" . $regex_s . "((\s|.)+?)" . $regex_e . "/i", ($all == false ? "\\1" : ""), $src, $max); + return $ret; + } + + /** trim a given array of strings types from a given string + * @method trim_str + * @param string src(source string), string array regex_trim_array(specifies strings to be trimmed), integersafe_counter(maximum possible occurance of string to be trimmed) + * @return string processed string + */ + function trim_str($src, $regex_trim_array, $safe_counter =10) + { + $ret = ""; + + while($safe_counter>0) + { + $safe_counter--; + $break_flag = true; + foreach($regex_trim_array as $regex_trim_array_each) + { + $ret = preg_replace("/^((" . $regex_trim_array_each . ")*)((\s|.)+?)((" . $regex_trim_array_each . ")*)$/i","\\3", trim($src), 1); + if($ret != $src) + $break_flag = false; + $src = $ret; + } + if($break_flag) + break; + continue; + } + return $ret; + } +} +?> diff --git a/include/cleanup.php b/include/cleanup.php new file mode 100644 index 00000000..2df6510b --- /dev/null +++ b/include/cleanup.php @@ -0,0 +1,762 @@ +'; + ob_flush(); + flush(); +} +function docleanup($forceAll = 0, $printProgress = false) { + //require_once(get_langfile_path("cleanup.php",true)); + global $lang_cleanup_target; + global $torrent_dir, $signup_timeout, $max_dead_torrent_time, $autoclean_interval_one, $autoclean_interval_two, $autoclean_interval_three, $autoclean_interval_four, $autoclean_interval_five, $SITENAME,$bonus,$invite_timeout,$offervotetimeout_main,$offeruptimeout_main, $iniupload_main; + global $donortimes_bonus, $perseeding_bonus, $maxseeding_bonus, $tzero_bonus, $nzero_bonus, $bzero_bonus, $l_bonus; + global $expirehalfleech_torrent, $expirefree_torrent, $expiretwoup_torrent, $expiretwoupfree_torrent, $expiretwouphalfleech_torrent, $expirethirtypercentleech_torrent, $expirenormal_torrent, $hotdays_torrent, $hotseeder_torrent,$halfleechbecome_torrent,$freebecome_torrent,$twoupbecome_torrent,$twoupfreebecome_torrent, $twouphalfleechbecome_torrent, $thirtypercentleechbecome_torrent, $normalbecome_torrent, $deldeadtorrent_torrent; + global $neverdelete_account, $neverdeletepacked_account, $deletepacked_account, $deleteunpacked_account, $deletenotransfer_account, $deletenotransfertwo_account, $deletepeasant_account, $psdlone_account, $psratioone_account, $psdltwo_account, $psratiotwo_account, $psdlthree_account, $psratiothree_account, $psdlfour_account, $psratiofour_account, $psdlfive_account, $psratiofive_account, $putime_account, $pudl_account, $puprratio_account, $puderatio_account, $eutime_account, $eudl_account, $euprratio_account, $euderatio_account, $cutime_account, $cudl_account, $cuprratio_account, $cuderatio_account, $iutime_account, $iudl_account, $iuprratio_account, $iuderatio_account, $vutime_account, $vudl_account, $vuprratio_account, $vuderatio_account, $exutime_account, $exudl_account, $exuprratio_account, $exuderatio_account, $uutime_account, $uudl_account, $uuprratio_account, $uuderatio_account, $nmtime_account, $nmdl_account, $nmprratio_account, $nmderatio_account, $getInvitesByPromotion_class; + global $enablenoad_advertisement, $noad_advertisement; + global $Cache; + global $rootpath; + + require_once($rootpath . '/lang/_target/lang_cleanup.php'); + + set_time_limit(0); + ignore_user_abort(1); + $now = time(); + +//Priority Class 1: cleanup every 15 mins +//2.update peer status + $deadtime = deadtime(); + $deadtime = date("Y-m-d H:i:s",$deadtime); + sql_query("DELETE FROM peers WHERE last_action < ".sqlesc($deadtime)) or sqlerr(__FILE__, __LINE__); + if ($printProgress) { + printProgress('update peer status'); + } +//11.calculate seeding bonus + $res = sql_query("SELECT DISTINCT userid FROM peers WHERE seeder = 'yes'") or sqlerr(__FILE__, __LINE__); + if (mysql_num_rows($res) > 0) + { + $sqrtof2 = sqrt(2); + $logofpointone = log(0.1); + $valueone = $logofpointone / $tzero_bonus; + $pi = 3.141592653589793; + $valuetwo = $bzero_bonus * ( 2 / $pi); + $valuethree = $logofpointone / ($nzero_bonus - 1); + $timenow = TIMENOW; + $sectoweek = 7*24*60*60; + while ($arr = mysql_fetch_assoc($res)) //loop for different users + { + $A = 0; + $count = 0; + $all_bonus = 0; + $torrentres = sql_query("select torrents.added, torrents.size, torrents.seeders from torrents LEFT JOIN peers ON peers.torrent = torrents.id WHERE peers.userid = $arr[userid] AND peers.seeder ='yes'") or sqlerr(__FILE__, __LINE__); + while ($torrent = mysql_fetch_array($torrentres)) + { + $weeks_alive = ($timenow - strtotime($torrent[added])) / $sectoweek; + $gb_size = $torrent[size] / 1073741824; + $temp = (1 - exp($valueone * $weeks_alive)) * $gb_size * (1 + $sqrtof2 * exp($valuethree * ($torrent[seeders] - 1))); + $A += $temp; + $count++; + } + if ($count > $maxseeding_bonus) + $count = $maxseeding_bonus; + $all_bonus = ($valuetwo * atan($A / $l_bonus) + ($perseeding_bonus * $count)) / (3600 / $autoclean_interval_one); + $is_donor = get_single_value("users","donor","WHERE id=".$arr['userid']); + if ($is_donor == 'yes' && $donortimes_bonus > 0) + $all_bonus = $all_bonus * $donortimes_bonus; + KPS("+",$all_bonus,$arr["userid"]); + } + } + if ($printProgress) { + printProgress('calculate seeding bonus'); + } + +//Priority Class 2: cleanup every 30 mins + $res = sql_query("SELECT value_u FROM avps WHERE arg = 'lastcleantime2'"); + $row = mysql_fetch_array($res); + if (!$row) { + sql_query("INSERT INTO avps (arg, value_u) VALUES ('lastcleantime2',".sqlesc($now).")") or sqlerr(__FILE__, __LINE__); + return; + } + $ts = $row[0]; + if ($ts + $autoclean_interval_two > $now && !$forceAll) { + return 'Cleanup ends at Priority Class 1'; + } else { + sql_query("UPDATE avps SET value_u = ".sqlesc($now)." WHERE arg='lastcleantime2'") or sqlerr(__FILE__, __LINE__); + } + + //2.5.update torrents' visibility + $deadtime = deadtime() - $max_dead_torrent_time; + sql_query("UPDATE torrents SET visible='no' WHERE visible='yes' AND last_action < FROM_UNIXTIME($deadtime) AND seeders=0") or sqlerr(__FILE__, __LINE__); + if ($printProgress) { + printProgress("update torrents' visibility"); + } +//Priority Class 3: cleanup every 60 mins + $res = sql_query("SELECT value_u FROM avps WHERE arg = 'lastcleantime3'"); + $row = mysql_fetch_array($res); + if (!$row) { + sql_query("INSERT INTO avps (arg, value_u) VALUES ('lastcleantime3',$now)") or sqlerr(__FILE__, __LINE__); + return; + } + $ts = $row[0]; + if ($ts + $autoclean_interval_three > $now && !$forceAll) { + return 'Cleanup ends at Priority Class 2'; + } else { + sql_query("UPDATE avps SET value_u = ".sqlesc($now)." WHERE arg='lastcleantime3'") or sqlerr(__FILE__, __LINE__); + } + + //4.update count of seeders, leechers, comments for torrents + $torrents = array(); + $res = sql_query("SELECT torrent, seeder, COUNT(*) AS c FROM peers GROUP BY torrent, seeder") or sqlerr(__FILE__, __LINE__); + while ($row = mysql_fetch_assoc($res)) { + if ($row["seeder"] == "yes") + $key = "seeders"; + else + $key = "leechers"; + $torrents[$row["torrent"]][$key] = $row["c"]; + } + + $res = sql_query("SELECT torrent, COUNT(*) AS c FROM comments GROUP BY torrent") or sqlerr(__FILE__, __LINE__); + while ($row = mysql_fetch_assoc($res)) { + $torrents[$row["torrent"]]["comments"] = $row["c"]; + } + + $fields = explode(":", "comments:leechers:seeders"); + $res = sql_query("SELECT id, seeders, leechers, comments FROM torrents") or sqlerr(__FILE__, __LINE__); + while ($row = mysql_fetch_assoc($res)) { + $id = $row["id"]; + $torr = $torrents[$id]; + foreach ($fields as $field) { + if (!isset($torr[$field])) + $torr[$field] = 0; + } + $update = array(); + foreach ($fields as $field) { + if ($torr[$field] != $row[$field]) + $update[] = "$field = " . $torr[$field]; + } + if (count($update)) + sql_query("UPDATE torrents SET " . implode(",", $update) . " WHERE id = $id") or sqlerr(__FILE__, __LINE__); + } + if ($printProgress) { + printProgress("update count of seeders, leechers, comments for torrents"); + } + + //set no-advertisement-by-bonus time out + sql_query("UPDATE users SET noad='no' WHERE noaduntil < ".sqlesc(date("Y-m-d H:i:s")).($enablenoad_advertisement == 'yes' ? " AND class < ".sqlesc($noad_advertisement) : "")); + if ($printProgress) { + printProgress("set no-advertisement-by-bonus time out"); + } + //12. update forum post/topic count + $forums = sql_query("select id from forums") or sqlerr(__FILE__, __LINE__); + while ($forum = mysql_fetch_assoc($forums)) + { + $postcount = 0; + $topiccount = 0; + $topics = sql_query("select id from topics where forumid=$forum[id]") or sqlerr(__FILE__, __LINE__); + while ($topic = mysql_fetch_assoc($topics)) + { + $res = sql_query("select count(*) from posts where topicid=$topic[id]") or sqlerr(__FILE__, __LINE__); + $arr = mysql_fetch_row($res); + $postcount += $arr[0]; + ++$topiccount; + } + sql_query("update forums set postcount=$postcount, topiccount=$topiccount where id=$forum[id]") or sqlerr(__FILE__, __LINE__); + } + $Cache->delete_value('forums_list'); + if ($printProgress) { + printProgress("update forum post/topic count"); + } + //14.cleanup offers + //Delete offers if not voted on after some time + if($offervotetimeout_main){ + $secs = (int)$offervotetimeout_main; + $dt = sqlesc(date("Y-m-d H:i:s",(TIMENOW - ($offervotetimeout_main)))); + $res = sql_query("SELECT id, name FROM offers WHERE added < $dt AND allowed <> 'allowed'") or sqlerr(__FILE__, __LINE__); + while($arr = mysql_fetch_assoc($res)){ + sql_query("DELETE FROM offers WHERE id=$arr[id]") or sqlerr(__FILE__, __LINE__); + sql_query("DELETE FROM offervotes WHERE offerid=$arr[id]") or sqlerr(__FILE__, __LINE__); + sql_query("DELETE FROM comments WHERE offer=$arr[id]") or sqlerr(__FILE__, __LINE__); + write_log("Offer $arr[id] ($arr[name]) was deleted by system (vote timeout)",'normal'); + } + } + if ($printProgress) { + printProgress("delete offers if not voted on after some time"); + } + + //Delete offers if not uploaded after being voted on for some time. + if($offeruptimeout_main){ + $secs = (int)$offeruptimeout_main; + $dt = sqlesc(date("Y-m-d H:i:s",(TIMENOW - ($secs)))); + $res = sql_query("SELECT id, name FROM offers WHERE allowedtime < $dt AND allowed = 'allowed'") or sqlerr(__FILE__, __LINE__); + while($arr = mysql_fetch_assoc($res)){ + sql_query("DELETE FROM offers WHERE id=$arr[id]") or sqlerr(__FILE__, __LINE__); + sql_query("DELETE FROM offervotes WHERE offerid=$arr[id]") or sqlerr(__FILE__, __LINE__); + sql_query("DELETE FROM comments WHERE offer=$arr[id]") or sqlerr(__FILE__, __LINE__); + write_log("Offer $arr[id] ($arr[name]) was deleted by system (upload timeout)",'normal'); + } + } + if ($printProgress) { + printProgress("delete offers if not uploaded after being voted on for some time."); + } + + //15.cleanup torrents + //Start: expire torrent promotion +function torrent_promotion_expire($days, $type = 2, $targettype = 1){ + $secs = (int)($days * 86400); //XX days + $dt = sqlesc(date("Y-m-d H:i:s",(TIMENOW - ($secs)))); + $res = sql_query("SELECT id, name FROM torrents WHERE added < $dt AND sp_state = ".sqlesc($type).' AND promotion_time_type=0') or sqlerr(__FILE__, __LINE__); + switch($targettype) + { + case 1: //normal + { + $sp_state = 1; + $become = "normal"; + break; + } + case 2: //Free + { + $sp_state = 2; + $become = "Free"; + break; + } + case 3: //2X + { + $sp_state = 3; + $become = "2X"; + break; + } + case 4: //2X Free + { + $sp_state = 4; + $become = "2X Free"; + break; + } + case 5: //Half Leech + { + $sp_state = 5; + $become = "50%"; + break; + } + case 6: //2X Half Leech + { + $sp_state = 6; + $become = "2X 50%"; + break; + } + default: //normal + { + $sp_state = 1; + $become = "normal"; + break; + } + } + while($arr = mysql_fetch_assoc($res)){ + sql_query("UPDATE torrents SET sp_state = ".sqlesc($sp_state)." WHERE id=$arr[id]") or sqlerr(__FILE__, __LINE__); + if ($sp_state == 1) + write_log("Torrent $arr[id] ($arr[name]) is no longer on promotion (time expired)",'normal'); + else write_log("Promotion type for torrent $arr[id] ($arr[name]) is changed to ".$become." (time expired)",'normal'); + } +} + if ($expirehalfleech_torrent) + torrent_promotion_expire($expirehalfleech_torrent, 5, $halfleechbecome_torrent); + if ($expirefree_torrent) + torrent_promotion_expire($expirefree_torrent, 2, $freebecome_torrent); + if ($expiretwoup_torrent) + torrent_promotion_expire($expiretwoup_torrent, 3, $twoupbecome_torrent); + if ($expiretwoupfree_torrent) + torrent_promotion_expire($expiretwoupfree_torrent, 4, $twoupfreebecome_torrent); + if ($expiretwouphalfleech_torrent) + torrent_promotion_expire($expiretwouphalfleech_torrent, 6, $twouphalfleechbecome_torrent); + if ($expirethirtypercentleech_torrent) + torrent_promotion_expire($expirethirtypercentleech_torrent, 7, $thirtypercentleechbecome_torrent); + if ($expirenormal_torrent) + torrent_promotion_expire($expirenormal_torrent, 1, $normalbecome_torrent); + + //expire individual torrent promotion + sql_query("UPDATE torrents SET sp_state = 1, promotion_time_type=0, promotion_until='0000-00-00 00:00:00' WHERE promotion_time_type=2 AND promotion_until < ".sqlesc(date("Y-m-d H:i:s",TIMENOW))) or sqlerr(__FILE__, __LINE__); + + //End: expire torrent promotion + if ($printProgress) { + printProgress("expire torrent promotion"); + } + //automatically pick hot + if ($hotdays_torrent) + { + $secs = (int)($hotdays_torrent * 86400); //XX days + $dt = sqlesc(date("Y-m-d H:i:s",(TIMENOW - ($secs)))); + sql_query("UPDATE torrents SET picktype = 'hot' WHERE added > $dt AND picktype = 'normal' AND seeders > ".sqlesc($hotseeder_torrent)) or sqlerr(__FILE__, __LINE__); + } + if ($printProgress) { + printProgress("automatically pick hot"); + } + +//Priority Class 4: cleanup every 24 hours + $res = sql_query("SELECT value_u FROM avps WHERE arg = 'lastcleantime4'"); + $row = mysql_fetch_array($res); + if (!$row) { + sql_query("INSERT INTO avps (arg, value_u) VALUES ('lastcleantime4',$now)") or sqlerr(__FILE__, __LINE__); + return; + } + $ts = $row[0]; + if ($ts + $autoclean_interval_four > $now && !$forceAll) { + return 'Cleanup ends at Priority Class 3'; + } else { + sql_query("UPDATE avps SET value_u = ".sqlesc($now)." WHERE arg='lastcleantime4'") or sqlerr(__FILE__, __LINE__); + } + + //3.delete unconfirmed accounts + $deadtime = time() - $signup_timeout; + sql_query("DELETE FROM users WHERE status = 'pending' AND added < FROM_UNIXTIME($deadtime) AND last_login < FROM_UNIXTIME($deadtime) AND last_access < FROM_UNIXTIME($deadtime)") or sqlerr(__FILE__, __LINE__); + if ($printProgress) { + printProgress("delete unconfirmed accounts"); + } + + //5.delete old login attempts + $secs = 12*60*60; // Delete failed login attempts per half day. + $dt = sqlesc(date("Y-m-d H:i:s",(TIMENOW - $secs))); // calculate date. + sql_query("DELETE FROM loginattempts WHERE banned='no' AND added < $dt") or sqlerr(__FILE__, __LINE__); + if ($printProgress) { + printProgress("delete old login attempts"); + } + + //6.delete old invite codes + $secs = $invite_timeout*24*60*60; // when? + $dt = sqlesc(date("Y-m-d H:i:s",(TIMENOW - $secs))); // calculate date. + sql_query("DELETE FROM invites WHERE time_invited < $dt") or sqlerr(__FILE__, __LINE__); + if ($printProgress) { + printProgress("delete old invite codes"); + } + + //7.delete regimage codes + sql_query("TRUNCATE TABLE `regimages`") or sqlerr(__FILE__, __LINE__); + if ($printProgress) { + printProgress("delete regimage codes"); + } + //10.clean up user accounts + // make sure VIP or above never get deleted + $neverdelete_account = ($neverdelete_account <= UC_VIP ? $neverdelete_account : UC_VIP); + + //delete inactive user accounts, no transfer. Alt. 1: last access time + if ($deletenotransfer_account){ + $secs = $deletenotransfer_account*24*60*60; + $dt = sqlesc(date("Y-m-d H:i:s",(TIMENOW - $secs))); + $maxclass = $neverdelete_account; + sql_query("DELETE FROM users WHERE parked='no' AND status='confirmed' AND class < $maxclass AND last_access < $dt AND (uploaded = 0 || uploaded = ".sqlesc($iniupload_main).") AND downloaded = 0") or sqlerr(__FILE__, __LINE__); + } + if ($printProgress) { + printProgress("delete inactive user accounts, no transfer. Alt. 1: last access time"); + } + + //delete inactive user accounts, no transfer. Alt. 2: registering time + if ($deletenotransfertwo_account){ + $secs = $deletenotransfertwo_account*24*60*60; + $dt = sqlesc(date("Y-m-d H:i:s",(TIMENOW - $secs))); + $maxclass = $neverdelete_account; + sql_query("DELETE FROM users WHERE parked='no' AND status='confirmed' AND class < $maxclass AND added < $dt AND (uploaded = 0 || uploaded = ".sqlesc($iniupload_main).") AND downloaded = 0") or sqlerr(__FILE__, __LINE__); + } + if ($printProgress) { + printProgress("delete inactive user accounts, no transfer. Alt. 2: registering time"); + } + + //delete inactive user accounts, not parked + if ($deleteunpacked_account){ + $secs = $deleteunpacked_account*24*60*60; + $dt = sqlesc(date("Y-m-d H:i:s",(TIMENOW - $secs))); + $maxclass = $neverdelete_account; + sql_query("DELETE FROM users WHERE parked='no' AND status='confirmed' AND class < $maxclass AND last_access < $dt") or sqlerr(__FILE__, __LINE__); + } + if ($printProgress) { + printProgress("delete inactive user accounts, not parked"); + } + + //delete parked user accounts, parked + if ($deletepacked_account){ + $secs = $deletepacked_account*24*60*60; + $dt = sqlesc(date("Y-m-d H:i:s",(TIMENOW - $secs))); + $maxclass = $neverdeletepacked_account; + sql_query("DELETE FROM users WHERE parked='yes' AND status='confirmed' AND class < $maxclass AND last_access < $dt") or sqlerr(__FILE__, __LINE__); + } + if ($printProgress) { + printProgress("delete parked user accounts, parked"); + } + + //remove VIP status if time's up + $res = sql_query("SELECT id, modcomment FROM users WHERE vip_added='yes' AND vip_until < NOW()") or sqlerr(__FILE__, __LINE__); + if (mysql_num_rows($res) > 0) + { + while ($arr = mysql_fetch_assoc($res)) + { + $dt = sqlesc(date("Y-m-d H:i:s")); + $subject = sqlesc($lang_cleanup_target[get_user_lang($arr[id])]['msg_vip_status_removed']); + $msg = sqlesc($lang_cleanup_target[get_user_lang($arr[id])]['msg_vip_status_removed_body']); + ///---AUTOSYSTEM MODCOMMENT---// + $modcomment = htmlspecialchars($arr["modcomment"]); + $modcomment = date("Y-m-d") . " - VIP status removed by - AutoSystem.\n". $modcomment; + $modcom = sqlesc($modcomment); + ///---end + sql_query("UPDATE users SET class = '1', vip_added = 'no', vip_until = '0000-00-00 00:00:00', modcomment = $modcom WHERE id = $arr[id]") or sqlerr(__FILE__, __LINE__); + sql_query("INSERT INTO messages (sender, receiver, added, msg, subject) VALUES(0, $arr[id], $dt, $msg, $subject)") or sqlerr(__FILE__, __LINE__); + } + } + if ($printProgress) { + printProgress("remove VIP status if time's up"); + } + + // promote peasant back to user +function peasant_to_user($down_floor_gb, $down_roof_gb, $minratio){ + global $lang_cleanup_target; + + if ($down_floor_gb){ + $downlimit_floor = $down_floor_gb*1024*1024*1024; + $downlimit_roof = $down_roof_gb*1024*1024*1024; + $res = sql_query("SELECT id FROM users WHERE class = 0 AND downloaded >= $downlimit_floor ".($downlimit_roof > $down_floor_gb ? " AND downloaded < $downlimit_roof" : "")." AND uploaded / downloaded >= $minratio") or sqlerr(__FILE__, __LINE__); + if (mysql_num_rows($res) > 0) + { + $dt = sqlesc(date("Y-m-d H:i:s")); + while ($arr = mysql_fetch_assoc($res)) + { + $subject = sqlesc($lang_cleanup_target[get_user_lang($arr[id])]['msg_low_ratio_warning_removed']); + $msg = sqlesc($lang_cleanup_target[get_user_lang($arr[id])]['msg_your_ratio_warning_removed']); + writecomment($arr[id],"Leech Warning removed by System."); + sql_query("UPDATE users SET class = 1, leechwarn = 'no', leechwarnuntil = '0000-00-00 00:00:00' WHERE id = $arr[id]") or sqlerr(__FILE__, __LINE__); + sql_query("INSERT INTO messages (sender, receiver, added, subject, msg) VALUES(0, $arr[id], $dt, $subject, $msg)") or sqlerr(__FILE__, __LINE__); + } + } + } +} + + peasant_to_user($psdlfive_account,0, $psratiofive_account); + peasant_to_user($psdlfour_account,$psdlfive_account, $psratiofour_account); + peasant_to_user($psdlthree_account,$psdlfour_account, $psratiothree_account); + peasant_to_user($psdltwo_account,$psdlthree_account, $psratiotwo_account); + peasant_to_user($psdlone_account,$psdltwo_account, $psratioone_account); + if ($printProgress) { + printProgress("promote peasant back to user"); + } + //end promote peasant back to user + + // start promotion +function promotion($class, $down_floor_gb, $minratio, $time_week, $addinvite = 0){ + global $lang_cleanup_target; + $oriclass = $class - 1; + + if ($down_floor_gb){ + $limit = $down_floor_gb*1024*1024*1024; + $maxdt = date("Y-m-d H:i:s",(TIMENOW - 86400*7*$time_week)); + $res = sql_query("SELECT id, max_class_once FROM users WHERE class = $oriclass AND downloaded >= $limit AND uploaded / downloaded >= $minratio AND added < ".sqlesc($maxdt)) or sqlerr(__FILE__, __LINE__); + if (mysql_num_rows($res) > 0) + { + $dt = sqlesc(date("Y-m-d H:i:s")); + while ($arr = mysql_fetch_assoc($res)) + { + $subject = sqlesc($lang_cleanup_target[get_user_lang($arr[id])]['msg_promoted_to'].get_user_class_name($class,false,false,false)); + $msg = sqlesc($lang_cleanup_target[get_user_lang($arr[id])]['msg_now_you_are'].get_user_class_name($class,false,false,false).$lang_cleanup_target[get_user_lang($arr[id])]['msg_see_faq']); + if($class<=$arr[max_class_once]) + sql_query("UPDATE users SET class = $class WHERE id = $arr[id]") or sqlerr(__FILE__, __LINE__); + else + sql_query("UPDATE users SET class = $class, max_class_once=$class, invites=invites+$addinvite WHERE id = $arr[id]") or sqlerr(__FILE__, __LINE__); + + sql_query("INSERT INTO messages (sender, receiver, added, subject, msg) VALUES(0, $arr[id], $dt, $subject, $msg)") or sqlerr(__FILE__, __LINE__); + } + } + } +} + //do not change the ascending order + promotion(UC_POWER_USER, $pudl_account, $puprratio_account, $putime_account, $getInvitesByPromotion_class[UC_POWER_USER]); + promotion(UC_ELITE_USER, $eudl_account, $euprratio_account, $eutime_account, $getInvitesByPromotion_class[UC_ELITE_USER]); + promotion(UC_CRAZY_USER, $cudl_account, $cuprratio_account, $cutime_account, $getInvitesByPromotion_class[UC_CRAZY_USER]); + promotion(UC_INSANE_USER, $iudl_account, $iuprratio_account, $iutime_account, $getInvitesByPromotion_class[UC_INSANE_USER]); + promotion(UC_VETERAN_USER, $vudl_account, $vuprratio_account, $vutime_account, $getInvitesByPromotion_class[UC_VETERAN_USER]); + promotion(UC_EXTREME_USER, $exudl_account, $exuprratio_account, $exutime_account, $getInvitesByPromotion_class[UC_EXTREME_USER]); + promotion(UC_ULTIMATE_USER, $uudl_account, $uuprratio_account, $uutime_account, $getInvitesByPromotion_class[UC_ULTIMATE_USER]); + promotion(UC_NEXUS_MASTER, $nmdl_account, $nmprratio_account, $nmtime_account, $getInvitesByPromotion_class[UC_NEXUS_MASTER]); + // end promotion + if ($printProgress) { + printProgress("promote users to other classes"); + } + + // start demotion +function demotion($class,$deratio){ + global $lang_cleanup_target; + + $newclass = $class - 1; + $res = sql_query("SELECT id FROM users WHERE class = $class AND uploaded / downloaded < $deratio") or sqlerr(__FILE__, __LINE__); + if (mysql_num_rows($res) > 0) + { + $dt = sqlesc(date("Y-m-d H:i:s")); + while ($arr = mysql_fetch_assoc($res)) + { + $subject = $lang_cleanup_target[get_user_lang($arr[id])]['msg_demoted_to'].get_user_class_name($newclass,false,false,false); + $msg = $lang_cleanup_target[get_user_lang($arr[id])]['msg_demoted_from'].get_user_class_name($class,false,false,false).$lang_cleanup_target[get_user_lang($arr[id])]['msg_to'].get_user_class_name($newclass,false,false,false).$lang_cleanup_target[get_user_lang($arr[id])]['msg_because_ratio_drop_below'].$deratio.".\n"; + sql_query("UPDATE users SET class = $newclass WHERE id = $arr[id]") or sqlerr(__FILE__, __LINE__); + sql_query("INSERT INTO messages (sender, receiver, added, subject, msg) VALUES(0, $arr[id], $dt, ".sqlesc($subject).", ".sqlesc($msg).")") or sqlerr(__FILE__, __LINE__); + } + } +} + //do not change the descending order + demotion(UC_NEXUS_MASTER,$nmderatio_account); + demotion(UC_ULTIMATE_USER,$uuderatio_account); + demotion(UC_EXTREME_USER,$exuderatio_account); + demotion(UC_VETERAN_USER,$vuderatio_account); + demotion(UC_INSANE_USER,$iuderatio_account); + demotion(UC_CRAZY_USER,$cuderatio_account); + demotion(UC_ELITE_USER,$euderatio_account); + demotion(UC_POWER_USER,$puderatio_account); + if ($printProgress) { + printProgress("demote users to other classes"); + } + // end demotion + + // start demote users to peasant +function user_to_peasant($down_floor_gb, $minratio){ + global $lang_cleanup_target; + global $deletepeasant_account; + + $length = $deletepeasant_account*86400; // warn users until xxx days + $until = date("Y-m-d H:i:s",(TIMENOW + $length)); + $downlimit_floor = $down_floor_gb*1024*1024*1024; + $res = sql_query("SELECT id FROM users WHERE class = 1 AND downloaded > $downlimit_floor AND uploaded / downloaded < $minratio") or sqlerr(__FILE__, __LINE__); + if (mysql_num_rows($res) > 0) + { + $dt = sqlesc(date("Y-m-d H:i:s")); + while ($arr = mysql_fetch_assoc($res)) + { + $subject = $lang_cleanup_target[get_user_lang($arr[id])]['msg_demoted_to'].get_user_class_name(UC_PEASANT,false,false,false); + $msg = $lang_cleanup_target[get_user_lang($arr[id])]['msg_must_fix_ratio_within'].$deletepeasant_account.$lang_cleanup_target[get_user_lang($arr[id])]['msg_days_or_get_banned']; + writecomment($arr[id],"Leech Warned by System - Low Ratio."); + sql_query("UPDATE users SET class = 0 , leechwarn = 'yes', leechwarnuntil = ".sqlesc($until)." WHERE id = $arr[id]") or sqlerr(__FILE__, __LINE__); + sql_query("INSERT INTO messages (sender, receiver, added, subject, msg) VALUES(0, $arr[id], $dt, ".sqlesc($subject).", ".sqlesc($msg).")") or sqlerr(__FILE__, __LINE__); + } + } +} + + user_to_peasant($psdlone_account, $psratioone_account); + user_to_peasant($psdltwo_account, $psratiotwo_account); + user_to_peasant($psdlthree_account, $psratiothree_account); + user_to_peasant($psdlfour_account, $psratiofour_account); + user_to_peasant($psdlfive_account, $psratiofive_account); + if ($printProgress) { + printProgress("demote Users to peasant"); + } + // end Users to Peasant + + //ban users with leechwarning expired + $dt = sqlesc(date("Y-m-d H:i:s")); // take date time + $res = sql_query("SELECT id FROM users WHERE enabled = 'yes' AND leechwarn = 'yes' AND leechwarnuntil < $dt") or sqlerr(__FILE__, __LINE__); + + if (mysql_num_rows($res) > 0) + { + while ($arr = mysql_fetch_assoc($res)) + { + writecomment($arr[id],"Banned by System because of Leech Warning expired."); + + sql_query("UPDATE users SET enabled = 'no', leechwarnuntil = '0000-00-00 00:00:00' WHERE id = $arr[id]") or sqlerr(__FILE__, __LINE__); + } + } + if ($printProgress) { + printProgress("ban users with leechwarning expired"); + } + + //Remove warning of users + $dt = sqlesc(date("Y-m-d H:i:s")); // take date time + $res = sql_query("SELECT id FROM users WHERE enabled = 'yes' AND warned = 'yes' AND warneduntil < $dt") or sqlerr(__FILE__, __LINE__); + + if (mysql_num_rows($res) > 0) + { + while ($arr = mysql_fetch_assoc($res)) + { + $subject = $lang_cleanup_target[get_user_lang($arr[id])]['msg_warning_removed']; + $msg = $lang_cleanup_target[get_user_lang($arr[id])]['msg_your_warning_removed']; + writecomment($arr[id],"Warning removed by System."); + sql_query("UPDATE users SET warned = 'no', warneduntil = '0000-00-00 00:00:00' WHERE id = $arr[id]") or sqlerr(__FILE__, __LINE__); + sql_query("INSERT INTO messages (sender, receiver, added, subject, msg) VALUES(0, $arr[id], $dt, ".sqlesc($subject).", ".sqlesc($msg).")") or sqlerr(__FILE__, __LINE__); + } + } + if ($printProgress) { + printProgress("remove warning of users"); + } + + //17.update total seeding and leeching time of users + $res = sql_query("SELECT * FROM users") or sqlerr(__FILE__, __LINE__); + while($arr = mysql_fetch_assoc($res)) + { + //die("s" . $arr['id']); + $res2 = sql_query("SELECT SUM(seedtime) as st, SUM(leechtime) as lt FROM snatched where userid = " . $arr['id'] . " LIMIT 1") or sqlerr(__FILE__, __LINE__); + $arr2 = mysql_fetch_assoc($res2) or sqlerr(__FILE__, __LINE__); + + //die("ss" . $arr2['st']); + //die("sss" . "UPDATE users SET seedtime = " . $arr2['st'] . ", leechtime = " . $arr2['lt'] . " WHERE id = " . $arr['id']); + + sql_query("UPDATE users SET seedtime = " . intval($arr2['st']) . ", leechtime = " . intval($arr2['lt']) . " WHERE id = " . $arr['id']) or sqlerr(__FILE__, __LINE__); + } + if ($printProgress) { + printProgress("update total seeding and leeching time of users"); + } + + // delete torrents that have been dead for a long time + if ($deldeadtorrent_torrent > 0){ + $length = $deldeadtorrent_torrent*86400; + $until = date("Y-m-d H:i:s",(TIMENOW - $length)); + $dt = sqlesc(date("Y-m-d H:i:s")); + $res = sql_query("SELECT id, name, owner FROM torrents WHERE visible = 'no' AND last_action < ".sqlesc($until)." AND seeders = 0 AND leechers = 0") or sqlerr(__FILE__, __LINE__); + while($arr = mysql_fetch_assoc($res)) + { + deletetorrent($arr['id']); + $subject = $lang_cleanup_target[get_user_lang($arr[owner])]['msg_your_torrent_deleted']; + $msg = $lang_cleanup_target[get_user_lang($arr[owner])]['msg_your_torrent']."[i]".$arr['name']."[/i]".$lang_cleanup_target[get_user_lang($arr[owner])]['msg_was_deleted_because_dead']; + sql_query("INSERT INTO messages (sender, receiver, added, subject, msg) VALUES(0, $arr[owner], $dt, ".sqlesc($subject).", ".sqlesc($msg).")") or sqlerr(__FILE__, __LINE__); + write_log("Torrent $arr[id] ($arr[name]) is deleted by system because of being dead for a long time.",'normal'); + } + } + if ($printProgress) { + printProgress("delete torrents that have been dead for a long time"); + } + +//Priority Class 5: cleanup every 15 days + $res = sql_query("SELECT value_u FROM avps WHERE arg = 'lastcleantime5'"); + $row = mysql_fetch_array($res); + if (!$row) { + sql_query("INSERT INTO avps (arg, value_u) VALUES ('lastcleantime5',$now)") or sqlerr(__FILE__, __LINE__); + return; + } + $ts = $row[0]; + if ($ts + $autoclean_interval_five > $now && !$forceAll) { + return 'Cleanup ends at Priority Class 4'; + } else { + sql_query("UPDATE avps SET value_u = ".sqlesc($now)." WHERE arg='lastcleantime5'") or sqlerr(__FILE__, __LINE__); + } + + //update clients' popularity + $res = sql_query("SELECT id FROM agent_allowed_family"); + while($row = mysql_fetch_array($res)){ + $count = get_row_count("users","WHERE clientselect=".sqlesc($row['id'])); + sql_query("UPDATE agent_allowed_family SET hits=".sqlesc($count)." WHERE id=".sqlesc($row['id'])); + } + if ($printProgress) { + printProgress("update clients' popularity"); + } + + //delete old messages sent by system + $length = 180*86400; //half a year + $until = date("Y-m-d H:i:s",(TIMENOW - $length)); + sql_query("DELETE FROM messages WHERE sender = 0 AND added < ".sqlesc($until)); + if ($printProgress) { + printProgress("delete old messages sent by system"); + } + + //delete old readpost records + $length = 180*86400; //half a year + $until = date("Y-m-d H:i:s",(TIMENOW - $length)); + $postIdHalfYearAgo = get_single_value('posts', 'id', 'WHERE added < ' . sqlesc($until).' ORDER BY added DESC'); + if ($postIdHalfYearAgo) { + sql_query("UPDATE users SET last_catchup = ".sqlesc($postIdHalfYearAgo)." WHERE last_catchup < ".sqlesc($postIdHalfYearAgo)); + sql_query("DELETE FROM readposts WHERE lastpostread < ".sqlesc($postIdHalfYearAgo)); + } + if ($printProgress) { + printProgress("delete old readpost records"); + } + + //delete old ip log + $length = 365*86400; //a year + $until = date("Y-m-d H:i:s",(TIMENOW - $length)); + sql_query("DELETE FROM iplog WHERE access < ".sqlesc($until)); + if ($printProgress) { + printProgress("delete old ip log"); + } + + //delete old general log + $secs = 365*86400; //a year + $until = date("Y-m-d H:i:s",(TIMENOW - $length)); + sql_query("DELETE FROM sitelog WHERE added < ".sqlesc($until)) or sqlerr(__FILE__, __LINE__); + if ($printProgress) { + printProgress("delete old general log"); + } + + //1.delete torrents that doesn't exist any more + do { + $res = sql_query("SELECT id FROM torrents") or sqlerr(__FILE__, __LINE__); + $ar = array(); + while ($row = mysql_fetch_array($res)) { + $id = $row[0]; + $ar[$id] = 1; + } + + if (!count($ar)) + break; + + $dp = @opendir($torrent_dir); + if (!$dp) + break; + + $ar2 = array(); + while (($file = readdir($dp)) !== false) { + if (!preg_match('/^(\d+)\.torrent$/', $file, $m)) + continue; + $id = $m[1]; + $ar2[$id] = 1; + if (isset($ar[$id]) && $ar[$id]) + continue; + $ff = $torrent_dir . "/$file"; + unlink($ff); + } + closedir($dp); + + if (!count($ar2)) + break; + + $delids = array(); + foreach (array_keys($ar) as $k) { + if (isset($ar2[$k]) && $ar2[$k]) + continue; + $delids[] = $k; + unset($ar[$k]); + } + if (count($delids)) + sql_query("DELETE FROM torrents WHERE id IN (" . join(",", $delids) . ")") or sqlerr(__FILE__, __LINE__); + + $res = sql_query("SELECT torrent FROM peers GROUP BY torrent") or sqlerr(__FILE__, __LINE__); + $delids = array(); + while ($row = mysql_fetch_array($res)) { + $id = $row[0]; + if (isset($ar[$id]) && $ar[$id]) + continue; + $delids[] = $id; + } + if (count($delids)) + sql_query("DELETE FROM peers WHERE torrent IN (" . join(",", $delids) . ")") or sqlerr(__FILE__, __LINE__); + + $res = sql_query("SELECT torrent FROM files GROUP BY torrent") or sqlerr(__FILE__, __LINE__); + $delids = array(); + while ($row = mysql_fetch_array($res)) { + $id = $row[0]; + if ($ar[$id]) + continue; + $delids[] = $id; + } + if (count($delids)) + sql_query("DELETE FROM files WHERE torrent IN (" . join(",", $delids) . ")") or sqlerr(__FILE__, __LINE__); + } while (0); + if ($printProgress) { + printProgress("delete torrents that doesn't exist any more"); + } + + //8.lock topics where last post was made more than x days ago + $secs = 365*24*60*60; + sql_query("UPDATE topics, posts SET topics.locked='yes' WHERE topics.lastpost = posts.id AND topics.sticky = 'no' AND UNIX_TIMESTAMP(posts.added) < ".TIMENOW." - $secs") or sqlerr(__FILE__, __LINE__); + + if ($printProgress) { + printProgress("lock topics where last post was made more than x days ago"); + } + + //9.delete report items older than four week + $secs = 4*7*24*60*60; + $dt = sqlesc(date("Y-m-d H:i:s",(TIMENOW - $secs))); + sql_query("DELETE FROM reports WHERE dealtwith=1 AND added < $dt") or sqlerr(__FILE__, __LINE__); + if ($printProgress) { + printProgress("delete report items older than four week"); + } + return 'Full cleanup is done'; +} +?> diff --git a/include/config.php b/include/config.php new file mode 100644 index 00000000..7df56fae --- /dev/null +++ b/include/config.php @@ -0,0 +1,403 @@ +$configname) { + ReadConfig(trim($configname)); + } + } else { + $configname = basename($configname); + $path = './config/'.$configname; + if (!file_exists($path)) { + die("Error! File ".htmlspecialchars($configname)." doesn't exist!
Before the setup starts, please ensure that you have properly configured file and directory access permissions. Please see below.

chmod 777 config/
chmod 777 config/".$configname); + } + + $fp = fopen($path, 'r'); + $content = ''; + while (!feof($fp)) { + $content .= fread($fp, 102400); + } + fclose($fp); + + if (empty($content)) { + return array(); + } + $tmp = @unserialize($content); + + if (empty($tmp)) { + die("Error! Cannot read configuration file ".htmlspecialchars($configname)."
Before the setup starts, please ensure that you have properly configured file and directory access permissions. For *nix system, please see below.
chmod 777 config
chmod 777 config/".$configname."

If access permission is alright, perhaps there's some misconfiguration or the configuration file is corrupted. Please check config/".$configname); + } + $GLOBALS[$configname] = $tmp; + return $tmp; + } +} + + +if (file_exists('config/allconfig.php')) { + require('config/allconfig.php'); +} else { + ReadConfig(); +} + +$SITENAME = $BASIC['SITENAME']; +$BASEURL = $BASIC['BASEURL']; +$announce_urls = array(); +$announce_urls[] = $BASIC['announce_url']; +$mysql_host = $BASIC['mysql_host']; +$mysql_user = $BASIC['mysql_user']; +$mysql_pass = $BASIC['mysql_pass']; +$mysql_db = $BASIC['mysql_db']; + + +$SITE_ONLINE = $MAIN['site_online']; +$max_torrent_size = $MAIN['max_torrent_size']; +$announce_interval = (int)$MAIN['announce_interval']; +$annintertwoage = (int)$MAIN['annintertwoage']; +$annintertwo = (int)$MAIN['annintertwo']; +$anninterthreeage = (int)$MAIN['anninterthreeage']; +$anninterthree = (int)$MAIN['anninterthree']; +$signup_timeout = $MAIN['signup_timeout']; +$minoffervotes = $MAIN['minoffervotes']; +$offervotetimeout_main = $MAIN['offervotetimeout']; +$offeruptimeout_main = $MAIN['offeruptimeout']; +$maxsubsize_main = $MAIN['maxsubsize']; +$maxnewsnum_main = $MAIN['maxnewsnum']; +$forumpostsperpage = $MAIN['postsperpage']; +$forumtopicsperpage_main = $MAIN['topicsperpage']; +$torrentsperpage_main = (int)$MAIN['torrentsperpage']; +$max_dead_torrent_time = $MAIN['max_dead_torrent_time']; +$maxusers = $MAIN['maxusers']; +$torrent_dir = $MAIN['torrent_dir']; +$iniupload_main = $MAIN['iniupload']; +$SITEEMAIL = $MAIN['SITEEMAIL']; +$ACCOUNTANTID = (int)$MAIN['ACCOUNTANTID']; +$ALIPAYACCOUNT = $MAIN['ALIPAYACCOUNT']; +$PAYPALACCOUNT = $MAIN['PAYPALACCOUNT']; +$SLOGAN = $MAIN['SLOGAN']; +$icplicense_main = $MAIN['icplicense']; +$autoclean_interval_one = $MAIN['autoclean_interval_one']; +$autoclean_interval_two = $MAIN['autoclean_interval_two']; +$autoclean_interval_three = $MAIN['autoclean_interval_three']; +$autoclean_interval_four = $MAIN['autoclean_interval_four']; +$autoclean_interval_five = $MAIN['autoclean_interval_five']; +$REPORTMAIL = $MAIN['reportemail']; +$invitesystem = $MAIN['invitesystem']; +$registration = $MAIN['registration']; +$showmovies['hot'] = $MAIN['showhotmovies']; +$showmovies['classic'] = $MAIN['showclassicmovies']; +$showextinfo['imdb'] = $MAIN['showimdbinfo']; +$enablenfo_main = $MAIN['enablenfo']; +$showschool = $MAIN['enableschool']; +$restrictemaildomain = $MAIN['restrictemail']; +$showpolls_main = $MAIN['showpolls']; +$showstats_main = $MAIN['showstats']; +//$showlastxforumposts_main = $MAIN['showlastxforumposts']; +$showlastxtorrents_main = $MAIN['showlastxtorrents']; +$showtrackerload = $MAIN['showtrackerload']; +$showshoutbox_main = $MAIN['showshoutbox']; +$showfunbox_main = $MAIN['showfunbox']; +$enableoffer = $MAIN['showoffer']; +$sptime = $MAIN['sptime']; +$showhelpbox_main = $MAIN['showhelpbox']; +$enablebitbucket_main = $MAIN['enablebitbucket']; +$smalldescription_main = $MAIN['smalldescription']; +$altname_main = $MAIN['altname']; +$enableextforum = $MAIN['extforum']; +$extforumurl = $MAIN['extforumurl']; +$deflang = $MAIN['defaultlang']; +$defcss = $MAIN['defstylesheet']; +$enabledonation = $MAIN['donation']; +$enablespecial = $MAIN['spsct']; +$browsecatmode = (int)$MAIN['browsecat']; +$specialcatmode = (int)$MAIN['specialcat']; +$waitsystem = $MAIN['waitsystem']; +$maxdlsystem = $MAIN['maxdlsystem']; +$bitbucket = $MAIN['bitbucket']; +$torrentnameprefix = $MAIN['torrentnameprefix']; +$showforumstats_main = $MAIN['showforumstats']; +$verification = $MAIN['verification']; +$invite_count = $MAIN['invite_count']; +$invite_timeout = $MAIN['invite_timeout']; +$seeding_leeching_time_calc_start = $MAIN['seeding_leeching_time_calc_start']; +$logo_main = $MAIN['logo']; + + +$emailnotify_smtp = $SMTP['emailnotify']; +$smtptype = $SMTP['smtptype']; +$smtp_host = $SMTP['smtp_host']; +$smtp_port = $SMTP['smtp_port']; +if (strtoupper(substr(PHP_OS,0,3)=='WIN')) +$smtp_from = $SMTP['smtp_from']; +$smtpaddress = $SMTP['smtpaddress']; +$smtpport = $SMTP['smtpport']; +$accountname = $SMTP['accountname']; +$accountpassword = $SMTP['accountpassword']; + +$securelogin = $SECURITY['securelogin']; +$securetracker = $SECURITY['securetracker']; +$https_announce_urls = array(); +$https_announce_urls[] = $SECURITY['https_announce_url']; +$iv = $SECURITY['iv']; +$maxip = $SECURITY['maxip']; +$maxloginattempts = $SECURITY['maxloginattempts']; +$disableemailchange = $SECURITY['changeemail']; +$cheaterdet_security = $SECURITY['cheaterdet']; +$nodetect_security = $SECURITY['nodetect']; + +$defaultclass_class = $AUTHORITY['defaultclass']; +$staffmem_class = $AUTHORITY['staffmem']; +$newsmanage_class = $AUTHORITY['newsmanage']; +$newfunitem_class = $AUTHORITY['newfunitem']; +$funmanage_class = $AUTHORITY['funmanage']; +$sbmanage_class = $AUTHORITY['sbmanage']; +$pollmanage_class = $AUTHORITY['pollmanage']; +$applylink_class = $AUTHORITY['applylink']; +$linkmanage_class = $AUTHORITY['linkmanage']; +$postmanage_class = $AUTHORITY['postmanage']; +$commanage_class = $AUTHORITY['commanage']; +$forummanage_class = $AUTHORITY['forummanage']; +$viewuserlist_class = $AUTHORITY['viewuserlist']; +$torrentmanage_class = $AUTHORITY['torrentmanage']; +$torrentsticky_class = $AUTHORITY['torrentsticky']; +$torrentonpromotion_class = $AUTHORITY['torrentonpromotion']; +$askreseed_class = $AUTHORITY['askreseed']; +$viewnfo_class = $AUTHORITY['viewnfo']; +$torrentstructure_class = $AUTHORITY['torrentstructure']; +$sendinvite_class = $AUTHORITY['sendinvite']; +$viewhistory_class = $AUTHORITY['viewhistory']; +$topten_class = $AUTHORITY['topten']; +$log_class = $AUTHORITY['log']; +$confilog_class = $AUTHORITY['confilog']; +$userprofile_class = $AUTHORITY['userprofile']; +$torrenthistory_class = $AUTHORITY['torrenthistory']; +$prfmanage_class = $AUTHORITY['prfmanage']; +$cruprfmanage_class = $AUTHORITY['cruprfmanage']; +$uploadsub_class = $AUTHORITY['uploadsub']; +$delownsub_class = $AUTHORITY['delownsub']; +$submanage_class = $AUTHORITY['submanage']; +$updateextinfo_class = $AUTHORITY['updateextinfo']; +$viewanonymous_class = $AUTHORITY['viewanonymous']; +$beanonymous_class = $AUTHORITY['beanonymous']; +$addoffer_class = $AUTHORITY['addoffer']; +$offermanage_class = $AUTHORITY['offermanage']; +$upload_class = $AUTHORITY['upload']; +$uploadspecial_class = $AUTHORITY['uploadspecial']; +$movetorrent_class = $AUTHORITY['movetorrent']; +$chrmanage_class = $AUTHORITY['chrmanage']; +$viewinvite_class = $AUTHORITY['viewinvite']; +$buyinvite_class = $AUTHORITY['buyinvite']; +$seebanned_class = $AUTHORITY['seebanned']; +$againstoffer_class = $AUTHORITY['againstoffer']; +$userbar_class = $AUTHORITY['userbar']; + +$where_tweak = $TWEAK['where']; +$iplog1 = $TWEAK['iplog1']; +$bonus_tweak = $TWEAK['bonus']; +$titlekeywords_tweak = $TWEAK['titlekeywords']; +$metakeywords_tweak = $TWEAK['metakeywords']; +$metadescription_tweak = $TWEAK['metadescription']; +$datefounded = $TWEAK['datefounded']; +$enablelocation_tweak = $TWEAK['enablelocation']; +$enablesqldebug_tweak = $TWEAK['enablesqldebug']; +$sqldebug_tweak = $TWEAK['sqldebug']; +$cssdate_tweak = $TWEAK['cssdate']; +$enabletooltip_tweak = $TWEAK['enabletooltip']; +$prolinkimg = $TWEAK['prolinkimg']; +$analyticscode_tweak = $TWEAK['analyticscode']; + +$enableattach_attachment = $ATTACHMENT['enableattach']; +$classone_attachment = $ATTACHMENT['classone']; +$countone_attachment = $ATTACHMENT['countone']; +$sizeone_attachment = $ATTACHMENT['sizeone']; +$extone_attachment = $ATTACHMENT['extone']; +$classtwo_attachment = $ATTACHMENT['classtwo']; +$counttwo_attachment = $ATTACHMENT['counttwo']; +$sizetwo_attachment = $ATTACHMENT['sizetwo']; +$exttwo_attachment = $ATTACHMENT['exttwo']; +$classthree_attachment = $ATTACHMENT['classthree']; +$countthree_attachment = $ATTACHMENT['countthree']; +$sizethree_attachment = $ATTACHMENT['sizethree']; +$extthree_attachment = $ATTACHMENT['extthree']; +$classfour_attachment = $ATTACHMENT['classfour']; +$countfour_attachment = $ATTACHMENT['countfour']; +$sizefour_attachment = $ATTACHMENT['sizefour']; +$extfour_attachment = $ATTACHMENT['extfour']; +$savedirectory_attachment = $ATTACHMENT['savedirectory']; +$httpdirectory_attachment = $ATTACHMENT['httpdirectory']; +$savedirectorytype_attachment = $ATTACHMENT['savedirectorytype']; +$thumbnailtype_attachment = $ATTACHMENT['thumbnailtype']; +$thumbquality_attachment = $ATTACHMENT['thumbquality']; +$thumbwidth_attachment = $ATTACHMENT['thumbwidth']; +$thumbheight_attachment = $ATTACHMENT['thumbheight']; +$watermarkpos_attachment = $ATTACHMENT['watermarkpos']; +$watermarkwidth_attachment = $ATTACHMENT['watermarkwidth']; +$watermarkheight_attachment = $ATTACHMENT['watermarkheight']; +$watermarkquality_attachment = $ATTACHMENT['watermarkquality']; +$altthumbwidth_attachment = $ATTACHMENT['altthumbwidth']; +$altthumbheight_attachment = $ATTACHMENT['altthumbheight']; + + +$enablead_advertisement = $ADVERTISEMENT['enablead']; +$enablenoad_advertisement = $ADVERTISEMENT['enablenoad']; +$noad_advertisement = $ADVERTISEMENT['noad']; +$enablebonusnoad_advertisement = $ADVERTISEMENT['enablebonusnoad']; +$bonusnoad_advertisement = $ADVERTISEMENT['bonusnoad']; +$bonusnoadpoint_advertisement = $ADVERTISEMENT['bonusnoadpoint']; +$bonusnoadtime_advertisement = $ADVERTISEMENT['bonusnoadtime']; +$adclickbonus_advertisement = $ADVERTISEMENT['adclickbonus']; + +$mainversion_code = $CODE['mainversion']; +$subversion_code = $CODE['subversion']; +$releasedate_code = $CODE['releasedate']; +$website_code = $CODE['website']; + +$donortimes_bonus = $BONUS['donortimes']; +$perseeding_bonus = $BONUS['perseeding']; +$maxseeding_bonus = $BONUS['maxseeding']; +$tzero_bonus = $BONUS['tzero']; +$nzero_bonus = $BONUS['nzero']; +$bzero_bonus = $BONUS['bzero']; +$l_bonus = $BONUS['l']; +$uploadtorrent_bonus = $BONUS['uploadtorrent']; +$uploadsubtitle_bonus = $BONUS['uploadsubtitle']; +$starttopic_bonus = $BONUS['starttopic']; +$makepost_bonus = $BONUS['makepost']; +$addcomment_bonus = $BONUS['addcomment']; +$pollvote_bonus = $BONUS['pollvote']; +$offervote_bonus = $BONUS['offervote']; +$funboxvote_bonus = $BONUS['funboxvote']; +$saythanks_bonus = $BONUS['saythanks']; +$receivethanks_bonus = $BONUS['receivethanks']; +$funboxreward_bonus = $BONUS['funboxreward']; +$onegbupload_bonus = $BONUS['onegbupload']; +$fivegbupload_bonus = $BONUS['fivegbupload']; +$tengbupload_bonus = $BONUS['tengbupload']; +$ratiolimit_bonus = $BONUS['ratiolimit']; +$dlamountlimit_bonus = $BONUS['dlamountlimit']; +$oneinvite_bonus = $BONUS['oneinvite']; +$customtitle_bonus = $BONUS['customtitle']; +$vipstatus_bonus = $BONUS['vipstatus']; +$bonusgift_bonus = $BONUS['bonusgift']; +$basictax_bonus = 0+$BONUS['basictax']; +$taxpercentage_bonus = 0+$BONUS['taxpercentage']; +$prolinkpoint_bonus = $BONUS['prolinkpoint']; +$prolinktime_bonus = $BONUS['prolinktime']; + +$neverdelete_account = $ACCOUNT['neverdelete']; +$neverdeletepacked_account = $ACCOUNT['neverdeletepacked']; +$deletepacked_account = $ACCOUNT['deletepacked']; +$deleteunpacked_account = $ACCOUNT['deleteunpacked']; +$deletenotransfer_account = $ACCOUNT['deletenotransfer']; +$deletenotransfertwo_account = $ACCOUNT['deletenotransfertwo']; +$deletepeasant_account = $ACCOUNT['deletepeasant']; +$psdlone_account = $ACCOUNT['psdlone']; +$psratioone_account = $ACCOUNT['psratioone']; +$psdltwo_account = $ACCOUNT['psdltwo']; +$psratiotwo_account = $ACCOUNT['psratiotwo']; +$psdlthree_account = $ACCOUNT['psdlthree']; +$psratiothree_account = $ACCOUNT['psratiothree']; +$psdlfour_account = $ACCOUNT['psdlfour']; +$psratiofour_account = $ACCOUNT['psratiofour']; +$psdlfive_account = $ACCOUNT['psdlfive']; +$psratiofive_account = $ACCOUNT['psratiofive']; +$putime_account = $ACCOUNT['putime']; +$pudl_account = $ACCOUNT['pudl']; +$puprratio_account = $ACCOUNT['puprratio']; +$puderatio_account = $ACCOUNT['puderatio']; +$eutime_account = $ACCOUNT['eutime']; +$eudl_account = $ACCOUNT['eudl']; +$euprratio_account = $ACCOUNT['euprratio']; +$euderatio_account = $ACCOUNT['euderatio']; +$cutime_account = $ACCOUNT['cutime']; +$cudl_account = $ACCOUNT['cudl']; +$cuprratio_account = $ACCOUNT['cuprratio']; +$cuderatio_account = $ACCOUNT['cuderatio']; +$iutime_account = $ACCOUNT['iutime']; +$iudl_account = $ACCOUNT['iudl']; +$iuprratio_account = $ACCOUNT['iuprratio']; +$iuderatio_account = $ACCOUNT['iuderatio']; +$vutime_account = $ACCOUNT['vutime']; +$vudl_account = $ACCOUNT['vudl']; +$vuprratio_account = $ACCOUNT['vuprratio']; +$vuderatio_account = $ACCOUNT['vuderatio']; +$exutime_account = $ACCOUNT['exutime']; +$exudl_account = $ACCOUNT['exudl']; +$exuprratio_account = $ACCOUNT['exuprratio']; +$exuderatio_account = $ACCOUNT['exuderatio']; +$uutime_account = $ACCOUNT['uutime']; +$uudl_account = $ACCOUNT['uudl']; +$uuprratio_account = $ACCOUNT['uuprratio']; +$uuderatio_account = $ACCOUNT['uuderatio']; +$nmtime_account = $ACCOUNT['nmtime']; +$nmdl_account = $ACCOUNT['nmdl']; +$nmprratio_account = $ACCOUNT['nmprratio']; +$nmderatio_account = $ACCOUNT['nmderatio']; +$getInvitesByPromotion_class = $ACCOUNT['getInvitesByPromotion']; + +$prorules_torrent = $TORRENT['prorules']; +$randomhalfleech_torrent = $TORRENT['randomhalfleech']; +$randomfree_torrent = $TORRENT['randomfree']; +$randomtwoup_torrent = $TORRENT['randomtwoup']; +$randomtwoupfree_torrent = $TORRENT['randomtwoupfree']; +$randomtwouphalfdown_torrent = $TORRENT['randomtwouphalfdown']; +$randomthirtypercentdown_torrent = $TORRENT['randomthirtypercentdown']; +$largesize_torrent = $TORRENT['largesize']; +$largepro_torrent = $TORRENT['largepro']; +$expirehalfleech_torrent = $TORRENT['expirehalfleech']; +$expirefree_torrent = $TORRENT['expirefree']; +$expiretwoup_torrent = $TORRENT['expiretwoup']; +$expiretwoupfree_torrent = $TORRENT['expiretwoupfree']; +$expiretwouphalfleech_torrent = $TORRENT['expiretwouphalfleech']; +$expirethirtypercentleech_torrent = $TORRENT['expirethirtypercentleech']; +$expirenormal_torrent = $TORRENT['expirenormal']; +$hotdays_torrent = $TORRENT['hotdays']; +$hotseeder_torrent = $TORRENT['hotseeder']; +$halfleechbecome_torrent = $TORRENT['halfleechbecome']; +$freebecome_torrent = $TORRENT['freebecome']; +$twoupbecome_torrent = $TORRENT['twoupbecome']; +$twoupfreebecome_torrent = $TORRENT['twoupfreebecome']; +$twouphalfleechbecome_torrent = $TORRENT['twouphalfleechbecome']; +$thirtypercentleechbecome_torrent = $TORRENT['thirtypercentleechbecome']; +$normalbecome_torrent = $TORRENT['normalbecome']; +$uploaderdouble_torrent = $TORRENT['uploaderdouble']; +$deldeadtorrent_torrent = $TORRENT['deldeadtorrent']; + +foreach ($CONFIGURATIONS as $CONFIGURATION) { + unset($GLOBALS[$CONFIGURATION]); +} + +//Directory for subs +$SUBSPATH = "subs"; +//Whether clean-up is triggered by cron, instead of the default browser clicks. +//Set this to true ONLY if you have setup other method to schedule the clean-up process. +//e.g. cron on *nix, add the following line (without "") in your crontab file +//"*/5 * * * * wget -O - -q -t 1 http://www.nexusphp.com/cron.php" +//NOTE: +//Make sure you have wget installed on your OS +//replace "http://www.nexusphp.com/" with your own site address + +$useCronTriggerCleanUp = false; +//some promotion rules +//$promotionrules_torrent = array(0 => array("mediumid" => array(1), "promotion" => 5), 1 => array("mediumid" => array(3), "promotion" => 5), 2 => array("catid" => array(402), "standardid" => array(3), "promotion" => 4), 3 => array("catid" => array(403), "standardid" => array(3), "promotion" => 4)); +$promotionrules_torrent = array(); +?> diff --git a/include/core.php b/include/core.php new file mode 100644 index 00000000..2a4d0d9d --- /dev/null +++ b/include/core.php @@ -0,0 +1,65 @@ +setLanguageFolderArray(get_langfolder_list()); +define('TIMENOW', time()); +$USERUPDATESET = array(); +$query_name=array(); + +define ("UC_PEASANT", 0); +define ("UC_USER", 1); +define ("UC_POWER_USER", 2); +define ("UC_ELITE_USER", 3); +define ("UC_CRAZY_USER", 4); +define ("UC_INSANE_USER", 5); +define ("UC_VETERAN_USER", 6); +define ("UC_EXTREME_USER", 7); +define ("UC_ULTIMATE_USER", 8); +define ("UC_NEXUS_MASTER", 9); +define ("UC_VIP", 10); +define ("UC_RETIREE",11); +define ("UC_UPLOADER",12); +//define ("UC_FORUM_MODERATOR", 12); +define ("UC_MODERATOR",13); +define ("UC_ADMINISTRATOR",14); +define ("UC_SYSOP",15); +define ("UC_STAFFLEADER",16); +ignore_user_abort(1); +@set_time_limit(60); + +function strip_magic_quotes($arr) +{ + foreach ($arr as $k => $v) + { + if (is_array($v)) + { + $arr[$k] = strip_magic_quotes($v); + } else { + $arr[$k] = stripslashes($v); + } + } + return $arr; +} + +if (function_exists('get_magic_quotes_gpc') && get_magic_quotes_gpc()) +{ + if (!empty($_GET)) { + $_GET = strip_magic_quotes($_GET); + } + if (!empty($_POST)) { + $_POST = strip_magic_quotes($_POST); + } + if (!empty($_COOKIE)) { + $_COOKIE = strip_magic_quotes($_COOKIE); + } +} + +function get_langfolder_list() +{ + //do not access db for speed up, or for flexibility + return array("en", "chs", "cht", "ko", "ja"); +} diff --git a/include/functions.php b/include/functions.php new file mode 100644 index 00000000..9299f932 --- /dev/null +++ b/include/functions.php @@ -0,0 +1,4325 @@ +\n"); + if ($heading) + print("

".$heading."

\n"); + print("
"); + print($text . "
\n"); +} + +function stderr($heading, $text, $htmlstrip = true, $head = true, $foot = true, $die = true) +{ + if ($head) stdhead(); + stdmsg($heading, $text, $htmlstrip); + if ($foot) stdfoot(); + if ($die) die; +} + +function sqlerr($file = '', $line = '') +{ + print("" . + "

SQL Error

\n" . + "" . mysql_error() . ($file != '' && $line != '' ? "

in $file, line $line

" : "") . "
"); + die; +} + +function format_quotes($s) +{ + global $lang_functions; + preg_match_all('/\\[quote.*?\\]/i', $s, $result, PREG_PATTERN_ORDER); + $openquotecount = count($openquote = $result[0]); + preg_match_all('/\\[\/quote\\]/i', $s, $result, PREG_PATTERN_ORDER); + $closequotecount = count($closequote = $result[0]); + + if ($openquotecount != $closequotecount) return $s; // quote mismatch. Return raw string... + + // Get position of opening quotes + $openval = array(); + $pos = -1; + + foreach($openquote as $val) + $openval[] = $pos = strpos($s,$val,$pos+1); + + // Get position of closing quotes + $closeval = array(); + $pos = -1; + + foreach($closequote as $val) + $closeval[] = $pos = strpos($s,$val,$pos+1); + + + for ($i=0; $i < count($openval); $i++) + if ($openval[$i] > $closeval[$i]) return $s; // Cannot close before opening. Return raw string... + + + $s = preg_replace("/\\[quote\\]/i","
".$lang_functions['text_quote']."
",$s); + $s = preg_replace("/\\[quote=(.+?)\\]/i", "
".$lang_functions['text_quote'].": \\1
", $s); + $s = preg_replace("/\\[\\/quote\\]/i","

",$s); + return $s; +} + +function print_attachment($dlkey, $enableimage = true, $imageresizer = true) +{ + global $Cache, $httpdirectory_attachment; + global $lang_functions; + if (strlen($dlkey) == 32){ + if (!$row = $Cache->get_value('attachment_'.$dlkey.'_content')){ + $res = sql_query("SELECT * FROM attachments WHERE dlkey=".sqlesc($dlkey)." LIMIT 1") or sqlerr(__FILE__,__LINE__); + $row = mysql_fetch_array($res); + $Cache->cache_value('attachment_'.$dlkey.'_content', $row, 86400); + } + } + if (!$row) + { + return "
".$lang_functions['text_attachment_key'].$dlkey.$lang_functions['text_not_found']."
"; + } + else{ + $id = $row['id']; + if ($row['isimage'] == 1) + { + if ($enableimage){ + if ($row['thumb'] == 1){ + $url = $httpdirectory_attachment."/".$row['location'].".thumb.jpg"; + } + else{ + $url = $httpdirectory_attachment."/".$row['location']; + } + if($imageresizer == true) + $onclick = " onclick=\"Previewurl('".$httpdirectory_attachment."/".$row['location']."')\""; + else $onclick = ""; + $return = "\"".htmlspecialchars($row['filename'])."\"".$lang_functions['text_size'].": ".mksize($row['filesize'])."
".gettime($row['added']))."', 'styleClass', 'attach', 'x', findPosition(this)[0], 'y', findPosition(this)[1]-58);\" />"; + } + else $return = ""; + } + else + { + switch($row['filetype']) + { + case 'application/x-bittorrent': { + $icon = "\"torrent\""; + break; + } + case 'application/zip':{ + $icon = "\"zip\""; + break; + } + case 'application/rar':{ + $icon = "\"rar\""; + break; + } + case 'application/x-7z-compressed':{ + $icon = "\"7z\""; + break; + } + case 'application/x-gzip':{ + $icon = "\"gzip\""; + break; + } + case 'audio/mpeg':{ + } + case 'audio/ogg':{ + $icon = "\"audio\""; + break; + } + case 'video/x-flv':{ + $icon = "\"flv\""; + break; + } + default: { + $icon = "\"other\""; + } + } + $return = ""; + } + return $return; + } +} + +function addTempCode($value) { + global $tempCode, $tempCodeCount; + $tempCode[$tempCodeCount] = $value; + $return = ""; + $tempCodeCount++; + return $return; +} + +function formatAdUrl($adid, $url, $content, $newWindow=true) +{ + return formatUrl("adredir.php?id=".$adid."&url=".rawurlencode($url), $newWindow, $content); +} +function formatUrl($url, $newWindow = false, $text = '', $linkClass = '') { + if (!$text) { + $text = $url; + } + return addTempCode("$text"); +} +function formatCode($text) { + global $lang_functions; + return addTempCode("
".$lang_functions['text_code']."
$text

"); +} + +function formatImg($src, $enableImageResizer, $image_max_width, $image_max_height) { + return addTempCode("\"image\""); +} + +function formatFlash($src, $width, $height) { + if (!$width) { + $width = 500; + } + if (!$height) { + $height = 300; + } + return addTempCode(""); +} +function formatFlv($src, $width, $height) { + if (!$width) { + $width = 320; + } + if (!$height) { + $height = 240; + } + return addTempCode(""); +} +function format_urls($text, $newWindow = false) { + return preg_replace("/((https?|ftp|gopher|news|telnet|mms|rtsp):\/\/[^()\[\]<>\s]+)/ei", + "formatUrl('\\1', ".($newWindow==true ? 1 : 0).", '', 'faqlink')", $text); +} +function format_comment($text, $strip_html = true, $xssclean = false, $newtab = false, $imageresizer = true, $image_max_width = 700, $enableimage = true, $enableflash = true , $imagenum = -1, $image_max_height = 0, $adid = 0) +{ + global $lang_functions; + global $CURUSER, $SITENAME, $BASEURL, $enableattach_attachment; + global $tempCode, $tempCodeCount; + $tempCode = array(); + $tempCodeCount = 0; + $imageresizer = $imageresizer ? 1 : 0; + $s = $text; + + if ($strip_html) { + $s = htmlspecialchars($s); + } + // Linebreaks + $s = nl2br($s); + + if (strpos($s,"[code]") !== false && strpos($s,"[/code]") !== false) { + $s = preg_replace("/\[code\](.+?)\[\/code\]/eis","formatCode('\\1')", $s); + } + + $originalBbTagArray = array('[siteurl]', '[site]','[*]', '[b]', '[/b]', '[i]', '[/i]', '[u]', '[/u]', '[pre]', '[/pre]', '[/color]', '[/font]', '[/size]', " "); + $replaceXhtmlTagArray = array(get_protocol_prefix().$BASEURL, $SITENAME, 'list', '', '', '', '', '', '', '
', '
', '', '', '', '  '); + $s = str_replace($originalBbTagArray, $replaceXhtmlTagArray, $s); + + $originalBbTagArray = array("/\[font=([^\[\(&\\;]+?)\]/is", "/\[color=([#0-9a-z]{1,15})\]/is", "/\[color=([a-z]+)\]/is", "/\[size=([1-7])\]/is"); + $replaceXhtmlTagArray = array("", "", "", ""); + $s = preg_replace($originalBbTagArray, $replaceXhtmlTagArray, $s); + + if ($enableattach_attachment == 'yes' && $imagenum != 1){ + $limit = 20; + $s = preg_replace("/\[attach\]([0-9a-zA-z][0-9a-zA-z]*)\[\/attach\]/ies", "print_attachment('\\1', ".($enableimage ? 1 : 0).", ".($imageresizer ? 1 : 0).")", $s, $limit); + } + + if ($enableimage) { + $s = preg_replace("/\[img\]([^\<\r\n\"']+?)\[\/img\]/ei", "formatImg('\\1',".$imageresizer.",".$image_max_width.",".$image_max_height.")", $s, $imagenum, $imgReplaceCount); + $s = preg_replace("/\[img=([^\<\r\n\"']+?)\]/ei", "formatImg('\\1',".$imageresizer.",".$image_max_width.",".$image_max_height.")", $s, ($imagenum != -1 ? max($imagenum-$imgReplaceCount, 0) : -1)); + } else { + $s = preg_replace("/\[img\]([^\<\r\n\"']+?)\[\/img\]/i", '', $s, -1); + $s = preg_replace("/\[img=([^\<\r\n\"']+?)\]/i", '', $s, -1); + } + + // [flash,500,400]http://www/image.swf[/flash] + if (strpos($s,"[flash") !== false) { //flash is not often used. Better check if it exist before hand + if ($enableflash) { + $s = preg_replace("/\[flash(\,([1-9][0-9]*)\,([1-9][0-9]*))?\]((http|ftp):\/\/[^\s'\"<>]+(\.(swf)))\[\/flash\]/ei", "formatFlash('\\4', '\\2', '\\3')", $s); + } else { + $s = preg_replace("/\[flash(\,([1-9][0-9]*)\,([1-9][0-9]*))?\]((http|ftp):\/\/[^\s'\"<>]+(\.(swf)))\[\/flash\]/i", '', $s); + } + } + //[flv,320,240]http://www/a.flv[/flv] + if (strpos($s,"[flv") !== false) { //flv is not often used. Better check if it exist before hand + if ($enableflash) { + $s = preg_replace("/\[flv(\,([1-9][0-9]*)\,([1-9][0-9]*))?\]((http|ftp):\/\/[^\s'\"<>]+(\.(flv)))\[\/flv\]/ei", "formatFlv('\\4', '\\2', '\\3')", $s); + } else { + $s = preg_replace("/\[flv(\,([1-9][0-9]*)\,([1-9][0-9]*))?\]((http|ftp):\/\/[^\s'\"<>]+(\.(flv)))\[\/flv\]/i", '', $s); + } + } + + // [url=http://www.example.com]Text[/url] + if ($adid) { + $s = preg_replace("/\[url=([^\[\s]+?)\](.+?)\[\/url\]/ei", "formatAdUrl(".$adid." ,'\\1', '\\2', ".($newtab==true ? 1 : 0).", 'faqlink')", $s); + } else { + $s = preg_replace("/\[url=([^\[\s]+?)\](.+?)\[\/url\]/ei", "formatUrl('\\1', ".($newtab==true ? 1 : 0).", '\\2', 'faqlink')", $s); + } + + // [url]http://www.example.com[/url] + $s = preg_replace("/\[url\]([^\[\s]+?)\[\/url\]/ei", + "formatUrl('\\1', ".($newtab==true ? 1 : 0).", '', 'faqlink')", $s); + + $s = format_urls($s, $newtab); + // Quotes + if (strpos($s,"[quote") !== false && strpos($s,"[/quote]") !== false) { //format_quote is kind of slow. Better check if [quote] exists beforehand + $s = format_quotes($s); + } + + $s = preg_replace("/\[em([1-9][0-9]*)\]/ie", "(\\1 < 192 ? '\"[em\\1]\"' : '[em\\1]')", $s); + reset($tempCode); + $j = 0; + while(count($tempCode) || $j > 5) { + foreach($tempCode as $key=>$code) { + $s = str_replace("", $code, $s, $count); + if ($count) { + unset($tempCode[$key]); + $i = $i+$count; + } + } + $j++; + } + return $s; +} + +function highlight($search,$subject,$hlstart='',$hlend="") +{ + + $srchlen=strlen($search); // lenght of searched string + if ($srchlen==0) return $subject; + $find = $subject; + while ($find = stristr($find,$search)) { // find $search text in $subject -case insensitiv + $srchtxt = substr($find,0,$srchlen); // get new search text + $find=substr($find,$srchlen); + $subject = str_replace($srchtxt,"$hlstart$srchtxt$hlend",$subject); // highlight founded case insensitive search text + } + return $subject; +} + +function get_user_class() +{ + global $CURUSER; + return $CURUSER["class"]; +} + +function get_user_class_name($class, $compact = false, $b_colored = false, $I18N = false) +{ + static $en_lang_functions; + static $current_user_lang_functions; + if (!$en_lang_functions) { + require(get_langfile_path("functions.php",false,"en")); + $en_lang_functions = $lang_functions; + } + + if(!$I18N) { + $this_lang_functions = $en_lang_functions; + } else { + if (!$current_user_lang_functions) { + require(get_langfile_path("functions.php")); + $current_user_lang_functions = $lang_functions; + } + $this_lang_functions = $current_user_lang_functions; + } + + $class_name = ""; + switch ($class) + { + case UC_PEASANT: {$class_name = $this_lang_functions['text_peasant']; break;} + case UC_USER: {$class_name = $this_lang_functions['text_user']; break;} + case UC_POWER_USER: {$class_name = $this_lang_functions['text_power_user']; break;} + case UC_ELITE_USER: {$class_name = $this_lang_functions['text_elite_user']; break;} + case UC_CRAZY_USER: {$class_name = $this_lang_functions['text_crazy_user']; break;} + case UC_INSANE_USER: {$class_name = $this_lang_functions['text_insane_user']; break;} + case UC_VETERAN_USER: {$class_name = $this_lang_functions['text_veteran_user']; break;} + case UC_EXTREME_USER: {$class_name = $this_lang_functions['text_extreme_user']; break;} + case UC_ULTIMATE_USER: {$class_name = $this_lang_functions['text_ultimate_user']; break;} + case UC_NEXUS_MASTER: {$class_name = $this_lang_functions['text_nexus_master']; break;} + case UC_VIP: {$class_name = $this_lang_functions['text_vip']; break;} + case UC_UPLOADER: {$class_name = $this_lang_functions['text_uploader']; break;} + case UC_RETIREE: {$class_name = $this_lang_functions['text_retiree']; break;} + case UC_FORUM_MODERATOR: {$class_name = $this_lang_functions['text_forum_moderator']; break;} + case UC_MODERATOR: {$class_name = $this_lang_functions['text_moderators']; break;} + case UC_ADMINISTRATOR: {$class_name = $this_lang_functions['text_administrators']; break;} + case UC_SYSOP: {$class_name = $this_lang_functions['text_sysops']; break;} + case UC_STAFFLEADER: {$class_name = $this_lang_functions['text_staff_leader']; break;} + } + + switch ($class) + { + case UC_PEASANT: {$class_name_color = $en_lang_functions['text_peasant']; break;} + case UC_USER: {$class_name_color = $en_lang_functions['text_user']; break;} + case UC_POWER_USER: {$class_name_color = $en_lang_functions['text_power_user']; break;} + case UC_ELITE_USER: {$class_name_color = $en_lang_functions['text_elite_user']; break;} + case UC_CRAZY_USER: {$class_name_color = $en_lang_functions['text_crazy_user']; break;} + case UC_INSANE_USER: {$class_name_color = $en_lang_functions['text_insane_user']; break;} + case UC_VETERAN_USER: {$class_name_color = $en_lang_functions['text_veteran_user']; break;} + case UC_EXTREME_USER: {$class_name_color = $en_lang_functions['text_extreme_user']; break;} + case UC_ULTIMATE_USER: {$class_name_color = $en_lang_functions['text_ultimate_user']; break;} + case UC_NEXUS_MASTER: {$class_name_color = $en_lang_functions['text_nexus_master']; break;} + case UC_VIP: {$class_name_color = $en_lang_functions['text_vip']; break;} + case UC_UPLOADER: {$class_name_color = $en_lang_functions['text_uploader']; break;} + case UC_RETIREE: {$class_name_color = $en_lang_functions['text_retiree']; break;} + case UC_FORUM_MODERATOR: {$class_name_color = $en_lang_functions['text_forum_moderator']; break;} + case UC_MODERATOR: {$class_name_color = $en_lang_functions['text_moderators']; break;} + case UC_ADMINISTRATOR: {$class_name_color = $en_lang_functions['text_administrators']; break;} + case UC_SYSOP: {$class_name_color = $en_lang_functions['text_sysops']; break;} + case UC_STAFFLEADER: {$class_name_color = $en_lang_functions['text_staff_leader']; break;} + } + + $class_name = ( $compact == true ? str_replace(" ", "",$class_name) : $class_name); + if ($class_name) return ($b_colored == true ? "" . $class_name . "" : $class_name); +} + +function is_valid_user_class($class) +{ + return is_numeric($class) && floor($class) == $class && $class >= UC_PEASANT && $class <= UC_STAFFLEADER; +} + +function int_check($value,$stdhead = false, $stdfood = true, $die = true, $log = true) { + global $lang_functions; + global $CURUSER; + if (is_array($value)) + { + foreach ($value as $val) int_check ($val); + } + else + { + if (!is_valid_id($value)) { + $msg = "Invalid ID Attempt: Username: ".$CURUSER["username"]." - UserID: ".$CURUSER["id"]." - UserIP : ".getip(); + if ($log) + write_log($msg,'mod'); + + if ($stdhead) + stderr($lang_functions['std_error'],$lang_functions['std_invalid_id']); + else + { + print ("

".$lang_functions['std_error']."

"); + print ($lang_functions['std_invalid_id']."
"); + } + if ($stdfood) + stdfoot(); + if ($die) + die; + } + else + return true; + } +} + +function is_valid_id($id) +{ + return is_numeric($id) && ($id > 0) && (floor($id) == $id); +} + + +//-------- Begins a main frame +function begin_main_frame($caption = "", $center = false, $width = 100) +{ + $tdextra = ""; + if ($caption) + print("

".$caption."

"); + + if ($center) + $tdextra .= " align=\"center\""; + + $width = 940 * $width /100; + + print("" . + "
"); +} + +function end_main_frame() +{ + print("
\n"); +} + +function begin_frame($caption = "", $center = false, $padding = 10, $width="100%", $caption_center="left") +{ + $tdextra = ""; + + if ($center) + $tdextra .= " align=\"center\""; + + print(($caption ? "

".$caption."

" : "") . "" . "
\n"); + +} + +function end_frame() +{ + print("
\n"); +} + +function begin_table($fullwidth = false, $padding = 5) +{ + $width = ""; + + if ($fullwidth) + $width .= " width=50%"; + print(""); +} + +function end_table() +{ + print("
\n"); +} + +//-------- Inserts a smilies frame +// (move to globals) + +function insert_smilies_frame() +{ + global $lang_functions; + begin_frame($lang_functions['text_smilies'], true); + begin_table(false, 5); + print("".$lang_functions['col_type_something']."".$lang_functions['col_to_make_a']."\n"); + for ($i=1; $i<192; $i++) { + print("[em$i]\"[em$i]\"\n"); + } + end_table(); + end_frame(); +} + +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 ""; +} + +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 ""; +} + +function write_log($text, $security = "normal") +{ + $text = sqlesc($text); + $added = sqlesc(date("Y-m-d H:i:s")); + $security = sqlesc($security); + sql_query("INSERT INTO sitelog (added, txt, security_level) VALUES($added, $text, $security)") or sqlerr(__FILE__, __LINE__); +} + + + +function get_elapsed_time($ts,$shortunit = false) +{ + global $lang_functions; + $mins = floor(abs(TIMENOW - $ts) / 60); + $hours = floor($mins / 60); + $mins -= $hours * 60; + $days = floor($hours / 24); + $hours -= $days * 24; + $months = floor($days / 30); + $days2 = $days - $months * 30; + $years = floor($days / 365); + $months -= $years * 12; + $t = ""; + if ($years > 0) + return $years.($shortunit ? $lang_functions['text_short_year'] : $lang_functions['text_year'] . add_s($year)) ." ".$months.($shortunit ? $lang_functions['text_short_month'] : $lang_functions['text_month'] . add_s($months)); + if ($months > 0) + return $months.($shortunit ? $lang_functions['text_short_month'] : $lang_functions['text_month'] . add_s($months)) ." ".$days2.($shortunit ? $lang_functions['text_short_day'] : $lang_functions['text_day'] . add_s($days2)); + if ($days > 0) + return $days.($shortunit ? $lang_functions['text_short_day'] : $lang_functions['text_day'] . add_s($days))." ".$hours.($shortunit ? $lang_functions['text_short_hour'] : $lang_functions['text_hour'] . add_s($hours)); + if ($hours > 0) + return $hours.($shortunit ? $lang_functions['text_short_hour'] : $lang_functions['text_hour'] . add_s($hours))." ".$mins.($shortunit ? $lang_functions['text_short_min'] : $lang_functions['text_min'] . add_s($mins)); + if ($mins > 0) + return $mins.($shortunit ? $lang_functions['text_short_min'] : $lang_functions['text_min'] . add_s($mins)); + return "< 1".($shortunit ? $lang_functions['text_short_min'] : $lang_functions['text_min']); +} + +function textbbcode($form,$text,$content="",$hastitle=false, $col_num = 130) +{ + global $lang_functions; + global $subject, $BASEURL, $CURUSER, $enableattach_attachment; +?> + + + + + + + + + +"); +print(" +
+ + + + + +"); +print(""); +print(""); +?> + + + + + +
+ + +
+
+ +
"); +?> + + + + 0) { + print(''); + } + print(""); + $i++; +} +?> +
".getSmileIt($form, $text, $smily)."
+
+ +
+".$title.""); + switch ($type){ + case 'new': + { + $framename = $lang_functions['text_new']; + break; + } + case 'reply': + { + $framename = $lang_functions['text_reply']; + break; + } + case 'quote': + { + $framename = $lang_functions['text_quote']; + break; + } + case 'edit': + { + $framename = $lang_functions['text_edit']; + break; + } + default: + { + $framename = $lang_functions['text_new']; + break; + } + } + begin_frame($framename, true); + print("\n"); + if ($hassubject) + print("" . +"\n"); + print(""); +} + +function end_compose(){ + global $lang_functions; + print(""); + print("
".$lang_functions['row_subject']."
".$lang_functions['row_body']."
"); + textbbcode("compose","body", $body, false); + print("
"); + print(""); + print(""); + print("
"); + print("
\n"); + end_frame(); + print("

".$lang_functions['text_tags']." | ".$lang_functions['text_smilies']."

\n"); +} + +function insert_suggest($keyword, $userid, $pre_escaped = true) +{ + if(mb_strlen($keyword,"UTF-8") >= 2) + { + $userid = 0 + $userid; + if($userid) + sql_query("INSERT INTO suggest(keywords, userid, adddate) VALUES (" . ($pre_escaped == true ? "'" . $keyword . "'" : sqlesc($keyword)) . "," . sqlesc($userid) . ", NOW())") or sqlerr(__FILE__,__LINE__); + } +} + +function get_external_tr($imdb_url = "") +{ + global $lang_functions; + global $showextinfo; + $imdbNumber = parse_imdb_id($imdb_url); + ($showextinfo['imdb'] == 'yes' ? tr($lang_functions['row_imdb_url'], "
".$lang_functions['text_imdb_url_note']."", 1) : ""); +} + +function get_torrent_extinfo_identifier($torrentid) +{ + $torrentid = 0 + $torrentid; + + $result = array('imdb_id'); + unset($result); + + if($torrentid) + { + $res = sql_query("SELECT url FROM torrents WHERE id=" . $torrentid) or sqlerr(__FILE__,__LINE__); + if(mysql_num_rows($res) == 1) + { + $arr = mysql_fetch_array($res) or sqlerr(__FILE__,__LINE__); + + $imdb_id = parse_imdb_id($arr["url"]); + $result['imdb_id'] = $imdb_id; + } + } + return $result; +} + +function parse_imdb_id($url) +{ + if ($url != "" && preg_match("/[0-9]{7}/i", $url, $matches)) { + return $matches[0]; + } elseif ($url && is_numeric($url) && strlen($url) < 7) { + return str_pad($url, 7, '0', STR_PAD_LEFT); + } else { + return false; + } +} + +function build_imdb_url($imdb_id) +{ + return $imdb_id == "" ? "" : "http://www.imdb.com/title/tt" . $imdb_id . "/"; +} + +// it's a stub implemetation here, we need more acurate regression analysis to complete our algorithm +function get_torrent_2_user_value($user_snatched_arr) +{ + // check if it's current user's torrent + $torrent_2_user_value = 1.0; + + $torrent_res = sql_query("SELECT * FROM torrents WHERE id = " . $user_snatched_arr['torrentid']) or sqlerr(__FILE__, __LINE__); + if(mysql_num_rows($torrent_res) == 1) // torrent still exists + { + $torrent_arr = mysql_fetch_array($torrent_res) or sqlerr(__FILE__, __LINE__); + if($torrent_arr['owner'] == $user_snatched_arr['userid']) // owner's torrent + { + $torrent_2_user_value *= 0.7; // owner's torrent + $torrent_2_user_value += ($user_snatched_arr['uploaded'] / $torrent_arr['size'] ) -1 > 0 ? 0.2 - exp(-(($user_snatched_arr['uploaded'] / $torrent_arr['size'] ) -1)) : ($user_snatched_arr['uploaded'] / $torrent_arr['size'] ) -1; + $torrent_2_user_value += min(0.1 , ($user_snatched_arr['seedtime'] / 37*60*60 ) * 0.1); + } + else + { + if($user_snatched_arr['finished'] == 'yes') + { + $torrent_2_user_value *= 0.5; + $torrent_2_user_value += ($user_snatched_arr['uploaded'] / $torrent_arr['size'] ) -1 > 0 ? 0.4 - exp(-(($user_snatched_arr['uploaded'] / $torrent_arr['size'] ) -1)) : ($user_snatched_arr['uploaded'] / $torrent_arr['size'] ) -1; + $torrent_2_user_value += min(0.1, ($user_snatched_arr['seedtime'] / 22*60*60 ) * 0.1); + } + else + { + $torrent_2_user_value *= 0.2; + $torrent_2_user_value += min(0.05, ($user_snatched_arr['leechtime'] / 24*60*60 ) * 0.1); // usually leechtime could not explain much + } + } + } + else // torrent already deleted, half blind guess, be conservative + { + + if($user_snatched_arr['finished'] == 'no' && $user_snatched_arr['uploaded'] > 0 && $user_snatched_arr['downloaded'] == 0) // possibly owner + { + $torrent_2_user_value *= 0.55; //conservative + $torrent_2_user_value += min(0.05, ($user_snatched_arr['leechtime'] / 31*60*60 ) * 0.1); + $torrent_2_user_value += min(0.1, ($user_snatched_arr['seedtime'] / 31*60*60 ) * 0.1); + } + else if($user_snatched_arr['downloaded'] > 0) // possibly leecher + { + $torrent_2_user_value *= 0.38; //conservative + $torrent_2_user_value *= min(0.22, 0.1 * $user_snatched_arr['uploaded'] / $user_snatched_arr['downloaded']); // 0.3 for conservative + $torrent_2_user_value += min(0.05, ($user_snatched_arr['leechtime'] / 22*60*60 ) * 0.1); + $torrent_2_user_value += min(0.12, ($user_snatched_arr['seedtime'] / 22*60*60 ) * 0.1); + } + else + $torrent_2_user_value *= 0.0; + } + return $torrent_2_user_value; +} + +function cur_user_check () { + global $lang_functions; + global $CURUSER; + if ($CURUSER) + { + sql_query("UPDATE users SET lang=" . get_langid_from_langcookie() . " WHERE id = ". $CURUSER['id']); + stderr ($lang_functions['std_permission_denied'], $lang_functions['std_already_logged_in']); + } +} + +function KPS($type = "+", $point = "1.0", $id = "") { + global $bonus_tweak; + if ($point != 0){ + $point = sqlesc($point); + if ($bonus_tweak == "enable" || $bonus_tweak == "disablesave"){ + sql_query("UPDATE users SET seedbonus = seedbonus$type$point WHERE id = ".sqlesc($id)) or sqlerr(__FILE__, __LINE__); + } + } + else return; +} + +function get_agent($peer_id, $agent) +{ + return substr($agent, 0, (strpos($agent, ";") == false ? strlen($agent) : strpos($agent, ";"))); +} + +function EmailBanned($newEmail) +{ + $newEmail = trim(strtolower($newEmail)); + $sql = sql_query("SELECT * FROM bannedemails") or sqlerr(__FILE__, __LINE__); + $list = mysql_fetch_array($sql); + $addresses = explode(' ', preg_replace("/[[:space:]]+/", " ", trim($list[value])) ); + + if(count($addresses) > 0) + { + foreach ( $addresses as $email ) + { + $email = trim(strtolower(preg_replace('/\./', '\\.', $email))); + if(strstr($email, "@")) + { + if(preg_match('/^@/', $email)) + {// Any user @host? + // Expand the match expression to catch hosts and + // sub-domains + $email = preg_replace('/^@/', '[@\\.]', $email); + if(preg_match("/".$email."$/", $newEmail)) + return true; + } + } + elseif(preg_match('/@$/', $email)) + { // User at any host? + if(preg_match("/^".$email."/", $newEmail)) + return true; + } + else + { // User@host + if(strtolower($email) == $newEmail) + return true; + } + } + } + + return false; +} + +function EmailAllowed($newEmail) +{ +global $restrictemaildomain; +if ($restrictemaildomain == 'yes'){ + $newEmail = trim(strtolower($newEmail)); + $sql = sql_query("SELECT * FROM allowedemails") or sqlerr(__FILE__, __LINE__); + $list = mysql_fetch_array($sql); + $addresses = explode(' ', preg_replace("/[[:space:]]+/", " ", trim($list[value])) ); + + if(count($addresses) > 0) + { + foreach ( $addresses as $email ) + { + $email = trim(strtolower(preg_replace('/\./', '\\.', $email))); + if(strstr($email, "@")) + { + if(preg_match('/^@/', $email)) + {// Any user @host? + // Expand the match expression to catch hosts and + // sub-domains + $email = preg_replace('/^@/', '[@\\.]', $email); + if(preg_match('/'.$email.'$/', $newEmail)) + return true; + } + } + elseif(preg_match('/@$/', $email)) + { // User at any host? + if(preg_match("/^".$email."/", $newEmail)) + return true; + } + else + { // User@host + if(strtolower($email) == $newEmail) + return true; + } + } + } + return false; +} +else return true; +} + +function allowedemails() +{ + $sql = sql_query("SELECT * FROM allowedemails") or sqlerr(__FILE__, __LINE__); + $list = mysql_fetch_array($sql); + return $list['value']; +} + +function redirect($url) +{ + if(!headers_sent()){ + header("Location : $url"); + } + else + echo ""; + exit; +} + +function set_cachetimestamp($id, $field = "cache_stamp") +{ + sql_query("UPDATE torrents SET $field = " . time() . " WHERE id = " . sqlesc($id)) or sqlerr(__FILE__, __LINE__); +} +function reset_cachetimestamp($id, $field = "cache_stamp") +{ + sql_query("UPDATE torrents SET $field = 0 WHERE id = " . sqlesc($id)) or sqlerr(__FILE__, __LINE__); +} + +function cache_check ($file = 'cachefile',$endpage = true, $cachetime = 600) { + global $lang_functions; + global $rootpath,$cache,$CURLANGDIR; + $cachefile = $rootpath.$cache ."/" . $CURLANGDIR .'/'.$file.'.html'; + // Serve from the cache if it is younger than $cachetime + if (file_exists($cachefile) && (time() - $cachetime < filemtime($cachefile))) + { + include($cachefile); + if ($endpage) + { + print("

".$lang_functions['text_page_last_updated'].date('Y-m-d H:i:s', filemtime($cachefile))."

"); + end_main_frame(); + stdfoot(); + exit; + } + return false; + } + ob_start(); + return true; +} + +function cache_save ($file = 'cachefile') { + global $rootpath,$cache; + global $CURLANGDIR; + $cachefile = $rootpath.$cache ."/" . $CURLANGDIR . '/'.$file.'.html'; + $fp = fopen($cachefile, 'w'); + // save the contents of output buffer to the file + fwrite($fp, ob_get_contents()); + // close the file + fclose($fp); + // Send the output to the browser + ob_end_flush(); +} + +function get_email_encode($lang) +{ + if($lang == 'chs' || $lang == 'cht') + return "gbk"; + else + return "utf-8"; +} + +function change_email_encode($lang, $content) +{ + return iconv("utf-8", get_email_encode($lang) . "//IGNORE", $content); +} + +function safe_email($email) { + $email = str_replace("<","",$email); + $email = str_replace(">","",$email); + $email = str_replace("\'","",$email); + $email = str_replace('\"',"",$email); + $email = str_replace("\\\\","",$email); + + return $email; +} + +function check_email ($email) { + if(preg_match('/^[A-Za-z0-9][A-Za-z0-9_.+\-]*@[A-Za-z0-9][A-Za-z0-9_+\-]*(\.[A-Za-z0-9][A-Za-z0-9_+\-]*)+$/', $email)) + return true; + else + return false; +} + +function sent_mail($to,$fromname,$fromemail,$subject,$body,$type = "confirmation",$showmsg=true,$multiple=false,$multiplemail='',$hdr_encoding = 'UTF-8', $specialcase = '') { + global $lang_functions; + global $rootpath,$SITENAME,$SITEEMAIL,$smtptype,$smtp,$smtp_host,$smtp_port,$smtp_from,$smtpaddress,$smtpport,$accountname,$accountpassword; + # Is the OS Windows or Mac or Linux? + if (strtoupper(substr(PHP_OS,0,3)=='WIN')) { + $eol="\r\n"; + $windows = true; + } + elseif (strtoupper(substr(PHP_OS,0,3)=='MAC')) + $eol="\r"; + else + $eol="\n"; + if ($smtptype == 'none') + return false; + if ($smtptype == 'default') { + @mail($to, "=?".$hdr_encoding."?B?".base64_encode($subject)."?=", $body, "From: ".$SITEEMAIL.$eol."Content-type: text/html; charset=".$hdr_encoding.$eol, "-f$SITEEMAIL") or stderr($lang_functions['std_error'], $lang_functions['text_unable_to_send_mail']); + } + elseif ($smtptype == 'advanced') { + $mid = md5(getip() . $fromname); + $name = $_SERVER["SERVER_NAME"]; + $headers .= "From: $fromname <$fromemail>".$eol; + $headers .= "Reply-To: $fromname <$fromemail>".$eol; + $headers .= "Return-Path: $fromname <$fromemail>".$eol; + $headers .= "Message-ID: <$mid thesystem@$name>".$eol; + $headers .= "X-Mailer: PHP v".phpversion().$eol; + $headers .= "MIME-Version: 1.0".$eol; + $headers .= "Content-type: text/html; charset=".$hdr_encoding.$eol; + $headers .= "X-Sender: PHP".$eol; + if ($multiple) + { + $bcc_multiplemail = ""; + foreach ($multiplemail as $toemail) + $bcc_multiplemail = $bcc_multiplemail . ( $bcc_multiplemail != "" ? "," : "") . $toemail; + + $headers .= "Bcc: $multiplemail.$eol"; + } + if ($smtp == "yes") { + ini_set('SMTP', $smtp_host); + ini_set('smtp_port', $smtp_port); + if ($windows) + ini_set('sendmail_from', $smtp_from); + } + + @mail($to,"=?".$hdr_encoding."?B?".base64_encode($subject)."?=",$body,$headers) or stderr($lang_functions['std_error'], $lang_functions['text_unable_to_send_mail']); + + ini_restore(SMTP); + ini_restore(smtp_port); + if ($windows) + ini_restore(sendmail_from); + } + elseif ($smtptype == 'external') { + require_once ($rootpath . 'include/smtp/smtp.lib.php'); + $mail = new smtp($hdr_encoding,'eYou'); + $mail->debug(false); + $mail->open($smtpaddress, $smtpport); + $mail->auth($accountname, $accountpassword); + // $mail->bcc($multiplemail); + $mail->from($SITEEMAIL); + if ($multiple) + { + $mail->multi_to_head($to); + foreach ($multiplemail as $toemail) + $mail->multi_to($toemail); + } + else + $mail->to($to); + $mail->mime_content_transfer_encoding(); + $mail->mime_charset('text/html', $hdr_encoding); + $mail->subject($subject); + $mail->body($body); + $mail->send() or stderr($lang_functions['std_error'], $lang_functions['text_unable_to_send_mail']); + $mail->close(); + } + if ($showmsg) { + if ($type == "confirmation") + stderr($lang_functions['std_success'], $lang_functions['std_confirmation_email_sent']."". htmlspecialchars($to) .".\n" . + $lang_functions['std_please_wait'],false); + elseif ($type == "details") + stderr($lang_functions['std_success'], $lang_functions['std_account_details_sent']."". htmlspecialchars($to) .".\n" . + $lang_functions['std_please_wait'],false); + }else + return true; +} + +function failedloginscheck ($type = 'Login') { + global $lang_functions; + global $maxloginattempts; + $total = 0; + $ip = sqlesc(getip()); + $Query = sql_query("SELECT SUM(attempts) FROM loginattempts WHERE ip=$ip") or sqlerr(__FILE__, __LINE__); + list($total) = mysql_fetch_array($Query); + if ($total >= $maxloginattempts) { + sql_query("UPDATE loginattempts SET banned = 'yes' WHERE ip=$ip") or sqlerr(__FILE__, __LINE__); + stderr($type.$lang_functions['std_locked'].$type.$lang_functions['std_attempts_reached'], $lang_functions['std_your_ip_banned']); + } +} +function failedlogins ($type = 'login', $recover = false, $head = true) +{ + global $lang_functions; + $ip = sqlesc(getip()); + $added = sqlesc(date("Y-m-d H:i:s")); + $a = (@mysql_fetch_row(@sql_query("select count(*) from loginattempts where ip=$ip"))) or sqlerr(__FILE__, __LINE__); + if ($a[0] == 0) + sql_query("INSERT INTO loginattempts (ip, added, attempts) VALUES ($ip, $added, 1)") or sqlerr(__FILE__, __LINE__); + else + sql_query("UPDATE loginattempts SET attempts = attempts + 1 where ip=$ip") or sqlerr(__FILE__, __LINE__); + if ($recover) + sql_query("UPDATE loginattempts SET type = 'recover' WHERE ip = $ip") or sqlerr(__FILE__, __LINE__); + if ($type == 'silent') + return; + elseif ($type == 'login') + { + stderr($lang_functions['std_login_failed'],$lang_functions['std_login_failed_note'],false); + } + else + stderr($lang_functions['std_failed'],$type,false, $head); + +} + +function login_failedlogins($type = 'login', $recover = false, $head = true) +{ + global $lang_functions; + $ip = sqlesc(getip()); + $added = sqlesc(date("Y-m-d H:i:s")); + $a = (@mysql_fetch_row(@sql_query("select count(*) from loginattempts where ip=$ip"))) or sqlerr(__FILE__, __LINE__); + if ($a[0] == 0) + sql_query("INSERT INTO loginattempts (ip, added, attempts) VALUES ($ip, $added, 1)") or sqlerr(__FILE__, __LINE__); + else + sql_query("UPDATE loginattempts SET attempts = attempts + 1 where ip=$ip") or sqlerr(__FILE__, __LINE__); + if ($recover) + sql_query("UPDATE loginattempts SET type = 'recover' WHERE ip = $ip") or sqlerr(__FILE__, __LINE__); + if ($type == 'silent') + return; + elseif ($type == 'login') + { + stderr($lang_functions['std_login_failed'],$lang_functions['std_login_failed_note'],false); + } + else + stderr($lang_functions['std_recover_failed'],$type,false, $head); +} + +function remaining ($type = 'login') { + global $maxloginattempts; + $total = 0; + $ip = sqlesc(getip()); + $Query = sql_query("SELECT SUM(attempts) FROM loginattempts WHERE ip=$ip") or sqlerr(__FILE__, __LINE__); + list($total) = mysql_fetch_array($Query); + $remaining = $maxloginattempts - $total; + if ($remaining <= 2 ) + $remaining = "[".$remaining."]"; + else + $remaining = "[".$remaining."]"; + + return $remaining; +} + +function registration_check($type = "invitesystem", $maxuserscheck = true, $ipcheck = true) { + global $lang_functions; + global $invitesystem, $registration, $maxusers, $SITENAME, $maxip; + if ($type == "invitesystem") { + if ($invitesystem == "no") { + stderr($lang_functions['std_oops'], $lang_functions['std_invite_system_disabled'], 0); + } + } + + if ($type == "normal") { + if ($registration == "no") { + stderr($lang_functions['std_sorry'], $lang_functions['std_open_registration_disabled'], 0); + } + } + + if ($maxuserscheck) { + $res = sql_query("SELECT COUNT(*) FROM users") or sqlerr(__FILE__, __LINE__); + $arr = mysql_fetch_row($res); + if ($arr[0] >= $maxusers) + stderr($lang_functions['std_sorry'], $lang_functions['std_account_limit_reached'], 0); + } + + if ($ipcheck) { + $ip = getip () ; + $a = (@mysql_fetch_row(@sql_query("select count(*) from users where ip='" . mysql_real_escape_string($ip) . "'"))) or sqlerr(__FILE__, __LINE__); + if ($a[0] > $maxip) + stderr($lang_functions['std_sorry'], $lang_functions['std_the_ip']."" . htmlspecialchars($ip) ."". $lang_functions['std_used_many_times'],false); + } + return true; +} + +function random_str($length="6") +{ + $set = array("A","B","C","D","E","F","G","H","P","R","M","N","1","2","3","4","5","6","7","8","9"); + $str; + for($i=1;$i<=$length;$i++) + { + $ch = rand(0, count($set)-1); + $str .= $set[$ch]; + } + return $str; +} +function image_code () { + $randomstr = random_str(); + $imagehash = md5($randomstr); + $dateline = time(); + $sql = 'INSERT INTO `regimages` (`imagehash`, `imagestring`, `dateline`) VALUES (\''.$imagehash.'\', \''.$randomstr.'\', \''.$dateline.'\');'; + sql_query($sql) or die(mysql_error()); + return $imagehash; +} + +function check_code ($imagehash, $imagestring, $where = 'signup.php',$maxattemptlog=false,$head=true) { + global $lang_functions; + $query = sprintf("SELECT * FROM regimages WHERE imagehash='%s' AND imagestring='%s'", + mysql_real_escape_string($imagehash), + mysql_real_escape_string($imagestring)); + $sql = sql_query($query); + $imgcheck = mysql_fetch_array($sql); + if(!$imgcheck['dateline']) { + $delete = sprintf("DELETE FROM regimages WHERE imagehash='%s'", + mysql_real_escape_string($imagehash)); + sql_query($delete); + if (!$maxattemptlog) + bark($lang_functions['std_invalid_image_code']."".$lang_functions['std_here_to_request_new']); + else + failedlogins($lang_functions['std_invalid_image_code']."".$lang_functions['std_here_to_request_new'],true,$head); + }else{ + $delete = sprintf("DELETE FROM regimages WHERE imagehash='%s'", + mysql_real_escape_string($imagehash)); + sql_query($delete); + return true; + } +} +function show_image_code () { + global $lang_functions; + global $iv; + if ($iv == "yes") { + unset($imagehash); + $imagehash = image_code () ; + print ("".$lang_functions['row_security_image'].""); + print ("\"CAPTCHA\""); + print ("".$lang_functions['row_security_code'].""); + print(""); + print(""); + } +} + +function get_ip_location($ip) +{ + global $lang_functions; + global $Cache; + if (!$ret = $Cache->get_value('location_list')){ + $ret = array(); + $res = sql_query("SELECT * FROM locations") or sqlerr(__FILE__, __LINE__); + while ($row = mysql_fetch_array($res)) + $ret[] = $row; + $Cache->cache_value('location_list', $ret, 152800); + } + $location = array($lang_functions['text_unknown'],""); + + foreach($ret AS $arr) + { + if(in_ip_range(false, $ip, $arr["start_ip"], $arr["end_ip"])) + { + $location = array($arr["name"], $lang_functions['text_user_ip'].": " . $ip . ($arr["location_main"] != "" ? " ".$lang_functions['text_location_main'].": " . $arr["location_main"] : ""). ($arr["location_sub"] != "" ? " ".$lang_functions['text_location_sub'].": " . $arr["location_sub"] : "") . " ".$lang_functions['text_ip_range'].": " . $arr["start_ip"] . " ~ ". $arr["end_ip"]); + break; + } + } + return $location; +} + +function in_ip_range($long, $targetip, $ip_one, $ip_two=false) +{ + // if only one ip, check if is this ip + if($ip_two===false){ + if(($long ? (long2ip($ip_one) == $targetip) : ( $ip_one == $targetip))){ + $ip=true; + } + else{ + $ip=false; + } + } + else{ + if($long ? ($ip_one<=ip2long($targetip) && $ip_two>=ip2long($targetip)) : (ip2long($ip_one)<=ip2long($targetip) && ip2long($ip_two)>=ip2long($targetip))){ + $ip=true; + } + else{ + $ip=false; + } + } + return $ip; +} + + +function validip_format($ip) +{ + $ipPattern = + '/\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.' . + '(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.' . + '(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.' . + '(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b/'; + + return preg_match($ipPattern, $ip); +} + +function maxslots () { + global $lang_functions; + global $CURUSER, $maxdlsystem; + $gigs = $CURUSER["uploaded"] / (1024*1024*1024); + $ratio = (($CURUSER["downloaded"] > 0) ? ($CURUSER["uploaded"] / $CURUSER["downloaded"]) : 1); + if ($ratio < 0.5 || $gigs < 5) $max = 1; + elseif ($ratio < 0.65 || $gigs < 6.5) $max = 2; + elseif ($ratio < 0.8 || $gigs < 8) $max = 3; + elseif ($ratio < 0.95 || $gigs < 9.5) $max = 4; + else $max = 0; + if ($maxdlsystem == "yes") { + if (get_user_class() < UC_VIP) { + if ($max > 0) + print ("".$lang_functions['text_slots']."$max"); + else + print ("".$lang_functions['text_slots']."".$lang_functions['text_unlimited']); + }else + print ("".$lang_functions['text_slots']."".$lang_functions['text_unlimited']); + }else + print ("".$lang_functions['text_slots']."".$lang_functions['text_unlimited']); +} + +function WriteConfig ($configname = NULL, $config = NULL) { + global $lang_functions, $CONFIGURATIONS; + + if (file_exists('config/allconfig.php')) { + require('config/allconfig.php'); + } + if ($configname) { + $$configname=$config; + } + $path = './config/allconfig.php'; + if (!file_exists($path) || !is_writable ($path)) { + stdmsg($lang_functions['std_error'], $lang_functions['std_cannot_read_file']."[".htmlspecialchars($path)."]".$lang_functions['std_access_permission_note']); + } + $data = "".htmlspecialchars($path)."
]".$lang_functions['std_to_save_info'].$lang_functions['std_access_permission_note']); + } + $Res = @fwrite($fp, $data); + if (empty($Res)) { + stdmsg($lang_functions['std_error'], $lang_functions['text_cannot_save_info_in']."[".htmlspecialchars($path)."]".$lang_functions['std_access_permission_note']); + } + fclose($fp); + return true; +} + +function getExportedValue($input,$t = null) { + switch (gettype($input)) { + case 'string': + return "'".str_replace(array("\\","'"),array("\\\\","\'"),$input)."'"; + case 'array': + $output = "array(\r"; + foreach ($input as $key => $value) { + $output .= $t."\t".getExportedValue($key,$t."\t").' => '.getExportedValue($value,$t."\t"); + $output .= ",\n"; + } + $output .= $t.')'; + return $output; + case 'boolean': + return $input ? 'true' : 'false'; + case 'NULL': + return 'NULL'; + case 'integer': + case 'double': + case 'float': + return "'".(string)$input."'"; + } + return 'NULL'; +} + +function dbconn($autoclean = false) +{ + global $lang_functions; + global $mysql_host, $mysql_user, $mysql_pass, $mysql_db; + global $useCronTriggerCleanUp; + + if (!mysql_connect($mysql_host, $mysql_user, $mysql_pass)) + { + switch (mysql_errno()) + { + case 1040: + case 2002: + die("

".$lang_functions['std_server_load_very_high']."

"); + default: + die("[" . mysql_errno() . "] dbconn: mysql_connect: " . mysql_error()); + } + } + mysql_query("SET NAMES UTF8"); + mysql_query("SET collation_connection = 'utf8_general_ci'"); + mysql_query("SET sql_mode=''"); + mysql_select_db($mysql_db) or die('dbconn: mysql_select_db: ' + mysql_error()); + + userlogin(); + + if (!$useCronTriggerCleanUp && $autoclean) { + register_shutdown_function("autoclean"); + } +} +function get_user_row($id) +{ + global $Cache, $CURUSER; + static $curuserRowUpdated = false; + static $neededColumns = array('id', 'noad', 'class', 'enabled', 'privacy', 'avatar', 'signature', 'uploaded', 'downloaded', 'last_access', 'username', 'donor', 'leechwarn', 'warned', 'title'); + if ($id == $CURUSER['id']) { + $row = array(); + foreach($neededColumns as $column) { + $row[$column] = $CURUSER[$column]; + } + if (!$curuserRowUpdated) { + $Cache->cache_value('user_'.$CURUSER['id'].'_content', $row, 900); + $curuserRowUpdated = true; + } + } elseif (!$row = $Cache->get_value('user_'.$id.'_content')){ + $res = sql_query("SELECT ".implode(',', $neededColumns)." FROM users WHERE id = ".sqlesc($id)) or sqlerr(__FILE__,__LINE__); + $row = mysql_fetch_array($res); + $Cache->cache_value('user_'.$id.'_content', $row, 900); + } + + if (!$row) + return false; + else return $row; +} + +function userlogin() { + global $lang_functions; + global $Cache; + global $SITE_ONLINE, $oldip; + global $enablesqldebug_tweak, $sqldebug_tweak; + unset($GLOBALS["CURUSER"]); + + $ip = getip(); + $nip = ip2long($ip); + if ($nip) //$nip would be false for IPv6 address + { + $res = sql_query("SELECT * FROM bans WHERE $nip >= first AND $nip <= last") or sqlerr(__FILE__, __LINE__); + if (mysql_num_rows($res) > 0) + { + header("HTTP/1.0 403 Forbidden"); + print("".$lang_functions['text_unauthorized_ip']."\n"); + die; + } + } + + if (empty($_COOKIE["c_secure_pass"]) || empty($_COOKIE["c_secure_uid"]) || empty($_COOKIE["c_secure_login"])) + return; + if ($_COOKIE["c_secure_login"] == base64("yeah")) + { + //if (empty($_SESSION["s_secure_uid"]) || empty($_SESSION["s_secure_pass"])) + //return; + } + $b_id = base64($_COOKIE["c_secure_uid"],false); + $id = 0 + $b_id; + if (!$id || !is_valid_id($id) || strlen($_COOKIE["c_secure_pass"]) != 32) + return; + + if ($_COOKIE["c_secure_login"] == base64("yeah")) + { + //if (strlen($_SESSION["s_secure_pass"]) != 32) + //return; + } + + $res = sql_query("SELECT * FROM users WHERE users.id = ".sqlesc($id)." AND users.enabled='yes' AND users.status = 'confirmed' LIMIT 1"); + $row = mysql_fetch_array($res); + if (!$row) + return; + + $sec = hash_pad($row["secret"]); + + //die(base64_decode($_COOKIE["c_secure_login"])); + + if ($_COOKIE["c_secure_login"] == base64("yeah")) + { + + if ($_COOKIE["c_secure_pass"] != md5($row["passhash"].$_SERVER["REMOTE_ADDR"])) + return; + } + else + { + if ($_COOKIE["c_secure_pass"] !== md5($row["passhash"])) + return; + } + + if ($_COOKIE["c_secure_login"] == base64("yeah")) + { + //if ($_SESSION["s_secure_pass"] !== md5($row["passhash"].$_SERVER["REMOTE_ADDR"])) + //return; + } + if (!$row["passkey"]){ + $passkey = md5($row['username'].date("Y-m-d H:i:s").$row['passhash']); + sql_query("UPDATE users SET passkey = ".sqlesc($passkey)." WHERE id=" . sqlesc($row["id"]));// or die(mysql_error()); + } + + $oldip = $row['ip']; + $row['ip'] = $ip; + $GLOBALS["CURUSER"] = $row; + if ($_GET['clearcache'] && get_user_class() >= UC_MODERATOR) { + $Cache->setClearCache(1); + } + if ($enablesqldebug_tweak == 'yes' && get_user_class() >= $sqldebug_tweak) { + error_reporting(E_ALL & ~E_NOTICE); + } +} + +function autoclean() { + global $autoclean_interval_one, $rootpath; + $now = TIMENOW; + + $res = sql_query("SELECT value_u FROM avps WHERE arg = 'lastcleantime'"); + $row = mysql_fetch_array($res); + if (!$row) { + sql_query("INSERT INTO avps (arg, value_u) VALUES ('lastcleantime',$now)") or sqlerr(__FILE__, __LINE__); + return false; + } + $ts = $row[0]; + if ($ts + $autoclean_interval_one > $now) { + return false; + } + sql_query("UPDATE avps SET value_u=$now WHERE arg='lastcleantime' AND value_u = $ts") or sqlerr(__FILE__, __LINE__); + if (!mysql_affected_rows()) { + return false; + } + require_once($rootpath . 'include/cleanup.php'); + return docleanup(); +} + +function unesc($x) { + return $x; +} + + +function getsize_int($amount, $unit = "G") +{ + if ($unit == "B") + return floor($amount); + elseif ($unit == "K") + return floor($amount * 1024); + elseif ($unit == "M") + return floor($amount * 1048576); + elseif ($unit == "G") + return floor($amount * 1073741824); + elseif($unit == "T") + return floor($amount * 1099511627776); + elseif($unit == "P") + return floor($amount * 1125899906842624); +} + +function mksize_compact($bytes) +{ + if ($bytes < 1000 * 1024) + return number_format($bytes / 1024, 2) . "
KB"; + elseif ($bytes < 1000 * 1048576) + return number_format($bytes / 1048576, 2) . "
MB"; + elseif ($bytes < 1000 * 1073741824) + return number_format($bytes / 1073741824, 2) . "
GB"; + elseif ($bytes < 1000 * 1099511627776) + return number_format($bytes / 1099511627776, 3) . "
TB"; + else + return number_format($bytes / 1125899906842624, 3) . "
PB"; +} + +function mksize_loose($bytes) +{ + if ($bytes < 1000 * 1024) + return number_format($bytes / 1024, 2) . " KB"; + elseif ($bytes < 1000 * 1048576) + return number_format($bytes / 1048576, 2) . " MB"; + elseif ($bytes < 1000 * 1073741824) + return number_format($bytes / 1073741824, 2) . " GB"; + elseif ($bytes < 1000 * 1099511627776) + return number_format($bytes / 1099511627776, 3) . " TB"; + else + return number_format($bytes / 1125899906842624, 3) . " PB"; +} + +function mksize($bytes) +{ + if ($bytes < 1000 * 1024) + return number_format($bytes / 1024, 2) . " KB"; + elseif ($bytes < 1000 * 1048576) + return number_format($bytes / 1048576, 2) . " MB"; + elseif ($bytes < 1000 * 1073741824) + return number_format($bytes / 1073741824, 2) . " GB"; + elseif ($bytes < 1000 * 1099511627776) + return number_format($bytes / 1099511627776, 3) . " TB"; + else + return number_format($bytes / 1125899906842624, 3) . " PB"; +} + + +function mksizeint($bytes) +{ + $bytes = max(0, $bytes); + if ($bytes < 1000) + return floor($bytes) . " B"; + elseif ($bytes < 1000 * 1024) + return floor($bytes / 1024) . " kB"; + elseif ($bytes < 1000 * 1048576) + return floor($bytes / 1048576) . " MB"; + elseif ($bytes < 1000 * 1073741824) + return floor($bytes / 1073741824) . " GB"; + elseif ($bytes < 1000 * 1099511627776) + return floor($bytes / 1099511627776) . " TB"; + else + return floor($bytes / 1125899906842624) . " PB"; +} + +function deadtime() { + global $anninterthree; + return time() - floor($anninterthree * 1.3); +} + +function mkprettytime($s) { + global $lang_functions; + if ($s < 0) + $s = 0; + $t = array(); + foreach (array("60:sec","60:min","24:hour","0:day") as $x) { + $y = explode(":", $x); + if ($y[0] > 1) { + $v = $s % $y[0]; + $s = floor($s / $y[0]); + } + else + $v = $s; + $t[$y[1]] = $v; + } + + if ($t["day"]) + return $t["day"] . $lang_functions['text_day'] . sprintf("%02d:%02d:%02d", $t["hour"], $t["min"], $t["sec"]); + if ($t["hour"]) + return sprintf("%d:%02d:%02d", $t["hour"], $t["min"], $t["sec"]); + // if ($t["min"]) + return sprintf("%d:%02d", $t["min"], $t["sec"]); + // return $t["sec"] . " secs"; +} + +function mkglobal($vars) { + if (!is_array($vars)) + $vars = explode(":", $vars); + foreach ($vars as $v) { + if (isset($_GET[$v])) + $GLOBALS[$v] = unesc($_GET[$v]); + elseif (isset($_POST[$v])) + $GLOBALS[$v] = unesc($_POST[$v]); + else + return 0; + } + return 1; +} + +function tr($x,$y,$noesc=0,$relation='') { + if ($noesc) + $a = $y; + else { + $a = htmlspecialchars($y); + $a = str_replace("\n", "
\n", $a); + } + print("$x".$a."\n"); +} + +function tr_small($x,$y,$noesc=0,$relation='') { + if ($noesc) + $a = $y; + else { + $a = htmlspecialchars($y); + //$a = str_replace("\n", "
\n", $a); + } + print("".$x."".$a."\n"); +} + +function twotd($x,$y,$nosec=0){ + if ($noesc) + $a = $y; + else { + $a = htmlspecialchars($y); + $a = str_replace("\n", "
\n", $a); + } + print("".$x."".$y.""); +} + +function validfilename($name) { + return preg_match('/^[^\0-\x1f:\\\\\/?*\xff#<>|]+$/si', $name); +} + +function validemail($email) { + return preg_match('/^[\w.-]+@([\w.-]+\.)+[a-z]{2,6}$/is', $email); +} + +function validlang($langid) { + global $deflang; + $langid = 0 + $langid; + $res = sql_query("SELECT * FROM language WHERE site_lang = 1 AND id = " . sqlesc($langid)) or sqlerr(__FILE__, __LINE__); + if(mysql_num_rows($res) == 1) + { + $arr = mysql_fetch_array($res) or sqlerr(__FILE__, __LINE__); + return $arr['site_lang_folder']; + } + else return $deflang; +} + +function get_if_restricted_is_open() +{ + global $sptime; + // it's sunday + if($sptime == 'yes' && (date("w",time()) == '0' || (date("w",time()) == 6) && (date("G",time()) >=12 && date("G",time()) <=23))) + { + return true; + } + else + return false; +} + +function menu ($selected = "home") { + global $lang_functions; + global $BASEURL,$CURUSER; + global $enableoffer, $enablespecial, $enableextforum, $extforumurl, $where_tweak; + global $USERUPDATESET; + $script_name = $_SERVER["SCRIPT_FILENAME"]; + if (preg_match("/index/i", $script_name)) { + $selected = "home"; + }elseif (preg_match("/forums/i", $script_name)) { + $selected = "forums"; + }elseif (preg_match("/torrents/i", $script_name)) { + $selected = "torrents"; + }elseif (preg_match("/music/i", $script_name)) { + $selected = "music"; + }elseif (preg_match("/offers/i", $script_name) OR preg_match("/offcomment/i", $script_name)) { + $selected = "offers"; + }elseif (preg_match("/upload/i", $script_name)) { + $selected = "upload"; + }elseif (preg_match("/subtitles/i", $script_name)) { + $selected = "subtitles"; + }elseif (preg_match("/usercp/i", $script_name)) { + $selected = "usercp"; + }elseif (preg_match("/topten/i", $script_name)) { + $selected = "topten"; + }elseif (preg_match("/log/i", $script_name)) { + $selected = "log"; + }elseif (preg_match("/rules/i", $script_name)) { + $selected = "rules"; + }elseif (preg_match("/faq/i", $script_name)) { + $selected = "faq"; + }elseif (preg_match("/staff/i", $script_name)) { + $selected = "staff"; + }else + $selected = ""; + print ("
"); + + if ($CURUSER){ + if ($where_tweak == 'yes') + $USERUPDATESET[] = "page = ".sqlesc($selected); + } +} +function get_css_row() { + global $CURUSER, $defcss, $Cache; + static $rows; + $cssid = $CURUSER ? $CURUSER["stylesheet"] : $defcss; + if (!$rows && !$rows = $Cache->get_value('stylesheet_content')){ + $rows = array(); + $res = sql_query("SELECT * FROM stylesheets ORDER BY id ASC"); + while($row = mysql_fetch_array($res)) { + $rows[$row['id']] = $row; + } + $Cache->cache_value('stylesheet_content', $rows, 95400); + } + return $rows[$cssid]; +} +function get_css_uri($file = "") +{ + $cssRow = get_css_row(); + $ss_uri = $cssRow['uri']; + if (!$ss_uri) + $ss_uri = get_single_value("stylesheets","uri","WHERE id=".sqlesc($defcss)); + if ($file == "") + return $ss_uri; + else return $ss_uri.$file; +} + +function get_font_css_uri(){ + global $CURUSER; + if ($CURUSER['fontsize'] == 'large') + $file = 'largefont.css'; + elseif ($CURUSER['fontsize'] == 'small') + $file = 'smallfont.css'; + else $file = 'mediumfont.css'; + return "styles/".$file; +} + +function get_style_addicode() +{ + $cssRow = get_css_row(); + return $cssRow['addicode']; +} + +function get_cat_folder($cat = 101) +{ + static $catPath = array(); + if (!$catPath[$cat]) { + global $CURUSER, $CURLANGDIR; + $catrow = get_category_row($cat); + $catmode = $catrow['catmodename']; + $caticonrow = get_category_icon_row($CURUSER['caticon']); + $catPath[$cat] = "category/".$catmode."/".$caticonrow['folder'] . ($caticonrow['multilang'] == 'yes' ? $CURLANGDIR."/" : ""); + } + return $catPath[$cat]; +} + +function get_style_highlight() +{ + global $CURUSER; + if ($CURUSER) + { + $ss_a = @mysql_fetch_array(@sql_query("select hltr from stylesheets where id=" . $CURUSER["stylesheet"])); + if ($ss_a) $hltr = $ss_a["hltr"]; + } + if (!$hltr) + { + $r = sql_query("SELECT hltr FROM stylesheets WHERE id=5") or die(mysql_error()); + $a = mysql_fetch_array($r) or die(mysql_error()); + $hltr = $a["hltr"]; + } + return $hltr; +} + +function stdhead($title = "", $msgalert = true, $script = "", $place = "") +{ + global $lang_functions; + global $CURUSER, $CURLANGDIR, $USERUPDATESET, $iplog1, $oldip, $SITE_ONLINE, $FUNDS, $SITENAME, $SLOGAN, $logo_main, $BASEURL, $offlinemsg, $showversion,$enabledonation, $staffmem_class, $titlekeywords_tweak, $metakeywords_tweak, $metadescription_tweak, $cssdate_tweak, $deletenotransfertwo_account, $neverdelete_account, $iniupload_main; + global $tstart; + global $Cache; + global $Advertisement; + + $Cache->setLanguage($CURLANGDIR); + + $Advertisement = new ADVERTISEMENT($CURUSER['id']); + $cssupdatedate = $cssdate_tweak; + // Variable for Start Time + $tstart = getmicrotime(); // Start time + + //Insert old ip into iplog + if ($CURUSER){ + if ($iplog1 == "yes") { + if (($oldip != $CURUSER["ip"]) && $CURUSER["ip"]) + sql_query("INSERT INTO iplog (ip, userid, access) VALUES (" . sqlesc($CURUSER['ip']) . ", " . $CURUSER['id'] . ", '" . $CURUSER['last_access'] . "')"); + } + $USERUPDATESET[] = "last_access = ".sqlesc(date("Y-m-d H:i:s")); + $USERUPDATESET[] = "ip = ".sqlesc($CURUSER['ip']); + } + header("Content-Type: text/html; charset=utf-8; Cache-control:private"); + //header("Pragma: No-cache"); + if ($title == "") + $title = $SITENAME; + else + $title = $SITENAME." :: " . htmlspecialchars($title); + if ($titlekeywords_tweak) + $title .= " ".htmlspecialchars($titlekeywords_tweak); + $title .= $showversion; + if ($SITE_ONLINE == "no") { + if (get_user_class() < UC_ADMINISTRATOR) { + die($lang_functions['std_site_down_for_maintenance']); + } + else + { + $offlinemsg = true; + } + } +?> + + + + + + + + + + + +<?php echo $title?> + + + + +" type="text/css" /> +" type="text/css" /> +" type="text/css" /> + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
<?php echo htmlspecialchars($SITENAME)?>
+ +
+enable_ad()){ + $headerad=$Advertisement->get_ad('header'); + if ($headerad){ + echo "".$headerad[0].""; + } +} +if ($enabledonation == 'yes'){?> + Make a donation + +
+ + + + +
+enable_ad()){ + $belownavad=$Advertisement->get_ad('belownav'); + if ($belownavad) + echo "
".$belownavad[0]."
"; + } +if ($msgalert) +{ + function msgalert($url, $text, $bgcolor = "red") + { + print("

\n"); + print("".$text.""); + print("


"); + } + if($CURUSER['leechwarn'] == 'yes') + { + $kicktimeout = gettime($CURUSER['leechwarnuntil'], false, false, true); + $text = $lang_functions['text_please_improve_ratio_within'].$kicktimeout.$lang_functions['text_or_you_will_be_banned']; + msgalert("faq.php#id17", $text, "orange"); + } + if($deletenotransfertwo_account) //inactive account deletion notice + { + if ($CURUSER['downloaded'] == 0 && ($CURUSER['uploaded'] == 0 || $CURUSER['uploaded'] == $iniupload_main)) + { + $neverdelete_account = ($neverdelete_account <= UC_VIP ? $neverdelete_account : UC_VIP); + if (get_user_class() < $neverdelete_account) + { + $secs = $deletenotransfertwo_account*24*60*60; + $addedtime = strtotime($CURUSER['added']); + if (TIMENOW > $addedtime+($secs/3)) // start notification if one third of the time has passed + { + $kicktimeout = gettime(date("Y-m-d H:i:s", $addedtime+$secs), false, false, true); + $text = $lang_functions['text_please_download_something_within'].$kicktimeout.$lang_functions['text_inactive_account_be_deleted']; + msgalert("rules.php", $text, "gray"); + } + } + } + } + if($CURUSER['showclienterror'] == 'yes') + { + $text = $lang_functions['text_banned_client_warning']; + msgalert("faq.php#id29", $text, "black"); + } + if ($unread) + { + $text = $lang_functions['text_you_have'].$unread.$lang_functions['text_new_message'] . add_s($unread) . $lang_functions['text_click_here_to_read']; + msgalert("messages.php",$text, "red"); + } +/* + $pending_invitee = $Cache->get_value('user_'.$CURUSER["id"].'_pending_invitee_count'); + if ($pending_invitee == ""){ + $pending_invitee = get_row_count("users","WHERE status = 'pending' AND invited_by = ".sqlesc($CURUSER[id])); + $Cache->cache_value('user_'.$CURUSER["id"].'_pending_invitee_count', $pending_invitee, 900); + } + if ($pending_invitee > 0) + { + $text = $lang_functions['text_your_friends'].add_s($pending_invitee).is_or_are($pending_invitee).$lang_functions['text_awaiting_confirmation']; + msgalert("invite.php?id=".$CURUSER[id],$text, "red"); + }*/ + $settings_script_name = $_SERVER["SCRIPT_FILENAME"]; + if (!preg_match("/index/i", $settings_script_name)) + { + $new_news = $Cache->get_value('user_'.$CURUSER["id"].'_unread_news_count'); + if ($new_news == ""){ + $new_news = get_row_count("news","WHERE notify = 'yes' AND added > ".sqlesc($CURUSER['last_home'])); + $Cache->cache_value('user_'.$CURUSER["id"].'_unread_news_count', $new_news, 300); + } + if ($new_news > 0) + { + $text = $lang_functions['text_there_is'].is_or_are($new_news).$new_news.$lang_functions['text_new_news']; + msgalert("index.php",$text, "green"); + } + } + + if (get_user_class() >= $staffmem_class) + { + $numreports = $Cache->get_value('staff_new_report_count'); + if ($numreports == ""){ + $numreports = get_row_count("reports","WHERE dealtwith=0"); + $Cache->cache_value('staff_new_report_count', $numreports, 900); + } + if ($numreports){ + $text = $lang_functions['text_there_is'].is_or_are($numreports).$numreports.$lang_functions['text_new_report'] .add_s($numreports); + msgalert("reports.php",$text, "blue"); + } + $nummessages = $Cache->get_value('staff_new_message_count'); + if ($nummessages == ""){ + $nummessages = get_row_count("staffmessages","WHERE answered='no'"); + $Cache->cache_value('staff_new_message_count', $nummessages, 900); + } + if ($nummessages > 0) { + $text = $lang_functions['text_there_is'].is_or_are($nummessages).$nummessages.$lang_functions['text_new_staff_message'] . add_s($nummessages); + msgalert("staffbox.php",$text, "blue"); + } + $numcheaters = $Cache->get_value('staff_new_cheater_count'); + if ($numcheaters == ""){ + $numcheaters = get_row_count("cheaters","WHERE dealtwith=0"); + $Cache->cache_value('staff_new_cheater_count', $numcheaters, 900); + } + if ($numcheaters){ + $text = $lang_functions['text_there_is'].is_or_are($numcheaters).$numcheaters.$lang_functions['text_new_suspected_cheater'] .add_s($numcheaters); + msgalert("cheaterbox.php",$text, "blue"); + } + } +} + if ($offlinemsg) + { + print("

\n"); + print("".$lang_functions['text_website_offline_warning'].""); + print("


\n"); + } +} +} + + +function stdfoot() { + global $SITENAME,$BASEURL,$Cache,$datefounded,$tstart,$icplicense_main,$add_key_shortcut,$query_name, $USERUPDATESET, $CURUSER, $enablesqldebug_tweak, $sqldebug_tweak, $Advertisement, $analyticscode_tweak; + print("
"); + print("
"); + if ($Advertisement->enable_ad()){ + $footerad=$Advertisement->get_ad('footer'); + if ($footerad) + echo "
".$footerad[0]."
"; + } + print("
"); + if ($CURUSER){ + sql_query("UPDATE users SET " . join(",", $USERUPDATESET) . " WHERE id = ".$CURUSER['id']); + } + // Variables for End Time + $tend = getmicrotime(); + $totaltime = ($tend - $tstart); + $year = substr($datefounded, 0, 4); + $yearfounded = ($year ? $year : 2007); + print(" (c) "." ".$SITENAME." ".($icplicense_main ? " ".$icplicense_main." " : "").(date("Y") != $yearfounded ? $yearfounded."-" : "").date("Y")." ".VERSION."

"); + printf ("[page created in %f sec", $totaltime); + print (" with ".count($query_name)." db queries, ".$Cache->getCacheReadTimes()." reads and ".$Cache->getCacheWriteTimes()." writes of memcached and ".mksize(memory_get_usage())." ram]"); + print ("
\n"); + if ($enablesqldebug_tweak == 'yes' && get_user_class() >= $sqldebug_tweak) { + print("
SQL query list:
    "); + foreach($query_name as $query) { + print("
  • ".htmlspecialchars($query)."
  • "); + } + print("
"); + print("Memcached key read:
    "); + foreach($Cache->getKeyHits('read') as $keyName => $hits) { + print("
  • ".htmlspecialchars($keyName)." : ".$hits."
  • "); + } + print("
"); + print("Memcached key write:
    "); + foreach($Cache->getKeyHits('write') as $keyName => $hits) { + print("
  • ".htmlspecialchars($keyName)." : ".$hits."
  • "); + } + print("
"); + print("
"); + } + print ("
"); + if ($add_key_shortcut != "") + print($add_key_shortcut); + print("
"); + if ($analyticscode_tweak) + print("\n".$analyticscode_tweak."\n"); + print(""); + + //echo replacePngTags(ob_get_clean()); + + unset($_SESSION['queries']); +} + +function genbark($x,$y) { + stdhead($y); + print("

" . htmlspecialchars($y) . "

\n"); + print("

" . htmlspecialchars($x) . "

\n"); + stdfoot(); + exit(); +} + +function mksecret($len = 20) { + $ret = ""; + for ($i = 0; $i < $len; $i++) + $ret .= chr(mt_rand(100, 120)); + return $ret; +} + +function httperr($code = 404) { + header("HTTP/1.0 404 Not found"); + print("

Not Found

\n"); + exit(); +} + +function logincookie($id, $passhash, $updatedb = 1, $expires = 0x7fffffff, $securelogin=false, $ssl=false, $trackerssl=false) +{ + if ($expires != 0x7fffffff) + $expires = time()+$expires; + + setcookie("c_secure_uid", base64($id), $expires, "/"); + setcookie("c_secure_pass", $passhash, $expires, "/"); + if($ssl) + setcookie("c_secure_ssl", base64("yeah"), $expires, "/"); + else + setcookie("c_secure_ssl", base64("nope"), $expires, "/"); + + if($trackerssl) + setcookie("c_secure_tracker_ssl", base64("yeah"), $expires, "/"); + else + setcookie("c_secure_tracker_ssl", base64("nope"), $expires, "/"); + + if ($securelogin) + setcookie("c_secure_login", base64("yeah"), $expires, "/"); + else + setcookie("c_secure_login", base64("nope"), $expires, "/"); + + + if ($updatedb) + sql_query("UPDATE users SET last_login = NOW(), lang=" . sqlesc(get_langid_from_langcookie()) . " WHERE id = ".sqlesc($id)); +} + +function set_langfolder_cookie($folder, $expires = 0x7fffffff) +{ + if ($expires != 0x7fffffff) + $expires = time()+$expires; + + setcookie("c_lang_folder", $folder, $expires, "/"); +} + +function get_protocol_prefix() +{ + global $securelogin; + if ($securelogin == "yes") { + return "https://"; + } elseif ($securelogin == "no") { + return "http://"; + } else { + if (!isset($_COOKIE["c_secure_ssl"])) { + return "http://"; + } else { + return base64_decode($_COOKIE["c_secure_ssl"]) == "yeah" ? "https://" : "http://"; + } + } +} + +function get_langid_from_langcookie() +{ + global $CURLANGDIR; + $row = mysql_fetch_array(sql_query("SELECT id FROM language WHERE site_lang = 1 AND site_lang_folder = " . sqlesc($CURLANGDIR) . "ORDER BY id ASC")) or sqlerr(__FILE__, __LINE__); + return $row['id']; +} + +function make_folder($pre, $folder_name) +{ + $path = $pre . $folder_name; + if(!file_exists($path)) + mkdir($path,0777,true); + return $path; +} + +function logoutcookie() { + setcookie("c_secure_uid", "", 0x7fffffff, "/"); + setcookie("c_secure_pass", "", 0x7fffffff, "/"); +// setcookie("c_secure_ssl", "", 0x7fffffff, "/"); + setcookie("c_secure_tracker_ssl", "", 0x7fffffff, "/"); + setcookie("c_secure_login", "", 0x7fffffff, "/"); +// setcookie("c_lang_folder", "", 0x7fffffff, "/"); +} + +function base64 ($string, $encode=true) { + if ($encode) + return base64_encode($string); + else + return base64_decode($string); +} + +function loggedinorreturn($mainpage = false) { + global $CURUSER,$BASEURL; + if (!$CURUSER) { + if ($mainpage) + header("Location: " . get_protocol_prefix() . "$BASEURL/login.php"); + else { + $to = $_SERVER["REQUEST_URI"]; + $to = basename($to); + header("Location: " . get_protocol_prefix() . "$BASEURL/login.php?returnto=" . rawurlencode($to)); + } + exit(); + } +} + +function deletetorrent($id) { + global $torrent_dir; + sql_query("DELETE FROM torrents WHERE id = ".mysql_real_escape_string($id)); + sql_query("DELETE FROM snatched WHERE torrentid = ".mysql_real_escape_string($id)); + foreach(array("peers", "files", "comments") as $x) { + sql_query("DELETE FROM $x WHERE torrent = ".mysql_real_escape_string($id)); + } + unlink("$torrent_dir/$id.torrent"); +} + +function pager($rpp, $count, $href, $opts = array(), $pagename = "page") { + global $lang_functions,$add_key_shortcut; + $pages = ceil($count / $rpp); + + if (!$opts["lastpagedefault"]) + $pagedefault = 0; + else { + $pagedefault = floor(($count - 1) / $rpp); + if ($pagedefault < 0) + $pagedefault = 0; + } + + if (isset($_GET[$pagename])) { + $page = 0 + $_GET[$pagename]; + if ($page < 0) + $page = $pagedefault; + } + else + $page = $pagedefault; + + $pager = ""; + $mp = $pages - 1; + + //Opera (Presto) doesn't know about event.altKey + $is_presto = strpos($_SERVER['HTTP_USER_AGENT'], 'Presto'); + $as = "<< ".$lang_functions['text_prev'].""; + if ($page >= 1) { + $pager .= ""; + $pager .= $as; + $pager .= ""; + } + else + $pager .= "".$as.""; + $pager .= "      "; + $as = "".$lang_functions['text_next']." >>"; + if ($page < $mp && $mp >= 0) { + $pager .= ""; + $pager .= $as; + $pager .= ""; + } + else + $pager .= "".$as.""; + + if ($count) { + $pagerarr = array(); + $dotted = 0; + $dotspace = 3; + $dotend = $pages - $dotspace; + $curdotend = $page - $dotspace; + $curdotstart = $page + $dotspace; + for ($i = 0; $i < $pages; $i++) { + if (($i >= $dotspace && $i <= $curdotend) || ($i >= $curdotstart && $i < $dotend)) { + if (!$dotted) + $pagerarr[] = "..."; + $dotted = 1; + continue; + } + $dotted = 0; + $start = $i * $rpp + 1; + $end = $start + $rpp - 1; + if ($end > $count) + $end = $count; + $text = "$start - $end"; + if ($i != $page) + $pagerarr[] = "$text"; + else + $pagerarr[] = "$text"; + } + $pagerstr = join(" | ", $pagerarr); + $pagertop = "

$pager
$pagerstr

\n"; + $pagerbottom = "

$pagerstr
$pager

\n"; + } + else { + $pagertop = "

$pager

\n"; + $pagerbottom = $pagertop; + } + + $start = $page * $rpp; + $add_key_shortcut = key_shortcut($page,$pages-1); + return array($pagertop, $pagerbottom, "LIMIT $start,$rpp"); +} + +function commenttable($rows, $type, $parent_id, $review = false) +{ + global $lang_functions; + global $CURUSER, $commanage_class; + global $Advertisement; + begin_main_frame(); + begin_frame(); + + $count = 0; + if ($Advertisement->enable_ad()) + $commentad = $Advertisement->get_ad('comment'); + foreach ($rows as $row) + { + $userRow = get_user_row($row['user']); + if ($count>=1) + { + if ($Advertisement->enable_ad()){ + if ($commentad[$count-1]) + echo "
".$commentad[$count-1]."
"; + } + } + print("
#" . $row["id"] . "  ".$lang_functions['text_by'].""); + print(get_username($row["user"],false,true,true,false,false,true)); + print("  ".$lang_functions['text_at']."".gettime($row["added"]). + ($row["editedby"] && get_user_class() >= $commanage_class ? " - [".$lang_functions['text_view_original']."]" : "") . "\"Top\"  
"); + $avatar = ($CURUSER["avatars"] == "yes" ? htmlspecialchars(trim($userRow["avatar"])) : ""); + if (!$avatar) + $avatar = "pic/default_avatar.png"; + $text = format_comment($row["text"]); + $text_editby = ""; + if ($row["editedby"]){ + $lastedittime = gettime($row['editdate'],true,false); + $text_editby = "

".$lang_functions['text_last_edited_by'].get_username($row['editedby']).$lang_functions['text_edited_at'].$lastedittime."

\n"; + } + + print("\n"); + $secs = 900; + $dt = sqlesc(date("Y-m-d H:i:s",(TIMENOW - $secs))); // calculate date. + print("\n"); + print("\n"); + print("\n"); + print("\n"); + $actionbar = "\"Quote\"". + "\"Add".(get_user_class() >= $commanage_class ? "\"Delete\"" : "").($row["user"] == $CURUSER["id"] || get_user_class() >= $commanage_class ? "\"Edit\""."" : ""); + print(""); + + print("
".return_avatar_image($avatar)."
".$text.$text_editby."
".("'".$userRow['last_access']."'"> $dt ? "\"Online\"":"\"Offline\"" )."\"PM\"\"Report\"".$actionbar."
\n"); + $count++; + } + end_frame(); + end_main_frame(); +} + +function searchfield($s) { + return preg_replace(array('/[^a-z0-9]/si', '/^\s*/s', '/\s*$/s', '/\s+/s'), array(" ", "", "", " "), $s); +} + +function genrelist($catmode = 1) { + global $Cache; + if (!$ret = $Cache->get_value('category_list_mode_'.$catmode)){ + $ret = array(); + $res = sql_query("SELECT id, mode, name, image FROM categories WHERE mode = ".sqlesc($catmode)." ORDER BY sort_index, id"); + while ($row = mysql_fetch_array($res)) + $ret[] = $row; + $Cache->cache_value('category_list_mode_'.$catmode, $ret, 152800); + } + return $ret; +} + +function searchbox_item_list($table = "sources"){ + global $Cache; + if (!$ret = $Cache->get_value($table.'_list')){ + $ret = array(); + $res = sql_query("SELECT * FROM ".$table." ORDER BY sort_index, id"); + while ($row = mysql_fetch_array($res)) + $ret[] = $row; + $Cache->cache_value($table.'_list', $ret, 152800); + } + return $ret; +} + +function langlist($type) { + global $Cache; + if (!$ret = $Cache->get_value($type.'_lang_list')){ + $ret = array(); + $res = sql_query("SELECT id, lang_name, flagpic, site_lang_folder FROM language WHERE ". $type ."=1 ORDER BY site_lang DESC, id ASC"); + while ($row = mysql_fetch_array($res)) + $ret[] = $row; + $Cache->cache_value($type.'_lang_list', $ret, 152800); + } + return $ret; +} + +function linkcolor($num) { + if (!$num) + return "red"; + // if ($num == 1) + // return "yellow"; + return "green"; +} + +function writecomment($userid, $comment) { + $res = sql_query("SELECT modcomment FROM users WHERE id = '$userid'") or sqlerr(__FILE__, __LINE__); + $arr = mysql_fetch_assoc($res); + + $modcomment = date("d-m-Y") . " - " . $comment . "" . ($arr[modcomment] != "" ? "\n\n" : "") . "$arr[modcomment]"; + $modcom = sqlesc($modcomment); + + return sql_query("UPDATE users SET modcomment = $modcom WHERE id = '$userid'") or sqlerr(__FILE__, __LINE__); +} + +function return_torrent_bookmark_array($userid) +{ + global $Cache; + static $ret; + if (!$ret){ + if (!$ret = $Cache->get_value('user_'.$userid.'_bookmark_array')){ + $ret = array(); + $res = sql_query("SELECT * FROM bookmarks WHERE userid=" . sqlesc($userid)); + if (mysql_num_rows($res) != 0){ + while ($row = mysql_fetch_array($res)) + $ret[] = $row['torrentid']; + $Cache->cache_value('user_'.$userid.'_bookmark_array', $ret, 132800); + } else { + $Cache->cache_value('user_'.$userid.'_bookmark_array', array(0), 132800); + } + } + } + return $ret; +} +function get_torrent_bookmark_state($userid, $torrentid, $text = false) +{ + global $lang_functions; + $userid = 0 + $userid; + $torrentid = 0 + $torrentid; + $ret = array(); + $ret = return_torrent_bookmark_array($userid); + if (!count($ret) || !in_array($torrentid, $ret, false)) // already bookmarked + $act = ($text == true ? $lang_functions['title_bookmark_torrent'] : "\"Unbookmarked\""); + else + $act = ($text == true ? $lang_functions['title_delbookmark_torrent'] : "\"Bookmarked\""); + return $act; +} + +function torrenttable($res, $variant = "torrent") { + global $Cache; + global $lang_functions; + global $CURUSER, $waitsystem; + global $showextinfo; + global $torrentmanage_class, $smalldescription_main, $enabletooltip_tweak; + global $CURLANGDIR; + + if ($variant == "torrent"){ + $last_browse = $CURUSER['last_browse']; + $sectiontype = $browsecatmode; + } + elseif($variant == "music"){ + $last_browse = $CURUSER['last_music']; + $sectiontype = $specialcatmode; + } + else{ + $last_browse = $CURUSER['last_browse']; + $sectiontype = ""; + } + + $time_now = TIMENOW; + if ($last_browse > $time_now) { + $last_browse=$time_now; + } + + if (get_user_class() < UC_VIP && $waitsystem == "yes") { + $ratio = get_ratio($CURUSER["id"], false); + $gigs = $CURUSER["uploaded"] / (1024*1024*1024); + if($gigs > 10) + { + if ($ratio < 0.4) $wait = 24; + elseif ($ratio < 0.5) $wait = 12; + elseif ($ratio < 0.6) $wait = 6; + elseif ($ratio < 0.8) $wait = 3; + else $wait = 0; + } + else $wait = 0; + } +?> + + + $get_value) { + $get_name = mysql_real_escape_string(strip_tags(str_replace(array("\"","'"),array("",""),$get_name))); + $get_value = mysql_real_escape_string(strip_tags(str_replace(array("\"","'"),array("",""),$get_value))); + + if ($get_name != "sort" && $get_name != "type") { + if ($count_get > 0) { + $oldlink .= "&" . $get_name . "=" . $get_value; + } + else { + $oldlink .= $get_name . "=" . $get_value; + } + $count_get++; + } +} +if ($count_get > 0) { + $oldlink = $oldlink . "&"; +} +$sort = $_GET['sort']; +$link = array(); +for ($i=1; $i<=9; $i++){ + if ($sort == $i) + $link[$i] = ($_GET['type'] == "desc" ? "asc" : "desc"); + else $link[$i] = ($i == 1 ? "asc" : "desc"); +} +?> + + +".$lang_functions['col_wait']."\n"); +} +if ($CURUSER['showcomnum'] != 'no') { ?> + + + + + + + + + += $torrentmanage_class) { ?> + + + +\n"); + + print("\n"); + + //torrent name + $dispname = trim($row["name"]); + $short_torrent_name_alt = ""; + $mouseovertorrent = ""; + $tooltipblock = ""; + $has_tooltip = false; + if ($enabletooltip_tweak == 'yes') + $tooltiptype = $CURUSER['tooltip']; + else + $tooltiptype = 'off'; + switch ($tooltiptype){ + case 'minorimdb' : { + if ($showextinfo['imdb'] == 'yes' && $row["url"]) + { + $url = $row['url']; + $cache = $row['cache_stamp']; + $type = 'minor'; + $has_tooltip = true; + } + break; + } + case 'medianimdb' : + { + if ($showextinfo['imdb'] == 'yes' && $row["url"]) + { + $url = $row['url']; + $cache = $row['cache_stamp']; + $type = 'median'; + $has_tooltip = true; + } + break; + } + case 'off' : break; + } + if (!$has_tooltip) + $short_torrent_name_alt = "title=\"".htmlspecialchars($dispname)."\""; + else{ + $torrent_tooltip[$counter]['id'] = "torrent_" . $counter; + $torrent_tooltip[$counter]['content'] = ""; + $mouseovertorrent = "onmouseover=\"get_ext_info_ajax('".$torrent_tooltip[$counter]['id']."','".$url."','".$cache."','".$type."'); domTT_activate(this, event, 'content', document.getElementById('" . $torrent_tooltip[$counter]['id'] . "'), 'trail', false, 'delay',600,'lifetime',6000,'fade','both','styleClass','niceTitle', 'fadeMax',87, 'maxWidth', 500);\""; + } + $count_dispname=mb_strlen($dispname,"UTF-8"); + if (!$displaysmalldescr || $row["small_descr"] == "")// maximum length of torrent name + $max_length_of_torrent_name = 120; + elseif ($CURUSER['fontsize'] == 'large') + $max_length_of_torrent_name = 60; + elseif ($CURUSER['fontsize'] == 'small') + $max_length_of_torrent_name = 80; + else $max_length_of_torrent_name = 70; + + if($count_dispname > $max_length_of_torrent_name) + $dispname=mb_substr($dispname, 0, $max_length_of_torrent_name-2,"UTF-8") . ".."; + + if ($row['pos_state'] == 'sticky' && $CURUSER['appendsticky'] == 'yes') + $stickyicon = "\"Sticky\" "; + else $stickyicon = ""; + + print(""); + if ($wait) + { + $elapsed = floor((TIMENOW - strtotime($row["added"])) / 3600); + if ($elapsed < $wait) + { + $color = dechex(floor(127*($wait - $elapsed)/48 + 128)*65536); + print("\n"); + } + else + print("\n"); + } + + if ($CURUSER['showcomnum'] != 'no') + { + print(""); + } + + $time = $row["added"]; + $time = gettime($time,false,true); + print(""); + + //size + print(""); + + if ($row["seeders"]) { + $ratio = ($row["leechers"] ? ($row["seeders"] / $row["leechers"]) : 1); + $ratiocolor = get_slr_color($ratio); + print("\n"); + } + else + print("\n"); + + if ($row["leechers"]) { + print("\n"); + } + else + print("\n"); + + if ($row["times_completed"] >=1) + print("\n"); + else + print("\n"); + + if ($row["anonymous"] == "yes" && get_user_class() >= $torrentmanage_class) + { + print("\n"); + } + elseif ($row["anonymous"] == "yes") + { + print("\n"); + } + else + { + print("\n"); + } + + if (get_user_class() >= $torrentmanage_class) + { + print("\n"); + } + print("\n"); + $counter++; +} +print("
commentstimesizeseedersleecherssnatched
"); + if (isset($row["category"])) { + print(return_category_image($row["category"], "?")); + if ($has_secondicon){ + print(get_second_icon($row, "pic/".$catimgurl."additional/")); + } + } + else + print("-"); + print(""); + + $act = ""; + if ($CURUSER["dlicon"] != 'no' && $CURUSER["downloadpos"] != "no") + $act .= "\"download\"" ; + if ($CURUSER["bmicon"] == 'yes'){ + $bookmark = " href=\"javascript: bookmark(".$id.",".$counter.");\""; + $act .= ($act ? "
" : "")."".get_torrent_bookmark_state($CURUSER['id'], $id).""; + } + + print("\n"); + + print("
".$stickyicon."".htmlspecialchars($dispname).""); + $sp_torrent = get_torrent_promotion_append($row['sp_state'],"",true,$row["added"], $row['promotion_time_type'], $row['promotion_until']); + $picked_torrent = ""; + if ($CURUSER['appendpicked'] != 'no'){ + if($row['picktype']=="hot") + $picked_torrent = " [".$lang_functions['text_hot']."]"; + elseif($row['picktype']=="classic") + $picked_torrent = " [".$lang_functions['text_classic']."]"; + elseif($row['picktype']=="recommended") + $picked_torrent = " [".$lang_functions['text_recommended']."]"; + } + if ($CURUSER['appendnew'] != 'no' && strtotime($row["added"]) >= $last_browse) + print(" (".$lang_functions['text_new_uppercase'].")"); + + $banned_torrent = ($row["banned"] == 'yes' ? " (".$lang_functions['text_banned'].")" : ""); + print($banned_torrent.$picked_torrent.$sp_torrent); + if ($displaysmalldescr){ + //small descr + $dissmall_descr = trim($row["small_descr"]); + $count_dissmall_descr=mb_strlen($dissmall_descr,"UTF-8"); + $max_lenght_of_small_descr=$max_length_of_torrent_name; // maximum length + if($count_dissmall_descr > $max_lenght_of_small_descr) + { + $dissmall_descr=mb_substr($dissmall_descr, 0, $max_lenght_of_small_descr-2,"UTF-8") . ".."; + } + print($dissmall_descr == "" ? "" : "
".htmlspecialchars($dissmall_descr)); + } + print("
".$act."
" . number_format($wait - $elapsed) . $lang_functions['text_h']."".$lang_functions['text_none'].""); + $nl = ""; + + //comments + + $nl = "
"; + if (!$row["comments"]) { + print("" . $row["comments"] . ""); + } else { + if ($enabletooltip_tweak == 'yes' && $CURUSER['showlastcom'] != 'no') + { + if (!$lastcom = $Cache->get_value('torrent_'.$id.'_last_comment_content')){ + $res2 = sql_query("SELECT user, added, text FROM comments WHERE torrent = $id ORDER BY id DESC LIMIT 1"); + $lastcom = mysql_fetch_array($res2); + $Cache->cache_value('torrent_'.$id.'_last_comment_content', $lastcom, 1855); + } + $timestamp = strtotime($lastcom["added"]); + $hasnewcom = ($lastcom['user'] != $CURUSER['id'] && $timestamp >= $last_browse); + if ($lastcom) + { + if ($CURUSER['timetype'] != 'timealive') + $lastcomtime = $lang_functions['text_at_time'].$lastcom['added']; + else + $lastcomtime = $lang_functions['text_blank'].gettime($lastcom["added"],true,false,true); + $lastcom_tooltip[$counter]['id'] = "lastcom_" . $counter; + $lastcom_tooltip[$counter]['content'] = ($hasnewcom ? "(".$lang_functions['text_new_uppercase'].") " : "").$lang_functions['text_last_commented_by'].get_username($lastcom['user']) . $lastcomtime."
". format_comment(mb_substr($lastcom['text'],0,100,"UTF-8") . (mb_strlen($lastcom['text'],"UTF-8") > 100 ? " ......" : "" ),true,false,false,true,600,false,false); + $onmouseover = "onmouseover=\"domTT_activate(this, event, 'content', document.getElementById('" . $lastcom_tooltip[$counter]['id'] . "'), 'trail', false, 'delay', 500,'lifetime',3000,'fade','both','styleClass','niceTitle','fadeMax', 87,'maxWidth', 400);\""; + } + } else { + $hasnewcom = false; + $onmouseover = ""; + } + print("". ($hasnewcom ? "" : ""). $row["comments"] .($hasnewcom ? "" : ""). ""); + } + + print("
". $time. "" . mksize_compact($row["size"])."".($ratiocolor ? "" . number_format($row["seeders"]) . "" : number_format($row["seeders"]))."" . number_format($row["seeders"]) . "" . + number_format($row["leechers"]) . "0" . number_format($row["times_completed"]) . "" . number_format($row["times_completed"]) . "".$lang_functions['text_anonymous']."
".(isset($row["owner"]) ? "(" . get_username($row["owner"]) .")" : "".$lang_functions['text_orphaned']."") . "
".$lang_functions['text_anonymous']."" . (isset($row["owner"]) ? get_username($row["owner"]) : "".$lang_functions['text_orphaned']."") . "\"D\""); + print("
\"E\"
"); +if ($CURUSER['appendpromotion'] == 'highlight') + print("

".$lang_functions['text_promoted_torrents_note']."

\n"); + +if($enabletooltip_tweak == 'yes' && (!isset($CURUSER) || $CURUSER['showlastcom'] == 'yes')) +create_tooltip_container($lastcom_tooltip, 400); +create_tooltip_container($torrent_tooltip, 500); +} + +function get_username($id, $big = false, $link = true, $bold = true, $target = false, $bracket = false, $withtitle = false, $link_ext = "", $underline = false) +{ + static $usernameArray = array(); + global $lang_functions; + $id = 0+$id; + + if (func_num_args() == 1 && $usernameArray[$id]) { //One argument=is default display of username. Get it directly from static array if available + return $usernameArray[$id]; + } + $arr = get_user_row($id); + if ($arr){ + if ($big) + { + $donorpic = "starbig"; + $leechwarnpic = "leechwarnedbig"; + $warnedpic = "warnedbig"; + $disabledpic = "disabledbig"; + $style = "style='margin-left: 4pt'"; + } + else + { + $donorpic = "star"; + $leechwarnpic = "leechwarned"; + $warnedpic = "warned"; + $disabledpic = "disabled"; + $style = "style='margin-left: 2pt'"; + } + $pics = $arr["donor"] == "yes" ? "\"Donor\"" : ""; + + if ($arr["enabled"] == "yes") + $pics .= ($arr["leechwarn"] == "yes" ? "\"Leechwarned\"" : "") . ($arr["warned"] == "yes" ? "\"Warned\"" : ""); + else + $pics .= "\"Disabled\"\n"; + + $username = ($underline == true ? "" . $arr['username'] . "" : $arr['username']); + $username = ($bold == true ? "" . $username . "" : $username); + $username = ($link == true ? "" . $username . "" : $username) . $pics . ($withtitle == true ? " (" . ($arr['title'] == "" ? get_user_class_name($arr['class'],false,true,true) : "".htmlspecialchars($arr['title'])) . ")" : ""); + + $username = "" . ( $bracket == true ? "(" . $username . ")" : $username) . ""; + } + else + { + $username = "".$lang_functions['text_orphaned'].""; + $username = "" . ( $bracket == true ? "(" . $username . ")" : $username) . ""; + } + if (func_num_args() == 1) { //One argument=is default display of username, save it in static array + $usernameArray[$id] = $username; + } + return $username; +} + +function get_percent_completed_image($p) { + $maxpx = "45"; // Maximum amount of pixels for the progress bar + + if ($p == 0) $progress = "\"\""; + if ($p == 100) $progress = "\"\""; + if ($p >= 1 && $p <= 30) $progress = "\"\"\"\""; + if ($p >= 31 && $p <= 65) $progress = "\"\"\"\""; + if ($p >= 66 && $p <= 99) $progress = "\"\"\"\""; + return "\"\"" . $progress ."\"\""; +} + +function get_ratio_img($ratio) +{ + if ($ratio >= 16) + $s = "163"; + else if ($ratio >= 8) + $s = "117"; + else if ($ratio >= 4) + $s = "5"; + else if ($ratio >= 2) + $s = "3"; + else if ($ratio >= 1) + $s = "2"; + else if ($ratio >= 0.5) + $s = "34"; + else if ($ratio >= 0.25) + $s = "10"; + else + $s = "52"; + + return "\"\""; +} + +function GetVar ($name) { + if ( is_array($name) ) { + foreach ($name as $var) GetVar ($var); + } else { + if ( !isset($_REQUEST[$name]) ) + return false; + $GLOBALS[$name] = $_REQUEST[$name]; + return $GLOBALS[$name]; + } +} + +function ssr ($arg) { + if (is_array($arg)) { + foreach ($arg as $key=>$arg_bit) { + $arg[$key] = ssr($arg_bit); + } + } else { + $arg = stripslashes($arg); + } + return $arg; +} + +function parked() +{ + global $lang_functions; + global $CURUSER; + if ($CURUSER["parked"] == "yes") + stderr($lang_functions['std_access_denied'], $lang_functions['std_your_account_parked']); +} + +function validusername($username) +{ + if ($username == "") + return false; + + // The following characters are allowed in user names + $allowedchars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; + + for ($i = 0; $i < strlen($username); ++$i) + if (strpos($allowedchars, $username[$i]) === false) + return false; + + return true; +} + +//Code for Viewing NFO file + +// code: Takes a string and does a IBM-437-to-HTML-Unicode-Entities-conversion. +// swedishmagic specifies special behavior for Swedish characters. +// Some Swedish Latin-1 letters collide with popular DOS glyphs. If these +// characters are between ASCII-characters (a-zA-Z and more) they are +// treated like the Swedish letters, otherwise like the DOS glyphs. +function code($ibm_437, $swedishmagic = false) { +$table437 = array("\200", "\201", "\202", "\203", "\204", "\205", "\206", "\207", +"\210", "\211", "\212", "\213", "\214", "\215", "\216", "\217", "\220", +"\221", "\222", "\223", "\224", "\225", "\226", "\227", "\230", "\231", +"\232", "\233", "\234", "\235", "\236", "\237", "\240", "\241", "\242", +"\243", "\244", "\245", "\246", "\247", "\250", "\251", "\252", "\253", +"\254", "\255", "\256", "\257", "\260", "\261", "\262", "\263", "\264", +"\265", "\266", "\267", "\270", "\271", "\272", "\273", "\274", "\275", +"\276", "\277", "\300", "\301", "\302", "\303", "\304", "\305", "\306", +"\307", "\310", "\311", "\312", "\313", "\314", "\315", "\316", "\317", +"\320", "\321", "\322", "\323", "\324", "\325", "\326", "\327", "\330", +"\331", "\332", "\333", "\334", "\335", "\336", "\337", "\340", "\341", +"\342", "\343", "\344", "\345", "\346", "\347", "\350", "\351", "\352", +"\353", "\354", "\355", "\356", "\357", "\360", "\361", "\362", "\363", +"\364", "\365", "\366", "\367", "\370", "\371", "\372", "\373", "\374", +"\375", "\376", "\377"); + +$tablehtml = array("Ç", "ü", "é", "â", "ä", +"à", "å", "ç", "ê", "ë", "è", +"ï", "î", "ì", "Ä", "Å", "É", +"æ", "Æ", "ô", "ö", "ò", "û", +"ù", "ÿ", "Ö", "Ü", "¢", "£", +"¥", "₧", "ƒ", "á", "í", "ó", +"ú", "ñ", "Ñ", "ª", "º", "¿", +"⌐", "¬", "½", "¼", "¡", "«", +"»", "░", "▒", "▓", "│", "┤", +"╡", "╢", "╖", "╕", "╣", "║", +"╗", "╝", "╜", "╛", "┐", "└", +"┴", "┬", "├", "─", "┼", "╞", +"╟", "╚", "╔", "╩", "╦", "╠", +"═", "╬", "╧", "╨", "╤", "╥", +"╙", "╘", "╒", "╓", "╫", "╪", +"┘", "┌", "█", "▄", "▌", "▐", +"▀", "α", "ß", "Γ", "π", "Σ", +"σ", "μ", "τ", "Φ", "Θ", "Ω", +"δ", "∞", "φ", "ε", "∩", "≡", +"±", "≥", "≤", "⌠", "⌡", "÷", +"≈", "°", "∙", "·", "√", "ⁿ", +"²", "■", " "); +$s = htmlspecialchars($ibm_437); + + +// 0-9, 11-12, 14-31, 127 (decimalt) +$control = +array("\000", "\001", "\002", "\003", "\004", "\005", "\006", "\007", +"\010", "\011", /*"\012",*/ "\013", "\014", /*"\015",*/ "\016", "\017", +"\020", "\021", "\022", "\023", "\024", "\025", "\026", "\027", +"\030", "\031", "\032", "\033", "\034", "\035", "\036", "\037", +"\177"); + +/* Code control characters to control pictures. +http://www.unicode.org/charts/PDF/U2400.pdf +(This is somewhat the Right Thing, but looks crappy with Courier New.) +$controlpict = array("␣","␄"); +$s = str_replace($control,$controlpict,$s); */ + +// replace control chars with space - feel free to fix the regexp smile.gif +/*echo "[a\\x00-\\x1F]"; +//$s = preg_replace("/[ \\x00-\\x1F]/", " ", $s); +$s = preg_replace("/[ \000-\037]/", " ", $s); */ +$s = str_replace($control," ",$s); + + + + +if ($swedishmagic){ +$s = str_replace("\345","\206",$s); +$s = str_replace("\344","\204",$s); +$s = str_replace("\366","\224",$s); +// $s = str_replace("\304","\216",$s); +//$s = "[ -~]\\xC4[a-za-z]"; + +// couldn't get ^ and $ to work, even through I read the man-pages, +// i'm probably too tired and too unfamiliar with posix regexps right now. +$s = preg_replace("/([ -~])\305([ -~])/", "\\1\217\\2", $s); +$s = preg_replace("/([ -~])\304([ -~])/", "\\1\216\\2", $s); +$s = preg_replace("/([ -~])\326([ -~])/", "\\1\231\\2", $s); + +$s = str_replace("\311", "\220", $s); // +$s = str_replace("\351", "\202", $s); // +} + +$s = str_replace($table437, $tablehtml, $s); +return $s; +} + + +//Tooltip container for hot movie, classic movie, etc +function create_tooltip_container($id_content_arr, $width = 400) +{ + if(count($id_content_arr)) + { + $result = "
"; + foreach($id_content_arr as $id_content_arr_each) + { + $result .= "
" . $id_content_arr_each['content'] . "
"; + } + $result .= "
"; + print($result); + } +} + +function getimdb($imdb_id, $cache_stamp, $mode = 'minor') +{ + global $lang_functions; + global $showextinfo; + $thenumbers = $imdb_id; + $movie = new imdb ($thenumbers); + $movieid = $thenumbers; + $movie->setid ($movieid); + + $target = array('Title', 'Credits', 'Plot'); + switch ($movie->cachestate($target)) + { + case "0": //cache is not ready + { + return false; + break; + } + case "1": //normal + { + $title = $movie->title (); + $year = $movie->year (); + $country = $movie->country (); + $countries = ""; + $temp = ""; + for ($i = 0; $i < count ($country); $i++) + { + $temp .="$country[$i], "; + } + $countries = rtrim(trim($temp), ","); + + $director = $movie->director(); + $director_or_creator = ""; + if ($director) + { + $temp = ""; + for ($i = 0; $i < count ($director); $i++) + { + $temp .= $director[$i]["name"].", "; + } + $director_or_creator = "".$lang_functions['text_director'].": ".rtrim(trim($temp), ","); + } + else { //for tv series + $creator = $movie->creator(); + $director_or_creator = "".$lang_functions['text_creator'].": ".$creator; + } + $cast = $movie->cast(); + $temp = ""; + for ($i = 0; $i < count ($cast); $i++) //get names of first three casts + { + if ($i > 2) + { + break; + } + $temp .= $cast[$i]["name"].", "; + } + $casts = rtrim(trim($temp), ","); + $gen = $movie->genres(); + $genres = $gen[0].(count($gen) > 1 ? ", ".$gen[1] : ""); //get first two genres; + $rating = $movie->rating (); + $votes = $movie->votes (); + if ($votes) + $imdbrating = "".$rating."/10 (".$votes.$lang_functions['text_votes'].")"; + else $imdbrating = $lang_functions['text_awaiting_five_votes']; + + $tagline = $movie->tagline (); + switch ($mode) + { + case 'minor' : + { + $autodata = "".$title." (".$year.")
".$lang_functions['text_imdb'].": ".$imdbrating." ".$lang_functions['text_country'].": ".$countries." ".$lang_functions['text_genres'].": ".$genres."
".$director_or_creator." ".$lang_functions['text_starring'].": ".$casts."

".$tagline."

"; + break; + } + case 'median': + { + if (($photo_url = $movie->photo_localurl() ) != FALSE) + $smallth = "\"poster\""; + else $smallth = ""; + $runtime = $movie->runtime (); + $language = $movie->language (); + $plot = $movie->plot (); + $plots = ""; + if(count($plot) != 0){ //get plots from plot page + $plots .= "* ".strip_tags($plot[0], '
'); + $plots = mb_substr($plots,0,300,"UTF-8") . (mb_strlen($plots,"UTF-8") > 300 ? " ..." : "" ); + $plots .= (strpos($plots,"") == true && strpos($plots,"") == false ? "" : "");//sometimes is open and not ended because of mb_substr; + $plots = "".$plots.""; + } + elseif ($plotoutline = $movie->plotoutline ()){ //get plot from title page + $plots .= "* ".strip_tags($plotoutline, '
'); + $plots = mb_substr($plots,0,300,"UTF-8") . (mb_strlen($plots,"UTF-8") > 300 ? " ..." : "" ); + $plots .= (strpos($plots,"") == true && strpos($plots,"") == false ? "" : "");//sometimes is open and not ended because of mb_substr; + $plots = "".$plots.""; + } + $autodata = " +".($smallth ? "" : "") +." +
+$smallth + + + + +".( $runtime ? "" : "")." + +".( $language ? "" : "")." + + + +".( $plots ? "" : "")." +
\"imdb\" ".$title." (".$year.")
".$lang_functions['text_imdb'].": ".$imdbrating."".$lang_functions['text_runtime'].": ".$runtime.$lang_functions['text_min']."
".$lang_functions['text_country'].": ".$countries."".$lang_functions['text_language'].": ".$language."
".$director_or_creator."".$lang_functions['text_genres'].": ".$genres."
".$lang_functions['text_starring'].": ".$casts."
".$plots."
+
"; + break; + } + } + return $autodata; + } + case "2" : + { + return false; + break; + } + case "3" : + { + return false; + break; + } + } +} + +function quickreply($formname, $taname,$submit){ + print(""); + print(smile_row($formname, $taname)); + print("
"); + print(""); +} + +function smile_row($formname, $taname){ + $quickSmilesNumbers = array(4, 5, 39, 25, 11, 8, 10, 15, 27, 57, 42, 122, 52, 28, 29, 30, 176); + $smilerow = "
"; + foreach ($quickSmilesNumbers as $smilyNumber) { + $smilerow .= getSmileIt($formname, $taname, $smilyNumber); + } + $smilerow .= "
"; + return $smilerow; +} +function getSmileIt($formname, $taname, $smilyNumber) { + return "\'\'")."', 'trail', false, 'delay', 0,'lifetime',10000,'styleClass','smilies','maxWidth', 400);\">\"\""; +} + +function classlist($selectname,$maxclass, $selected, $minClass = 0){ + $list = ""; + return $list; +} + +function permissiondenied(){ + global $lang_functions; + stderr($lang_functions['std_error'], $lang_functions['std_permission_denied']); +} + +function gettime($time, $withago = true, $twoline = false, $forceago = false, $oneunit = false, $isfuturetime = false){ + global $lang_functions, $CURUSER; + if ($CURUSER['timetype'] != 'timealive' && !$forceago){ + $newtime = $time; + if ($twoline){ + $newtime = str_replace(" ", "
", $newtime); + } + } + else{ + $timestamp = strtotime($time); + if ($isfuturetime && $timestamp < TIMENOW) + $newtime = false; + else + { + $newtime = get_elapsed_time($timestamp,$oneunit).($withago ? $lang_functions['text_ago'] : ""); + if($twoline){ + $newtime = str_replace(" ", "
", $newtime); + } + elseif($oneunit){ + if ($length = strpos($newtime, " ")) + $newtime = substr($newtime,0,$length); + } + else $newtime = str_replace(" ", $lang_functions['text_space'], $newtime); + $newtime = "".$newtime.""; + } + } + return $newtime; +} + +function get_forum_pic_folder(){ + global $CURLANGDIR; + return "pic/forum_pic/".$CURLANGDIR; +} + +function get_category_icon_row($typeid) +{ + global $Cache; + static $rows; + if (!$typeid) { + $typeid=1; + } + if (!$rows && !$rows = $Cache->get_value('category_icon_content')){ + $rows = array(); + $res = sql_query("SELECT * FROM caticons ORDER BY id ASC"); + while($row = mysql_fetch_array($res)) { + $rows[$row['id']] = $row; + } + $Cache->cache_value('category_icon_content', $rows, 156400); + } + return $rows[$typeid]; +} +function get_category_row($catid = NULL) +{ + global $Cache; + static $rows; + if (!$rows && !$rows = $Cache->get_value('category_content')){ + $res = sql_query("SELECT categories.*, searchbox.name AS catmodename FROM categories LEFT JOIN searchbox ON categories.mode=searchbox.id"); + while($row = mysql_fetch_array($res)) { + $rows[$row['id']] = $row; + } + $Cache->cache_value('category_content', $rows, 126400); + } + if ($catid) { + return $rows[$catid]; + } else { + return $rows; + } +} + +function get_second_icon($row, $catimgurl) //for CHDBits +{ + global $CURUSER, $Cache; + $source=$row['source']; + $medium=$row['medium']; + $codec=$row['codec']; + $standard=$row['standard']; + $processing=$row['processing']; + $team=$row['team']; + $audiocodec=$row['audiocodec']; + if (!$sirow = $Cache->get_value('secondicon_'.$source.'_'.$medium.'_'.$codec.'_'.$standard.'_'.$processing.'_'.$team.'_'.$audiocodec.'_content')){ + $res = sql_query("SELECT * FROM secondicons WHERE (source = ".sqlesc($source)." OR source=0) AND (medium = ".sqlesc($medium)." OR medium=0) AND (codec = ".sqlesc($codec)." OR codec = 0) AND (standard = ".sqlesc($standard)." OR standard = 0) AND (processing = ".sqlesc($processing)." OR processing = 0) AND (team = ".sqlesc($team)." OR team = 0) AND (audiocodec = ".sqlesc($audiocodec)." OR audiocodec = 0) LIMIT 1"); + $sirow = mysql_fetch_array($res); + if (!$sirow) + $sirow = 'not allowed'; + $Cache->cache_value('secondicon_'.$source.'_'.$medium.'_'.$codec.'_'.$standard.'_'.$processing.'_'.$team.'_'.$audiocodec.'_content', $sirow, 116400); + } + $catimgurl = get_cat_folder($row['category']); + if ($sirow == 'not allowed') + return "\"""; + else { + return ""; + } +} + +function get_torrent_bg_color($promotion = 1) +{ + global $CURUSER; + + if ($CURUSER['appendpromotion'] == 'highlight'){ + $global_promotion_state = get_global_sp_state(); + if ($global_promotion_state == 1){ + if($promotion==1) + $sphighlight = ""; + elseif($promotion==2) + $sphighlight = " class='free_bg'"; + elseif($promotion==3) + $sphighlight = " class='twoup_bg'"; + elseif($promotion==4) + $sphighlight = " class='twoupfree_bg'"; + elseif($promotion==5) + $sphighlight = " class='halfdown_bg'"; + elseif($promotion==6) + $sphighlight = " class='twouphalfdown_bg'"; + elseif($promotion==7) + $sphighlight = " class='thirtypercentdown_bg'"; + else $sphighlight = ""; + } + elseif($global_promotion_state == 2) + $sphighlight = " class='free_bg'"; + elseif($global_promotion_state == 3) + $sphighlight = " class='twoup_bg'"; + elseif($global_promotion_state == 4) + $sphighlight = " class='twoupfree_bg'"; + elseif($global_promotion_state == 5) + $sphighlight = " class='halfdown_bg'"; + elseif($global_promotion_state == 6) + $sphighlight = " class='twouphalfdown_bg'"; + elseif($global_promotion_state == 7) + $sphighlight = " class='thirtypercentdown_bg'"; + else + $sphighlight = ""; + } + else $sphighlight = ""; + return $sphighlight; +} + +function get_torrent_promotion_append($promotion = 1,$forcemode = "",$showtimeleft = false, $added = "", $promotionTimeType = 0, $promotionUntil = ''){ + global $CURUSER,$lang_functions; + global $expirehalfleech_torrent, $expirefree_torrent, $expiretwoup_torrent, $expiretwoupfree_torrent, $expiretwouphalfleech_torrent, $expirethirtypercentleech_torrent; + + $sp_torrent = ""; + $onmouseover = ""; + if (get_global_sp_state() == 1) { + switch ($promotion){ + case 2: + { + if ($showtimeleft && (($expirefree_torrent && $promotionTimeType == 0) || $promotionTimeType == 2)) + { + if ($promotionTimeType == 2) { + $futuretime = strtotime($promotionUntil); + } else { + $futuretime = strtotime($added) + $expirefree_torrent * 86400; + } + $timeout = gettime(date("Y-m-d H:i:s", $futuretime), false, false, true, false, true); + if ($timeout) + $onmouseover = " onmouseover=\"domTT_activate(this, event, 'content', '".htmlspecialchars("".$lang_functions['text_free']."".$lang_functions['text_will_end_in']."".$timeout."")."', 'trail', false, 'delay',500,'lifetime',3000,'fade','both','styleClass','niceTitle', 'fadeMax',87, 'maxWidth', 300);\""; + else $promotion = 1; + } + break; + } + case 3: + { + if ($showtimeleft && (($expiretwoup_torrent && $promotionTimeType == 0) || $promotionTimeType == 2)) + { + if ($promotionTimeType == 2) { + $futuretime = strtotime($promotionUntil); + } else { + $futuretime = strtotime($added) + $expiretwoup_torrent * 86400; + } + $timeout = gettime(date("Y-m-d H:i:s", $futuretime), false, false, true, false, true); + if ($timeout) + $onmouseover = " onmouseover=\"domTT_activate(this, event, 'content', '".htmlspecialchars("".$lang_functions['text_two_times_up']."".$lang_functions['text_will_end_in']."".$timeout."")."', 'trail', false, 'delay',500,'lifetime',3000,'fade','both','styleClass','niceTitle', 'fadeMax',87, 'maxWidth', 300);\""; + else $promotion = 1; + } + break; + } + case 4: + { + if ($showtimeleft && (($expiretwoupfree_torrent && $promotionTimeType == 0) || $promotionTimeType == 2)) + { + if ($promotionTimeType == 2) { + $futuretime = strtotime($promotionUntil); + } else { + $futuretime = strtotime($added) + $expiretwoupfree_torrent * 86400; + } + $timeout = gettime(date("Y-m-d H:i:s", $futuretime), false, false, true, false, true); + if ($timeout) + $onmouseover = " onmouseover=\"domTT_activate(this, event, 'content', '".htmlspecialchars("".$lang_functions['text_free_two_times_up']."".$lang_functions['text_will_end_in']."".$timeout."")."', 'trail', false, 'delay',500,'lifetime',3000,'fade','both','styleClass','niceTitle', 'fadeMax',87, 'maxWidth', 300);\""; + else $promotion = 1; + } + break; + } + case 5: + { + if ($showtimeleft && (($expirehalfleech_torrent && $promotionTimeType == 0) || $promotionTimeType == 2)) + { + if ($promotionTimeType == 2) { + $futuretime = strtotime($promotionUntil); + } else { + $futuretime = strtotime($added) + $expirehalfleech_torrent * 86400; + } + $timeout = gettime(date("Y-m-d H:i:s", $futuretime), false, false, true, false, true); + if ($timeout) + $onmouseover = " onmouseover=\"domTT_activate(this, event, 'content', '".htmlspecialchars("".$lang_functions['text_half_down']."".$lang_functions['text_will_end_in']."".$timeout."")."', 'trail', false, 'delay',500,'lifetime',3000,'fade','both','styleClass','niceTitle', 'fadeMax',87, 'maxWidth', 300);\""; + else $promotion = 1; + } + break; + } + case 6: + { + if ($showtimeleft && (($expiretwouphalfleech_torrent && $promotionTimeType == 0) || $promotionTimeType == 2)) + { + if ($promotionTimeType == 2) { + $futuretime = strtotime($promotionUntil); + } else { + $futuretime = strtotime($added) + $expiretwouphalfleech_torrent * 86400; + } + $timeout = gettime(date("Y-m-d H:i:s", $futuretime), false, false, true, false, true); + if ($timeout) + $onmouseover = " onmouseover=\"domTT_activate(this, event, 'content', '".htmlspecialchars("".$lang_functions['text_half_down_two_up']."".$lang_functions['text_will_end_in']."".$timeout."")."', 'trail', false, 'delay',500,'lifetime',3000,'fade','both','styleClass','niceTitle', 'fadeMax',87, 'maxWidth', 300);\""; + else $promotion = 1; + } + break; + } + case 7: + { + if ($showtimeleft && (($expirethirtypercentleech_torrent && $promotionTimeType == 0) || $promotionTimeType == 2)) + { + if ($promotionTimeType == 2) { + $futuretime = strtotime($promotionUntil); + } else { + $futuretime = strtotime($added) + $expirethirtypercentleech_torrent * 86400; + } + $timeout = gettime(date("Y-m-d H:i:s", $futuretime), false, false, true, false, true); + if ($timeout) + $onmouseover = " onmouseover=\"domTT_activate(this, event, 'content', '".htmlspecialchars("".$lang_functions['text_thirty_percent_down']."".$lang_functions['text_will_end_in']."".$timeout."")."', 'trail', false, 'delay',500,'lifetime',3000,'fade','both','styleClass','niceTitle', 'fadeMax',87, 'maxWidth', 300);\""; + else $promotion = 1; + } + break; + } + } + } + if (($CURUSER['appendpromotion'] == 'word' && $forcemode == "" ) || $forcemode == 'word'){ + if(($promotion==2 && get_global_sp_state() == 1) || get_global_sp_state() == 2){ + $sp_torrent = " [".$lang_functions['text_free']."]"; + } + elseif(($promotion==3 && get_global_sp_state() == 1) || get_global_sp_state() == 3){ + $sp_torrent = " [".$lang_functions['text_two_times_up']."]"; + } + elseif(($promotion==4 && get_global_sp_state() == 1) || get_global_sp_state() == 4){ + $sp_torrent = " [".$lang_functions['text_free_two_times_up']."]"; + } + elseif(($promotion==5 && get_global_sp_state() == 1) || get_global_sp_state() == 5){ + $sp_torrent = " [".$lang_functions['text_half_down']."]"; + } + elseif(($promotion==6 && get_global_sp_state() == 1) || get_global_sp_state() == 6){ + $sp_torrent = " [".$lang_functions['text_half_down_two_up']."]"; + } + elseif(($promotion==7 && get_global_sp_state() == 1) || get_global_sp_state() == 7){ + $sp_torrent = " [".$lang_functions['text_thirty_percent_down']."]"; + } + } + elseif (($CURUSER['appendpromotion'] == 'icon' && $forcemode == "") || $forcemode == 'icon'){ + if(($promotion==2 && get_global_sp_state() == 1) || get_global_sp_state() == 2) + $sp_torrent = " \"Free\""; + elseif(($promotion==3 && get_global_sp_state() == 1) || get_global_sp_state() == 3) + $sp_torrent = " \"2X\""; + elseif(($promotion==4 && get_global_sp_state() == 1) || get_global_sp_state() == 4) + $sp_torrent = " \"2X"; + elseif(($promotion==5 && get_global_sp_state() == 1) || get_global_sp_state() == 5) + $sp_torrent = " \"50%\""; + elseif(($promotion==6 && get_global_sp_state() == 1) || get_global_sp_state() == 6) + $sp_torrent = " \"2X"; + elseif(($promotion==7 && get_global_sp_state() == 1) || get_global_sp_state() == 7) + $sp_torrent = " \"30%\""; + } + return $sp_torrent; +} + +function get_user_id_from_name($username){ + global $lang_functions; + $res = sql_query("SELECT id FROM users WHERE LOWER(username)=LOWER(" . sqlesc($username).")"); + $arr = mysql_fetch_array($res); + if (!$arr){ + stderr($lang_functions['std_error'],$lang_functions['std_no_user_named']."'".$username."'"); + } + else return $arr['id']; +} + +function is_forum_moderator($id, $in = 'post'){ + global $CURUSER; + switch($in){ + case 'post':{ + $res = sql_query("SELECT topicid FROM posts WHERE id=$id") or sqlerr(__FILE__, __LINE__); + if ($arr = mysql_fetch_array($res)){ + if (is_forum_moderator($arr['topicid'],'topic')) + return true; + } + return false; + break; + } + case 'topic':{ + $modcount = sql_query("SELECT COUNT(forummods.userid) FROM forummods LEFT JOIN topics ON forummods.forumid = topics.forumid WHERE topics.id=$id AND forummods.userid=".sqlesc($CURUSER['id'])) or sqlerr(__FILE__, __LINE__); + $arr = mysql_fetch_array($modcount); + if ($arr[0]) + return true; + else return false; + break; + } + case 'forum':{ + $modcount = get_row_count("forummods","WHERE forumid=$id AND userid=".sqlesc($CURUSER['id'])); + if ($modcount) + return true; + else return false; + break; + } + default: { + return false; + } + } +} + +function get_guest_lang_id(){ + global $CURLANGDIR; + $langfolder=$CURLANGDIR; + $res = sql_query("SELECT id FROM language WHERE site_lang_folder=".sqlesc($langfolder)." AND site_lang=1"); + $row = mysql_fetch_array($res); + if ($row){ + return $row['id']; + } + else return 6;//return English +} + +function set_forum_moderators($name, $forumid, $limit=3){ + $name = rtrim(trim($name), ","); + $users = explode(",", $name); + $userids = array(); + foreach ($users as $user){ + $userids[]=get_user_id_from_name(trim($user)); + } + $max = count($userids); + sql_query("DELETE FROM forummods WHERE forumid=".sqlesc($forumid)) or sqlerr(__FILE__, __LINE__); + for($i=0; $i < $limit && $i < $max; $i++){ + sql_query("INSERT INTO forummods (forumid, userid) VALUES (".sqlesc($forumid).",".sqlesc($userids[$i]).")") or sqlerr(__FILE__, __LINE__); + } +} + +function get_plain_username($id){ + $row = get_user_row($id); + if ($row) + $username = $row['username']; + else $username = ""; + return $username; +} + +function get_searchbox_value($mode = 1, $item = 'showsubcat'){ + global $Cache; + static $rows; + if (!$rows && !$rows = $Cache->get_value('searchbox_content')){ + $rows = array(); + $res = sql_query("SELECT * FROM searchbox ORDER BY id ASC"); + while ($row = mysql_fetch_array($res)) { + $rows[$row['id']] = $row; + } + $Cache->cache_value('searchbox_content', $rows, 100500); + } + return $rows[$mode][$item]; +} + +function get_ratio($userid, $html = true){ + global $lang_functions; + $row = get_user_row($userid); + $uped = $row['uploaded']; + $downed = $row['downloaded']; + if ($html == true){ + if ($downed > 0) + { + $ratio = $uped / $downed; + $color = get_ratio_color($ratio); + $ratio = number_format($ratio, 3); + + if ($color) + $ratio = "".$ratio.""; + } + elseif ($uped > 0) + $ratio = $lang_functions['text_inf']; + else + $ratio = "---"; + } + else{ + if ($downed > 0) + { + $ratio = $uped / $downed; + } + else $ratio = 1; + } + return $ratio; +} + +function add_s($num, $es = false) +{ + global $lang_functions; + return ($num > 1 ? ($es ? $lang_functions['text_es'] : $lang_functions['text_s']) : ""); +} + +function is_or_are($num) +{ + global $lang_functions; + return ($num > 1 ? $lang_functions['text_are'] : $lang_functions['text_is']); +} + +function getmicrotime(){ + list($usec, $sec) = explode(" ",microtime()); + return ((float)$usec + (float)$sec); +} + +function get_user_class_image($class){ + $UC = array( + "Staff Leader" => "pic/staffleader.gif", + "SysOp" => "pic/sysop.gif", + "Administrator" => "pic/administrator.gif", + "Moderator" => "pic/moderator.gif", + "Forum Moderator" => "pic/forummoderator.gif", + "Uploader" => "pic/uploader.gif", + "Retiree" => "pic/retiree.gif", + "VIP" => "pic/vip.gif", + "Nexus Master" => "pic/nexus.gif", + "Ultimate User" => "pic/ultimate.gif", + "Extreme User" => "pic/extreme.gif", + "Veteran User" => "pic/veteran.gif", + "Insane User" => "pic/insane.gif", + "Crazy User" => "pic/crazy.gif", + "Elite User" => "pic/elite.gif", + "Power User" => "pic/power.gif", + "User" => "pic/user.gif", + "Peasant" => "pic/peasant.gif" + ); + if (isset($class)) + $uclass = $UC[get_user_class_name($class,false,false,false)]; + else $uclass = "pic/banned.gif"; + return $uclass; +} + +function user_can_upload($where = "torrents"){ + global $CURUSER,$upload_class,$enablespecial,$uploadspecial_class; + + if ($CURUSER["uploadpos"] != 'yes') + return false; + if ($where == "torrents") + { + if (get_user_class() >= $upload_class) + return true; + if (get_if_restricted_is_open()) + return true; + } + if ($where == "music") + { + if ($enablespecial == 'yes' && get_user_class() >= $uploadspecial_class) + return true; + } + return false; +} + +function torrent_selection($name,$selname,$listname,$selectedid = 0) +{ + global $lang_functions; + $selection = "".$name."    \n"; + return $selection; +} + +function get_hl_color($color=0) +{ + switch ($color){ + case 0: return false; + case 1: return "Black"; + case 2: return "Sienna"; + case 3: return "DarkOliveGreen"; + case 4: return "DarkGreen"; + case 5: return "DarkSlateBlue"; + case 6: return "Navy"; + case 7: return "Indigo"; + case 8: return "DarkSlateGray"; + case 9: return "DarkRed"; + case 10: return "DarkOrange"; + case 11: return "Olive"; + case 12: return "Green"; + case 13: return "Teal"; + case 14: return "Blue"; + case 15: return "SlateGray"; + case 16: return "DimGray"; + case 17: return "Red"; + case 18: return "SandyBrown"; + case 19: return "YellowGreen"; + case 20: return "SeaGreen"; + case 21: return "MediumTurquoise"; + case 22: return "RoyalBlue"; + case 23: return "Purple"; + case 24: return "Gray"; + case 25: return "Magenta"; + case 26: return "Orange"; + case 27: return "Yellow"; + case 28: return "Lime"; + case 29: return "Cyan"; + case 30: return "DeepSkyBlue"; + case 31: return "DarkOrchid"; + case 32: return "Silver"; + case 33: return "Pink"; + case 34: return "Wheat"; + case 35: return "LemonChiffon"; + case 36: return "PaleGreen"; + case 37: return "PaleTurquoise"; + case 38: return "LightBlue"; + case 39: return "Plum"; + case 40: return "White"; + default: return false; + } +} + +function get_forum_moderators($forumid, $plaintext = true) +{ + global $Cache; + static $moderatorsArray; + + if (!$moderatorsArray && !$moderatorsArray = $Cache->get_value('forum_moderator_array')) { + $moderatorsArray = array(); + $res = sql_query("SELECT forumid, userid FROM forummods ORDER BY forumid ASC") or sqlerr(__FILE__, __LINE__); + while ($row = mysql_fetch_array($res)) { + $moderatorsArray[$row['forumid']][] = $row['userid']; + } + $Cache->cache_value('forum_moderator_array', $moderatorsArray, 86200); + } + $ret = (array)$moderatorsArray[$forumid]; + + $moderators = ""; + foreach($ret as $userid) { + if ($plaintext) + $moderators .= get_plain_username($userid).", "; + else $moderators .= get_username($userid).", "; + } + $moderators = rtrim(trim($moderators), ","); + return $moderators; +} +function key_shortcut($page=1,$pages=1) +{ + $currentpage = "var currentpage=".$page.";"; + $maxpage = "var maxpage=".$pages.";"; + $key_shortcut_block = "\n\n"; + return $key_shortcut_block; +} +function promotion_selection($selected = 0, $hide = 0) +{ + global $lang_functions; + $selection = ""; + if ($hide != 1) + $selection .= ""; + if ($hide != 2) + $selection .= ""; + if ($hide != 3) + $selection .= ""; + if ($hide != 4) + $selection .= ""; + if ($hide != 5) + $selection .= ""; + if ($hide != 6) + $selection .= ""; + if ($hide != 7) + $selection .= ""; + return $selection; +} + +function get_post_row($postid) +{ + global $Cache; + if (!$row = $Cache->get_value('post_'.$postid.'_content')){ + $res = sql_query("SELECT * FROM posts WHERE id=".sqlesc($postid)." LIMIT 1") or sqlerr(__FILE__,__LINE__); + $row = mysql_fetch_array($res); + $Cache->cache_value('post_'.$postid.'_content', $row, 7200); + } + if (!$row) + return false; + else return $row; +} + +function get_country_row($id) +{ + global $Cache; + if (!$row = $Cache->get_value('country_'.$id.'_content')){ + $res = sql_query("SELECT * FROM countries WHERE id=".sqlesc($id)." LIMIT 1") or sqlerr(__FILE__,__LINE__); + $row = mysql_fetch_array($res); + $Cache->cache_value('country_'.$id.'_content', $row, 86400); + } + if (!$row) + return false; + else return $row; +} + +function get_downloadspeed_row($id) +{ + global $Cache; + if (!$row = $Cache->get_value('downloadspeed_'.$id.'_content')){ + $res = sql_query("SELECT * FROM downloadspeed WHERE id=".sqlesc($id)." LIMIT 1") or sqlerr(__FILE__,__LINE__); + $row = mysql_fetch_array($res); + $Cache->cache_value('downloadspeed_'.$id.'_content', $row, 86400); + } + if (!$row) + return false; + else return $row; +} + +function get_uploadspeed_row($id) +{ + global $Cache; + if (!$row = $Cache->get_value('uploadspeed_'.$id.'_content')){ + $res = sql_query("SELECT * FROM uploadspeed WHERE id=".sqlesc($id)." LIMIT 1") or sqlerr(__FILE__,__LINE__); + $row = mysql_fetch_array($res); + $Cache->cache_value('uploadspeed_'.$id.'_content', $row, 86400); + } + if (!$row) + return false; + else return $row; +} + +function get_isp_row($id) +{ + global $Cache; + if (!$row = $Cache->get_value('isp_'.$id.'_content')){ + $res = sql_query("SELECT * FROM isp WHERE id=".sqlesc($id)." LIMIT 1") or sqlerr(__FILE__,__LINE__); + $row = mysql_fetch_array($res); + $Cache->cache_value('isp_'.$id.'_content', $row, 86400); + } + if (!$row) + return false; + else return $row; +} + +function valid_file_name($filename) +{ + $allowedchars = "abcdefghijklmnopqrstuvwxyz0123456789_./"; + + $total=strlen($filename); + for ($i = 0; $i < $total; ++$i) + if (strpos($allowedchars, $filename[$i]) === false) + return false; + return true; +} + +function valid_class_name($filename) +{ + $allowedfirstchars = "abcdefghijklmnopqrstuvwxyz"; + $allowedchars = "abcdefghijklmnopqrstuvwxyz0123456789_"; + + if(strpos($allowedfirstchars, $filename[0]) === false) + return false; + $total=strlen($filename); + for ($i = 1; $i < $total; ++$i) + if (strpos($allowedchars, $filename[$i]) === false) + return false; + return true; +} + +function return_avatar_image($url) +{ + global $CURLANGDIR; + return "\"avatar\""; +} +function return_category_image($categoryid, $link="") +{ + static $catImg = array(); + if ($catImg[$categoryid]) { + $catimg = $catImg[$categoryid]; + } else { + $categoryrow = get_category_row($categoryid); + $catimgurl = get_cat_folder($categoryid); + $catImg[$categoryid] = $catimg = ""; + } + if ($link) { + $catimg = "".$catimg.""; + } + return $catimg; +} +?> diff --git a/include/functions_announce.php b/include/functions_announce.php new file mode 100644 index 00000000..b4d9491e --- /dev/null +++ b/include/functions_announce.php @@ -0,0 +1,341 @@ + $value) + if(substr($name, 0, 5) == 'HTTP_') + $headers[str_replace(' ', '-', ucwords(strtolower(str_replace('_', ' ', substr($name, 5)))))] = $value; + return $headers; +} + +function block_browser() +{ + $agent = $_SERVER["HTTP_USER_AGENT"]; + if (preg_match("/^Mozilla/", $agent) || preg_match("/^Opera/", $agent) || preg_match("/^Links/", $agent) || preg_match("/^Lynx/", $agent) ) + err("Browser access blocked!"); +// check headers + if (function_exists('getallheaders')){ //getallheaders() is only supported when PHP is installed as an Apache module + $headers = getallheaders(); + //else + // $headers = emu_getallheaders(); + + if($_SERVER["HTTPS"] != "on") + { + if (isset($headers["Cookie"]) || isset($headers["Accept-Language"]) || isset($headers["Accept-Charset"])) + err("Anti-Cheater: You cannot use this agent"); + } + } +} + +function benc_resp($d) +{ + benc_resp_raw(benc(array('type' => 'dictionary', 'value' => $d))); +} +function benc_resp_raw($x) { + + header("Content-Type: text/plain; charset=utf-8"); + header("Pragma: no-cache"); + + if ($_SERVER["HTTP_ACCEPT_ENCODING"] == "gzip" && function_exists('gzencode')) { + header("Content-Encoding: gzip"); + echo gzencode($x, 9, FORCE_GZIP); + } + else + echo $x; +} +function err($msg, $userid = 0, $torrentid = 0) +{ + benc_resp(array('failure reason' => array('type' => 'string', 'value' => $msg))); + exit(); +} +function check_cheater($userid, $torrentid, $uploaded, $downloaded, $anctime, $seeders=0, $leechers=0){ + global $cheaterdet_security,$nodetect_security; + + $time = date("Y-m-d H:i:s"); + $upspeed = ($uploaded > 0 ? $uploaded / $anctime : 0); + + if ($uploaded > 1073741824 && $upspeed > (104857600/$cheaterdet_security)) //Uploaded more than 1 GB with uploading rate higher than 100 MByte/S (For Consertive level). This is no doubt cheating. + { + $comment = "User account was automatically disabled by system"; + mysql_query("INSERT INTO cheaters (added, userid, torrentid, uploaded, downloaded, anctime, seeders, leechers, comment) VALUES (".sqlesc($time).", $userid, $torrentid, $uploaded, $downloaded, $anctime, $seeders, $leechers, ".sqlesc($comment).")") or err("Tracker error 51"); + mysql_query("UPDATE users SET enabled = 'no' WHERE id=$userid") or err("Tracker error 50"); //automatically disable user account; + err("We believe you're trying to cheat. And your account is disabled."); + return true; + } + if ($uploaded > 1073741824 && $upspeed > (10485760/$cheaterdet_security)) //Uploaded more than 1 GB with uploading rate higher than 10 MByte/S (For Consertive level). This is likely cheating. + { + $secs = 24*60*60; //24 hours + $dt = sqlesc(date("Y-m-d H:i:s",(strtotime(date("Y-m-d H:i:s")) - $secs))); // calculate date. + $countres = mysql_query("SELECT id FROM cheaters WHERE userid=$userid AND torrentid=$torrentid AND added > $dt"); + if (mysql_num_rows($countres) == 0) + { + $comment = "Abnormally high uploading rate"; + mysql_query("INSERT INTO cheaters (added, userid, torrentid, uploaded, downloaded, anctime, seeders, leechers, hit, comment) VALUES (".sqlesc($time).", $userid, $torrentid, $uploaded, $downloaded, $anctime, $seeders, $leechers, 1,".sqlesc($comment).")") or err("Tracker error 52"); + } + else{ + $row = mysql_fetch_row($countres); + mysql_query("UPDATE cheaters SET hit=hit+1, dealtwith = 0 WHERE id=".$row[0]); + } + //mysql_query("UPDATE users SET downloadpos = 'no' WHERE id=$userid") or err("Tracker error 53"); //automatically remove user's downloading privileges; + return false; + } +if ($cheaterdet_security > 1){// do not check this with consertive level + if ($uploaded > 1073741824 && $upspeed > 1048576 && $leechers < (2 * $cheaterdet_security)) //Uploaded more than 1 GB with uploading rate higher than 1 MByte/S when there is less than 8 leechers (For Consertive level). This is likely cheating. + { + $secs = 24*60*60; //24 hours + $dt = sqlesc(date("Y-m-d H:i:s",(strtotime(date("Y-m-d H:i:s")) - $secs))); // calculate date. + $countres = mysql_query("SELECT id FROM cheaters WHERE userid=$userid AND torrentid=$torrentid AND added > $dt"); + if (mysql_num_rows($countres) == 0) + { + $comment = "User is uploading fast when there is few leechers"; + mysql_query("INSERT INTO cheaters (added, userid, torrentid, uploaded, downloaded, anctime, seeders, leechers, comment) VALUES (".sqlesc($time).", $userid, $torrentid, $uploaded, $downloaded, $anctime, $seeders, $leechers, ".sqlesc($comment).")") or err("Tracker error 52"); + } + else + { + $row = mysql_fetch_row($countres); + mysql_query("UPDATE cheaters SET hit=hit+1, dealtwith = 0 WHERE id=".$row[0]); + } + //mysql_query("UPDATE users SET downloadpos = 'no' WHERE id=$userid") or err("Tracker error 53"); //automatically remove user's downloading privileges; + return false; + } + if ($uploaded > 10485760 && $upspeed > 102400 && $leechers == 0) //Uploaded more than 10 MB with uploading speed faster than 100 KByte/S when there is no leecher. This is likely cheating. + { + $secs = 24*60*60; //24 hours + $dt = sqlesc(date("Y-m-d H:i:s",(strtotime(date("Y-m-d H:i:s")) - $secs))); // calculate date. + $countres = mysql_query("SELECT id FROM cheaters WHERE userid=$userid AND torrentid=$torrentid AND added > $dt"); + if (mysql_num_rows($countres) == 0) + { + $comment = "User is uploading when there is no leecher"; + mysql_query("INSERT INTO cheaters (added, userid, torrentid, uploaded, downloaded, anctime, seeders, leechers, comment) VALUES (".sqlesc($time).", $userid, $torrentid, $uploaded, $downloaded, $anctime, $seeders, $leechers, ".sqlesc($comment).")") or err("Tracker error 52"); + } + else + { + $row = mysql_fetch_row($countres); + mysql_query("UPDATE cheaters SET hit=hit+1, dealtwith = 0 WHERE id=".$row[0]); + } + //mysql_query("UPDATE users SET downloadpos = 'no' WHERE id=$userid") or err("Tracker error 53"); //automatically remove user's downloading privileges; + return false; + } +} + return false; +} +function portblacklisted($port) +{ + // direct connect + if ($port >= 411 && $port <= 413) return true; + // bittorrent + if ($port >= 6881 && $port <= 6889) return true; + // kazaa + if ($port == 1214) return true; + // gnutella + if ($port >= 6346 && $port <= 6347) return true; + // emule + if ($port == 4662) return true; + // winmx + if ($port == 6699) return true; + return false; +} + +function ipv4_to_compact($ip, $port) +{ + $compact = pack("Nn", sprintf("%d",ip2long($ip)), $port); + return $compact; +} + +function check_client($peer_id, $agent, &$agent_familyid) +{ + global $BASEURL, $Cache; + + if (!$clients = $Cache->get_value('allowed_client_list')){ + $clients = array(); + $res = mysql_query("SELECT * FROM agent_allowed_family ORDER BY hits DESC") or err("check err"); + while ($row = mysql_fetch_array($res)) + $clients[] = $row; + $Cache->cache_value('allowed_client_list', $clients, 86400); + } + foreach ($clients as $row_allowed_ua) + { + $allowed_flag_peer_id = false; + $allowed_flag_agent = false; + $version_low_peer_id = false; + $version_low_agent = false; + + if($row_allowed_ua['peer_id_pattern'] != '') + { + if(!preg_match($row_allowed_ua['peer_id_pattern'], $row_allowed_ua['peer_id_start'], $match_bench)) + err("regular expression err for: " . $row_allowed_ua['peer_id_start'] . ", please ask sysop to fix this"); + + if(preg_match($row_allowed_ua['peer_id_pattern'], $peer_id, $match_target)) + { + if($row_allowed_ua['peer_id_match_num'] != 0) + { + for($i = 0 ; $i < $row_allowed_ua['peer_id_match_num']; $i++) + { + if($row_allowed_ua['peer_id_matchtype'] == 'dec') + { + $match_target[$i+1] = 0 + $match_target[$i+1]; + $match_bench[$i+1] = 0 + $match_bench[$i+1]; + } + else if($row_allowed_ua['peer_id_matchtype'] == 'hex') + { + $match_target[$i+1] = hexdec($match_target[$i+1]); + $match_bench[$i+1] = hexdec($match_bench[$i+1]); + } + + if ($match_target[$i+1] > $match_bench[$i+1]) + { + $allowed_flag_peer_id = true; + break; + } + else if($match_target[$i+1] < $match_bench[$i+1]) + { + $allowed_flag_peer_id = false; + $version_low_peer_id = true; + $low_version = "Your " . $row_allowed_ua['family'] . " 's version is too low, please update it after " . $row_allowed_ua['start_name']; + break; + } + else if($match_target[$i+1] == $match_bench[$i+1])//equal + { + if($i+1 == $row_allowed_ua['peer_id_match_num']) //last + { + $allowed_flag_peer_id = true; + } + } + } + } + else // no need to compare version + $allowed_flag_peer_id = true; + } + } + else // not need to match pattern + $allowed_flag_peer_id = true; + + if($row_allowed_ua['agent_pattern'] != '') + { + if(!preg_match($row_allowed_ua['agent_pattern'], $row_allowed_ua['agent_start'], $match_bench)) + err("regular expression err for: " . $row_allowed_ua['agent_start'] . ", please ask sysop to fix this"); + + if(preg_match($row_allowed_ua['agent_pattern'], $agent, $match_target)) + { + if( $row_allowed_ua['agent_match_num'] != 0) + { + for($i = 0 ; $i < $row_allowed_ua['agent_match_num']; $i++) + { + if($row_allowed_ua['agent_matchtype'] == 'dec') + { + $match_target[$i+1] = 0 + $match_target[$i+1]; + $match_bench[$i+1] = 0 + $match_bench[$i+1]; + } + else if($row_allowed_ua['agent_matchtype'] == 'hex') + { + $match_target[$i+1] = hexdec($match_target[$i+1]); + $match_bench[$i+1] = hexdec($match_bench[$i+1]); + } + + if ($match_target[$i+1] > $match_bench[$i+1]) + { + $allowed_flag_agent = true; + break; + } + else if($match_target[$i+1] < $match_bench[$i+1]) + { + $allowed_flag_agent = false; + $version_low_agent = true; + $low_version = "Your " . $row_allowed_ua['family'] . " 's version is too low, please update it after " . $row_allowed_ua['start_name']; + break; + } + else //equal + { + if($i+1 == $row_allowed_ua['agent_match_num']) //last + $allowed_flag_agent = true; + } + } + } + else // no need to compare version + $allowed_flag_agent = true; + } + } + else + $allowed_flag_agent = true; + + if($allowed_flag_peer_id && $allowed_flag_agent) + { + $exception = $row_allowed_ua['exception']; + $family_id = $row_allowed_ua['id']; + $allow_https = $row_allowed_ua['allowhttps']; + break; + } + elseif(($allowed_flag_peer_id || $allowed_flag_agent) || ($version_low_peer_id || $version_low_agent)) //client spoofing possible + ;//add anti-cheat code here + } + + if($allowed_flag_peer_id && $allowed_flag_agent) + { + if($exception == 'yes') + { + if (!$clients_exp = $Cache->get_value('allowed_client_exception_family_'.$family_id.'_list')){ + $clients_exp = array(); + $res = mysql_query("SELECT * FROM agent_allowed_exception WHERE family_id = $family_id") or err("check err"); + while ($row = mysql_fetch_array($res)) + $clients_exp[] = $row; + $Cache->cache_value('allowed_client_exception_family_'.$family_id.'_list', $clients_exp, 86400); + } + if($clients_exp) + { + foreach ($clients_exp as $row_allowed_ua_exp) + { + if($row_allowed_ua_exp['agent'] == $agent && preg_match("/^" . $row_allowed_ua_exp['peer_id'] . "/", $peer_id)) + return "Client " . $row_allowed_ua_exp['name'] . " is banned due to: " . $row_allowed_ua_exp['comment'] . "."; + } + } + $agent_familyid = $row_allowed_ua['id']; + } + else + { + $agent_familyid = $row_allowed_ua['id']; + } + + if($_SERVER["HTTPS"] == "on") + { + if($allow_https == 'yes') + return 0; + else + return "This client does not support https well, Please goto $BASEURL/faq.php#id29 for a list of proper clients"; + } + else + return 0; // no exception found, so allowed or just allowed + } + else + { + if($version_low_peer_id && $version_low_agent) + return $low_version; + else + return "Banned Client, Please goto $BASEURL/faq.php#id29 for a list of acceptable clients"; + } +} +?> diff --git a/include/globalfunctions.php b/include/globalfunctions.php new file mode 100644 index 00000000..e9def680 --- /dev/null +++ b/include/globalfunctions.php @@ -0,0 +1,88 @@ +get_value('global_promotion_state')){ + $res = mysql_query("SELECT * FROM torrents_state"); + $row = mysql_fetch_assoc($res); + $global_promotion_state = $row["global_sp_state"]; + $Cache->cache_value('global_promotion_state', $global_promotion_state, 57226); + } + } + return $global_promotion_state; +} + +// IP Validation +function validip($ip) +{ + if (!ip2long($ip)) //IPv6 + return true; + if (!empty($ip) && $ip == long2ip(ip2long($ip))) + { + // reserved IANA IPv4 addresses + // http://www.iana.org/assignments/ipv4-address-space + $reserved_ips = array ( + array('192.0.2.0','192.0.2.255'), + array('192.168.0.0','192.168.255.255'), + array('255.255.255.0','255.255.255.255') + ); + + foreach ($reserved_ips as $r) + { + $min = ip2long($r[0]); + $max = ip2long($r[1]); + if ((ip2long($ip) >= $min) && (ip2long($ip) <= $max)) return false; + } + return true; + } + else return false; +} + +function getip() { + if (isset($_SERVER)) { + if (isset($_SERVER['HTTP_X_FORWARDED_FOR']) && validip($_SERVER['HTTP_X_FORWARDED_FOR'])) { + $ip = $_SERVER['HTTP_X_FORWARDED_FOR']; + } elseif (isset($_SERVER['HTTP_CLIENT_IP']) && validip($_SERVER['HTTP_CLIENT_IP'])) { + $ip = $_SERVER['HTTP_CLIENT_IP']; + } else { + $ip = $_SERVER['REMOTE_ADDR']; + } + } else { + if (getenv('HTTP_X_FORWARDED_FOR') && validip(getenv('HTTP_X_FORWARDED_FOR'))) { + $ip = getenv('HTTP_X_FORWARDED_FOR'); + } elseif (getenv('HTTP_CLIENT_IP') && validip(getenv('HTTP_CLIENT_IP'))) { + $ip = getenv('HTTP_CLIENT_IP'); + } else { + $ip = getenv('REMOTE_ADDR'); + } + } + + return $ip; +} + +function sql_query($query) +{ + global $query_name; + $query_name[] = $query; + return mysql_query($query); +} + +function sqlesc($value) { + $value = "'" . mysql_real_escape_string($value) . "'"; + return $value; +} + +function hash_pad($hash) { + return str_pad($hash, 20); +} + +function hash_where($name, $hash) { + $shhash = preg_replace('/ *$/s', "", $hash); + return "($name = " . sqlesc($hash) . " OR $name = " . sqlesc($shhash) . ")"; +} +?> diff --git a/include/smtp/net.const.php b/include/smtp/net.const.php new file mode 100644 index 00000000..13315445 --- /dev/null +++ b/include/smtp/net.const.php @@ -0,0 +1,13 @@ + \ No newline at end of file diff --git a/include/smtp/sasl.lib.php b/include/smtp/sasl.lib.php new file mode 100644 index 00000000..f8648498 --- /dev/null +++ b/include/smtp/sasl.lib.php @@ -0,0 +1,58 @@ + +*/ +$rootpath = './'; +require_once ($rootpath . 'include/smtp/net.const.php'); + +/** +* @version 0.0.1 +* @access public +* @todo phpdoc +*/ +class sasl +{ + + + function _hmac_md5($key, $data) + { + if (strlen($key) > 64) { + $key = pack('H32', md5($key)); + } + + if (strlen($key) < 64) { + $key = str_pad($key, 64, chr(0)); + } + + $k_ipad = substr($key, 0, 64) ^ str_repeat(chr(0x36), 64); + $k_opad = substr($key, 0, 64) ^ str_repeat(chr(0x5C), 64); + + $inner = pack('H32', md5($k_ipad . $data)); + $digest = md5($k_opad . $inner); + + return $digest; + } + + function cram_md5($user, $pass, $challenge) + { + var_dump($challenge); + $chall = base64_decode($challenge); + var_dump($chall); + return base64_encode(sprintf('%s %s', $user, $this->_hmac_md5($pass, $chall))); + } + + function plain($username, $password) + { + return base64_encode(sprintf('%c%s%c%s', 0, $username, 0, $password)); + } + + function login($input) + { + return base64_encode(sprintf('%s', $input)); + } +} + +?> \ No newline at end of file diff --git a/include/smtp/smtp.lib.php b/include/smtp/smtp.lib.php new file mode 100644 index 00000000..b428eb9c --- /dev/null +++ b/include/smtp/smtp.lib.php @@ -0,0 +1,531 @@ + +*/ + +require_once ('net.const.php'); + +/** +* @version 0.0.2.2 +* @access public +* @todo split messages, attachments +*/ +class smtp +{ + + + /** + * lagnut-smtp version, send in the headers + * + * @var string + * @access private + */ + var $_version = '0.0.2.2'; + + + /** + * Turn debugon / off + * + * @var bool + * @access private + */ + var $_debug = false; + + + /** + * Serverconnection resource + * + * @var resource + * @access private + */ + var $_connection = null; + + + /** + * E-mailheaders + * + * @var array headers + * @access private + */ + var $_hdrs = array(); + + + /** + * E-mailbody + * + * @var string + * @access private + */ + var $_body = ''; + + + /** + * Default Content type + * + * @var string + * @access private + */ + var $_mime = 'text/html'; + + + /** + * Default Charset + * + * @var string + * @access private + */ + var $_charset = 'UTF-8'; + + /** + * Default Transfer-Content-Encoding + * + * @var string + * @access private + */ + var $_CTEncoding = 'base64'; + + // These are actually not necessary, but for the shitty eYou email system + /** + * Charset for Special Case + * + * @var string + * @access private + */ + var $_charset_eYou = 'GBK'; + + /** + * Charset for Special Case + * + * @var string + * @access private + */ + var $_specialcase = 'eYou'; + + /** + * Class contruction, sets client headers + * + * @access public + */ + function smtp($charset = 'UTF-8', $specialcase = "") + { + $this->_specialcase = $specialcase; + $this->_charset = $charset; + $this->_add_hdr('X-Mailer', sprintf('LAGNUT-SMTP/%s', $this->_version)); + $this->_add_hdr('User-Agent', sprintf('LAGNUT-SMTP/%s', $this->_version)); + $this->_add_hdr('MIME-Version', '1.0'); + } + + + /** + * Turn debugging on/off + * + * @access public + * @param bool $debug command + */ + function debug($debug) + { + $this->_debug = (bool)$debug; + } + + + /** + * Clean input to prevent injection + * + * @param string $input User data + */ + function _clean(&$input) + { + if (!is_string($input)) { + return false; + } + $input = urldecode($input); + $input = str_replace("\n", '', str_replace("\r", '', $input)); + } + + + /** + * Send command to server + * + * @access private + * @param string $cmdcommand + * @param optional $data data + */ + function _cmd($cmd, $data = false) + { + $this->_clean($cmd); + $this->_clean($data); + + if ($this->_is_closed()) { + return false; + } + + if (!$data) { + $command = sprintf("%s\r\n", $cmd); + }else { + $command = sprintf("%s: %s\r\n", $cmd,$data); + } + + fwrite($this->_connection, $command); + $resp = $this->_read(); + if ($this->_debug){ + printf($command); + printf($resp); + } + if ($this->_is_closed($resp)) { + return false; + } + return $resp; + } + + + /** + * Collects header + * + * @access private + * @param string$key + * @param string $data + */ + function _add_hdr($key, $data) + { + $this->_clean($key); + $this->_clean($data); + $this->_hdrs[$key] = sprintf("%s: %s\r\n", $key, $data); + } + + + /** + * Read server output + * + * @access private + * @return string + */ + function _read() + { + if ($this->_is_closed()) { + return false; + } + $o = ''; + do { + $str = @fgets($this->_connection, 515); + if (!$str) { + break; + } + $o .= $str; + if (substr($str, 3, 1) == ' ') { + break; + } + } while (true); + return $o; + } + + + /** + * Checks if server denies more commands + * + * @access private + * @param $int + * @return bool true if connection is closed + */ + function _is_closed($response = false) + { + if (!$this->_connection) { + return true; + } + if (isset($response{0}) && ($response{0} == 4|| $response{0}== 5)) { + $this->close(); + return true; + } + return false; + } + + + /** + * Open connection to server + * + * @access public + * @param string $server SMTP server + * @param int $port Server port + */ + function open($server, $port = 25) + { + $this->_connection = fsockopen($server, $port, $e, $er, 8); + + if ($this->_is_closed()) { + return false; + } + + $init= $this->_read(); + if ($this->_debug){ + printf($init); + } + + if ($this->_is_closed($init)) { + return false; + } + + $lhost = (isset($_SERVER['SERVER_ADDR']) ? $_SERVER['SERVER_ADDR'] : '127.0.0.1'); + + if (strpos($init,'ESMTP') === false){ + $this->_cmd('HELO '. gethostbyaddr($lhost)); + } else { + $this->_cmd('EHLO '. gethostbyaddr($lhost)); + } + } + + + /** + * Start TLS communication + * + * @access public + */ + function start_tls() + { + if (!function_exists('stream_socket_enable_crypto')) { + trigger_error('TLS is not supported', E_USER_ERROR); + return false; + } + $this->_cmd('STARTTLS'); + stream_socket_enable_crypto($this->_connection, true, STREAM_CRYPTO_METHOD_TLS_CLIENT); + } + + + /** + * Performs SMTP authentication + * + * @access public + * @param string $username username + * @param string $password password + * @param int authentication mecanism + */ + function auth($username, $password, $type = LOGIN) + { + + include_once ('sasl.lib.php'); + $sasl =& new sasl($sasl, $username, $password); + switch ($type) { + case PLAIN: + $this->_cmd('AUTH PLAIN'); + $this->_cmd($sasl->plain($username, $password)); + break; + case LOGIN: + $this->_cmd('AUTH LOGIN'); + $this->_cmd($sasl->login($username)); + $this->_cmd($sasl->login($password)); + break; + case CRAM_MD5: + $resp = explode(' ', $this->_cmd('AUTH CRAM-MD5')); + $this->_cmd($sasl->cram_md5($username, $password, trim($resp[1]))); + break; + } + } + + + /** + * Closes connection to the server + * + * @access public + */ + function close() + { + if ($this->_is_closed()) { + return false; + } + + $this->_cmd('RSET'); + $this->_cmd('QUIT'); + fclose($this->_connection); + $this->_connection = null; + } + + + /** + * E-mail sender + * + * @access public + * @param string $from Sender + */ + function from($email, $name = '') + { + $from = !empty($name) ? sprintf('%s <%s>', $name, $email) : $email; + $this->_cmd('MAIL FROM', sprintf('<%s>', $email)); + $this->_add_hdr('FROM', $from); + $this->_add_hdr('Return-path', $email); + } + + /** + * Set BCC header + * + * @access public + * @param string $tolist recipients whose email address should be concealed + */ + function bcc($tolist) + { + $this->_add_hdr('Bcc', $tolist); + } + + + /** + * Send reply-to header + * + * @param string $to + */ + function reply_to($email, $name = '') + { + $to = !empty($name) ? sprintf('%s <%s>', $name, $email) : $email; + $this->_add_hdr('REPLY-TO', $to); + } + + + /** + * E-mail reciever + * + * @access public + * @param string $to Reciever + */ + function to($email, $name = '') + { + $to = !empty($name) ? sprintf('%s <%s>', $name, $email) : $email; + $this->_cmd('RCPT TO', sprintf('<%s>', $email)); + $this->_add_hdr('TO', $to); + } + + /** + * Multiple E-mail reciever + * + * @access public + * @param string $email Reciever, with out other recepients info disclosed + */ + function multi_to($email) + { + $this->_cmd('RCPT TO', sprintf('<%s>', $email)); + } + + /** + * E-mail reciever + * + * @access public + * @param string $email TO head on mass mailing + */ + function multi_to_head($to) + { + $this->_add_hdr('TO', $to); + } + + /** + * MIME type + * + * @access public + * @param string $mime MIME type + */ + function mime_charset($mime = 'text/html',$charset = 'UTF-8') + { + $this->_charset = $charset; + $this->_mime = $mime; + $this->_add_hdr('Content-type', sprintf('%s; charset=%s', $this->_mime, $this->_charset)); + } + + /** + * MIME Content-Transfer-Encoding + * + * @access public + * @param string $mime MIME type + */ + function mime_content_transfer_encoding($CTEncoding = 'base64') + { + $this->_CTEncoding = $CTEncoding; + $this->_add_hdr('Content-Transfer-Encoding', sprintf('%s', $this->_CTEncoding)); + } + + /** + * E-mail subject + * + * @access public + * @param string $subject subject + */ + function subject($subject) + { + $this->_clean($subject); + + if($this->_specialcase = "") + $this->_add_hdr('SUBJECT', $this->encode_hdrs($subject)); + elseif($this->_specialcase = "eYou") + { + $temp = $this->_charset; + $this->_charset = $this->_charset_eYou; + $this->_add_hdr('SUBJECT', $this->encode_hdrs($subject)); + $this->_charset = $temp; + } + } + + + /** + * E-mail body + * + * @access public + * @param string $body body + */ + function body($body) + { + $body = preg_replace("/([\n|\r])\.([\n|\r])/", "$1..$2", $body); + + if($this->_CTEncoding == 'base64') + $this->_body = sprintf("\r\n%s", base64_encode($body)); + } + + + /** + * Send the mail + * + * @access public + */ + function send() + { + $resp = $this->_cmd('DATA'); + if ($this->_is_closed($resp)) { + $this->close(); + return false; + } + foreach ($this->_hdrs as $header) { + fwrite($this->_connection, $header); + if ($this->_debug) { + printf($header); + } + } + fwrite($this->_connection,$this->_body); + fwrite($this->_connection, "\r\n.\r\n"); + $resp = trim($this->_read()); + if ($this->_debug){ + printf("%s\r\n", $this->_body); + printf("\r\n.\r\n"); + printf('%s', $resp); + } + if ((int)$resp{0} != 2) { + return false; + } else { + return true; + } + } + + + /** + * encode headers + * + * @access private + * @param string $input + * @return string + */ + function encode_hdrs($input) + { + $replacement = preg_replace('/([\x80-\xFF])/e', '"=" . strtoupper(dechex(ord("\1")))', $input); + + $input = str_replace($input, sprintf('=?%s?Q?%s?=', $this->_charset, $replacement), $input); + return $input; + } + + +} + +?> diff --git a/index.php b/index.php new file mode 100644 index 00000000..eb8409b6 --- /dev/null +++ b/index.php @@ -0,0 +1,627 @@ +delete_value('current_poll_content'); + $Cache->delete_value('current_poll_result', true); + if (mysql_affected_rows() != 1) + stderr($lang_index['std_error'], $lang_index['std_vote_not_counted']); + //add karma + KPS("+",$pollvote_bonus,$userid); + + header("Location: " . get_protocol_prefix() . "$BASEURL/"); + die; + } + else + stderr($lang_index['std_error'], $lang_index['std_option_unselected']); + } +} + +stdhead($lang_index['head_home']); +begin_main_frame(); + +// ------------- start: recent news ------------------// +print("

".$lang_index['text_recent_news'].(get_user_class() >= $newsmanage_class ? " - [".$lang_index['text_news_page']."]" : "")."

"); + +$Cache->new_page('recent_news', 86400, true); +if (!$Cache->get_page()){ +$res = sql_query("SELECT * FROM news ORDER BY added DESC LIMIT ".(int)$maxnewsnum_main) or sqlerr(__FILE__, __LINE__); +if (mysql_num_rows($res) > 0) +{ + $Cache->add_whole_row(); + print("
\n"); + $Cache->end_whole_row(); + $news_flag = 0; + while($array = mysql_fetch_array($res)) + { + $Cache->add_row(); + $Cache->add_part(); + if ($news_flag < 1) { + print("\"Show/Hide\" " . date("Y.m.d",strtotime($array['added'])) . " - " ."". $array['title'] . ""); + print("
".format_comment($array["body"],0)."
"); + $news_flag = $news_flag + 1; + } + else + { + print("
\"Show/Hide\" " . date("Y.m.d",strtotime($array['added'])) . " - " ."". $array['title'] . "
"); + print("
".format_comment($array["body"],0)."
"); + } + $Cache->end_part(); + $Cache->add_part(); + print("   [".$lang_index['text_e']."]"); + print(" [".$lang_index['text_d']."]"); + $Cache->end_part(); + $Cache->end_row(); + } + $Cache->break_loop(); + $Cache->add_whole_row(); + print("
\n"); + $Cache->end_whole_row(); +} + $Cache->cache_page(); +} +echo $Cache->next_row(); +while($Cache->next_row()){ + echo $Cache->next_part(); + if (get_user_class() >= $newsmanage_class) + echo $Cache->next_part(); +} +echo $Cache->next_row(); +// ------------- end: recent news ------------------// +// ------------- start: hot and classic movies ------------------// +if ($showextinfo['imdb'] == 'yes' && ($showmovies['hot'] == "yes" || $showmovies['classic'] == "yes")) +{ + $type = array('hot', 'classic'); + foreach($type as $type_each) + { + if($showmovies[$type_each] == 'yes' && (!isset($CURUSER) || $CURUSER['show' . $type_each] == 'yes')) + { + $Cache->new_page($type_each.'_resources', 900, true); + if (!$Cache->get_page()) + { + $Cache->add_whole_row(); + + $imdbcfg = new imdb_config(); + $res = sql_query("SELECT * FROM torrents WHERE picktype = " . sqlesc($type_each) . " AND seeders > 0 AND url != '' ORDER BY id DESC LIMIT 30") or sqlerr(__FILE__, __LINE__); + if (mysql_num_rows($res) > 0) + { + $movies_list = ""; + $count = 0; + $allImdb = array(); + while($array = mysql_fetch_array($res)) + { + $pro_torrent = get_torrent_promotion_append($array[sp_state],'word'); + if ($imdb_id = parse_imdb_id($array["url"])) + { + if (array_search($imdb_id, $allImdb) !== false) { //a torrent with the same IMDb url already exists + continue; + } + $allImdb[]=$imdb_id; + $photo_url = $imdbcfg->photodir . $imdb_id. $imdbcfg->imageext; + + if (file_exists($photo_url)) + $thumbnail = "\"poster\""; + else continue; + } + else continue; + $thumbnail = "" . (addslashes($array['name'] . $pro_torrent)) . "

".(addslashes($array['small_descr'])) .""). "', 'trail', true, 'delay', 0,'lifetime',5000,'styleClass','niceTitle','maxWidth', 600);\">" . $thumbnail . "
"; + $movies_list .= $thumbnail; + $count++; + if ($count >= 9) + break; + } +?> +

+
+
+end_whole_row(); + $Cache->cache_page(); + } + echo $Cache->next_row(); + } + } +} +// ------------- end: hot and classic movies ------------------// +// ------------- start: funbox ------------------// +if ($showfunbox_main == "yes" && (!isset($CURUSER) || $CURUSER['showfb'] == "yes")){ + // Get the newest fun stuff + if (!$row = $Cache->get_value('current_fun_content')){ + $result = sql_query("SELECT fun.*, IF(ADDTIME(added, '1 0:0:0') < NOW(),true,false) AS neednew FROM fun WHERE status != 'banned' AND status != 'dull' ORDER BY added DESC LIMIT 1") or sqlerr(__FILE__,__LINE__); + $row = mysql_fetch_array($result); + $Cache->cache_value('current_fun_content', $row, 1043); + } + if (!$row) //There is no funbox item + { + print("

".$lang_index['text_funbox'].(get_user_class() >= $newfunitem_class ? " - [".$lang_index['text_new_fun']."]" : "")."

"); + } + else + { + $totalvote = $Cache->get_value('current_fun_vote_count'); + if ($totalvote == ""){ + $totalvote = get_row_count("funvotes", "WHERE funid = ".sqlesc($row['id'])); + $Cache->cache_value('current_fun_vote_count', $totalvote, 756); + } + $funvote = $Cache->get_value('current_fun_vote_funny_count'); + if ($funvote == ""){ + $funvote = get_row_count("funvotes", "WHERE funid = ".sqlesc($row['id'])." AND vote='fun'"); + $Cache->cache_value('current_fun_vote_funny_count', $funvote, 756); + } +//check whether current user has voted + $funvoted = get_row_count("funvotes", "WHERE funid = ".sqlesc($row['id'])." AND userid=".sqlesc($CURUSER[id])); + + print ("

".$lang_index['text_funbox']); + if ($CURUSER) + { + print("".(get_user_class() >= $log_class ? " - [".$lang_index['text_more_fun']."]": "").($row['neednew'] && get_user_class() >= $newfunitem_class ? " - [".$lang_index['text_new_fun']."]" : "" ).( ($CURUSER['id'] == $row['userid'] || get_user_class() >= $funmanage_class) ? " - [".$lang_index['text_edit']."]" : "").(get_user_class() >= $funmanage_class ? " - [".$lang_index['text_delete']."] - [".$lang_index['text_ban']."]" : "").""); + } + print("

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

\n"); + + if ($CURUSER) + { + $funonclick = " onclick=\"funvote(".$row['id'].",'fun'".")\""; + $dullonclick = " onclick=\"funvote(".$row['id'].",'dull'".")\""; + print("".$funvote."".$lang_index['text_out_of'].$totalvote.$lang_index['text_people_found_it'].($funvoted ? "" : "".$lang_index['text_your_opinion']."   ")."".$lang_index['text_vote_accepted'].""); + } + print("
"); + } +} +// ------------- end: funbox ------------------// +// ------------- start: shoutbox ------------------// +if ($showshoutbox_main == "yes") { +?> +

-

+\n"); + print("

\n"); + print("\n"); + print(" "); + if ($CURUSER['hidehb'] != 'yes' && $showhelpbox_main =='yes') + print(""); + print("
\n"); + print(smile_row("shbox","shbox_text")); + print(""); +} +// ------------- end: shoutbox ------------------// +// ------------- start: latest forum posts ------------------// +/* +if ($showlastxforumposts_main == "yes" && $CURUSER) +{ + $res = sql_query("SELECT posts.id AS pid, posts.userid AS userpost, posts.added, topics.id AS tid, topics.subject, topics.forumid, topics.views, forums.name FROM posts, topics, forums WHERE posts.topicid = topics.id AND topics.forumid = forums.id AND minclassread <=" . sqlesc(get_user_class()) . " ORDER BY posts.id DESC LIMIT 5") or sqlerr(__FILE__,__LINE__); + if(mysql_num_rows($res) != 0) + { + print("

".$lang_index['text_last_five_posts']."

"); + print(""); + + while ($postsx = mysql_fetch_assoc($res)) + { + print(""); + } + print("
".$lang_index['col_topic_title']."".$lang_index['col_view']."".$lang_index['col_author']."".$lang_index['col_posted_at']."
".htmlspecialchars($postsx["subject"])."
".$lang_index['text_in']."".htmlspecialchars($postsx["name"])."
".$postsx["views"]."" . get_username($postsx["userpost"]) ."".gettime($postsx["added"])."
"); + } +} +*/ +// ------------- end: latest forum posts ------------------// +// ------------- start: latest torrents ------------------// + +if ($showlastxtorrents_main == "yes") { + $result = sql_query("SELECT * FROM torrents where visible='yes' ORDER BY added DESC LIMIT 5") or sqlerr(__FILE__, __LINE__); + if(mysql_num_rows($result) != 0 ) + { + print ("

".$lang_index['text_last_five_torrent']."

"); + print (""); + + while( $row = mysql_fetch_assoc($result) ) + { + print (""); + } + print ("
".$lang_index['col_name']."".$lang_index['col_seeder']."".$lang_index['col_leecher']."
" . htmlspecialchars($row['name']) . "" . $row['seeders'] . "" . $row['leechers'] . "
"); + } +} +// ------------- end: latest torrents ------------------// +// ------------- start: polls ------------------// +if ($CURUSER && $showpolls_main == "yes") +{ + // Get current poll + if (!$arr = $Cache->get_value('current_poll_content')){ + $res = sql_query("SELECT * FROM polls ORDER BY id DESC LIMIT 1") or sqlerr(__FILE__, __LINE__); + $arr = mysql_fetch_array($res); + $Cache->cache_value('current_poll_content', $arr, 7226); + } + if (!$arr) + $pollexists = false; + else $pollexists = true; + + print("

".$lang_index['text_polls']); + + if (get_user_class() >= $pollmanage_class) + { + print(" - [".$lang_index['text_new']."]\n"); + if ($pollexists) + { + print(" - [".$lang_index['text_edit']."]\n"); + print(" - [".$lang_index['text_delete']."]"); + print(" - [".$lang_index['text_detail']."]"); + } + print(""); + } + print("

"); + if ($pollexists) + { + $pollid = 0+$arr["id"]; + $userid = 0+$CURUSER["id"]; + $question = $arr["question"]; + $o = array($arr["option0"], $arr["option1"], $arr["option2"], $arr["option3"], $arr["option4"], + $arr["option5"], $arr["option6"], $arr["option7"], $arr["option8"], $arr["option9"], + $arr["option10"], $arr["option11"], $arr["option12"], $arr["option13"], $arr["option14"], + $arr["option15"], $arr["option16"], $arr["option17"], $arr["option18"], $arr["option19"]); + + print("
\n"); + print("
"); + print("

".$question."

\n"); + + // Check if user has already voted + $res = sql_query("SELECT selection FROM pollanswers WHERE pollid=".sqlesc($pollid)." AND userid=".sqlesc($CURUSER["id"])) or sqlerr(); + $voted = mysql_fetch_assoc($res); + if ($voted) //user has already voted + { + $uservote = $voted["selection"]; + $Cache->new_page('current_poll_result', 3652, true); + if (!$Cache->get_page()) + { + // we reserve 255 for blank vote. + $res = sql_query("SELECT selection FROM pollanswers WHERE pollid=".sqlesc($pollid)." AND selection < 20") or sqlerr(); + + $tvotes = mysql_num_rows($res); + + $vs = array(); + $os = array(); + + // Count votes + while ($arr2 = mysql_fetch_row($res)) + $vs[$arr2[0]] ++; + + reset($o); + for ($i = 0; $i < count($o); ++$i){ + if ($o[$i]) + $os[$i] = array($vs[$i], $o[$i], $i); + } + + function srt($a,$b) + { + if ($a[0] > $b[0]) return -1; + if ($a[0] < $b[0]) return 1; + return 0; + } + + // now os is an array like this: array(array(123, "Option 1", 1), array(45, "Option 2", 2)) + $Cache->add_whole_row(); + print("\n"); + $Cache->end_whole_row(); + $i = 0; + while ($a = $os[$i]) + { + if ($tvotes == 0) + $p = 0; + else + $p = round($a[0] / $tvotes * 100); + $Cache->add_row(); + $Cache->add_part(); + print("\n"); + $Cache->end_part(); + $Cache->end_row(); + ++$i; + } + $Cache->break_loop(); + $Cache->add_whole_row(); + print("
" . $a[1] . "  \"\"end_part(); + $Cache->add_part(); + print(" src=\"pic/trans.gif\" style=\"width: " . ($p * 3) ."px;\" alt=\"\" />\"\" $p%
\n"); + $tvotes = number_format($tvotes); + print("

".$lang_index['text_votes']." ".$tvotes."

\n"); + $Cache->end_whole_row(); + $Cache->cache_page(); + } + echo $Cache->next_row(); + $i = 0; + while($Cache->next_row()){ + echo $Cache->next_part(); + if ($i == $uservote) + echo "class=\"sltbar\""; + else + echo "class=\"unsltbar\""; + echo $Cache->next_part(); + $i++; + } + echo $Cache->next_row(); + } + else //user has not voted yet + { + print("
\n"); + $i = 0; + while ($a = $o[$i]) + { + print("".$a."
\n"); + ++$i; + } + print("
"); + print("".$lang_index['radio_blank_vote']."
\n"); + print("

"); + } + print("
"); + + if ($voted && get_user_class() >= $log_class) + print("

".$lang_index['text_previous_polls']."

\n"); + print("
"); + } +} +// ------------- end: polls ------------------// +// ------------- start: stats ------------------// +if ($showstats_main == "yes") +{ +?> +

+
+ +new_page('stats_users', 3000, true); + if (!$Cache->get_page()){ + $Cache->add_whole_row(); + $registered = number_format(get_row_count("users")); + $unverified = number_format(get_row_count("users", "WHERE status='pending'")); + $totalonlinetoday = number_format(get_row_count("users","WHERE last_access >= ". sqlesc(date("Y-m-d H:i:s",(TIMENOW - 86400))))); + $totalonlineweek = number_format(get_row_count("users","WHERE last_access >= ". sqlesc(date("Y-m-d H:i:s",(TIMENOW - 604800))))); + $VIP = number_format(get_row_count("users", "WHERE class=".UC_VIP)); + $donated = number_format(get_row_count("users", "WHERE donor = 'yes'")); + $warned = number_format(get_row_count("users", "WHERE warned='yes'")); + $disabled = number_format(get_row_count("users", "WHERE enabled='no'")); + $registered_male = number_format(get_row_count("users", "WHERE gender='Male'")); + $registered_female = number_format(get_row_count("users", "WHERE gender='Female'")); +?> + + + + + + + +",$donated); +?> + + +",$warned); + twotd($lang_index['row_banned_users']." \"disabled\"",$disabled); +?> + + + + +end_whole_row(); + $Cache->cache_page(); + } + echo $Cache->next_row(); +?> + +new_page('stats_torrents', 1800, true); + if (!$Cache->get_page()){ + $Cache->add_whole_row(); + $torrents = number_format(get_row_count("torrents")); + $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'"); + if ($leechers == 0) + $ratio = 0; + else + $ratio = round($seeders / $leechers * 100); + $activewebusernow = get_row_count("users","WHERE last_access >= ".sqlesc(date("Y-m-d H:i:s",(TIMENOW - 900)))); + $activewebusernow=number_format($activewebusernow); + $activetrackerusernow = number_format(get_single_value("peers","COUNT(DISTINCT(userid))")); + $peers = number_format($seeders + $leechers); + $seeders = number_format($seeders); + $leechers = number_format($leechers); + $totaltorrentssize = mksize(get_row_sum("torrents", "size")); + $totaluploaded = get_row_sum("users","uploaded"); + $totaldownloaded = get_row_sum("users","downloaded"); + $totaldata = $totaldownloaded+$totaluploaded; +?> + + + + + + + + + + + + + + + + + + +end_whole_row(); + $Cache->cache_page(); + } + echo $Cache->next_row(); +?> + +new_page('stats_classes', 4535, true); + if (!$Cache->get_page()){ + $Cache->add_whole_row(); + $peasants = number_format(get_row_count("users", "WHERE class=".UC_PEASANT)); + $users = number_format(get_row_count("users", "WHERE class=".UC_USER)); + $powerusers = number_format(get_row_count("users", "WHERE class=".UC_POWER_USER)); + $eliteusers = number_format(get_row_count("users", "WHERE class=".UC_ELITE_USER)); + $crazyusers = number_format(get_row_count("users", "WHERE class=".UC_CRAZY_USER)); + $insaneusers = number_format(get_row_count("users", "WHERE class=".UC_INSANE_USER)); + $veteranusers = number_format(get_row_count("users", "WHERE class=".UC_VETERAN_USER)); + $extremeusers = number_format(get_row_count("users", "WHERE class=".UC_EXTREME_USER)); + $ultimateusers = number_format(get_row_count("users", "WHERE class=".UC_ULTIMATE_USER)); + $nexusmasters = number_format(get_row_count("users", "WHERE class=".UC_NEXUS_MASTER)); +?> + +",$peasants); + twotd(get_user_class_name(UC_USER,false,false,true),$users); +?> + + + + + + + + + + + + + +end_whole_row(); + $Cache->cache_page(); + } + echo $Cache->next_row(); +?> +
 
 
+
+ +

+
+" . trim($uptimeresult) . ""); + print("
"); + } +} +// ------------- end: tracker load ------------------// + +// ------------- start: disclaimer ------------------// +?> +

+
+
+".$lang_index['text_links']); + if (get_user_class() >= $applylink_class) + print(" - [".$lang_index['text_apply_for_link']."]"); + if (get_user_class() >= $linkmanage_class) + { + print(""); + print(" - [".$lang_index['text_manage_links']."]\n"); + print(""); + } + print(""); + $Cache->new_page('links', 86400, false); + if (!$Cache->get_page()){ + $Cache->add_whole_row(); + $res = sql_query("SELECT * FROM links ORDER BY id ASC") or sqlerr(__FILE__, __LINE__); + if (mysql_num_rows($res) > 0) + { + $links = ""; + while($array = mysql_fetch_array($res)) + { + $links .= "" . $array['name'] . "     "; + } + print("
".trim($links)."
"); + } + $Cache->end_whole_row(); + $Cache->cache_page(); + } + echo $Cache->next_row(); +// ------------- end: links ------------------// +// ------------- start: browser, client and code note ------------------// +?> +
+

+
<?php echo PROJECTNAME?>
+
+delete_value('user_'.$CURUSER["id"].'_unread_news_count'); +end_main_frame(); +stdfoot(); +?> diff --git a/invite.php b/invite.php new file mode 100644 index 00000000..c927eb94 --- /dev/null +++ b/invite.php @@ -0,0 +1,153 @@ +"); + +print("

".$user['username'].$lang_invite['text_invite_system']."

"); + $sent = htmlspecialchars($_GET['sent']); + if ($sent == 1){ + $msg = $lang_invite['text_invite_code_sent']; + print("

".$msg."

"); + } + +$res = sql_query("SELECT invites FROM users WHERE id = ".mysql_real_escape_string($id)) or sqlerr(); +$inv = mysql_fetch_assoc($res); + +//for one or more. "invite"/"invites" +if ($inv["invites"] != 1){ + $_s = $lang_invite['text_s']; +} else { + $_s = ""; +} + +if ($type == 'new'){ + if ($CURUSER[invites] <= 0) { + stdmsg($lang_invite['std_sorry'],$lang_invite['std_no_invites_left']. + "".$lang_invite['here_to_go_back'],false); + print(""); + stdfoot(); + die; + } + $invitation_body = $lang_invite['text_invitation_body'].$CURUSER[username]; + //$invitation_body_insite = str_replace("
","\n",$invitation_body); + print("". + "". + "". + "". + "". + "". + "
".$lang_invite['text_invite_someone']."$SITENAME ($inv[invites]".$lang_invite['text_invitation'].$_s.$lang_invite['text_left'] .")
".$lang_invite['text_email_address']."
".$lang_invite['text_email_address_note']."".($restrictemaildomain == 'yes' ? "
".$lang_invite['text_email_restriction_note'].allowedemails() : "")."
".$lang_invite['text_message']."
"); + +} else { + + $rel = sql_query("SELECT COUNT(*) FROM users WHERE invited_by = ".mysql_real_escape_string($id)) or sqlerr(__FILE__, __LINE__); + $arro = mysql_fetch_row($rel); + $number = $arro[0]; + + $ret = sql_query("SELECT id, username, email, uploaded, downloaded, status, warned, enabled, donor, email FROM users WHERE invited_by = ".mysql_real_escape_string($id)) or sqlerr(); + $num = mysql_num_rows($ret); + + print("". + "

".$lang_invite['text_invite_status']." ($number)

"); + + if(!$num){ + print(""); + } else { + + print(""); + if ($CURUSER[id] == $id || get_user_class() >= UC_SYSOP) + print(""); + + print(""); + for ($i = 0; $i < $num; ++$i) + { + $arr = mysql_fetch_assoc($ret); + $user = ""; + + if ($arr["downloaded"] > 0) { + $ratio = number_format($arr["uploaded"] / $arr["downloaded"], 3); + $ratio = "$ratio"; + } else { + if ($arr["uploaded"] > 0) { + $ratio = "Inf."; + } + else { + $ratio = "---"; + } + } + if ($arr["status"] == 'confirmed') + $status = "".$lang_invite['text_confirmed'].""; + else + $status = "".$lang_invite['text_pending'].""; + + print("$user"); + if ($CURUSER[id] == $id || get_user_class() >= UC_SYSOP){ + print(""); + } + + print(""); + } + } + + if ($CURUSER[id] == $id || get_user_class() >= UC_SYSOP) + { + + $pendingcount = number_format(get_row_count("users", "WHERE status='pending' AND invited_by=$CURUSER[id]")); + if ($pendingcount){ + print(""); + print(""); + } + print(""); + print(""); + } + print("
".$lang_invite['text_no_invites']."
".$lang_invite['text_username']."".$lang_invite['text_email']."".$lang_invite['text_uploaded']."".$lang_invite['text_downloaded']."".$lang_invite['text_ratio']."".$lang_invite['text_status']."".$lang_invite['text_confirm']."
" . get_username($arr[id]) . "
$arr[email]" . mksize($arr[uploaded]) . "" . mksize($arr[downloaded]) . "$ratio$status"); + if ($arr[status] == 'pending') + print(""); + print("
"); + + $rul = sql_query("SELECT COUNT(*) FROM invites WHERE inviter =".mysql_real_escape_string($id)) or sqlerr(); + $arre = mysql_fetch_row($rul); + $number1 = $arre[0]; + + + $rer = sql_query("SELECT invitee, hash, time_invited FROM invites WHERE inviter = ".mysql_real_escape_string($id)) or sqlerr(); + $num1 = mysql_num_rows($rer); + + + print("". + "

".$lang_invite['text_sent_invites_status']." ($number1)

"); + + if(!$num1){ + print(""); + } else { + + print(""); + for ($i = 0; $i < $num1; ++$i) + { + $arr1 = mysql_fetch_assoc($rer); + print(""); + } + } + print("
".$lang_invite['text_no_invitation_sent']."
".$lang_invite['text_email']."".$lang_invite['text_hash']."".$lang_invite['text_send_date']."
$arr1[invitee]$arr1[hash]$arr1[time_invited]
"); + print(""); + +} +stdfoot(); +die; +?> diff --git a/ipcheck.php b/ipcheck.php new file mode 100644 index 00000000..4e0b2cd0 --- /dev/null +++ b/ipcheck.php @@ -0,0 +1,83 @@ += UC_MODERATOR || $CURUSER["guard"] == "yes") +{ + $res = sql_query("SELECT count(*) AS dupl, ip FROM users WHERE enabled = 'yes' AND ip <> '' AND ip <> '127.0.0.0' GROUP BY ip ORDER BY dupl DESC, ip") or sqlerr(); + print("User + Email + Registered + Last access + Downloaded + Uploaded + Ratio + IP + Peer\n"); + $uc = 0; + while($ras = mysql_fetch_assoc($res)) + { + if ($ras["dupl"] <= 1) + break; + if ($ip <> $ras['ip']) + { + $ros = sql_query("SELECT id, username, email, added, last_access, downloaded, uploaded, ip, warned, donor, enabled FROM users WHERE ip='".$ras['ip']."' ORDER BY id") or sqlerr(); + $num2 = mysql_num_rows($ros); + if ($num2 > 1) + { + $uc++; + while($arr = mysql_fetch_assoc($ros)) + { + if ($arr['added'] == '0000-00-00 00:00:00') + $arr['added'] = '-'; + if ($arr['last_access'] == '0000-00-00 00:00:00') + $arr['last_access'] = '-'; + if($arr["downloaded"] != 0) + $ratio = number_format($arr["uploaded"] / $arr["downloaded"], 3); + else + $ratio="---"; + + $ratio = "$ratio"; + $uploaded = mksize($arr["uploaded"]); + $downloaded = mksize($arr["downloaded"]); + $added = substr($arr['added'],0,10); + $last_access = substr($arr['last_access'],0,10); + if($uc%2 == 0) + $utc = ""; + else + $utc = " bgcolor=\"ECE9D8\""; + + $peer_res = sql_query("SELECT count(*) FROM peers WHERE ip = " . sqlesc($ras['ip']) . " AND userid = " . $arr['id']); + $peer_row = mysql_fetch_row($peer_res); + print("" . get_username($arr["id"])." + $arr[email] + $added + $last_access + $downloaded + $uploaded + $ratio + $arr[ip]\n" . + ($peer_row[0] ? "ja" : "nein") . "\n"); + $ip = $arr["ip"]; + } + } + } + } +} +else +{ + print("
"); + print("

Sorry, only for Team

"); +} +end_frame(); +end_table(); + +stdfoot(); +?> diff --git a/iphistory.php b/iphistory.php new file mode 100644 index 00000000..8a2f593f --- /dev/null +++ b/iphistory.php @@ -0,0 +1,91 @@ +".$lang_iphistory['text_historical_ip_by'] . get_username($userid).""); + +if ($countrows > $perpage) +echo $pagertop; + +print("\n"); +print("\n +\n +\n +\n +\n"); +while ($arr = mysql_fetch_array($res)) +{ +$addr = ""; +$ipshow = ""; +if ($arr["ip"]) +{ +$ip = $arr["ip"]; +$dom = @gethostbyaddr($arr["ip"]); +if ($dom == $arr["ip"] || @gethostbyname($dom) != $arr["ip"]) +$addr = $lang_iphistory['text_not_available']; +else +$addr = $dom; + +$queryc = "SELECT COUNT(*) FROM +( +SELECT u.id FROM users AS u WHERE u.ip = " . sqlesc($ip) . " +UNION SELECT u.id FROM users AS u RIGHT JOIN iplog ON u.id = iplog.userid WHERE iplog.ip = " . sqlesc($ip) . " +GROUP BY u.id +) AS ipsearch"; +$resip = sql_query($queryc) or sqlerr(__FILE__, __LINE__); +$arrip = mysql_fetch_row($resip); +$ipcount = $arrip[0]; + +if ($ipcount > 1) +$ipshow = "" . $arr['ip'] ."(".$lang_iphistory['text_duplicate'].")"; +else +$ipshow = "" . $arr['ip'] .""; +} +$date = gettime($arr["access"]); +print("\n"); +print("\n"); +print("\n"); +} + +print("
".$lang_iphistory['col_last_access']."".$lang_iphistory['col_ip']."".$lang_iphistory['col_hostname']."
".$date."".$ipshow."".$addr."
"); + +echo $pagerbottom; + +end_main_frame(); +stdfoot(); +die; +?> diff --git a/ipsearch.php b/ipsearch.php new file mode 100644 index 00000000..a10987af --- /dev/null +++ b/ipsearch.php @@ -0,0 +1,170 @@ + 32) + { + stderr($lang_ipsearch['std_error'], $lang_ipsearch['std_invalid_subnet_mask']); + } + else + $mask = long2ip(pow(2,32) - pow(2,32-$n)); + } + elseif (!preg_match($regex, $mask)) + { + stderr($lang_ipsearch['std_error'], $lang_ipsearch['std_invalid_subnet_mask']); + } + $where1 = "INET_ATON(u.ip) & INET_ATON('$mask') = INET_ATON('$ip') & INET_ATON('$mask')"; + $where2 = "INET_ATON(iplog.ip) & INET_ATON('$mask') = INET_ATON('$ip') & INET_ATON('$mask')"; + $addr = "Mask: $mask"; + } + + stdhead($lang_ipsearch['head_search_ip_history']); + begin_main_frame(); + + print("

".$lang_ipsearch['text_search_ip_history']."

\n"); + print("
"); + print("\n"); + tr($lang_ipsearch['row_ip']."*", "", 1); + tr("".$lang_ipsearch['row_subnet_mask']."", "", 1); + print(""); + print("
\n"); + if ($ip) + { + $queryc = "SELECT COUNT(*) FROM +( +SELECT u.id FROM users AS u WHERE $where1 +UNION SELECT u.id FROM users AS u RIGHT JOIN iplog ON u.id = iplog.userid WHERE $where2 +GROUP BY u.id +) AS ipsearch"; + + $res = sql_query($queryc) or sqlerr(__FILE__, __LINE__); + $row = mysql_fetch_array($res); + $count = $row[0]; + + if ($count == 0) + { + print("

".$lang_ipsearch['text_no_users_found']."

\n"); + end_main_frame(); + stdfoot(); + die; + } + + $order = $_GET['order']; + $page = 0 + $_GET["page"]; + $perpage = 20; + + list($pagertop, $pagerbottom, $limit) = pager($perpage, $count, "$_SERVER[PHP_SELF]?ip=$ip&mask=$mask&order=$order&"); + + if ($order == "added") + $orderby = "added DESC"; + elseif ($order == "username") + $orderby = "UPPER(username) ASC"; + elseif ($order == "email") + $orderby = "email ASC"; + elseif ($order == "last_ip") + $orderby = "last_ip ASC"; + elseif ($order == "last_access") + $orderby = "last_ip ASC"; + else + $orderby = "access DESC"; + + $query = "SELECT * FROM ( +SELECT u.id, u.username, u.ip AS ip, u.ip AS last_ip, u.last_access, u.last_access AS access, u.email, u.invited_by, u.added, u.class, u.uploaded, u.downloaded, u.donor, u.enabled, u.warned +FROM users AS u +WHERE $where1 +UNION SELECT u.id, u.username, iplog.ip AS ip, u.ip as last_ip, u.last_access, max(iplog.access) AS access, u.email, u.invited_by, u.added, u.class, u.uploaded, u.downloaded, u.donor, u.enabled, u.warned +FROM users AS u +RIGHT JOIN iplog ON u.id = iplog.userid +WHERE $where2 +GROUP BY u.id ) as ipsearch +GROUP BY id +ORDER BY $orderby +$limit"; + + $res = sql_query($query) or sqlerr(__FILE__, __LINE__); + + print("

".$count.$lang_ipsearch['text_users_used_the_ip'].$ip."

"); + + print("\n"); + print("". +"". +"". +"". +"". +"". +""); + + while ($user = mysql_fetch_array($res)) + { + if ($user['added'] == '0000-00-00 00:00:00') + $added = $lang_ipsearch['text_not_available']; + else $added = gettime($user['added']); + if ($user['last_access'] == '0000-00-00 00:00:00') + $lastaccess = $lang_ipsearch['text_not_available']; + else $lastaccess = gettime($user['last_access']); + + if ($user['last_ip']) + $ipstr = $user['last_ip']; + else + $ipstr = $lang_ipsearch['text_not_available']; + + $resip = sql_query("SELECT ip FROM iplog WHERE userid=" . sqlesc($user['id']) . " GROUP BY iplog.ip") or sqlerr(__FILE__, __LINE__); +$iphistory = mysql_num_rows($resip); + + if ($user["invited_by"] > 0) + { + $invited_by = get_username($user['invited_by']); + } + else + $invited_by = $lang_ipsearch['text_not_available']; + + echo "". +" + + + + + +\n"; + } + echo "
".$lang_ipsearch['col_username']."".$lang_ipsearch['col_last_ip']."".$lang_ipsearch['col_last_access']."".$lang_ipsearch['col_ip_num']."".$lang_ipsearch['col_last_access_on']."".$lang_ipsearch['col_added']."".$lang_ipsearch['col_invited_by']."
" . +get_username($user['id'])."" . $ipstr . "" . $lastaccess . "" . $iphistory. "" . gettime($user['access']) . "" . gettime($user['added']) . "" . $invited_by . "
"; + + echo $pagerbottom; + } + end_main_frame(); + stdfoot(); +} +?> diff --git a/lang/.htaccess b/lang/.htaccess new file mode 100644 index 00000000..4aa5ec94 --- /dev/null +++ b/lang/.htaccess @@ -0,0 +1,3 @@ +Options -Indexes +Order allow,deny +Deny from all diff --git a/lang/_target/lang_cleanup.php b/lang/_target/lang_cleanup.php new file mode 100644 index 00000000..910485d7 --- /dev/null +++ b/lang/_target/lang_cleanup.php @@ -0,0 +1,107 @@ + array( + 'msg_low_ratio_warning_removed' => "Low Ratio Warning Removed", + 'msg_your_ratio_warning_removed' => "Your warning of low ratio have been removed and auto-promoted to [b]User[/b]. We highly recommend you to keep a your ratio up to not be warned again.\n", + 'msg_promoted_to' => "Promoted to ", + 'msg_now_you_are' => "Congratulations, you have been auto-promoted to [b]", + 'msg_see_faq' => "[/b]. :)\nPlease see the [b][url=faq.php#id22]FAQ[/url][/b] for what you can do now.\n", + 'msg_demoted_to' => "Demoted to ", + 'msg_demoted_from' => "You have been auto-demoted from [b]", + 'msg_to' => "[/b] to [b]", + 'msg_because_ratio_drop_below' => "[/b] because your share ratio has dropped below ", + 'msg_must_fix_ratio_within' => "You have been warned and auto-demoted from [b]User[/b] to [b]Peasant[/b] because of having low ratio. You need to fix it within ", + 'msg_days_or_get_banned' => " days or your account will be banned. If you have no idea of what is ratio or how it affects you, we suggest you read the [url=faq.php#idid17][b]FAQ[/b][/url].", + 'msg_vip_status_removed' => "VIP status removed by system.", + 'msg_vip_status_removed_body' => "Your VIP status has timed out and has been auto-removed by the system. Become a VIP again by exchanging some Karma Bonus Points. Cheers!", + 'msg_warning_removed' => "Warning removed by System", + 'msg_your_warning_removed' => "Your warning is removed by System. We hope you would behave from now on.", + 'msg_your_torrent_deleted' => "Your torrent was deleted", + 'msg_your_torrent' => "Your torrent ", + 'msg_was_deleted_because_dead' => " was deleted by system because it's been dead for a long time. However, you keep the karma bonus for uploading the torrent.", +), + 'chs' => array( + 'msg_low_ratio_warning_removed' => "低分享率警告取消", + 'msg_your_ratio_warning_removed' => "你因分享率过低而获得的警告被取消。你的等级已恢复为[b]User[/b]。请注意提高分享率,避免再次被警告。\n", + 'msg_promoted_to' => "升级为", + 'msg_now_you_are' => "祝贺你,你的等级已自动升级为[b]", + 'msg_see_faq' => "[/b]. :)\n请查看[b][url=faq.php#id22]常见问题[/url][/b]了解你现在拥有的特权。\n", + 'msg_demoted_to' => "降级为", + 'msg_demoted_from' => "很遗憾,你的等级从[b]", + 'msg_to' => "[/b]自动降为[b]", + 'msg_because_ratio_drop_below' => "[/b],因为你的分享率已低于", + 'msg_must_fix_ratio_within' => "郑重警告:你的等级已从[b]User[/b]自动降为[b]Peasant[/b],同时你被警告!因为你的分享率过低。如果你在", + 'msg_days_or_get_banned' => "天内仍未设法提高分享率,你的帐户将被禁用!如果你不明白什么是分享率及其要求,请参考[url=faq.php#id17]常见问题[/url]。", + 'msg_vip_status_removed' => "VIP待遇到期", + 'msg_vip_status_removed_body' => "你的VIP待遇因到期而被系统停止。你可以使用魔力值再次获得该待遇。好运!", + 'msg_warning_removed' => "警告被系统移除", + 'msg_your_warning_removed' => "你的警告被系统移除。我们希望你自此能好好表现。", + 'msg_your_torrent_deleted' => "你发布的种子被删除", + 'msg_your_torrent' => "很遗憾,你发布的种子", + 'msg_was_deleted_because_dead' => "因断种过久,已被系统自动删除。然而,你发布该种子时获得的魔力值没有被扣除。", +), + 'cht' => array( + 'msg_low_ratio_warning_removed' => "低分享率警告取消", + 'msg_your_ratio_warning_removed' => "你因分享率過低而獲得的警告被取消。你的等級已恢復為[b]User[/b]。請注意提高分享率,避免再次被警告。\n", + 'msg_promoted_to' => "升級為", + 'msg_now_you_are' => "祝賀你,你的等級已自動升級為[b]", + 'msg_see_faq' => "[/b]. :)\n請查看[b][url=faq.php#id22]常見問題[/url][/b]瞭解你現在擁有的特權。\n", + 'msg_demoted_to' => "降級為", + 'msg_demoted_from' => "很遺憾,你的等級從[b]", + 'msg_to' => "[/b]自動降為[b]", + 'msg_because_ratio_drop_below' => "[/b],因為你的分享率已低於", + 'msg_must_fix_ratio_within' => "鄭重警告:你的等級已從[b]User[/b]自動降為[b]Peasant[/b],同時你被警告!因為你的分享率過低。如果你在", + 'msg_days_or_get_banned' => "天內仍未設法提高分享率,你的帳戶將被禁用!如果你不明白什麼是分享率及其要求,請參考[url=faq.php#id17]常見問題[/url]。", + 'msg_vip_status_removed' => "VIP待遇到期", + 'msg_vip_status_removed_body' => "你的VIP待遇因到期而被系統停止。你可以使用魔力值再次獲得該待遇。好運!", + 'msg_warning_removed' => "警告被系統移除", + 'msg_your_warning_removed' => "你的警告被系統移除。我們希望你自此能好好表現。", + 'msg_your_torrent_deleted' => "你發布的種子被刪除", + 'msg_your_torrent' => "很遺憾,你發布的種子", + 'msg_was_deleted_because_dead' => "因斷種過久,已被系統自動刪除。然而,你發布該種子時獲得的魔力值沒有被扣除。", + +), + 'ko' => array( + 'msg_low_ratio_warning_removed' => "낮은 레이쇼로 인한 경고 제거", + 'msg_your_ratio_warning_removed' => "낮은 레이쇼로 인한 경고가 제거되으며 등급이 [b]User[/b]로 회복되었습니다. 레이쇼를 높혀 다시 경고를 받지 않기를 바랍니다. ", + 'msg_now_you_are' => "축하합니다. 등급이 자동 승급되었습니다. [b]", + 'msg_see_faq' => "[/b]. :)\nFAQ를 보시면 당신의 특권을 볼 수 있습니다. [b][url=faq.php#id22]FAQ[/url][/b] \n", + 'msg_demoted_to' => "강등되었습니다. ", + 'msg_demoted_from' => "유감입니다. 등급이 [b]", + 'msg_to' => "[/b] 강등되었습니다. [b]", + 'msg_because_ratio_drop_below' => "[/b] 레이쇼가 낮아서 ", + 'msg_must_fix_ratio_within' => "등급이 [b]User[/b] 에서 [b]Peasant[/b] 으로 자동 강등되었습니다. You need to fix it within ", + 'msg_days_or_get_banned' => " 만약 며칠 내로 레이쇼를 높이지 않으면 계정 사용이 금지됩니다. 만약 레이쇼에 관해 궁금한 점이 있으면 FAQ를 참고해 주세요. [url=faq.php#id17][b]FAQ[/b][/url].", + 'msg_vip_status_removed' => "VIP등급 기간이 만료되었습니다.", + 'msg_vip_status_removed_body' => "VIP등급 기간이 만료되었습니다. 카르마 점수를 이용해 다시 VIP등급이 될 수 있습니다. 행운을 빕니다.", + 'msg_warning_removed' => "경고가 제거되었습니다.", + 'msg_your_warning_removed' => "경고가 제거되었습니다. 왕성한 활동을 바랍니다.", + 'msg_your_torrent_deleted' => "Your torrent was deleted", + 'msg_your_torrent' => "Your torrent ", + 'msg_was_deleted_because_dead' => " was deleted by system because it's been dead for a long time. However, you keep the karma bonus for uploading the torrent.", +), + 'ja' => array( +'msg_low_ratio_warning_removed' => "Low Ratio Warning Removed", + 'msg_your_ratio_warning_removed' => "Your warning of low ratio have been removed and auto-promoted to [b]User[/b]. We highly recommend you to keep a your ratio up to not be warned again.\n", + 'msg_promoted_to' => "Promoted to ", + 'msg_now_you_are' => "Congratulations, you have been auto-promoted to [b]", + 'msg_see_faq' => "[/b]. :)\nPlease see the [b][url=faq.php#id22]FAQ[/url][/b] for what you can do now.\n", + 'msg_demoted_to' => "Demoted to ", + 'msg_demoted_from' => "You have been auto-demoted from [b]", + 'msg_to' => "[/b] to [b]", + 'msg_because_ratio_drop_below' => "[/b] because your share ratio has dropped below ", + 'msg_must_fix_ratio_within' => "You have been warned and auto-demoted from [b]User[/b] to [b]Peasant[/b] because of having low ratio. You need to fix it within ", + 'msg_days_or_get_banned' => " days or your account will be banned. If you have no idea of what is ratio or how it affects you, we suggest you read the [url=faq.php#id17][b]FAQ[/b][/url].", + 'msg_vip_status_removed' => "VIP status removed by system.", + 'msg_vip_status_removed_body' => "Your VIP status has timed out and has been auto-removed by the system. Become a VIP again by exchanging some Karma Bonus Points. Cheers!", + 'msg_warning_removed' => "Warning removed by System", + 'msg_your_warning_removed' => "Your warning is removed by System. We hope you would behave from now on.", + 'msg_your_torrent_deleted' => "Your torrent was deleted", + 'msg_your_torrent' => "Your torrent ", + 'msg_was_deleted_because_dead' => " was deleted by system because it's been dead for a long time. However, you keep the karma bonus for uploading the torrent.", +) +); + +?> diff --git a/lang/_target/lang_comment.php b/lang/_target/lang_comment.php new file mode 100644 index 00000000..a9b967da --- /dev/null +++ b/lang/_target/lang_comment.php @@ -0,0 +1,37 @@ + array( + 'msg_new_comment' => "New comment", + 'msg_torrent_receive_comment' => "You have received a comment on your torrent ", + 'msg_offer_receive_comment' => "You have received a comment on your offer ", + 'msg_request_receive_comment' => "You have received a comment on your request " + ), + 'chs' => array( + 'msg_new_comment' => "新评论", + 'msg_torrent_receive_comment' => "你发布的种子收到了新评论 ", + 'msg_offer_receive_comment' => "你发布的候选收到了新评论 ", + 'msg_request_receive_comment' => "你发布的求种收到了新评论 " + ), + 'cht' => array( + 'msg_new_comment' => "新評論", + 'msg_torrent_receive_comment' => "你發布的種子收到了新評論 ", + 'msg_offer_receive_comment' => "你發布的候選收到了新評論 ", + 'msg_request_receive_comment' => "你發布的求種收到了新評論 " + ), + 'ko' => array( + 'msg_new_comment' => "새 댓글", + 'msg_torrent_receive_comment' => "당신이 올린 토런트에 새 댓글이 달렸습니다. ", + 'msg_offer_receive_comment' => "당신이 제안한 토런트에 새 댓글이 달렸습니다. ", + 'msg_request_receive_comment' => "당신이 요청한 토런트에 새 댓글이 달렸습니다. " + ), + 'ja' => array( + 'msg_new_comment' => "New comment", + 'msg_torrent_receive_comment' => "You have received a comment on your torrent ", + 'msg_offer_receive_comment' => "You have received a comment on your offer ", + 'msg_request_receive_comment' => "You have received a comment on your request " + ), +); + +?> diff --git a/lang/_target/lang_delete.php b/lang/_target/lang_delete.php new file mode 100644 index 00000000..dcf0e545 --- /dev/null +++ b/lang/_target/lang_delete.php @@ -0,0 +1,42 @@ + array + ( + 'msg_torrent_deleted' => "Your torrent was deleted", + 'msg_the_torrent_you_uploaded' => "The torrent you uploaded '", + 'msg_was_deleted_by' => "' was delete by ", + 'msg_reason_is' => ". The reason: ", + ), + 'chs' => array + ( + 'msg_torrent_deleted' => "种子被删除", + 'msg_the_torrent_you_uploaded' => "你上传的种子'", + 'msg_was_deleted_by' => "'被管理员", + 'msg_reason_is' => "删除。原因:", + ), + 'cht' => array + ( + 'msg_torrent_deleted' => "種子被刪除", + 'msg_the_torrent_you_uploaded' => "你上傳的種子'", + 'msg_was_deleted_by' => "'被管理員", + 'msg_reason_is' => "刪除。原因:", + ), + 'ko' => array + ( + 'msg_torrent_deleted' => "토런트가 삭제되었습니다", + 'msg_the_torrent_you_uploaded' => "업로드한 토런트가 '", + 'msg_was_deleted_by' => "' 관리자에 의해 삭제가 되었습니다 ", + 'msg_reason_is' => ". 삭제 이유: ", + ), + 'ja' => array + ( + 'msg_torrent_deleted' => "Your torrent was deleted", + 'msg_the_torrent_you_uploaded' => "The torrent you uploaded '", + 'msg_was_deleted_by' => "' was delete by ", + 'msg_reason_is' => ". The reason: ", + ), +); + +?> diff --git a/lang/_target/lang_fastdelete.php b/lang/_target/lang_fastdelete.php new file mode 100644 index 00000000..6ceef62f --- /dev/null +++ b/lang/_target/lang_fastdelete.php @@ -0,0 +1,42 @@ + array + ( + 'msg_torrent_deleted' => "Your torrent was deleted", + 'msg_the_torrent_you_uploaded' => "The torrent you uploaded '", + 'msg_was_deleted_by' => "' was delete by ", + 'msg_blank' => ".", + ), + 'chs' => array + ( + 'msg_torrent_deleted' => "种子被删除", + 'msg_the_torrent_you_uploaded' => "你上传的种子'", + 'msg_was_deleted_by' => "'被管理员", + 'msg_blank' => "删除。", + ), + 'cht' => array + ( + 'msg_torrent_deleted' => "種子被刪除", + 'msg_the_torrent_you_uploaded' => "你上傳的種子'", + 'msg_was_deleted_by' => "'被管理員", + 'msg_blank' => "刪除。", + ), + 'ko' => array + ( + 'msg_torrent_deleted' => "토런트가 삭제되었습니다.", + 'msg_the_torrent_you_uploaded' => "업로드한 토런트가 '", + 'msg_was_deleted_by' => "' 관리자에 의해 ", + 'msg_blank' => "삭제되었습니다.", + ), + 'ja' => array + ( + 'msg_torrent_deleted' => "Your torrent was deleted", + 'msg_the_torrent_you_uploaded' => "The torrent you uploaded '", + 'msg_was_deleted_by' => "' was delete by ", + 'msg_blank' => ".", + ), +); + +?> diff --git a/lang/_target/lang_fun.php b/lang/_target/lang_fun.php new file mode 100644 index 00000000..dea21d86 --- /dev/null +++ b/lang/_target/lang_fun.php @@ -0,0 +1,77 @@ + array + ( + 'msg_fun_item_banned' => "Fun item banned", + 'msg_your_fun_item' => "Your fun item '", + 'msg_is_ban_by' => "' is banned by ", + 'msg_reason' => ". Reason: ", + 'msg_fun_item_reward' => "Fun item reward", + 'msg_out_of' => " out of ", + 'msg_people_think' => " think the fun item you posted ", + 'msg_is_fun' => " is fun. So, here is ", + 'msg_bonus_as_reward' => " karma points as reward.", + 'msg_fun_item_dull' => "Fun item dull", + 'msg_is_dull' => " is actually dull :thumbsdown: . So it's been removed from home page. Maybe you need to improve your sense of humor.", + ), + 'chs' => array + ( + 'msg_fun_item_banned' => "趣味内容被禁止", + 'msg_your_fun_item' => "你发布的趣味内容'", + 'msg_is_ban_by' => "'被管理员", + 'msg_reason' => "禁止。原因:", + 'msg_fun_item_reward' => "趣味内容被奖励", + 'msg_out_of' => "个用户(共", + 'msg_people_think' => "票)认为你发布的趣味内容'", + 'msg_is_fun' => "'很有趣。所以,这", + 'msg_bonus_as_reward' => "个魔力值是你的奖励。", + 'msg_fun_item_dull' => "趣味内容不有趣", + 'msg_is_dull' => "'不有趣 :thumbsdown: 。所以它已被从首页移除。也许你需要提高一点幽默感。", + ), + 'cht' => array + ( + 'msg_fun_item_banned' => "趣味內容娛被禁止", + 'msg_your_fun_item' => "你發布的趣味內容'", + 'msg_is_ban_by' => "'被管理員", + 'msg_reason' => "禁止。原因:", + 'msg_fun_item_reward' => "趣味內容被獎勵", + 'msg_out_of' => "個用戶(共", + 'msg_people_think' => "票)認為你發布的趣味內容'", + 'msg_is_fun' => "'很有趣。所以,這", + 'msg_bonus_as_reward' => "個魔力值是你的獎勵。", + 'msg_fun_item_dull' => "趣味內容不有趣", + 'msg_is_dull' => "'不有趣 :thumbsdown: 。所以它已被從首頁移除。也許你需要提高一點幽默感。", + ), + 'ko' => array + ( + 'msg_fun_item_banned' => "유머가 삭제되었습니다.", + 'msg_your_fun_item' => "당신이 쓴 유머가 '", + 'msg_is_ban_by' => "' 관리자에 의해 ", + 'msg_reason' => "삭제되었습니다. 이유: ", + 'msg_fun_item_reward' => "당신이 쓴 유머가 추천을 받았습니다.", + 'msg_out_of' => " 이용자가 ", + 'msg_people_think' => " 당신이 쓴 유머가 ", + 'msg_is_fun' => " 재미있다고 생각해서 추천을 했습니다. ", + 'msg_bonus_as_reward' => " 카르마 점수를 받았습니다.", + 'msg_fun_item_dull' => "유머가 웃기지 않습니다.", + 'msg_is_dull' => " 웃기지 않습니다. :thumbsdown: . 삭제되었습니다. 유머감각을 기르시기 바랍니다.", + ), + 'ja' => array + ( + 'msg_fun_item_banned' => "Fun item banned", + 'msg_your_fun_item' => "Your fun item '", + 'msg_is_ban_by' => "' is banned by ", + 'msg_reason' => ". Reason: ", + 'msg_fun_item_reward' => "Fun item reward", + 'msg_out_of' => " out of ", + 'msg_people_think' => " think the fun item you posted ", + 'msg_is_fun' => " is fun. So, here is ", + 'msg_bonus_as_reward' => " karma points as reward.", + 'msg_fun_item_dull' => "Fun item dull", + 'msg_is_dull' => " is actually dull :thumbsdown: . So it's been removed from home page. Maybe you need to improve your sense of humor.", + ), +); + +?> diff --git a/lang/_target/lang_modtask.php b/lang/_target/lang_modtask.php new file mode 100644 index 00000000..8d9c491c --- /dev/null +++ b/lang/_target/lang_modtask.php @@ -0,0 +1,257 @@ + array( + 'msg_promoted' => "promoted", + 'msg_demoted' => "demoted", + 'msg_class_change' => "Class Change", + 'msg_you_have_been' => "You have been ", + 'msg_to' => " to ", + 'msg_by' => " by ", + 'msg_warn_removed' => "Warning Removed", + 'msg_your_warning_removed_by' => "Your warning have been removed by", + 'msg_you_are_warned_by' => "You have been [url=rules.php#warning]warned[/url] by ", + 'msg_reason' => "\n\nReason: ", + 'msg_week' => " week", + 'msg_s' => "s", + 'msg_you_are_warned_for' => "You have been [url=rules.php#warning]warned[/url] for ", + 'msg_by' => " by ", + 'msg_you_are_warned' => "You Are Warned", + 'msg_posting_rights_restored' => "Posting Rights Restored", + 'msg_your_posting_rights_restored' => "Your Posting rights have been given back by " , + 'msg_you_can_post' => ". You can post to forum again.", + 'msg_posting_rights_removed' => "Posting Rights Removed", + 'msg_your_posting_rights_removed' => "Your Posting rights have been removed by ", + 'msg_probable_reason' => ", probably because of bad attitude or bad post content.", + 'msg_upload_rights_restored' => "Upload Rights Restored", + 'msg_your_upload_rights_restored' => "Your upload rights have been given back by ", + 'msg_you_upload_can_upload' => ". You can upload torrents again.", + 'msg_upload_rights_removed' => "Upload Rights Removed", + 'msg_your_upload_rights_removed' => "Your upload rights have been removed by ", + 'msg_probably_reason_two' => ", probably because of bad torrent, .nfo or description.", + 'msg_download_rights_restored' => "Download Rights Restored", + 'msg_your_download_rights_restored' => "Your download rights have been given back by ", + 'msg_you_can_download' => ". You can download torrents again.", + 'msg_download_rights_removed' => "Download Rights Removed", + 'msg_your_download_rights_removed' => "Your download rights have been removed by ", + 'msg_probably_reason_three' => ", probably because of low ratio or bad behaviour.", + 'msg_email_change' => "Email change", + 'msg_your_email_changed_from' => "Your Email address has been changed from ", + 'msg_username_change' => "Username change", + 'msg_your_username_changed_from' => "Your username has been changed from ", + 'msg_downloaded_change' => "Downloaded amount change", + 'msg_your_downloaded_changed_from' => "Your downloaded amount has been changed from ", + 'msg_uploaded_change' => "Uploaded amount change", + 'msg_your_uploaded_changed_from' => "Your uploaded amount has been changed from ", + 'msg_bonus_change' => "Bonus amount change", + 'msg_your_bonus_changed_from' => "Your bonus amount has been changed from ", + 'msg_invite_change' => "Invite amount change", + 'msg_your_invite_changed_from' => "Your invite amount has been changed from ", + 'msg_to_new' =>" to ", + 'msg_your_vip_status_changed' => "Your VIP status changed", + 'msg_vip_status_changed_by' => "Your VIP status changed by ", +), + 'chs' => array( + 'msg_promoted' => "提升", + 'msg_demoted' => "降级", + 'msg_class_change' => "等级变化", + 'msg_you_have_been' => "你被", + 'msg_to' => "为", + 'msg_by' => "。管理员:", + 'msg_warn_removed' => "警告解除", + 'msg_your_warning_removed_by' => "你的警告被解除。管理员:", + 'msg_you_are_warned_by' => "你被管理员", + 'msg_reason' => "[url=rules.php#warning]警告[/url]\n\n原因:", + 'msg_week' => "周", + 'msg_s' => "", + 'msg_you_are_warned_for' => "你被[url=rules.php#warning]警告[/url]", + 'msg_by' => "。管理员:", + 'msg_you_are_warned' => "你被警告", + 'msg_posting_rights_restored' => "发帖权限恢复", + 'msg_your_posting_rights_restored' => "管理员" , + 'msg_you_can_post' => "恢复了你的发帖权。你现在可以在论坛发帖。", + 'msg_posting_rights_removed' => "发帖权限取消", + 'msg_your_posting_rights_removed' => "管理员", + 'msg_probable_reason' => "取消了你的发帖权限, 可能的原因是态度恶劣或帖子内容违规", + 'msg_upload_rights_restored' => "上传权限恢复", + 'msg_your_upload_rights_restored' => "管理员", + 'msg_you_upload_can_upload' => "恢复了你的上传权限。你现在可以上传种子。", + 'msg_upload_rights_removed' => "上传权限取消", + 'msg_your_upload_rights_removed' => "管理员", + 'msg_probably_reason_two' => "取消了你的上传权限,可能的原因是种子违规,nfo文件或简介内容不当。", + 'msg_download_rights_restored' => "下载权限恢复", + 'msg_your_download_rights_restored' => "管理员", + 'msg_you_can_download' => "恢复了你的上传权限,你现在可以下载种子。", + 'msg_download_rights_removed' => "下载权限取消", + 'msg_your_download_rights_removed' => "管理员", + 'msg_probably_reason_three' => "取消了你的下载权限,可能的原因是过低的分享率或行为不当。", + 'msg_email_change' => "邮箱地址改变", + 'msg_your_email_changed_from' => "你的邮箱地址被管理员从", + 'msg_username_change' => "用户名变化", + 'msg_your_username_changed_from' => "你的用户名被管理员从", + 'msg_downloaded_change' => "下载量变化", + 'msg_your_downloaded_changed_from' => "你的下载量被管理员从", + 'msg_uploaded_change' => "上传量变化", + 'msg_your_uploaded_changed_from' => "你的上传量被管理员从", + 'msg_bonus_change' => "魔力值变化", + 'msg_your_bonus_changed_from' => "你的魔力值被管理员从", + 'msg_invite_change' => "邀请名额变化", + 'msg_your_invite_changed_from' => "你的邀请名额被管理员从", + 'msg_to_new' =>"改为", + 'msg_your_vip_status_changed' => "你的贵宾资格状态被改变", + 'msg_vip_status_changed_by' => "你的贵宾资格状态被改变。管理员:", +), + 'cht' => array( + 'msg_promoted' => "提升", + 'msg_demoted' => "降級", + 'msg_class_change' => "等級變化", + 'msg_you_have_been' => "你被", + 'msg_to' => "為", + 'msg_by' => "。管理員:", + 'msg_warn_removed' => "警告解除", + 'msg_your_warning_removed_by' => "你的警告被解除。管理員:", + 'msg_you_are_warned_by' => "你被管理員", + 'msg_reason' => "[url=rules.php#warning]警告[/url]\n\n原因:", + 'msg_week' => "周", + 'msg_s' => "", + 'msg_you_are_warned_for' => "你被[url=rules.php#warning]警告[/url]", + 'msg_by' => "。管理員:", + 'msg_you_are_warned' => "你被警告", + 'msg_posting_rights_restored' => "發帖許可權恢復", + 'msg_your_posting_rights_restored' => "管理員" , + 'msg_you_can_post' => "恢復了你的發帖權。你現在可以在論壇發帖。", + 'msg_posting_rights_removed' => "發帖許可權取消", + 'msg_your_posting_rights_removed' => "管理員", + 'msg_probable_reason' => "取消了你的發帖許可權, 可能的原因是態度惡劣或帖子內容違規", + 'msg_upload_rights_restored' => "上傳許可權恢復", + 'msg_your_upload_rights_restored' => "管理員", + 'msg_you_upload_can_upload' => "恢復了你的上傳許可權。你現在可以上傳種子。", + 'msg_upload_rights_removed' => "上傳許可權取消", + 'msg_your_upload_rights_removed' => "管理員", + 'msg_probably_reason_two' => "取消了你的上傳許可權,可能的原因是種子違規,nfo檔或簡介內容不當。", + 'msg_download_rights_restored' => "下載許可權恢復", + 'msg_your_download_rights_restored' => "管理員", + 'msg_you_can_download' => "恢復了你的上傳許可權,你現在可以下載種子。", + 'msg_download_rights_removed' => "下載許可權取消", + 'msg_your_download_rights_removed' => "管理員", + 'msg_probably_reason_three' => "取消了你的下載許可權,可能的原因是過低的分享率或行為不當。", + 'msg_email_change' => "郵箱地址改變", + 'msg_your_email_changed_from' => "你的郵箱地址被管理員從", + 'msg_username_change' => "用戶名變化", + 'msg_your_username_changed_from' => "你的用戶名被管理員從", + 'msg_downloaded_change' => "下載量變化", + 'msg_your_downloaded_changed_from' => "你的下載量被管理員從", + 'msg_uploaded_change' => "上傳量變化", + 'msg_your_uploaded_changed_from' => "你的上傳量被管理員從", + 'msg_bonus_change' => "魔力值變化", + 'msg_your_bonus_changed_from' => "你的魔力值被管理員從", + 'msg_invite_change' => "邀請名額變化", + 'msg_your_invite_changed_from' => "你的邀請名額被管理員從", + 'msg_to_new' =>"改為", + 'msg_your_vip_status_changed' => "你的貴賓資格狀態被改變", + 'msg_vip_status_changed_by' => "你的貴賓資格狀態被改變。管理員:", +), + 'ko' => array( + 'msg_promoted' => "승급", + 'msg_demoted' => "강등", + 'msg_class_change' => "등급 변동", + 'msg_you_have_been' => " ", + 'msg_to' => " ", + 'msg_by' => " 관리자에 의해 ", + 'msg_warn_removed' => "경고가 제거되었습니다", + 'msg_your_warning_removed_by' => "경고가 제거되었습니다", + 'msg_you_are_warned_by' => "경고가 제거되었습니다 [url=rules.php#warning][/url] ", + 'msg_reason' => "\n\n이유: ", + 'msg_week' => " 주", + 'msg_s' => "", + 'msg_you_are_warned_for' => "경고가 제거되었습니다 [url=rules.php#warning][/url] ", + 'msg_by' => " 관리자에 의해 ", + 'msg_you_are_warned' => "경고를 당했습니다", + 'msg_posting_rights_restored' => "글쓰기 권한 회복", + 'msg_your_posting_rights_restored' => "글쓰기 권한이 회복되었습니다. " , + 'msg_you_can_post' => "다시 포럼에서 글을 쓸 수 있습니다.", + 'msg_posting_rights_removed' => "글쓰기 권한이 취소되었습니다.", + 'msg_your_posting_rights_removed' => "글쓰기 권한이 취소되었습니다 ", + 'msg_probable_reason' => ", 아마도 태도 불량이거나 내용 위반이라고 생각됩니다.", + 'msg_upload_rights_restored' => "업로드 권한이 회복되었습니다", + 'msg_your_upload_rights_restored' => "업로드 권한이 회복되었습니다 ", + 'msg_you_upload_can_upload' => ". 다시 업로드를 할 수 있습니다.", + 'msg_upload_rights_removed' => "업로드 권한이 취소되었습니다", + 'msg_your_upload_rights_removed' => "업로드 권한이 취소되었습니다. ", + 'msg_probably_reason_two' => ", 아마도 토런트 규칙위반 혹은 nfo 파일 내용 부적합일걸로 생각됩니다.", + 'msg_download_rights_restored' => "다운로드 권한이 회복되었습니다", + 'msg_your_download_rights_restored' => "다운로드 권한이 회복되었습니다 ", + 'msg_you_can_download' => ". 다시 다운로드를 할 수 있습니다.", + 'msg_download_rights_removed' => "다운로드 권한이 취소되었습니다", + 'msg_your_download_rights_removed' => "다운로드 권한이 취소되었습니다 ", + 'msg_probably_reason_three' => ", 아마도 레이쇼 낮거나 태도 불량일걸로 생각됩니다.", + 'msg_email_change' => "이 메일 주소 변경", + 'msg_your_email_changed_from' => "이 메일 주소가 관리자에 의해 변경되었습니다 ", + 'msg_username_change' => "Username 변경", + 'msg_your_username_changed_from' => "username이 관리자에 의해 변경되었습니다 ", + 'msg_downloaded_change' => "다운로드양 변동", + 'msg_your_downloaded_changed_from' => "다운로드양이 관리자에 의해 변동되었습니다 ", + 'msg_uploaded_change' => "업로드양 변동", + 'msg_your_uploaded_changed_from' => "업로드양이 관리자에 의해 변동되었습니다 ", + 'msg_bonus_change' => "카르마 점수 변동", + 'msg_your_bonus_changed_from' => "카르마 점수가 관리자에 의해 변동되었습니다 ", + 'msg_invite_change' => "초대장 수 변동", + 'msg_your_invite_changed_from' => "초대장 수가 관리자에 의해 변동되었습니다 ", + 'msg_to_new' =>" ", + 'msg_your_vip_status_changed' => "Your VIP status changed", + 'msg_vip_status_changed_by' => "Your VIP status changed by ", +), + 'ja' => array( + 'msg_promoted' => "promoted", + 'msg_demoted' => "demoted", + 'msg_class_change' => "Class Change", + 'msg_you_have_been' => "You have been ", + 'msg_to' => " to ", + 'msg_by' => " by ", + 'msg_warn_removed' => "Warning Removed", + 'msg_your_warning_removed_by' => "Your warning have been removed by", + 'msg_you_are_warned_by' => "You have been [url=rules.php#warning]warned[/url] by ", + 'msg_reason' => "\n\nReason: ", + 'msg_week' => " week", + 'msg_s' => "s", + 'msg_you_are_warned_for' => "You have been [url=rules.php#warning]warned[/url] for ", + 'msg_by' => " by ", + 'msg_you_are_warned' => "You Are Warned", + 'msg_posting_rights_restored' => "Posting Rights Restored", + 'msg_your_posting_rights_restored' => "Your Posting rights have been given back by " , + 'msg_you_can_post' => ". You can post to forum again.", + 'msg_posting_rights_removed' => "Posting Rights Removed", + 'msg_your_posting_rights_removed' => "Your Posting rights have been removed by ", + 'msg_probable_reason' => ", probably because of bad attitude or bad post content.", + 'msg_upload_rights_restored' => "Upload Rights Restored", + 'msg_your_upload_rights_restored' => "Your upload rights have been given back by ", + 'msg_you_upload_can_upload' => ". You can upload torrents again.", + 'msg_upload_rights_removed' => "Upload Rights Removed", + 'msg_your_upload_rights_removed' => "Your upload rights have been removed by ", + 'msg_probably_reason_two' => ", probably because of bad torrent, .nfo or description.", + 'msg_download_rights_restored' => "Download Rights Restored", + 'msg_your_download_rights_restored' => "Your download rights have been given back by ", + 'msg_you_can_download' => ". You can download torrents again.", + 'msg_download_rights_removed' => "Download Rights Removed", + 'msg_your_download_rights_removed' => "Your download rights have been removed by ", + 'msg_probably_reason_three' => ", probably because of low ratio or bad behaviour.", + 'msg_email_change' => "Email change", + 'msg_your_email_changed_from' => "Your Email address has been changed from ", + 'msg_username_change' => "Username change", + 'msg_your_username_changed_from' => "Your username has been changed from ", + 'msg_downloaded_change' => "Downloaded amount change", + 'msg_your_downloaded_changed_from' => "Your downloaded amount has been changed from ", + 'msg_uploaded_change' => "Uploaded amount change", + 'msg_your_uploaded_changed_from' => "Your uploaded amount has been changed from ", + 'msg_bonus_change' => "Bonus amount change", + 'msg_your_bonus_changed_from' => "Your bonus amount has been changed from ", + 'msg_invite_change' => "Invite amount change", + 'msg_your_invite_changed_from' => "Your invite amount has been changed from ", + 'msg_to_new' =>" to ", + 'msg_your_vip_status_changed' => "Your VIP status changed", + 'msg_vip_status_changed_by' => "Your VIP status changed by ", +), +); + +?> diff --git a/lang/_target/lang_mybonus.php b/lang/_target/lang_mybonus.php new file mode 100644 index 00000000..43167ded --- /dev/null +++ b/lang/_target/lang_mybonus.php @@ -0,0 +1,52 @@ + array + ( + 'msg_someone_loves_you' => "Someone Loves you", + 'msg_you_have_been_given' => "You have been given a gift of ", + 'msg_after_tax' => " (after tax it's ", + 'msg_karma_points_by' => ") Karma points by ", + 'msg_personal_message_from' => "Personal message from ", + 'msg_colon' => ": ", + ), + 'chs' => array + ( + 'msg_someone_loves_you' => "收到礼物", + 'msg_you_have_been_given' => "你收到", + 'msg_after_tax' => "(扣取手续费后为", + 'msg_karma_points_by' => ")个魔力值的礼物。祝福来自", + 'msg_personal_message_from' => "", + 'msg_colon' => "说:", + ), + 'cht' => array + ( + 'msg_someone_loves_you' => "收到禮物", + 'msg_you_have_been_given' => "你收到", + 'msg_after_tax' => "(扣取手續費為", + 'msg_karma_points_by' => ")個魔力值的禮物。祝福來自", + 'msg_personal_message_from' => "Personal message from ", + 'msg_colon' => "說:", + ), + 'ko' => array + ( + 'msg_someone_loves_you' => "Someone Loves you", + 'msg_you_have_been_given' => "You have been given a gift of ", + 'msg_after_tax' => " (after tax it's ", + 'msg_karma_points_by' => ") Karma points by ", + 'msg_personal_message_from' => "Personal message from ", + 'msg_colon' => ": ", + ), + 'ja' => array + ( + 'msg_someone_loves_you' => "Someone Loves you", + 'msg_you_have_been_given' => "You have been given a gift of ", + 'msg_after_tax' => " (after tax it's ", + 'msg_karma_points_by' => ") Karma points by ", + 'msg_personal_message_from' => "Personal message from ", + 'msg_colon' => ": ", + ), +); + +?> diff --git a/lang/_target/lang_offers.php b/lang/_target/lang_offers.php new file mode 100644 index 00000000..5d873f11 --- /dev/null +++ b/lang/_target/lang_offers.php @@ -0,0 +1,97 @@ + array + ( + 'msg_has_allowed' => " has allowed you to upload ", + 'msg_find_offer_option' => "You will find a new option on the upload page.", + 'msg_your_offer_allowed' => "Your Offer has been allowed", + 'msg_offer_voted_on' => "Your Offer has been voted on. you are allowed to upload ", + 'msg_offer_voted_off' => "Your Offer has been voted off. You are not allowed to upload ", + 'msg_offer_deleted' => "Your offer will be deleted.", + 'msg_your_offer' => "Your offer ", + 'msg_voted_on' => " has been voted on", + 'msg_offer_deleted' => "Your offer was deleted", + 'msg_your_offer' => "Your offer '", + 'msg_was_deleted_by' => "' was deleted by ", + 'msg_blank' => ".", + 'msg_you_must_upload_in' => "Please upload the offer within ", + 'msg_hours_otherwise' => " hours. Otherwise the offer would be deleted.", + 'msg_reason_is' => "The reason: ", + ), + 'chs' => array + ( + 'msg_has_allowed' => "允许你上传 ", + 'msg_find_offer_option' => "你会在上传区找到新的选项。", + 'msg_your_offer_allowed' => "你的候选被允许", + 'msg_offer_voted_on' => "你的候选被投票允许。你可以上传 ", + 'msg_offer_voted_off' => "你的候选被投票拒绝。你不可以上传 ", + 'msg_offer_deleted' => "你的候选被删除", + 'msg_your_offer' => "你的候选", + 'msg_voted_on' => "被投票允许", + 'msg_offer_deleted' => "候选被删除", + 'msg_your_offer' => "你的候选'", + 'msg_was_deleted_by' => "'被管理员", + 'msg_blank' => "删除。", + 'msg_you_must_upload_in' => "请在", + 'msg_hours_otherwise' => "小时内上传通过候选的内容。否则该候选将被删除。", + 'msg_reason_is' => "原因:", + ), + 'cht' => array + ( + 'msg_has_allowed' => "允許你上傳 ", + 'msg_find_offer_option' => "你會在上傳區找到新的選項。", + 'msg_your_offer_allowed' => "你的候選被允許", + 'msg_offer_voted_on' => "你的候選被投票允許。你可以上傳 ", + 'msg_offer_voted_off' => "你的候選被投票拒絕。你不可以上傳 ", + 'msg_offer_deleted' => "你的候選被刪除", + 'msg_your_offer' => "你的候選", + 'msg_voted_on' => "被投票允許", + 'msg_offer_deleted' => "候選被刪除", + 'msg_your_offer' => "你的候選'", + 'msg_was_deleted_by' => "'被管理員", + 'msg_blank' => "刪除。", + 'msg_you_must_upload_in' => "請在", + 'msg_hours_otherwise' => "小時內上傳通過候選的內容。否則該候選將被刪除。", + 'msg_reason_is' => "原因:", + ), + 'ko' => array + ( + 'msg_has_allowed' => " 업로드를 승인받았습니다. ", + 'msg_find_offer_option' => "업로드 페이지에서 새로운 옵션을 발견했습니다.", + 'msg_your_offer_allowed' => "당신의 제안이 승인되었습니다.", + 'msg_offer_voted_on' => "당신의 제안이 찬성표를 받았습니다. 업로드가 가능합니다. ", + 'msg_offer_voted_off' => "당신의 제안이 반대표를 받았습니다. 업로드가 불가능합니다. ", + 'msg_offer_deleted' => "당신의 제안이 삭제되었습니다.", + 'msg_your_offer' => "당신의 제안이 ", + 'msg_voted_on' => " 찬성표를 받았습니다.", + 'msg_offer_deleted' => "당신의 제안이 삭제되었습니다.", + 'msg_your_offer' => "당신의 제안이 '", + 'msg_was_deleted_by' => "' 관리자에 의해 ", + 'msg_blank' => "삭제되었습니다.", + 'msg_you_must_upload_in' => "몇 시간 내로 업로드 해 주시기 바랍니다.", + 'msg_hours_otherwise' => " 그렇지 않으면, 제안은 삭제됩니다.", + 'msg_reason_is' => "삭제 이유: ", + ), + 'ja' => array + ( + 'msg_has_allowed' => " has allowed you to upload ", + 'msg_find_offer_option' => "You will find a new option on the upload page.", + 'msg_your_offer_allowed' => "Your Offer has been allowed", + 'msg_offer_voted_on' => "Your Offer has been voted on. you are allowed to upload ", + 'msg_offer_voted_off' => "Your Offer has been voted off. You are not allowed to upload ", + 'msg_offer_deleted' => "Your offer will be deleted.", + 'msg_your_offer' => "Your offer ", + 'msg_voted_on' => " has been voted on", + 'msg_offer_deleted' => "Your offer was deleted", + 'msg_your_offer' => "Your offer '", + 'msg_was_deleted_by' => "' was deleted by ", + 'msg_blank' => ".", + 'msg_you_must_upload_in' => "Please upload the offer within ", + 'msg_hours_otherwise' => " hours. Otherwise the offer would be deleted.", + 'msg_reason_is' => "The reason: ", + ), +); + +?> diff --git a/lang/_target/lang_subtitles.php b/lang/_target/lang_subtitles.php new file mode 100644 index 00000000..762d003f --- /dev/null +++ b/lang/_target/lang_subtitles.php @@ -0,0 +1,37 @@ + array + ( + 'msg_deleted_your_sub' => " deleted the subtitle that you uploaded. ", + 'msg_your_sub_deleted' => "Your subtitle was deleted", + 'msg_reason_is' => "The reason: ", + ), + 'chs' => array + ( + 'msg_deleted_your_sub' => "删除了你上传的字幕。", + 'msg_your_sub_deleted' => "字幕被删除", + 'msg_reason_is' => "原因:", + ), + 'cht' => array + ( + 'msg_deleted_your_sub' => "刪除了你上傳的字幕。", + 'msg_your_sub_deleted' => "字幕被刪除", + 'msg_reason_is' => "原因:", + ), + 'ko' => array + ( + 'msg_deleted_your_sub' => " 업로드한 자막이 삭제되었습니다. ", + 'msg_your_sub_deleted' => "자막이 삭제되었습니다.", + 'msg_reason_is' => "삭제 이유: ", + ), + 'ja' => array + ( + 'msg_deleted_your_sub' => " deleted the subtitle that you uploaded. ", + 'msg_your_sub_deleted' => "Your subtitle was deleted", + 'msg_reason_is' => "The reason: ", + ), +); + +?> diff --git a/lang/_target/lang_takemessage.php b/lang/_target/lang_takemessage.php new file mode 100644 index 00000000..bd2ac056 --- /dev/null +++ b/lang/_target/lang_takemessage.php @@ -0,0 +1,87 @@ + array + ( + 'mail_dear' => "Dear ", + 'mail_you_received_a_pm' => "You have received a PM.", + 'mail_sender' => "Sender ", + 'mail_subject' => "Subject ", + 'mail_date' => "Date ", + 'mail_use_following_url' => "You can click ", + 'mail_use_following_url_1' => " to view the message (you may have to login).", + 'mail_yours' => "
Yours,", + 'mail_the_site_team' => "The ".$SITENAME." Team.", + 'mail_received_pm_from' => "You have received a PM from ", + 'mail_here' => "HERE", + 'msg_system' => "System", + 'msg_original_message_from' => "Original Message from ", + ), + 'chs' => array + ( + 'mail_dear' => "尊敬的", + 'mail_you_received_a_pm' => "你收到了一条新短讯。", + 'mail_sender' => "发送者 ", + 'mail_subject' => "主题 ", + 'mail_date' => "日期 ", + 'mail_use_following_url' => "你可以点击", + 'mail_use_following_url_1' => "来查看该短讯(你可能需要登录)", + 'mail_yours' => "", + 'mail_the_site_team' => $SITENAME."网站", + 'mail_received_pm_from' => "你有新短讯,来自", + 'mail_here' => "这里", + 'msg_system' => "系统", + 'msg_original_message_from' => "原短讯来自", + ), + 'cht' => array + ( + 'mail_dear' => "尊敬的", + 'mail_you_received_a_pm' => "你收到了一條新短訊。", + 'mail_sender' => "發送者 ", + 'mail_subject' => "主題 ", + 'mail_date' => "日期 ", + 'mail_use_following_url' => "你可以點擊", + 'mail_use_following_url_1' => "來查看該短訊(你可能需要登錄)", + 'mail_yours' => "", + 'mail_the_site_team' => $SITENAME."網站", + 'mail_received_pm_from' => "你有新短訊,來自", + 'mail_here' => "這裏", + 'msg_system' => "系統", + 'msg_original_message_from' => "原短訊來自", + ), + 'ko' => array + ( + 'mail_dear' => "존경하는 ", + 'mail_you_received_a_pm' => "새로운 메시지가 도착했습니다..", + 'mail_sender' => "발송인 ", + 'mail_subject' => "제목 ", + 'mail_date' => "날짜 ", + 'mail_use_following_url' => "클릭 ", + 'mail_use_following_url_1' => " 메시지 보기 (로그인 필요).", + 'mail_yours' => "
Yours,", + 'mail_the_site_team' => "The ".$SITENAME." Team.", + 'mail_received_pm_from' => "새로운 메시지가 있습니다. ", + 'mail_here' => "여기", + 'msg_system' => "System", + 'msg_original_message_from' => "Original Message from ", + ), + 'ja' => array + ( + 'mail_dear' => "Dear ", + 'mail_you_received_a_pm' => "You have received a PM.", + 'mail_sender' => "Sender ", + 'mail_subject' => "Subject ", + 'mail_date' => "Date ", + 'mail_use_following_url' => "You can click ", + 'mail_use_following_url_1' => " to view the message (you may have to login).", + 'mail_yours' => "
Yours,", + 'mail_the_site_team' => "The ".$SITENAME." Team.", + 'mail_received_pm_from' => "You have received a PM from ", + 'mail_here' => "HERE", + 'msg_system' => "System", + 'msg_original_message_from' => "Original Message from ", + ), +); + +?> diff --git a/lang/_target/lang_takereseed.php b/lang/_target/lang_takereseed.php new file mode 100644 index 00000000..2598de20 --- /dev/null +++ b/lang/_target/lang_takereseed.php @@ -0,0 +1,42 @@ + array + ( + 'msg_reseed_request' => "Reseed Request", + 'msg_reseed_user' => "User ", + 'msg_ask_reseed' => " asked for a reseed on torrent ", + 'msg_thank_you' => " !\nThank You!", + ), + 'chs' => array + ( + 'msg_reseed_request' => "续种请求", + 'msg_reseed_user' => "用户", + 'msg_ask_reseed' => "请求你续种该种子 - ", + 'msg_thank_you' => " !谢谢你!", + ), + 'cht' => array + ( + 'msg_reseed_request' => "續種請求", + 'msg_reseed_user' => "用戶", + 'msg_ask_reseed' => "請求你續種該種子 - ", + 'msg_thank_you' => " !謝謝你!", + ), + 'ko' => array + ( + 'msg_reseed_request' => "재시딩 요청", + 'msg_reseed_user' => "사용자 ", + 'msg_ask_reseed' => " 재시딩 요청이 있습니다. ", + 'msg_thank_you' => " !\n감사합니다!", + ), + 'ja' => array + ( + 'msg_reseed_request' => "Reseed Request", + 'msg_reseed_user' => "User ", + 'msg_ask_reseed' => " asked for a reseed on torrent ", + 'msg_thank_you' => " !\nThank You!", + ), +); + +?> diff --git a/lang/_target/lang_takesignup.php b/lang/_target/lang_takesignup.php new file mode 100644 index 00000000..107b383e --- /dev/null +++ b/lang/_target/lang_takesignup.php @@ -0,0 +1,37 @@ + array + ( + 'msg_invited_user_has_registered' => "Invited user has registered", + 'msg_user_you_invited' => "The user you invited ", + 'msg_has_registered' => " has registered just now.", + ), + 'chs' => array + ( + 'msg_invited_user_has_registered' => "你邀请的用户已注册", + 'msg_user_you_invited' => "你邀请的用户 ", + 'msg_has_registered' => " 刚刚已注册。", + ), + 'cht' => array + ( + 'msg_invited_user_has_registered' => "你邀請的用戶已注冊", + 'msg_user_you_invited' => "你邀請的用戶 ", + 'msg_has_registered' => " 剛剛已注冊。", + ), + 'ko' => array + ( + 'msg_invited_user_has_registered' => "당신이 초대한 사용자가 가입을 마쳤습니다.", + 'msg_user_you_invited' => "당신이 초대한 사용자가 ", + 'msg_has_registered' => " 가입을 마쳤습니다.", + ), + 'ja' => array + ( + 'msg_invited_user_has_registered' => "Invited user has registered", + 'msg_user_you_invited' => "The user you invited ", + 'msg_has_registered' => " has registered just now.", + ), +); + +?> diff --git a/lang/_target/lang_takeupload.php b/lang/_target/lang_takeupload.php new file mode 100644 index 00000000..d55cd358 --- /dev/null +++ b/lang/_target/lang_takeupload.php @@ -0,0 +1,114 @@ + array( + 'msg_offer_you_voted' => "The Offer you voted for: ", + 'msg_was_uploaded_by' => " was uploaded by ", + 'msg_you_can_download' => ".\nYou can Download the Torrent", + 'msg_here' => " [b]here[/b]", + 'msg_offer' => "Offer ", + 'msg_was_just_uploaded' => " was just uploaded", + 'mail_title' => $SITENAME. " New torrent - ", + 'mail_hi' => "Hi, ", + 'mail_new_torrent' => "A new torrent has been uploaded.", + 'mail_torrent_name' => "Name: ", + 'mail_torrent_size' => "Size: ", + 'mail_torrent_category' => "Category: ", + 'mail_torrent_uppedby' => "Uploaded by: ", + 'mail_torrent_description' => "Description", + 'mail_torrent' => "You can view the full information and download torrent from (you may have to login): ", + 'mail_yours' => "
Yours,", + 'mail_team' => "The ".$SITENAME." Team.", + 'mail_new_torrent_notif' => $SITENAME." New Torrent Notification", + 'mail_here' => "HERE", + ), + + 'chs' => array( + 'msg_offer_you_voted' => "你所投票的候选: ", + 'msg_was_uploaded_by' => " 已经被该用户", + 'msg_you_can_download' => "上传。\n下载请到", + 'msg_here' => "[b]这里[/b]", + 'msg_offer' => "候选 ", + 'msg_was_just_uploaded' => " 已被上传", + 'mail_title' => $SITENAME. " 新的种子 - ", + 'mail_hi' => "你好, ", + 'mail_new_torrent' => "一个新的种子已经上传.", + 'mail_torrent_name' => "名称: ", + 'mail_torrent_size' => "大小: ", + 'mail_torrent_category' => "类型: ", + 'mail_torrent_uppedby' => "上传者: ", + 'mail_torrent_description' => "简介", + 'mail_torrent' => "查看更为详细的信息并下载(你可能需要登陆),请点击这里: ", + 'mail_yours' => "
", + 'mail_team' => $SITENAME." 网站", + 'mail_new_torrent_notif' => $SITENAME." 新种子通知", + 'mail_here' => "这里", + ), + + 'cht' => array( + 'msg_offer_you_voted' => "你所投票的候選: ", + 'msg_was_uploaded_by' => " 已經被該用戶", + 'msg_you_can_download' => "上傳。\n下載請到", + 'msg_here' => "[b]這裏[/b]", + 'msg_offer' => "候選 ", + 'msg_was_just_uploaded' => " 已被上傳", + 'mail_title' => $SITENAME. " 新的種子 - ", + 'mail_hi' => "你好, ", + 'mail_new_torrent' => "一個新的種子已經上傳.", + 'mail_torrent_name' => "名稱: ", + 'mail_torrent_size' => "大小: ", + 'mail_torrent_category' => "類型: ", + 'mail_torrent_uppedby' => "上傳者: ", + 'mail_torrent_description' => "簡介", + 'mail_torrent' => "查看更為詳細的信息並下載(你可能需要登陸),請點擊這裏:", + 'mail_yours' => "
", + 'mail_team' => $SITENAME." 網站", + 'mail_new_torrent_notif' => $SITENAME." 新種子通知", + 'mail_here' => "這裏", + ), + 'ko' => array( + 'msg_offer_you_voted' => "당신이 찬성한 제안이: ", + 'msg_was_uploaded_by' => " 이 사용자에 의해 업로드가 되었습니다", + 'msg_you_can_download' => ".\n다운로드가 가능합니다.", + 'msg_here' => " [b]여기[/b]", + 'msg_offer' => "제안 ", + 'msg_was_just_uploaded' => " 방금 업로드 되었습니다.", + 'mail_title' => $SITENAME. " 새로운 토런트 - ", + 'mail_hi' => "안녕하세요, ", + 'mail_new_torrent' => "새로운 토런트가 업로드 되었습니다.", + 'mail_torrent_name' => "이름: ", + 'mail_torrent_size' => "크기: ", + 'mail_torrent_category' => "종류: ", + 'mail_torrent_uppedby' => "업로더: ", + 'mail_torrent_description' => "간략소개", + 'mail_torrent' => "자세한 정보 및 다운로드를 원하시면 여기를 클릭하세요 (로그인 필요): ", + 'mail_yours' => "
Yours,", + 'mail_team' => "The ".$SITENAME." Team.", + 'mail_new_torrent_notif' => $SITENAME." 새로운 토런트 통지", + 'mail_here' => "여기", + ), + 'ja' => array( + 'msg_offer_you_voted' => "The Offer you voted for: ", + 'msg_was_uploaded_by' => " was uploaded by ", + 'msg_you_can_download' => ".\nYou can Download the Torrent", + 'msg_here' => " [b]here[/b]", + 'msg_offer' => "Offer ", + 'msg_was_just_uploaded' => " was just uploaded", + 'mail_title' => $SITENAME. " New torrent - ", + 'mail_hi' => "Hi, ", + 'mail_new_torrent' => "A new torrent has been uploaded.", + 'mail_torrent_name' => "Name: ", + 'mail_torrent_size' => "Size: ", + 'mail_torrent_category' => "Category: ", + 'mail_torrent_uppedby' => "Uploaded by: ", + 'mail_torrent_description' => "Description", + 'mail_torrent' => "You can view the full information and download torrent from (you may have to login): ", + 'mail_yours' => "
Yours,", + 'mail_team' => "The ".$SITENAME." Team.", + 'mail_new_torrent_notif' => $SITENAME." New Torrent Notification", + 'mail_here' => "HERE", + ), +); + +?> diff --git a/lang/chs/lang_aboutnexus.php b/lang/chs/lang_aboutnexus.php new file mode 100644 index 00000000..b9151aa4 --- /dev/null +++ b/lang/chs/lang_aboutnexus.php @@ -0,0 +1,38 @@ + "版本", + 'text_version_note' => "本站".$SITENAME."使用的代码来自".PROJECTNAME."。以下是版本详情。", + 'text_main_version' => "主版本", + 'text_sub_version' => "次版本", + 'text_release_date' => "发布时间", + 'text_authorize_to' => "被授权者", + 'text_authorization_type' => "授权类型", + 'text_commercial' => "商业授权", + 'text_free' => "免费授权", + 'text_nexus' => "关于", + 'text_nexus_note' => "由来自浙江大学的Nexus团队发起并开发完成。它的目标是代替TBSource项目,提供一个完整的、有序的、重视用户信誉和知识的资源分享社区的解决方案。

+".PROJECTNAME."第一阶段的版本是基于TBSource开发的。我们在后者的基础上添加或完善了大量功能,同时极大地提高了代码效率。除TBSource外,我们还吸取了一些其它private tracker的想法或代码,如Bit-HDTV,What.cd和SceneTorrents。", + 'text_authorization' => "关于授权", + 'text_authorization_note' => "如果你有意使用".PROJECTNAME."来架设你的分享网站,请联系我们。", + 'text_translation' => "关于翻译", + 'text_translation_note' => "支持用户端的多语言切换。我们的主要语言为英语。

如果你的语言当前未被支持(unavailable),而且你有意帮助我们翻译,请在阅读过翻译说明联系我们。我们永远欢迎新的翻译。另外,已有的翻译经常需要维护,特别是以下被标记为过期(outdate),不完整(incomplete)或需要新翻译(need-new)的语言。", + 'text_flag' => "旗", + 'text_language' => "语言", + 'text_state' => "状态", + 'text_stylesheet' => "关于界面风格", + 'text_stylesheet_note' => PROJECTNAME."的页面布局完全基于CSS设计,这使得用户自定义网站外观和添加新的界面风格都变得简单。

以下为本站".$SITENAME."中拥有的界面风格列表。如果你想要获得更多界面风格或自己设计,请联系我们。", + 'text_name' => "名字", + 'text_designer' => "设计者", + 'text_comment' => "说明", + 'text_contact' => "联系", + 'text_contact_note' => "有意加入?有建议?找到代码的Bug?洽谈业务?请通过以下任一方式联系我们。", + 'text_web_site' => "网站", + 'text_email' => "邮箱", + 'text_msn' => "MSN", + 'text_qq' => "QQ", + 'text_telephone' => "电话", +); + +?> diff --git a/lang/chs/lang_admanage.php b/lang/chs/lang_admanage.php new file mode 100644 index 00000000..b2dfd9c5 --- /dev/null +++ b/lang/chs/lang_admanage.php @@ -0,0 +1,103 @@ + "管理广告", + 'text_ad_management' => "管理广告", + 'text_add_ad' => "添加广告", + 'text_header' => "页头", + 'text_footer' => "页尾", + 'text_below_navigation' => "导航栏下面", + 'text_below_searchbox' => "搜索箱下面", + 'text_torrent_detail' => "种子详情页面", + 'text_comment_page' => "评论页面", + 'text_inter_overforums' => "论坛分区间", + 'text_forum_post_page' => "论坛帖子间", + 'text_popup' => "弹出广告", + 'text_no_ads_yet' => "暂无广告!", + 'col_enabled' => "启用", + 'col_name' => "名字", + 'col_position' => "位置", + 'col_order' => "排序", + 'col_type' => "展现方式", + 'col_start_time' => "起始时间", + 'col_end_time' => "终止时间", + 'col_action' => "行为", + 'text_yes' => "是", + 'text_no' => "否", + 'text_bbcodes' => "BBCode代码", + 'text_xhtml' => "XHTML代码", + 'text_text' => "文字", + 'text_image' => "图片", + 'text_flash' => "Flash", + 'text_delete' => "删除", + 'text_edit' => "编辑", + 'js_sure_to_delete_ad' => "你确定要删除此广告吗?", + 'std_error' => "错误", + 'std_invalid_id' => "无效ID", + 'std_invalid_position' => "广告位置无效", + 'head_add_ad' => "添加广告", + 'head_edit_ad' => "编辑广告", + 'text_note' => "注意", + 'text_ad_detail' => "广告详情", + 'row_name' => "名字", + 'row_start_time' => "起始时间", + 'row_end_time' => "终止时间", + 'row_enabled' => "启用", + 'row_order' => "排序", + 'row_type' => "展现方式", + 'row_image_url' => "图片URL", + 'row_image_link' => "广告链接", + 'row_image_width' => "图片宽度", + 'row_image_height' => "图片高度", + 'row_image_tooltip' => "链接悬浮提示文字", + 'row_text_content' => "文字内容", + 'row_text_link' => "广告链接", + 'row_text_size' => "文字大小", + 'row_bbcodes_code' => "BBCode代码", + 'row_xhtml_code' => "XHTML代码", + 'row_flash_url' => "Flash URL", + 'row_flash_width' => "Flash宽度", + 'row_flash_height' => "Flash高度", + 'submit_submit' => "提交", + 'text_ad' => "广告", + 'text_header_note' => "显示在所有页面的右上方。建议使用尺寸在580x90内的图片或Flash。只显示优先级最高的一个广告。", + 'text_footer_note' => "显示在所有页面的最底部。建议广告尺寸在728x160内。只显示优先级最高的一个广告。", + 'text_below_navigation_note' => "显示在所有页面导航栏的下面。建议广告尺寸为728x90。只显示优先级最高的一个广告。", + 'text_below_searchbox_note' => "显示在种子页面搜索箱的下面。建议广告尺寸为728x90。只显示优先级最高的一个广告。", + 'text_torrent_detail_note' => "显示在种子详情页面的种子介绍中。建议广告尺寸为600x160。只显示优先级最高的一个广告。", + 'text_comment_page_note' => "显示在种子和候选的评论间。建议广告尺寸为600x160。可同时显示多个广告。", + 'text_inter_overforums_note' => "显示在论坛首页论坛分区间。建议广告尺寸为728x90。可同时显示多个广告。", + 'text_forum_post_page_note' => "显示在论坛主题详情页面的帖子间。建议广告尺寸为600x160。可同时显示多个广告。", + 'text_popup_note' => "在所有页面谈促。极具侵扰性,请慎用。建议广告尺寸为468x90。", + 'text_name_note' => "给广告命名,便于识别。", + 'text_start_time_note' => "时间格式为'年年年年-月月-日日 时时:分分:秒秒',如'2007-12-24 21:00:00'。广告起始生效的时间。
如留空则广告将马上生效。", + 'text_end_time_note' => "时间格式为'年年年年-月月-日日 时时:分分:秒秒',如'2008-01-24 21:00:00'。广告结束的时间。
如留空则广告永不结束,直到添加了新的广告。", + 'text_order_note' => "广告的显示优先级。数值'0'具有最高的优先级。
当某个广告位置具有多个有效广告:如果该位置只允许一个广告,将显示优先级最高的广告;如果该位置允许多个广告,将按照优先级从高到低顺序显示多个广告。如多个广告具有相同的优先级,最近添加的广告将具有高优先权。", + 'text_enabled_note' => "只有启用的广告才会显示。", + 'text_type_note' => "选择广告的展现方式。", + 'text_image_url_note' => "广告图片文件的URL。
可使用相对地址(如'pic/ad.jpg')或绝对地址(如'http://www.nexusphp.com/ad.jpg')。", + 'text_image_link_note' => "广告指向的链接。如'http://www.nexusphp.com/ad.html'。", + 'text_image_width_note' => "单位为像素。图片显示的宽度。", + 'text_image_height_note' => "单位为像素。图片显示的高度。", + 'text_image_tooltip_note' => "广告链接悬浮提示文字信息。", + 'text_text_content_note' => "文字广告的显示内容", + 'text_text_link_note' => "广告指向的链接。如'http://www.nexusphp.com/ad.html'。", + 'text_text_size_note' => "广告文字的字体大小。可使用pt、px、em为单位,如'30pt'。如留空,则使用'30pt'。", + 'text_bbcodes_code_note' => "什么是BBCode代码?见", + 'text_here' => "这里", + 'text_xhmtl_code_note' => "通常情况下,你应该尽量避免直接使用XHTML展现广告,因为这样做不但容易因代码错误导致整体页面混乱,而且具有安全隐患。如果一定要用,请确保XHTML代码是安全和正确的。
注意:请按XHTML 1.0 Transitional规范填写代码,而不是HTML 4.01规范。", + 'text_flash_url_note' => "Flash文件的URL。
可使用相对地址(如'pic/flash.demo.swf')或绝对地址(如'http://www.nexusphp.com/flash.demo.swf')。", + 'text_flash_width_note' => "单位为像素。Flash显示的宽度。", + 'text_flash_height_note' => "单位为像素。Flash显示的高度。", + 'std_missing_form_data' => "有必填项目未写。", + 'std_invalid_type' => "展现方式无效。", + 'std_success' => "成功", + 'std_edit_success' => "广告编辑成功。", + 'std_add_success' => "广告添加成功。", + 'text_unlimited' => "无限制", + 'std_go_back' => "返回广告列表", + 'col_clicks' => "点击数" +); + +?> diff --git a/lang/chs/lang_adredir.php b/lang/chs/lang_adredir.php new file mode 100644 index 00000000..fe6f5fdc --- /dev/null +++ b/lang/chs/lang_adredir.php @@ -0,0 +1,11 @@ + "错误", + 'std_ad_system_disabled' => "广告系统关闭中。", + 'std_invalid_ad_id' => "无效的广告ID", + 'std_no_redirect_url' => "无跳转链接。" +); + +?> diff --git a/lang/chs/lang_attachment.php b/lang/chs/lang_attachment.php new file mode 100644 index 00000000..58411033 --- /dev/null +++ b/lang/chs/lang_attachment.php @@ -0,0 +1,20 @@ + "失败!没有收到文件!", + 'text_file_number_limit_reached' => "失败!你暂时不能上传更多附件!请等待些时间。", + 'text_file_size_too_big' => "失败!文件过大。", + 'text_file_extension_not_allowed' => "失败!不允许该文件扩展名。", + 'text_invalid_image_file' => "失败!图片文件无效。", + 'text_cannot_move_file' => "失败!无法移动上传的文件。", + 'submit_upload' => "上传", + 'text_left' => "今日剩余:", + 'text_of' => "/", + 'text_size_limit' => "大小限制:", + 'text_file_extensions' => "允许扩展名:", + 'text_mouse_over_here' => "鼠标移至此", + 'text_small_thumbnail' => "小缩略图", +); + +?> diff --git a/lang/chs/lang_bitbucket-upload.php b/lang/chs/lang_bitbucket-upload.php new file mode 100644 index 00000000..8d822b5b --- /dev/null +++ b/lang/chs/lang_bitbucket-upload.php @@ -0,0 +1,36 @@ + "上传失败", + 'std_nothing_received' => "没有接受到文件!", + 'std_file_too_large' => "对不起,文件过大无法上传。", + 'std_bad_file_name' => "文件名错误。", + 'std_file_with_the_name' => "对不起,该文件", + 'std_already_exists' => "已经存在。", + 'std_error' => "错误", + 'std_invalid_image_format' => "扩展名无效:只允许gif,jpg或png!", + 'std_image_processing_failed' => "图片处理失败", + 'std_sorry_the_uploaded' => "对不起,上传的文件", + 'std_failed_processing' => "处理失败。请用图片编辑软件处理后再上传。谢谢!", + 'std_success' => "成功", + 'std_use_following_url' => "使用以下URL访问文件:", + 'std_upload_another_file' => "上传其他文件", + 'std_image' => "图片", + 'std_need_not_rescaling' => "不需要缩小", + 'std_rescaled_from' => "从", + 'std_to' => "缩小到", + 'std_profile_updated' => "
注意:你的头像已经被更新!", + 'head_avatar_upload' => "头像上传", + 'text_avatar_upload' => "头像上传", + 'text_upload_directory_unwritable' => "注意:上传路径不可写。请将该情况报告给管理员!", + 'text_disclaimer' => "声明
不要上传未授权或非法的图片。
上传的图片被认为是公开的图片,因此不要上传你不想让陌生人观看的图片。
若图片高度超过", + 'text_disclaimer_two' => "像素或宽度超过", + 'text_disclaimer_three' => "像素则会被按宽高比缩小。
文件大小不能超过", + 'text_disclaimer_four' => " Bytes。", + 'row_file' => "文件", + 'checkbox_avatar_shared' => "共享头像(其他用户可以选择使用我的头像)。", + 'submit_upload' => "上传", +); + +?> diff --git a/lang/chs/lang_catmanage.php b/lang/chs/lang_catmanage.php new file mode 100644 index 00000000..29e68fec --- /dev/null +++ b/lang/chs/lang_catmanage.php @@ -0,0 +1,81 @@ + "分类管理", + 'text_category_management' => "分类管理", + 'text_manage' => "管理", + 'text_searchbox' => "种子分类模式", + 'text_category_icons' => "分类图标", + 'text_second_icons' => "第二图标", + 'text_categories' => "分类", + 'text_sources' => "来源", + 'text_media' => "媒介", + 'text_codecs' => "编码", + 'text_standards' => "分辨率", + 'text_processings' => "处理", + 'text_teams' => "制作组", + 'text_audio_codecs' => "音频编码", + 'std_error' => "错误", + 'std_invalid_type' => "无效的类型。", + 'text_add' => "添加", + 'text_no_record_yet' => "暂无记录!", + 'col_id' => "ID", + 'col_name' => "名字", + 'col_order' => "排序", + 'col_action' => "行为", + 'text_delete' => "删除", + 'text_edit' => "编辑", + 'js_sure_to_delete_this' => "你确信要删除此项目吗?", + 'col_sub_category' => "次分类", + 'text_per_row' => "每行项目数", + 'text_padding' => "间隔", + 'text_enabled' => "显示", + 'text_disabled' => "不显示", + 'col_folder' => "图标文件夹", + 'text_multi_language' => "多语言", + 'text_second_icon' => "第二图标", + 'text_css_file' => "CSS文件", + 'text_none' => "无", + 'text_css_file_note' => "为此分类图标指定CSS文件。填写完整路径,如'styles/scenetorrents.css'。若无请留空。
允许的字符:[a-z](小写),[0-9],[_./]。", + 'text_designer' => "设计者", + 'text_comment' => "说明", + 'text_yes' => "是", + 'text_no' => "否", + 'col_image' => "图片文件名", + 'text_class_name' => "class属性值", + 'col_mode' => "模式", + 'std_invalid_id' => "无效的id", + 'submit_submit' => "提交", + 'text_subcategory_name_note' => "不要使用过长的名字。建议在10个字母内。", + 'text_order_note' => "递增排序,即'0'排在最前。", + 'row_searchbox_name' => "分类模式名字", + 'text_searchbox_name_note' => "允许的字符:[a-z](小写),[0-9],[_./]。", + 'row_show_sub_category' => "显示次分类", + 'text_show_sub_category_note' => "勾选你想启用的次分类。", + 'row_items_per_row' => "每行项目数", + 'text_items_per_row_note' => "设置在搜索箱中每行显示的项目数,如'8'。", + 'row_padding_between_items' => "项目间距", + 'text_padding_between_items_note' => "单位为像素。搜索箱中项目的水平间隔距离,如'3'。", + 'text_category_icon_name_note' => "允许的字符:[a-z](小写),[0-9],[_./]。", + 'text_folder_note' => "分类图标所在的文件夹名。允许的字符:[a-z](小写),[0-9],[_./]。
必须在末尾添加斜杠(/),如'mycaticon/'", + 'text_multi_language_note' => "是否为不同语言使用不同的分类图标。如果设为'是',将多份图标分别放入命名如'en','chs'等的文件夹中。", + 'text_second_icon_note' => "是否使用第二图标显示补充信息。如果设为'是',将第二图标放入普通图标目录下命名为'additional'的文件夹中。", + 'text_designer_note' => "此图标集的设计者。", + 'text_comment_note' => "此图标集的说明。", + 'text_icon_directory_note' => "你必须将图标文件放入服务器正确的目录才能使得以下设定起作用。将普通的分类图标放入'pic/category/分类模式名字/图标文件夹[语言缩写/]',将第二图标放入'pic/category/分类模式名字/图标文件夹[语言缩写/]additional/'.
不明白?参考下面的例子:
    • 分类模式名字='nhd'
    • 图标文件夹='scenetorrents/'
    • 多语言='是'
    • 第二图标='否'
    你应该将一个英语的电影类型的图标(如'movies.png')文件放入'pic/category/nhd/scenetorrents/en/'。
    • 分类模式名字='chd'
    • 图标文件夹='nanosofts/'
    • 多语言='否'
    • 第二图标='是'
    你应该将一个电影类型的图标(如'movies.png')文件放入'pic/category/chd/nanosofts/',将一个第二图标(如'bdh264.png')放入'pic/category/chd/nanosofts/additional/'。
", + 'text_second_icon_name_note' => "不要使用过长的名字。建议在10个字母内。", + 'text_image_note' => "图片文件的名字。允许的字符:[a-z](小写),[0-9],[_./]。", + 'row_selections' => "选择", + 'text_selections_note' => "如果某个选择未指定,其所有选项都符合此规则。必须至少指定一个选择。", + 'row_category_name' => "分类名", + 'text_category_name_note' => "不要使用过长的名字。建议在10个字母内。", + 'row_mode' => "模式", + 'text_class_name_note' => "为图片指定class属性值。若无请留空。允许的字符: [a-z](小写),[0-9],[_],第一个字符必须是字母。", + 'std_missing_form_data' => "有必填项目未填写。", + 'std_invalid_character_in_filename' => "此文件名包含不合法字符:", + 'std_must_define_one_selection' => "你必须至少指定一个选择!", + 'std_invalid_mode_id' => "无效的模式id。" +); + +?> diff --git a/lang/chs/lang_cheaterbox.php b/lang/chs/lang_cheaterbox.php new file mode 100644 index 00000000..0dce71ec --- /dev/null +++ b/lang/chs/lang_cheaterbox.php @@ -0,0 +1,28 @@ + "噢哦!", + 'std_no_suspect_detected' => "还没有检测到任何作弊嫌疑者。", + 'head_cheaterbox' => "作弊者", + 'text_cheaterbox' => "作弊者 BETA", + 'col_added' => "时间", + 'col_suspect' => "嫌疑者", + 'col_hit' => "次数", + 'col_torrent' => "种子", + 'col_ul' => "上传", + 'col_dl' => "下载", + 'col_ann_time' => "汇报时间", + 'col_seeders' => "做种者", + 'col_leechers' => "下载者", + 'col_comment' => "备注", + 'col_dealt_with' => "处理", + 'col_action' => "行为", + 'text_torrent_does_not_exist' => "种子不存在或已被删除", + 'text_yes' => "是", + 'text_no' => "否", + 'submit_set_dealt' => "设为已处理", + 'submit_delete' => "删除" +); + +?> diff --git a/lang/chs/lang_checkuser.php b/lang/chs/lang_checkuser.php new file mode 100644 index 00000000..98dbfc34 --- /dev/null +++ b/lang/chs/lang_checkuser.php @@ -0,0 +1,17 @@ + "错误", + 'std_no_user_id' => "没有该ID的用户!", + 'std_no_permission' => "你没有该权限", + 'head_detail_for' => "用户详情 - ", + 'text_account_disabled' => "

该账号被禁用!

\n", + 'row_join_date' => "加入日期", + 'row_gender' => "性别", + 'row_email' => "邮箱", + 'row_ip' => "IP", + 'submit_confirm_this_user' => "确认该用户", +); + +?> diff --git a/lang/chs/lang_comment.php b/lang/chs/lang_comment.php new file mode 100644 index 00000000..8103ed03 --- /dev/null +++ b/lang/chs/lang_comment.php @@ -0,0 +1,50 @@ + "错误", + 'std_comment_flooding_denied' => "禁止滥发评论。请在", + 'std_before_posting_another' => "秒后再发。", + 'std_no_torrent_id' => "没有该ID的种子。", + 'std_no_comment_id' => "没有该ID的评论", + 'std_comment_body_empty' => "评论内容不能为空!", + 'head_add_comment_to' => "添加评论 - ", + 'text_add_comment_to' => "添加评论 - ", + 'submit_okay' => "  确定  ", + 'text_comments_in_reverse_order' => "逆序显示,顶部为最后发布的评论\n", + 'std_invalid_id' => "无效的ID", + 'std_permission_denied' => "没有该权限。", + 'head_edit_comment_to' => "编辑评论 - ", + 'text_edit_comment_to' => "编辑评论 - ", + 'std_delete_comment' => "删除评论", + 'std_delete_comment_note' => "你即将删除评论。点击\n", + 'std_here_if_sure' => ">这里来确认。", + 'head_original_comment' => "原始评论", + 'text_original_content_of_comment' => "原始评论内容", + 'std_unknown_action' => "未知行为。", + 'std_no_review_id' => "该ID的点评不存在", + 'std_review_body_empty' => "点评正文不能为空!", + 'text_reviews_in_reverse_order' => "

逆序显示,顶部为最后发布的点评

\n", + 'head_edit_review_to' => "编辑点评 - ", + 'text_edit_review_to' => "编辑点评 - ", + 'std_delete_review' => "删除点评", + 'std_delete_review_note' => "你即将删除点评。点击\n", + 'head_original_review' => "原始点评", + 'text_original_content_of_review' => "原始点评内容", + 'row_user_comment' => "用户评论", + 'row_editor_notes' => "编辑评注", + 'row_bouns_change' => "魔力值改变", + 'text_bouns_change_notes' => " 分值范围是0 - 1000,视点评质量取数值(超过1000当做1000,其他不在范围内的值当做0)", + 'std_review_no_external_info' => "没有外部信息,无法标记评论!", + 'std_review_unmark' => "去除点评标记", + 'std_unmark_review_note' => "你即将去除点评的标记。点击\n", + 'row_original_torrent' => "原始种子", + 'text_no_exists' => "不再存在!", + 'text_torrent_id' => "种子ID:", + 'text_back' => "返回", + 'text_body' => "正文", + 'text_compose' => "撰写", + 'text_edit' => "编辑", +); + +?> diff --git a/lang/chs/lang_confirm_resend.php b/lang/chs/lang_confirm_resend.php new file mode 100644 index 00000000..f010ebad --- /dev/null +++ b/lang/chs/lang_confirm_resend.php @@ -0,0 +1,36 @@ + "重发确认邮件失败", + 'std_fields_blank' => "有项目没有填写。", + 'std_invalid_email_address' => "邮箱地址无效!", + 'std_email_not_found' => "数据库中没有该邮箱地址。\n", + 'std_user_already_confirm' => "该邮箱的用户已经通过验证。\n", + 'std_passwords_unmatched' => "两次输入的密码不一致!肯定拼错了,请重试。", + 'std_password_too_short' => "对不起,密码过短(至少6个字符)", + 'std_password_too_long' => "对不起,密码过长(至多40个字符)", + 'std_password_equals_username' => "对不起,用户名和密码不能相同。", + 'std_error' => "错误", + 'std_database_error' => "数据库错误!请将该情况报告给管理员。", + 'text_resend_confirmation_mail_note' => "

重发确认邮件

填写以下表格使系统重发验证邮件。

你必须在过去24小时内注册且没有通过验证才能使用该功能,
否则你的账号信息已被删除,需要重新注册。

注意:连续".$maxloginattempts."次尝试失败将导致你的IP地址被禁用!

", + 'row_registered_email' => "注册邮箱:", + 'row_new_password' => "新密码:", + 'text_password_note' => "至少6个字符", + 'row_enter_password_again' => "再次输入新密码:", + 'submit_send_it' => "发送!", + 'text_you_have' => "你还有", + 'text_remaining_tries' => "次尝试机会。", + 'mail_title' => "用户注册验证(重发)", + 'mail_this_link' => "这个链接", + 'mail_here' => "这里", + 'mail_one' => "你好 ", + 'mail_two' => ",

你请求重新收取".$SITENAME."网站的注册确认邮件,并指定此邮箱地址 ", + 'mail_three' => " 为你的联系地址。

如果你没有发过该请求,请忽视本邮件。输入你邮箱地址者的IP地址为 ", + 'mail_four' => ". 。请勿回复本邮件。

如果你的确发过该请求,请点击以下链接来通过验证: ", + 'mail_four_1' => "

如果以上链接打开出错、不存在或已经过期, 尝试在这里重新发送确认邮件 ", + 'mail_five' => "在通过验证后,你就可以使用新账号了。

如果你在24小时内没有通过验证,你的账号将被删除。
新人登录".$SITENAME."后请务必先阅读站点规则,提问前请参考常见问题。

请注意:如果你并没有在".$SITENAME."网站注册,请举报此邮件至".$REPORTMAIL."

------

".$SITENAME." 网站.", + 'text_select_lang' => "Select Site Language: ", + 'std_need_admin_verification' => "账户需要通过管理员手动验证。" +); +?> diff --git a/lang/chs/lang_contactstaff.php b/lang/chs/lang_contactstaff.php new file mode 100644 index 00000000..fc7665e9 --- /dev/null +++ b/lang/chs/lang_contactstaff.php @@ -0,0 +1,12 @@ + "联系管理组", + 'text_message_to_staff' => "给管理组发短讯", + 'row_subject' => "标题", + 'row_body' => "正文", + 'submit_send_it' => "发送", +); + +?> diff --git a/lang/chs/lang_delete.php b/lang/chs/lang_delete.php new file mode 100644 index 00000000..7516b0db --- /dev/null +++ b/lang/chs/lang_delete.php @@ -0,0 +1,17 @@ + "删除失败!", + 'std_missing_form_date' => "有项目未填", + 'std_not_owner' => "你不是发种者!你怎么会来这?\n", + 'std_invalid_reason' => "无效的理由", + 'std_describe_violated_rule' => "请填写具体违反的规则。", + 'std_enter_reason' => "请填写删除该种子的原因。", + 'head_torrent_deleted' => "成功删除种子!", + 'text_go_back' => "回到刚才的地方", + 'text_back_to_index' => "返回首页", + 'text_torrent_deleted' => "成功删除种子!", +); + +?> \ No newline at end of file diff --git a/lang/chs/lang_deletedisabled.php b/lang/chs/lang_deletedisabled.php new file mode 100644 index 00000000..520c52f4 --- /dev/null +++ b/lang/chs/lang_deletedisabled.php @@ -0,0 +1,12 @@ + "删除被禁用户", + 'text_delete_diasabled' => "删除被禁用户", + 'submit_delete_all_disabled_users' => "删除所有被禁用户", + 'text_delete_disabled_note' => "如果你点击下面的按钮,网站中所有的被禁止用户将被删除。除非十分确定,否则不要点此按钮。", + 'text_users_are_disabled' => "个用户被删除。" +); + +?> diff --git a/lang/chs/lang_deletemessage.php b/lang/chs/lang_deletemessage.php new file mode 100644 index 00000000..62566e17 --- /dev/null +++ b/lang/chs/lang_deletemessage.php @@ -0,0 +1,12 @@ + "错误短讯ID", + 'std_not_suggested' => "如果我是你,我不会这么做...", + 'std_not_in_inbox' => "你的收件箱中没有该短讯。", + 'std_not_in_sentbox' => "你的发件箱中没有该短讯。", + 'std_unknown_pm_type' => "未知短讯类型。", +); + +?> \ No newline at end of file diff --git a/lang/chs/lang_details.php b/lang/chs/lang_details.php new file mode 100644 index 00000000..9bf49643 --- /dev/null +++ b/lang/chs/lang_details.php @@ -0,0 +1,223 @@ + "错误", + 'std_no_torrent_id' => "没有该ID的种子", + 'head_details_for_torrent' => "种子详情 ", + 'text_successfully_uploaded' => "发布成功!", + 'text_redownload_torrent_note' => "你必须重新下载种子才能开始做种。", + 'text_successfully_edited' => "编辑成功!", + 'text_go_back' => "返回到", + 'text_whence_you_came' => "原先地点", + 'text_rating_added' => "添加评分成功!", + 'text_thanks_added' => "感谢表示成功!", + 'text_free' => "免费", + 'text_two_times_up' => "2X", + 'text_free_two_times_up' => "2X免费", + 'text_half_down' => "50%", + 'row_download' => "下载", + 'text_downloading_not_allowed' => "你被禁止下载。", + 'row_small_description' => "副标题", + 'row_info_hash' => "Hash码", + 'row_description' => "简介", + 'text_nfo' => "NFO", + 'text_view_nfo' => "[所有模式]", + 'row_imdb_url' => "IMDb链接", + 'row_subtitles' => "字幕", + 'text_no_subtitles' => "该种子暂无字幕", + 'submit_upload_subtitles' => "上传字幕", + 'row_info' => "信息", + 'text_imdb' => "IMDb", + 'text_lastfm' => "Last.fm", + 'text_douban' => "豆瓣", + 'text_not_ready' => "信息未获取,点击", + 'text_here_to_retrieve' => "这里重新检索", + 'text_someone_has_requested' => "某用户在", + 'text_please_be_patient' => "秒以前发送检索请求,请等待。", + 'text_information' => "信息:", + 'text_title' => " 片名: ", + 'text_title_chinese' => "中文片名: ", + 'text_also_known_as' => " 别名: ", + 'text_year' => " 年代: ", + 'text_runtime' => " 片长: ", + 'text_mins' => "分钟", + 'text_votes' => " 票数: ", + 'text_rating' => " 评分: ", + 'text_language' => " 对白语言: ", + 'text_country' => " 国家: ", + 'text_all_genres' => " 类别: ", + 'text_tagline' => " 标语: ", + 'text_director' => " 导演: ", + 'text_written_by' => " 编剧: ", + 'text_performed_by' => " 演出: ", + 'text_offcial_site' => " 官方网站: ", + 'text_imdb_link' => " IMDb链接: ", + 'text_produced_by' => " 制作: ", + 'text_music' => " 音乐: ", + 'text_plot_outline' => " 剧情概要:", + 'text_cast' => " 主演:", + 'text_as' => " .... ", + 'text_recommended_comment' => " 推荐评论:", + 'text_information_updated_at' => "

注意:该信息最后更新于", + 'text_might_be_outdated' => ",可能已过期,点击", + 'text_here_to_update' => "这里更新信息", + 'text_network_error' => "警告!网络状态不允许实时检索信息", + 'text_avprogress' => "平均进度:", + 'row_type' => "类型", + 'text_none_selected' => "(未选)", + 'text_source' => "来源:", + 'text_codec' => "编码:", + 'text_stardard' => "分辨率:", + 'text_processing' => "处理:", + 'row_quality' => "质量", + 'col_type' => "类型", + 'col_name' => "标题", + 'col_quality' => "质量", + 'title_size' => "大小", + 'title_time_added' => "添加时间", + 'title_seeders' => "种子数", + 'title_leechers' => "下载数", + 'col_special' => "促销?", + 'text_normal' => "普通", + 'row_other_copies' => "其它版本", + 'row_last_seeder' => "最近活动:", + 'text_ago' => "以前", + 'text_size' => "大小:", + 'text_none_yet' => "暂无(需要".$minvotes."票,现在只有", + 'text_only' => "票", + 'text_none' => "无", + 'text_no_votes_yet' => "暂无评分", + 'text_invalid' => "无效?", + 'text_out_of_five_with' => "/5分,共", + 'text_votes_total' => "票", + 'text_login_to_vote' => "登录后才能评分", + 'text_you_rated_as' => "(你将该种子评分为\"", + 'select_add_rating' => "(添加评分)", + 'submit_vote' => "我投", + 'row_rating' => "评分", + 'row_time' => "时间", + 'row_hot_meter' => "热度表", + 'text_views' => "查看: ", + 'text_hits' => "点击: ", + 'text_snatched' => "完成: ", + 'text_view_snatches' => "次 <--- 点击查看完成详情", + 'text_average_speed' => "平均速度: ", + 'text_total_speed' => "总速度: ", + 'text_health_note' => "(数据为按时间计算的平均值,不一定准确)", + 'text_traffic' => "流量: ", + 'text_no_traffic' => "没有流量", + 'text_status' => "状态:", + 'text_dead' => "断种", + 'row_health' => "活力度", + 'text_anonymous' => "匿名", + 'text_edit_torrent' => "编辑/刪除", + 'title_edit_torrent' => "点击编辑或删除本种子", + 'row_upped_by' => "由", + 'text_click' => "点击", + 'text_num_files' => "文件数:", + 'text_see_full_list' => "[查看列表]", + 'text_files' => "个文件", + 'row_file_list' => "文件列表", + 'text_hide_list' => "[隐藏列表]", + 'row_action' => "行为", + 'text_download_torrent' => "下载种子", + 'title_download_torrent' => "下载种子", + 'text_ask_for_reseed' => "请求续种", + 'title_ask_for_reseed' => "当没有种子时请求完成者续种", + 'text_report_torrent' => "举报种子", + 'title_report_torrent' => "举报该种子违反了规则", + 'text_here' => "这里.", + 'row_peers' => "同伴", + 'text_seeders' => "个做种者", + 'text_leechers' => "个下载者", + 'text_peers_total' => "个同伴", + 'row_seeders' => "做种者", + 'row_leechers' => "下载者", + 'submit_say_thanks' => "  说谢谢  ", + 'submit_you_said_thanks' => "你已说过谢谢", + 'text_no_thanks_added' => "暂无感谢者", + 'row_thanks_by' => "感谢者", + 'row_torrent_info' => "种子文件", + 'text_torrent_structure' => "种子结构:", + 'text_torrent_info_note' => "[查看结构]", + 'head_comments_for_torrent' => "种子评论 - ", + 'text_comments_for' => "种子评论 - ", + 'text_snatch_detail_for' => "种子完成详情-", + 'text_users_top_finished_recently' => "顶部的用户最后完成下载", + 'col_username' => "用户名", + 'col_uploaded' => "上传量", + 'col_downloaded' => "下载量", + 'col_when_completed' => "完成", + 'col_last_action' => "最近动向", + 'col_seeding' => "做种", + 'col_pm_user' => "短讯", + 'col_report_user' => "举报", + 'col_on_or_off' => "在线", + 'text_global' => "全局", + 'text_torrent' => "本种", + 'text_yes' => "是", + 'text_no'=> "否", + 'text_add_a_comment' => "添加评论", + 'text_no_comments_yet' => "暂无评论", + 'text_quick_comment' => "快速评论", + 'submit_add_comment' => "  添加  ", + 'title_pm' => "发送短讯", + 'title_report' => "举报", + 'title_online' => "在线", + 'title_offline' => "不在线", + 'select_kewl' => "狂赞!", + 'select_pretty_good' => "较好", + 'select_decent' => "一般", + 'select_pretty_bad' => "较差", + 'select_sucks' => "垃圾!", + 'text_lastfm_not_ready' => "Last.fm信息未获取,点击", + 'text_biography' => "小传", + 'text_tags' => "标签:", + 'text_similiar_artists' => "类似艺术家:", + 'text_may_also_like' => "可能也喜欢:", + 'text_top_albums' => "热门专辑:", + 'text_listener' => "个听众", + 'text_scrobbled' => "次播放", + 'text_album' => "专辑", + 'text_album_name' => "专辑名: ", + 'text_track_number_info' => "曲目:", + 'text_release_date' => "发行日期:", + 'text_label' => "唱片公司:", + 'text_track_list' => "曲目列表:", + 'text_track_number' => "#   ", + 'text_track_name' => "曲目名", + 'text_track_duration' => "时长", + 'text_track_listener' => "听者", + 'text_ratings_legend' => "平均: ", + 'text_points' => "分", + 'text_totalvotes' => "票", + 'text_author' => "作者:", + 'text_from' => "来自", + 'h1_user_reviews' => "用户点评选", + 'h1_critic_reviews' => "影评家点评", + 'h1_user_comments' => "用户评论", + 'text_local_link' => "本地链接", + 'text_at' => "发布于", + 'row_basic_info' => "基本信息", + 'text_site_rating' => "评分", + 'text_blank' => "发布于", + 'text_creator' => "主创: ", + 'submit_search_at_shooter' => "搜索射手网", + 'submit_search_at_opensubtitles' => "搜索Opensubtitles", + 'title_bookmark' => "收藏", + 'text_album_information' => "专辑信息:", + 'text_about_album' => "关于该专辑:", + 'text_artist' => "艺术家", + 'text_artist_name' => "艺术家:", + 'text_medium' => "媒介:", + 'text_team' => "制作组:", + 'text_audio_codec' => "音频编码:", + 'text_delete' => "删除", + 'text_other_copies' => "个其它版本", + 'row_uploader_bandwidth' => "发布者带宽", + 'text_and_more' => "……(这里只显示最新记录。共", + 'text_users_in_total' => "个用户表示了感谢)", +); + +?> diff --git a/lang/chs/lang_donate.php b/lang/chs/lang_donate.php new file mode 100644 index 00000000..bef6934f --- /dev/null +++ b/lang/chs/lang_donate.php @@ -0,0 +1,31 @@ + "对不起", + 'std_do_not_accept_donation' => "我们目前不接收捐赠。", + 'std_success' => "成功", + 'std_donation_success_note_one' => "感谢你的捐赠!你的付款已完成。请点击", + 'std_here' => "这里", + 'std_donation_success_note_two' => "发送你的付款信息给我们,方便我们确认你的捐赠。", + 'head_donation' => "捐赠", + 'text_donate' => "捐赠", + 'std_error' => "错误", + 'std_no_donation_account_available' => "没有设置接收捐赠的账号。请将此情况告诉管理组。", + 'text_donation_note' => "感谢你有意捐赠。无论捐赠的数目是多少,我们都表示最真诚的感谢!", + 'text_donate_with_paypal' => "使用PayPal捐赠", + 'text_donate_paypal_note' => "1. 选择你的捐赠金额。
2. 点击PayPal按钮。
3. 在PayPal网站完成付款。", + 'text_select_donation_amount' => "请选择你的捐赠金额:", + 'select_choose_donation_amount' => "---选择捐赠金额---", + 'select_other_donation_amount' => "其它金额", + 'text_usd_mark' => "", + 'text_donation' => "美元", + 'text_donate_with_alipay' => "使用支付宝捐赠", + 'text_donate_alipay_note_one' => "1. 点击支付宝按钮。
2. 选择“向陌生卖家付款”。
3. 在“收款方支付宝账户”中填写我们的支付宝账号", + 'text_donate_alipay_note_two' => "。
4. 继续直到完成付款。", + 'text_after_donation_note_one' => "在完成捐赠后,请一定将你的付款信息通过站短", + 'text_send_us' => "发送给我们", + 'text_after_donation_note_two' => ",方便我们确认你的捐赠。", +); + +?> diff --git a/lang/chs/lang_downloadnotice.php b/lang/chs/lang_downloadnotice.php new file mode 100644 index 00000000..15e2c2a4 --- /dev/null +++ b/lang/chs/lang_downloadnotice.php @@ -0,0 +1,38 @@ + "下载提示", + 'text_client_banned_notice' => "被禁止客户端提示", + 'text_client_banned_note' => "Tracker检查到你最近一次使用的BT客户端属于被禁的范畴。请阅读以下说明。", + 'text_low_ratio_notice' => "低分享率提示", + 'text_low_ratio_note_one' => "警告:你的分享率过低!你必须在", + 'text_low_ratio_note_two' => "内改善它,否则你在本站的账号将被禁止。如果你不明白什么是分享率,请仔细阅读以下说明。", + 'text_first_time_download_notice' => "第一次下载提示", + 'text_first_time_download_note' => "你好!
这可能是你第一次在本站下载种子。
在此之前请阅读以下几个简短的注意事项。", + 'text_this_is_private_tracker' => "这是非公开BT站点,有分享率要求", + 'text_private_tracker_note_one' => "这是非公开BT站点(Private Tracker),即我们的Tracker提供给注册会员使用。", + 'text_learn_more' => "关于非公开BT站点,见", + 'text_nexuswiki' => "NexusWiki", + 'text_private_tracker_note_two' => "要维持你的会员资格,你必须保持一个最低要求的上传量/下载量的比值(即分享率)。分享率过低将导致你失去在这里的会员资格。", + 'text_see_ratio' => "关于分享率要求,见", + 'text_private_tracker_note_three' => "你当前的分享率会一直显示在导航菜单的正下面,请经常关注它。", + 'text_private_tracker_note_four' => "怎样才能获得良好的分享率?
最好的方式是一直保持你的BT客户端处于运行状态,为你下载的资源做种直到删除相应的文件为止。", + 'text_use_allowed_clients' => "只能使用允许的BT客户端", + 'text_allowed_clients_note_one' => "BT客户端有很多种。但是在本站,我们允许其中的部分。其它客户端(如比特彗星,迅雷)属于被禁范畴,我们的Tracker不会接受其连接请求。", + 'text_why_banned' => "关于为什么禁止一些客户端,见", + 'text_allowed_clients_note_two' => "你可以在", + 'text_allowed_clients_note_three' => "中看到所有被允许的客户端。如果你不清楚该使用哪个客户端,可以选择以下两个推荐之一:", + 'title_download' => "下载", + 'text_for' => "支持平台:", + 'text_for_more_information_read' => "了解更多信息,见", + 'text_rules' => "规则", + 'text_and' => "和", + 'text_faq' => "常见问题", + 'text_let_me_download' => "我会提高分享率的。", + 'text_notice_not_show_again' => "下次不显示此提示", + 'text_notice_always_show' => "每次都会显示此提示,直到你改善了分享率为止。", + 'submit_download_the_torrent' => "下载种子文件", +); + +?> diff --git a/lang/chs/lang_edit.php b/lang/chs/lang_edit.php new file mode 100644 index 00000000..f1592481 --- /dev/null +++ b/lang/chs/lang_edit.php @@ -0,0 +1,72 @@ + "编辑种子 - ", + 'text_cannot_edit_torrent' => "无法编辑该种子", + 'text_cannot_edit_torrent_note' => "你不是发种者,或者你没有正确登录。\n", + 'row_torrent_name' => "标题", + 'row_small_description' => "副标题", + 'row_nfo_file' => "NFO文件", + 'radio_keep_current' => "原文件", + 'radio_update' => "更新", + 'radio_remove' => "去除", + 'row_description' => "简介", + 'row_type' => "类型", + 'text_source' => "来源:", + 'select_choose_one' => "请选择", + 'text_codec' => "编码:", + 'text_standard' => "分辨率:", + 'text_processing' => "处理:", + 'row_quality' => "质量", + 'text_quality_note' => "只适用于视频文件。", + 'row_visible' => "显示", + 'checkbox_visible' => "在浏览页面显示", + 'text_visible_note' => "注意:有上传者时种子会自动显示,若没有种子一段时间(断种)则会隐藏。选中这项可手动加快该过程。同时请注意,隐藏的种子还是能被查看或搜索到,只是默认状态下不显示。", + 'row_anonymous_uploader' => "匿名上传", + 'checkbox_anonymous_note' => "不要在浏览页面显示用户名", + 'row_special_torrent' => "促销种子", + 'select_use_global_setting' => "使用全局设置", + 'select_forever' => "永久", + 'select_until' => "直到", + 'text_keep_current' => "原设置", + 'text_ie_for' => "时长", + 'text_promotion_until_note' => "(时间格式为'年年年年-月月-日日 时时:分分:秒秒')", + 'select_normal' => "普通", + 'select_free' => "免费", + 'select_two_times_up' => "2x上传", + 'select_free_two_times_up' => "免费&2x上传", + 'select_half_down' => "50%下载", + 'select_choose_torrent_state' => "设定种子的促销状态", + 'row_torrent_position' => "种子位置", + 'row_recommended_movie' => "推荐影片", + 'select_choose_recommended_movie' => "选择影片海报是否在首页“推荐热片”或“推荐经典”中显示", + 'select_hot' => "热门", + 'select_classic' => "经典", + 'select_recommended' => "推荐", + 'select_sticky' => "置顶", + 'select_choose_if_sticky' => "选择种子是否在种子页面置顶", + 'row_banned' => "禁止", + 'checkbox_banned' => "禁止", + 'submit_edit_it' => "编辑", + 'submit_revert_changes' => "重置", + 'text_delete_torrent' => "删除种子 - 原因:", + 'radio_dead' => "断种", + 'text_dead_note' => " 0 做种者 + 0 下载者 = 0 总同伴", + 'radio_dupe' => "重复", + 'radio_nuked' => "劣质", + 'radio_rules' => "违规", + 'text_req' => "(必填)", + 'radio_other' => "其他", + 'submit_delete_it' => "删除", + 'text_move_to_browse' => "类型变为种子区的 ", + 'text_move_to_special' => "类型变为音乐区的 ", + 'text_medium' => "媒介:", + 'row_pick' => "挑选", + 'row_check' => "勾选", + 'text_team' => "制作组", + 'text_audio_codec' => "音频编码", + 'row_content' => "内容", +); + +?> diff --git a/lang/chs/lang_faq.php b/lang/chs/lang_faq.php new file mode 100644 index 00000000..4cc30b3e --- /dev/null +++ b/lang/chs/lang_faq.php @@ -0,0 +1,12 @@ + "常见问题", + 'text_welcome_to' => "欢迎来到", + 'text_welcome_content_one' => "我们的目标是提供纯粹高品质的东西。因此,只有授权的用户才能发布种子。如果你有0-day资源的来源,请不要迟疑联系我们!

这是非公开BT站点,你必须注册后才能访问。", + 'text_welcome_content_two' => "在".$SITENAME."干任何事前,我们建议你先阅读站点的规则!规则只有简单几条,但我们要求用户严格遵照。

在使用前,请阅读".$SITENAME."用户协定。", + 'text_contents' => "目录", +); + +?> diff --git a/lang/chs/lang_fastdelete.php b/lang/chs/lang_fastdelete.php new file mode 100644 index 00000000..7758ac34 --- /dev/null +++ b/lang/chs/lang_fastdelete.php @@ -0,0 +1,13 @@ + "删除失败!", + 'std_missing_form_data' => "有项目没填", + 'text_no_permission' => "你没有权限删除该种子,只有版主及以上用户才可以。如果你想删除自己发布的种子,请联系他们。\n", + 'std_delete_torrent' => "删除种子", + 'std_delete_torrent_note' => "确认:你即将删除种子,点击", + 'std_here_if_sure' => "这里来确认。" +); + +?> diff --git a/lang/chs/lang_forummanage.php b/lang/chs/lang_forummanage.php new file mode 100644 index 00000000..81d8babc --- /dev/null +++ b/lang/chs/lang_forummanage.php @@ -0,0 +1,38 @@ + "论坛管理", + 'text_forum_management' => "论坛管理", + 'text_edit_forum' => "编辑论坛版块", + 'row_forum_name' => "版块名字", + 'row_forum_description' => "版块描述", + 'row_overforum' => "论坛分区", + 'row_moderator' => "版主", + 'text_moderator_note' => "最多3个版主。用','分割用户名", + 'row_minimum_read_permission' => "最低允许阅读等级", + 'row_minimum_write_permission' => "最低允许回复等级", + 'row_minimum_create_topic_permission' => "最低允许发布主题等级", + 'row_forum_order' => "论坛版块排序", + 'text_forum_order_note' => "按数字升序排列,即0显示在最顶端。", + 'submit_edit_forum' => "编辑论坛版块", + 'text_no_records_found' => "对不起,没有记录!", + 'text_add_forum' => "添加论坛版块", + 'text_make_new_forum' => "添加新的版块", + 'submit_overforum_management' => "论坛分区管理", + 'submit_add_forum' => "添加版块", + 'col_name' => "名字", + 'col_overforum' => "论坛分区", + 'col_read' => "读", + 'col_write' => "回复", + 'col_create_topic' => "创建主题", + 'col_moderator' => "版主", + 'col_modify' => "修改", + 'text_not_available' => "暂无", + 'text_edit' => "编辑", + 'text_delete' => "删除", + 'js_sure_to_delete_forum' => "你确定要删除此论坛版块吗?", + 'submit_make_forum' => "创建论坛版块" +); + +?> diff --git a/lang/chs/lang_forums.php b/lang/chs/lang_forums.php new file mode 100644 index 00000000..b49a916d --- /dev/null +++ b/lang/chs/lang_forums.php @@ -0,0 +1,203 @@ + "论坛当前没有活跃用户。", + 'text_stats' => "数据", + 'text_our_members_have' => "用户共发布", + 'text_posts_in_topics' => "个帖子,", + 'text_in_topics' => "个主题。", + 'text_there' => "论坛共有", + 'text_online_user' => "个", + 'text_in_forum_now' => "在线用户。", + 'std_no_post_found' => "没有帖子", + 'text_quick_jump' => "跳转至", + 'submit_go' => "确定", + 'std_bad_forum_id' => "无效版块ID", + 'text_new_topic_in' => "新主题 - ", + 'text_forum' => "版块", + 'std_forum_error' => "论坛错误", + 'std_topic_not_found' => "没有找到该主题。", + 'text_reply_to_topic' => "回复主题:", + 'text_compose' => "撰写", + 'std_error' => "错误", + 'std_no_post_id' => "该ID的帖子不存在", + 'submit_submit' => "提交", + 'submit_preview' => "预览", + 'text_tags' => "标签", + 'text_smilies' => "表情", + 'text_ten_last_posts' => "10个最近帖子,按逆序排列", + 'text_by' => "", + 'text_at' => "", + 'head_edit_forum' => "编辑版块", + 'text_edit_forum' => "编辑版块", + 'row_forum_name' => "版块名字", + 'row_description' => "简介", + 'row_permission' => "权限", + 'text_minimum' => "", + 'select_minimum_class_view' => "及以上才能查看
", + 'select_minimum_class_post' => "及以上才能回复
", + 'select_minimum_class_topic' => "及以上才能发新主题
", + 'std_no_forum_id' => "版块ID不存在。", + 'std_must_specify_forum_name' => "你必须指定版块的名字。", + 'std_must_provide_forum_description' => "你必须填写版块简介。", + 'head_delete_forum' => "删除版块", + 'text_warning' => "** 警告! **", + 'text_deleting_forum_id' => "删除版块ID ", + 'text_will_also_delete' => "的同时也会删除", + 'text_posts_in' => "个帖子和", + 'text_topics' => "个主题。", + 'text_accept' => "同意", + 'text_cancel' => "取消", + 'std_unauthorised_performing_action' => "你没有该权限!", + 'head_new_topic' => "新主题", + 'std_must_enter_subject' => "你必须填写话题。", + 'std_subject_limited' => "话题长度过大。请减少字数。", + 'std_bad_topic_id' => "主题ID错误", + 'std_sorry' => "对不起...", + 'std_unauthorized_to_post' => "你没有发帖的权限。请查看(收件箱)", + 'std_permission_denied' => "没有该权限。", + 'std_no_body_text' => "正文不能为空。", + 'std_post_flooding' => "禁止滥发帖子。请在", + 'std_seconds_before_making' => "秒后重试。", + 'std_no_topic_id_returned' => "没有访回任何主题ID", + 'std_topic_locked' => "该主题已被锁定。", + 'std_post_id_not_available' => "帖子ID不存在", + 'std_unpermitted_viewing_topic' => "你没有阅读该主题的权限。", + 'text_prev' => "上一页", + 'text_next' => "下一页", + 'head_view_topic' => "查看主题", + 'text_forums' => "论坛", + 'text_ago' => "以前", + 'text_quote' => "引用", + 'text_last_edited_by' => "最后被", + 'text_last_edit_at' => "编辑于", + 'text_posts' => "帖子:", + 'text_ul' => "上传:", + 'text_dl' => "下载:", + 'text_ratio' => "分享率:", + 'text_class' => "等级:", + 'text_back_to_top' => "返回顶部", + 'title_sticky' => "置顶", + 'submit_sticky' => "置顶", + 'submit_unsticky' => "取消置顶", + 'submit_unlock' => "解除主题锁定", + 'submit_lock' => "锁定主题", + 'submit_delete_topic' => "删除主题", + 'text_rename_topic' => "重命名主题:", + 'submit_okay' => "确定", + 'text_move_thread_to' => "将该主题移至", + 'submit_move' => "移动", + 'text_topic_locked_new_denied' => "

该主题已被锁定;禁止发布新贴。

", + 'text_unpermitted_posting_here' => "

你没有在该版块回复的权限。

", + 'head_post_reply' => "回复", + 'std_forum_not_found' => "没有该版块。", + 'std_cannot_get_posts_count' => "无法获取帖子总数。", + 'std_delete_topic' => "删除主题", + 'std_delete_topic_note' => "确认:你即将删除主题,点击", + 'std_here_if_sure' => "这里来确认。", + 'std_no_topic_for_post' => "该帖子没有对应的主题", + 'std_denied' => "拒绝!", + 'std_body_empty' => "正文不能为空!", + 'std_subject_empty' => "话题不能为空!", + 'std_success' => "成功", + 'std_post_edited_successfully' => "帖子编辑成功。", + 'text_edit_post' => "编辑帖子", + 'std_how_could_this_happen' => "这是怎么回事?!", + 'std_post_not_found' => "该帖子不存在", + 'std_cannot_delete_post' => "无法删除帖子。此帖子为该主题的第一个帖子,你应该", + 'std_delete_topic_instead' => "删除该主题。", + 'std_delete_post' => "删除帖子", + 'std_delete_post_note' => "确认:你即将删除帖子,点击", + 'std_must_enter_new_title' => "你必须输入新的话题!", + 'std_not_permitted' => "禁止", + 'std_sql_error' => "SQL错误", + 'head_forum' => "版块", + 'col_topic' => "主题", + 'col_replies' => "回复", + 'col_views' => "查看", + 'col_author' => "作者", + 'col_last_post' => "最近回复", + 'text_no_topics_found' => "没有主题", + 'text_new_posts' => "新帖子", + 'text_locked_topic' => "锁定主题", + 'text_unpermitted_starting_new_topics' => "你没有在该版块发布新话题的权限。", + 'submit_view_unread' => "查看未读", + 'submit_new_topic' => "发新主题", + 'text_topics_with_unread_posts' => "新回复的帖子", + 'col_forum' => "版块", + 'text_more_than' => "找到超过", + 'text_items_found_displaying_first' => "个项目,显示最近", + 'text_catch_up' => "全部设置已读", + 'text_nothing_found' => "没有结果", + 'head_forum_search' => "论坛搜索", + 'col_post' => "帖子", + 'col_posted_by' => "帖子作者", + 'text_found' => "找到", + 'text_num_posts' => "个帖子", + 'text_search_on_forum' => "搜索论坛", + 'text_by_keyword' => "按关键字", + 'head_forums' => "论坛", + 'col_forums' => "版块", + 'col_topics' => "主题", + 'col_posts' => "帖子", + 'std_bad_forum_last_post' => "最近回复错误", + 'text_in' => "主题:", + 'text_edit' => "编辑", + 'text_delete' => "删除", + 'std_unknown_action' => "未知行为", + 'text_search' => "搜索", + 'text_view_unread' => "查看未读", + 'text_forum_manager' => "论坛管理", + 'title_reply_with_quote' => "引用该贴", + 'title_reply_directly' => "直接回复", + 'title_delete_post' => "删除帖子", + 'title_edit_post' => "编辑帖子", + 'text_quick_reply' => "快速回复", + 'submit_add_reply' => "提交", + 'text_add_reply' => "回复主题", + 'title_online' => "在线", + 'title_offline' => "不在线", + 'title_send_message_to' => "发短讯给", + 'title_report_this_post' => "举报该帖子", + 'title_new_topic' => "新主题", + 'col_moderator' => "版主", + 'text_apply_now' => "诚征中", + 'text_locked' => "锁定", + 'text_number' => "", + 'text_lou' => "楼", + 'there_is' => "此主题共被查看", + 'hits_on_this_topic' => "次", + 'title_read' => "已读", + 'title_unread' => "未读", + 'title_locked' => "锁定", + 'title_locked_new' => "锁定且未读", + 'text_highlight_topic' => "高亮显示主题", + 'select_color' => "无", + 'submit_change' => "确定", + 'head_view_unread' => "查看未读", + 'text_today' => "今日: ", + 'text_new_post' => "个今日", + 'text_posts_today' => "帖子。", + 'text_at_time' => "发布于", + 'text_blank' => "发布在", + 'text_last_posted_by' => "最新帖子由", + 'text_fast_search' => "快速搜索:", + 'text_go' => "给我搜", + 'submit_show_more' => "查看更多", + 'text_view_all_posts' => "显示全部帖子", + 'text_view_this_author_only' => "只看该作者", + 'title_jump_to_unread' => "跳至未读帖子", + 'text_new' => "新", + 'title_order_topic_desc' => "按发布时间降序", + 'title_order_topic_asc' => "按发布时间升序", + 'title_order_post_asc' => "按最近回复升序", + 'title_order_post_desc' => "按最近回复降序", + 'text_order' => "排序方式", + 'text_topic_desc' => "发布时间降序", + 'text_topic_asc' => "发布时间升序", + 'text_post_asc' => "最近回复升序", + 'text_post_desc' => "最近回复降序", +); + +?> diff --git a/lang/chs/lang_friends.php b/lang/chs/lang_friends.php new file mode 100644 index 00000000..a61916e1 --- /dev/null +++ b/lang/chs/lang_friends.php @@ -0,0 +1,38 @@ + "错误", + 'std_invalid_id' => "无效的ID", + 'std_access_denied' => "访问拒绝。", + 'std_no_user_id' => "没有用户的ID为", + 'std_unknown_type' => "未知类型", + 'std_user_id' => "用户", + 'std_already_in' => "已经在你的", + 'std_list' => "列表中。", + 'std_delete' => "删除", + 'std_delete_note' => "你真要删除一个", + 'std_click' => "吗?点击\n", + 'std_here_if_sure' => "这里来确认。", + 'std_no_friend_found' => "没有好友的ID为", + 'std_no_block_found' => "没有坏人的ID为", + 'head_personal_lists_for' => "社交名单 - ", + 'text_personallist' => "社交名单", + 'text_friendlist' => "好友", + 'text_friends_empty' => "暂无好友", + 'text_neighbors_empty' => "暂无邻居", + 'text_last_seen_on' => "最后访问时间:", + 'text_ago' => "以前", + 'text_remove_from_friends' => "删除好友", + 'text_send_pm' => "发送短讯", + 'text_added_you_to_friendslist' => "添你为好友者", + 'text_add_to_friends' => "加为好友", + 'text_blocklist_empty' => "你的黑名单为空", + 'text_blocked_users' => "黑名单", + 'text_find_user' => "搜索用户/浏览用户列表", + 'text_neighbors' => "邻居", + 'text_friend' => "好友", + 'text_block' => "坏人", +); + +?> diff --git a/lang/chs/lang_fun.php b/lang/chs/lang_fun.php new file mode 100644 index 00000000..12ee7457 --- /dev/null +++ b/lang/chs/lang_fun.php @@ -0,0 +1,44 @@ + "删除趣味内容?", + 'text_please_click' => "你真的要删除该趣味内容吗?点击\n", + 'text_here_if_sure' => "这里来确认。", + 'std_error' => "错误", + 'std_invalid_id' => "无效的ID", + 'std_permission_denied' => "访问被拒绝!", + 'text_fun_title' => "标题", + 'text_body' => "正文", + 'submit_okay' => "确定", + 'head_new_fun' => "新趣味内容", + 'text_submit_new_fun' => "提交新趣味内容", + 'text_new_compose' => "新撰写", + 'head_fun' => "趣味内容", + 'text_on' => "于", + 'text_blank' => "发布于", + 'text_ago' => "以前", + 'text_posted_by' => "由", + 'text_not_funny' => "无聊", + 'text_funny' => "有趣", + 'text_very_funny' => "爆笑", + 'head_edit_fun' => "编辑趣味内容", + 'text_edit_fun' => "编辑趣味内容", + 'std_body_is_empty' => "正文不能为空!", + 'std_title_is_empty' => "标题不能为空!", + 'std_fun_added_successfully' => "趣味条目成功添加。", + 'std_error_happened' => "出了点问题。", + 'std_the_newest_fun_item' => "最新的趣味条目", + 'std_posted_on' => "发布于", + 'std_need_to_wait' => "。请等它发布时间超过24小时后再添加新的趣味内容。", + 'std_are_you_sure' => "你确定吗?", + 'std_only_against_rule' => "你确定要禁止改趣味条目吗?注意只有当该趣味内容违反了规则后才需这么做。另外,你也可以同时给用户一次警告。", + 'std_reason_required' => "原因(必须填写): ", + 'std_reason_is_empty' => "你必须填写原因!", + 'std_success' => "成功", + 'std_fun_item_banned' => "该趣味内容被成功禁止。", + 'std_already_vote' => "你已经投过票了!", + 'std_cannot_give_bonus' => "系统无法给趣味内容发布者奖励魔力值。请将该问题报告给管理员。", +); + +?> diff --git a/lang/chs/lang_functions.php b/lang/chs/lang_functions.php new file mode 100644 index 00000000..e7c6fc39 --- /dev/null +++ b/lang/chs/lang_functions.php @@ -0,0 +1,293 @@ + "访问拒绝!", + 'std_fake_account' => "我们怀疑你在使用伪造账户,因此记录了本次行为!", + 'std_permission_denied' => "你没有该权限!", + 'std_already_logged_in' => "你已经登录!", + 'text_page_last_updated' => "本页面最后更新于", + 'text_browser_cookies_note' => "如果在启用Cookies后仍然无法登录,则你的登录Cookie可能有问题。我们建议你在删除Cookies后重试。删除Internet Explorer的Cookies的方法是,进入工具Internet选项...然后点击删除Cookies按钮。注意这样也会删除保存在你电脑中其他站点的Cookies。", + 'std_error' => "错误", + 'text_unable_to_send_mail' => "无法发送邮件。请将该错误报告给管理员。", + 'std_success' => "成功", + 'std_confirmation_email_sent' => "验证邮件已经发至", + 'std_please_wait' => "请等候邮件抵达。", + 'std_account_details_sent' => "新的帐户信息已发至", + 'std_locked' => " 锁定!(认证的最大错误尝试次数", + 'std_attempts_reached' => "次已到)", + 'std_your_ip_banned' => "我们怀疑你在欺骗系统,因此禁用了你的IP地址!", + 'std_login_failed' => "登录失败!", + 'std_login_failed_note' => "错误: 用户名或密码不正确!或者你还没有通过验证

忘记了密码?找回你的密码?", + 'std_failed' => "失败", + 'std_sorry' => "对不起", + 'std_oops' => "哦奥!", + 'std_invite_system_disabled' => "邀请系统当前未开放...", + 'std_open_registration_disabled' => "自由注册当前关闭,只允许邀请注册。如果你想加入,请找到能够邀请你进入本站的朋友:)我们只想知道有多少作弊者和吸血鬼在被踢后才开始想到珍惜帐户。是的,在被踢后不是你想回来就能回来。请具备邀请资格的用户注意,如果你在知情的情况下将邀请发给作弊者和行为不端者,你和被邀请者都会被踢。如果你想重新启用帐户必须经过我们同意。", + 'std_account_limit_reached' => "当前账户上限数已到。系统会经常删除不活动的帐户,请过段时间再试...", + 'std_the_ip' => "该IP", + 'std_used_many_times' => "已经被很多帐户使用...".$SITENAME."不允许该IP注册更多账户。", + 'std_invalid_image_code' => "图片代码无效!
不要返回,图片代码已被清除!

点击", + 'std_here_to_request_new' => "这里获取新的图片代码。", + 'row_security_image' => "验证图片:", + 'row_security_code' => "验证码:", + 'text_slots' => "连接数:", + 'text_unlimited' => "无限制", + 'std_server_load_very_high' => "服务器负载过高,正在重试,请稍后...", + 'std_too_many_users' => "太多用户。请刷新页面重试。", + 'text_unauthorized_ip' => "

403 Forbidden

未授权的IP地址。", + 'text_home' => " 首  页 ", + 'text_forums' => " 论  坛 ", + 'text_torrents' => " 种  子 ", + 'text_offers' => " 候  选 ", + 'text_request' => " 求  种 ", + 'text_upload' => " 发  布 ", + 'text_subtitles' => " 字  幕 ", + 'text_user_cp' => " 控制面板 ", + 'text_top_ten' => "排 行 榜", + 'text_log' => " 日  志 ", + 'text_rules' => " 规  则 ", + 'text_faq' => " 常见问题 ", + 'text_staff' => "管 理 组", + 'std_site_down_for_maintenance' => "站点关闭维护中,请稍后再访问...谢谢", + 'text_click_view_full_image' => "点击这里查看完整图像", + 'text_image_resized' => "图像被缩小,点击这里查看完整图像", + 'text_click_view_small_image' => "点击这里查看缩小图像", + 'text_login' => "登录", + 'text_signup' => "注册", + 'text_inf' => "无限", + 'title_donor' => "捐赠者", + 'title_warned' => "被警告者", + 'title_inbox_new_messages' => "收件箱 (有新短讯)", + 'title_inbox_no_new_messages' => "收件箱 (无新短讯)", + 'text_yes' => "是", + 'text_no' => "否", + 'text_unknown' => "未知", + 'text_welcome_back' => "欢迎回来", + 'text_staff_panel' => "管理组面板", + 'text_site_settings' => "站点设定", + 'text_logout' => "退出", + 'text_bonus' => "魔力值 ", + 'text_use' => "使用", + 'text_ratio' => "分享率:", + 'text_uploaded' => "上传量:", + 'text_downloaded' => "下载量:", + 'text_active_torrents' => "当前活动:", + 'title_torrents_seeding' => "当前做种", + 'title_torrents_leeching' => "当前下载", + 'text_connectable' => "可连接:", + 'text_the_time_is_now' => "当前时间:", + 'text_message_new' => " 新", + 'title_sentbox' => "发件箱", + 'title_inbox' => "收件箱", + 'title_buddylist' => "社交名单", + 'text_you_have' => "       你有", + 'text_new_message' => "条新短讯", + 'text_s' => "", + 'text_click_here_to_read' => "!点击查看       ", + 'text_your_friends' => "你的好友", + 'text_awaiting_confirmation' => "等待你的确认!", + 'text_website_offline_warning' => "警告:站点当前不在线!点击这里改变设置。", + 'text_there_is' => "       有", + 'text_new_report' => "条新举报信息       ", + 'text_new_staff_message' => "条新管理组信息       ", + 'text_search' => "搜索", + 'text_profile' => "个人资料", + 'text_chat' => "聊天", + 'text_dox' => "文档", + 'text_links' => "链接", + 'text_username' => "用户名:", + 'text_password' => "密码:", + 'submit_log_in' => "登录", + 'text_register' => "注册", + 'text_rules_link' => "规则", + 'text_faq_link' => "常见问题", + 'text_useragreement' => "用户协定", + 'text_prev' => "上一页", + 'text_next' => "下一页", + 'text_by' => "", + 'text_orphaned' => "(无此帐户)", + 'text_at' => "", + 'text_quote' => "引用", + 'text_edit' => "编辑", + 'text_delete' => "删除", + 'text_view_original' => "查看原始", + 'text_last_edited_by' => "最后被", + 'text_edited_at' => "编辑于", + 'col_type' => "类型", + 'col_name' => "标题", + 'col_dl' => "下载", + 'col_wait' => "等待", + 'col_edit' => "编辑", + 'col_visible' => "可见", + 'title_number_of_comments' => "评论数", + 'title_time_added' => "添加时间", + 'title_size' => "大小", + 'title_number_of_seeders' => "种子数", + 'title_number_of_leechers' => "下载数", + 'title_number_of_snatched' => "完成数", + 'col_uploader' => "发布者", + 'col_action' => "行为", + 'text_normal' => "普通", + 'text_free' => "免费", + 'text_two_times_up' => "2X", + 'text_free_two_times_up' => "2X免费", + 'text_half_down' => "50%", + 'text_half_down_two_up' => "2X 50%", + 'text_new_uppercase' => "新", + 'text_sticky' => "置顶", + 'title_download_torrent' => "下载本种", + 'text_h' => "时", + 'text_none' => "无", + 'text_anonymous' => "匿名", + 'text_promoted_torrents_note' => "高亮的种子是:   免费 | 2x上传 | 免费&2x上传 | 50%下载 | 50%下载&2x上传 | 30%下载
下载它们是提高分享率的好方式!", + 'std_file' => "文件", + 'std_does_not_exist' => "不存在", + 'std_access_permission_note' => "!
在设定前,请确保已恰当设置文件和目录的访问权限。请参考下面。

chmod -R 777 config (设置目录)。", + 'std_cannot_read_file' => "无法阅读文件", + 'std_cannot_serialize_file' => "无法序列化文件", + 'std_cannot_open_file' => "无法打开文件", + 'std_to_save_info' => "来保存信息", + 'text_cannot_save_info_in' => "无法将信息保存到文件(序列化出错)", + 'std_your_account_parked' => "你的帐户处于封存中。", + 'title_online' => "在线", + 'title_offline' => "不在线", + 'title_send_message_to' => "发短讯给", + 'title_report_this_comment' => "举报该评论", + 'text_bookmarks' => "收藏", + 'title_bookmark_torrent' => "收藏", + 'title_delbookmark_torrent' => "去除收藏", + 'text_mark' => "标记", + 'text_unmark' => "去除标记", + 'text_award' => "魔力值奖励:", + 'text_additional_notes' => "附加注释:", + 'title_view_reviews' => "点击查看点评", + 'title_has_new_comment' => "有新评论", + 'title_no_new_comment' => "无新评论", + 'row_external_info' => "外部信息", + 'row_imdb_url' => "IMDb链接", + 'text_imdb_url_note' => "(来自IMDb的链接。如电影The Dark Knight的链接是http://www.imdb.com/title/tt0468569/)", + 'text_artist' => "艺术家:", + 'text_album' => "专辑名:", + 'title_get_rss' => "获取RSS", + 'text_hot' => "热门", + 'text_classic' => "经典", + 'text_recommended' => "推荐", + 'title_view_nfo' => "查看NFO文件", + 'title_edit_torrent' => "编辑/删除种子", + 'title_time_alive' => "存活时间", + 'title_add_comments' => "添加评论", + 'text_at_time' => "发布于", + 'text_blank' => "发布在", + 'text_ago' => "前", + 'text_last_commented_by' => "最新评论由", + 'text_imdb' => "IMDb", + 'text_votes' => "票", + 'text_country' => "国家", + 'text_genres' => "类别", + 'text_director' => "导演", + 'text_starring' => "主演", + 'text_runtime' => "片长", + 'text_language' => "对白语言", + 'text_douban' => "豆瓣", + 'text_region' => "地区", + 'text_creator' => "主创", + 'text_awaiting_five_votes' => "等待5票", + 'text_invite' => "邀请 ", + 'text_send' => "发送", + 'text_tracks' => "曲目", + 'text_label' => "唱片公司", + 'text_tags' => "标签", + 'text_user_ip' => "用户IP", + 'text_location_main' => "地点主分类", + 'text_location_sub' => "地点次分类", + 'text_ip_range' => "IP范围", + 'text_min' => "分钟", + 'text_music' => " 音  乐 ", + 'title_reply_with_quote' => "引用", + 'title_add_reply' => "回复", + 'title_delete' => "删除", + 'title_edit' => "编辑", + 'title_reportbox' => "举报信箱", + 'title_staffbox' => "管理组信箱", + 'title_sticky' => "置顶", + 'text_new_news' => "条未读的重要消息       ", + 'std_no_user_named' => "没有用户的名字是", + 'text_banned' => "禁止", + 'text_are' => "", + 'text_is' => "", + 'select_choose_one' => "请选择", + 'text_space' => "", + 'text_day' => "天", + 'text_new_suspected_cheater' => "个新的作弊嫌疑者       ", + 'title_cheaterbox' => "作弊者", + 'text_will_end_in' => "剩余时间:", + 'text_alt_pageup_shortcut' => "Alt+Pageup", + 'text_alt_pagedown_shortcut' => "Alt+Pagedown", + 'text_shift_pageup_shortcut' => "Shift+Pageup", + 'text_shift_pagedown_shortcut' => "Shift+Pagedown", + 'text_code' => "代码", + 'std_invalid_id' => "无效的ID!基于安全考虑,我们记录了本次行为。", + 'text_smilies' => "表情", + 'col_type_something' => "输入...", + 'col_to_make_a' => "得到...", + 'text_year' => "年", + 'text_month' => "月", + 'text_day' => "天", + 'text_hour' => "时", + 'text_min' => "分", + 'select_color' => "颜色", + 'select_font' => "字体", + 'select_size' => "字号", + 'text_subject' => "主题:", + 'text_more_smilies' => "更多表情", + 'js_prompt_enter_url' => "你必须输入一个URL", + 'js_prompt_enter_title' => "你必须输入一个标题", + 'js_prompt_error' => "错误!", + 'js_prompt_enter_item' =>"输入一个列表的项目. 在列表的末尾, 按取消或将下一个留空", + 'js_prompt_enter_image_url' => "你必须输入一个完整的图像URL", + 'js_prompt_enter_email' => "你必须输入一个Email地址", + 'text_new' => "新撰写", + 'text_reply' => "回复", + 'submit_submit' => "提交", + 'submit_preview' => "预览", + 'text_tags' => "标签", + 'row_subject' => "主题", + 'row_body' => "正文", + 'text_peasant' => "Peasant", + 'text_user' => "User", + 'text_power_user' => "Power User", + 'text_elite_user' => "Elite User", + 'text_crazy_user' => "Crazy User", + 'text_insane_user' => "Insane User", + 'text_veteran_user' => "Veteran User", + 'text_extreme_user' => "Extreme User", + 'text_ultimate_user' => "Ultimate User", + 'text_nexus_master' => "Nexus Master", + 'text_vip' => "贵宾", + 'text_uploader' => "发布员", + 'text_retiree' => "养老族", + 'text_forum_moderator' => "论坛版主", + 'text_moderators' => "总版主", + 'text_administrators' => "管理员", + 'text_sysops' => "维护开发员", + 'text_staff_leader' => "主管", + 'text_short_year'=> "年", + 'text_short_month' => "月", + 'text_short_day' => "日", + 'text_short_hour' => "时", + 'text_short_min' => "分", + 'submit_edit' => "编辑", + 'text_banned_client_warning' => "你最近一次使用的BT客户端是被禁止的!点击这里。", + 'text_please_improve_ratio_within' => "请在", + 'text_or_you_will_be_banned' =>"内改善你的分享率,否则你的账号将被禁用!点击这里。", + 'text_size' => "大小", + 'text_downloads' => "下载", + 'text_attachment_key' => "附件", + 'text_not_found' => "无效", + 'text_thirty_percent_down' => "30%", + 'text_please_download_something_within' => "请在", + 'text_inactive_account_be_deleted' => "内做些下载。没有流量的用户会被删除账号。", +); + +?> diff --git a/lang/chs/lang_getrss.php b/lang/chs/lang_getrss.php new file mode 100644 index 00000000..788abde9 --- /dev/null +++ b/lang/chs/lang_getrss.php @@ -0,0 +1,45 @@ + "RSS订阅", + 'head_rss_feeds' => "RSS订阅", + 'std_error' => "错误", + 'std_no_row' => "请选择每页内容显示条数!", + 'std_done' => "完成!", + 'std_use_following_url' => "你可以在RSS阅读器(如Google Reader)使用以下URL:", + 'std_utorrent_feed_url' => "你可以在支持RSS订阅功能的BT客户端(如uTorrent)使用以下URL:", + 'row_categories_to_retrieve' => "检索分类", + 'row_feed_type' => "链接类型", + 'text_web_link' => "网页链接", + 'text_download_link' => "下载链接", + 'row_rows_per_page' => "每页条数", + 'submit_generatte_rss_link' => "生成RSS链接", + 'text_category' => "类型", + 'text_source' => "来源", + 'text_codec' => "编码", + 'text_standard' => "分辨率", + 'text_processing' => "处理", + 'text_medium' => "媒介", + 'text_team' => "制作组", + 'text_audio_codec' => "音频编码", + 'row_item_title_type' => "项目标题格式", + 'text_item_category' => "[类型] + ", + 'text_item_title' => "标题 + ", + 'text_item_small_description' => "[副标题] + ", + 'text_item_size' => "[大小] + ", + 'text_item_uploader' => "[发布者]", + 'row_show_bookmarked' => "显示收藏", + 'text_all' => "全部", + 'text_only_bookmarked' => "仅收藏", + 'text_show_bookmarked_note' => "仅适用BT客户端", + 'row_keyword' => "关键字", + 'text_with' => "匹配模式:", + 'select_and' => "和", + 'select_or' => "或", + 'select_exact' => "准确", + 'text_mode' => "", + 'text_keyword_note' => "只订阅标题中包含此关键字的项目" +); + +?> diff --git a/lang/chs/lang_getusertorrentlistajax.php b/lang/chs/lang_getusertorrentlistajax.php new file mode 100644 index 00000000..a3f999c1 --- /dev/null +++ b/lang/chs/lang_getusertorrentlistajax.php @@ -0,0 +1,20 @@ + "类型", + 'col_name' => "标题", + 'title_size' => "大小", + 'title_seeders' => "种子数", + 'title_leechers' => "下载数", + 'col_uploaded' => "上传", + 'col_downloaded' => "下载", + 'col_ratio' => "分享率", + 'col_anonymous' => "匿名", + 'col_time_completed' => "完成时间", + 'col_se_time' => "做种时间", + 'col_le_time' => "下载时间", + 'text_record' => "条记录", + 'text_no_record' => "没有记录", +); +?> diff --git a/lang/chs/lang_index.php b/lang/chs/lang_index.php new file mode 100644 index 00000000..182cc714 --- /dev/null +++ b/lang/chs/lang_index.php @@ -0,0 +1,104 @@ + "没有调查", + 'std_error' => "错误", + 'std_duplicate_votes_denied' => "不允许完全相同的投票选项!", + 'std_vote_not_counted' => "发生错误。你的投票没有被接受。", + 'std_option_unselected' => "请选择项目。", + 'text_news_page' => "发布", + 'text_recent_news' => "最近消息", + 'text_e' => "编辑", + 'text_d' => "删除", + 'text_hotmovies' => "热门", + 'text_classicmovies' => "经典", + 'text_free' => "免费", + 'text_two_times_up' => "2X", + 'text_free_two_times_up' => "2X免费", + 'text_shoutbox' => "群聊区", + 'text_message' => "聊天:", + 'sumbit_shout' => "我喊", + 'submit_clear' => "清空", + 'text_last_five_posts' => "论坛最新帖子", + 'col_topic_title' => "标题", + 'col_view' => "查看", + 'col_author' => "作者", + 'col_posted_at' => "发表时间", + 'text_in' => "版块:", + 'std_no_torrent_found' => "没有种子", + 'text_last_five_torrent' => "最近5个上传种子", + 'col_name' => "标题", + 'col_seeder' => "做种", + 'col_leecher' => "下载", + 'text_polls' => "投票 ", + 'text_new' => "新投票", + 'text_edit' => "编辑", + 'text_delete' => "删除", + 'text_votes' => "投票数:", + 'radio_blank_vote' => "弃权(\"我想偷看结果!\")", + 'submit_vote' => "投票", + 'text_previous_polls' => "以前的投票", + 'text_tracker_statistics' => "站点数据", + 'row_registered_users' => "注册用户 / 上限", + 'row_unconfirmed_users' => "未验证用户", + 'row_vips' => "VIP", + 'row_donors' => "捐赠者", + 'row_warned_users' => "被警告用户", + 'row_banned_users' => "被禁用户", + 'row_male_users' => "男生", + 'row_female_users' => "女生", + 'row_torrents' => "种子", + 'row_dead_torrents' => "断种", + 'row_seeders' => "做种数", + 'row_leechers' => "下载数", + 'row_peers' => "同伴", + 'row_seeder_leecher_ratio' => "做种数 / 下载数比例", + 'row_total_size_of_torrents' => "种子总大小", + 'row_total_uploaded' => "总上传量", + 'row_total_downloaded' => "总下载量", + 'row_total_data' => "总数据量", + 'text_no_users_day' => "过去24小时内没有活跃用户。", + 'text_no_active_users_now' => "当前没有活跃用户。", + 'text_no_user_torrenting' => "无 :(", + 'text_tracker_load' => "服务器负载", + 'text_our_tracker_load' => "网站同伴数负载:", + 'text_global_server_load' => "服务器负载: ", + 'text_whats_going_on' => "当前情况", + 'text_members_have_visited' => "个用户在过去24小时访问,欢迎我们的最新用户,", + 'text_users_browsing_now' => "个过去15分钟在线用户。", + 'text_peers_active_now' => "个当前做种或下载的用户。", + 'text_disclaimer' => "免责条款", + 'text_disclaimer_content' => "本站列出的文件并没有保存在本站的服务器上。本站仅负责连接,我们对被传播文件的内容一无所知。本站的链接均由用户自发提供。".$SITENAME."的管理员无法对用户的提交内容或其他行为负责。您不能使用".$SITENAME."传播或下载任何您没有使用许可的文件或材料,由此引起的后果由您自己承担。", + 'text_browser_note' => "获得本站最佳效果,请使用\"Internet\"Firefox\"且使用大于1024*768的分辨率。推荐BT客户端为 \"Azureus\"\"uTorrent\"", + 'title_show_or_hide' => "显示/隐藏", + 'text_links' => "友情链接", + 'text_manage_links' => "管理链接", + 'text_author' => "作者:", + 'text_datetime' => "时间:", + 'p_critic_reviews' => "影评家点评", + 'p_user_reviews' => "用户点评选", + 'head_home' => "首页", + 'sumbit_to_guest' => "对游客", + 'text_apply_for_link' => "申请链接", + 'text_ago' => "以前", + 'text_auto_refresh_after' => "", + 'text_seconds' => "秒后自动刷新", + 'text_funbox' => "趣味盒", + 'text_more_fun' => "更多", + 'text_new_fun' => "发布", + 'text_ban' => "禁止", + 'submit_fun' => "有趣", + 'submit_dull' => "无聊", + 'text_out_of' => "个用户(共", + 'text_people_found_it' => "票)认为它有趣。", + 'text_your_opinion' => "你觉得呢?", + 'text_vote_accepted' => "谢谢!你的投票已提交。", + 'row_users_active_today' => "今日访问用户数", + 'row_users_active_this_week' => "本周访问用户数", + 'row_active_browsing_users' => "当前访问用户数", + 'row_tracker_active_users' => "当前Tracker用户数", + 'text_detail' => "详情", +); + +?> diff --git a/lang/chs/lang_invite.php b/lang/chs/lang_invite.php new file mode 100644 index 00000000..b6485d80 --- /dev/null +++ b/lang/chs/lang_invite.php @@ -0,0 +1,51 @@ + "对不起", + 'std_permission_denied' => "没有该权限!", + 'head_invites' => "邀请", + 'std_no_invites_left' => "你没有剩余邀请名额。 :(

点击", + 'here_to_go_back' => "这里返回。", + 'text_invite_code_sent' => "邀请代码已发送!
", + 'text_invite_someone' => "邀请其他人加入", + 'text_s' => "", + 'text_invitation' => "个剩余邀请", + 'text_left' => "", + 'text_email_address' => "邮箱地址", + 'text_email_address_note' => "邮箱地址必须是有效的。被邀请人会收到你的邀请函。", + 'text_message' => "信息", + 'submit_invite' => "邀请", + 'text_invite_status' => "被邀者当前状态", + 'text_no_invites' => "没有被邀者", + 'text_username' => "用户名", + 'text_email' => "邮箱", + 'text_uploaded' => "上传", + 'text_downloaded' => "下载", + 'text_ratio' => "分享率", + 'text_status' => "状态", + 'text_confirm' => "确认", + 'text_confirmed' => "已确认", + 'text_pending' => "待定", + 'submit_confirm_users' => "确认用户", + 'sumbit_invite_someone' => "邀请其他人", + 'text_sent_invites_status' => "已发邀请状态", + 'text_no_invitation_sent' => "当前没有已发邀请", + 'text_hash' => "Hash", + 'text_send_date' => "发送日期", + 'text_invitation_body' => " +你好, + +我邀请你加入 $SITENAME, 这是一个拥有丰富资源的非开放社区. +如果你有兴趣加入我们请阅读规则并确认邀请.最后,确保维持一个良好的分享率 +分享允许的资源. + +欢迎到来! :) +", + 'text_invite_system' => "的邀请系统", + 'std_only' => "只有", + 'std_or_above_can_invite' => "及以上的用户才能发送邀请。", + 'text_email_restriction_note' => "你只能发送邀请给以下邮箱:", +); + +?> diff --git a/lang/chs/lang_iphistory.php b/lang/chs/lang_iphistory.php new file mode 100644 index 00000000..a28305de --- /dev/null +++ b/lang/chs/lang_iphistory.php @@ -0,0 +1,16 @@ + "错误", + 'std_invalid_id' => "无效的ID", + 'text_user_not_found' => "没有该用户", + 'head_ip_history_log_for' => "用户IP历史 - ", + 'text_historical_ip_by' => "用户IP地址历史 - ", + 'col_last_access' => "最近访问", + 'col_ip' => "IP", + 'col_hostname' => "主机名", + 'text_not_available' => "无", + 'text_duplicate' => "重复", +); +?> diff --git a/lang/chs/lang_ipsearch.php b/lang/chs/lang_ipsearch.php new file mode 100644 index 00000000..781a82ab --- /dev/null +++ b/lang/chs/lang_ipsearch.php @@ -0,0 +1,24 @@ + "错误", + 'std_invalid_ip' => "无效的IP地址。", + 'std_invalid_subnet_mask' => "无效的子网掩码。", + 'head_search_ip_history' => "搜索IP历史", + 'text_search_ip_history' => "搜索IP历史", + 'row_ip' => "IP", + 'row_subnet_mask' => "子网掩码", + 'submit_search' => "给我搜", + 'text_no_users_found' => "没有找到用户", + 'text_users_used_the_ip' => "个用户使用过此IP:", + 'col_username' => "用户名", + 'col_last_ip' => "最近IP", + 'col_last_access' => "最近访问", + 'col_ip_num' => "IP数", + 'col_last_access_on' => "此IP最近访问", + 'col_added' => "加入时间", + 'col_invited_by' => "邀请者", + 'text_not_available' => "无", +); +?> diff --git a/lang/chs/lang_linksmanage.php b/lang/chs/lang_linksmanage.php new file mode 100644 index 00000000..fce30728 --- /dev/null +++ b/lang/chs/lang_linksmanage.php @@ -0,0 +1,51 @@ + "申请链接", + 'text_apply_for_links' => "申请链接", + 'text_rules' => "交换链接规则:", + 'text_rule_one' => "1.申请人员请先将本站的链接".$SITENAME."放置在其网站,然后再向我们提出申请。", + 'text_rule_two' => "2.申请链接的网站不得涉及任何违法内容。".$SITENAME."的管理员不对申请网站的任何行为责任。", + 'text_rule_three' => "3.本站所做链接均为文字链接。", + 'text_rule_four' => "4.申请网站至少要有200名注册用户,或者平均日访问人数不少于50。", + 'text_rule_five' => "5.本站".$SITENAME."保留可不经过任何通知,自由修改或删除本站上的链接的权力。", + 'text_rule_six' => "6.如果你的网站符合以上条款,欢迎向我们".$SITENAME."提出交换链接的申请。然而,我们不保证接受所有申请。", + 'text_red_star_required' => "红星号(*)标记的区域必须填写", + 'text_site_name' => "网站名", + 'text_url' => "链接地址", + 'text_title' => "标语", + 'text_title_note' => "标语将显示在链接的提示上,如NexusPHP", + 'text_administrator' => "管理员", + 'text_administrator_note' => "要求填写管理员的真实姓名", + 'text_email' => "邮箱", + 'text_reason' => "理由", + 'submit_okay' => "确定", + 'submit_reset' => "清空", + 'std_error' => "错误", + 'std_no_sitename' => "网站名不能为空。", + 'std_no_url' => "链接地址不能为空。", + 'std_no_admin' => "管理员不能为空。请填写管理员的姓名。", + 'std_no_email' => "邮箱地址不能为空。", + 'std_invalid_email' => "邮箱地址无效。", + 'std_no_reason' => "理由不能为空。请填写申请理由。", + 'std_reason_too_short' => "理由过短。请详细填写。", + 'std_success' => "成功", + 'std_success_note' => "你的申请已成功提交。请等待我们的回复。", + 'text_sitename_note' => "申请网站的名字,如NexusPHP", + 'text_url_note' => "如http://www.nexusphp.com", + 'text_email_note' => "请填写申请网站的管理员的邮箱地址,便于我们联系", + 'std_missing_form_data' => "请填写必填项目。", + 'std_unable_creating_new_link' => "无法创建新的链接。", + 'std_links_manage' => "管理链接", + 'text_add_link' => "添加链接", + 'text_manage_links' => "管理链接", + 'text_modify' => "修改", + 'text_edit' => "编辑", + 'text_delete' => "删除", + 'text_no_links_found' => "对不起,当前没有任何链接!", + 'text_edit_link' => "编辑链接", + 'js_sure_to_delete_link' => "你确定要删除此链接?", +); + +?> diff --git a/lang/chs/lang_log.php b/lang/chs/lang_log.php new file mode 100644 index 00000000..7963efa6 --- /dev/null +++ b/lang/chs/lang_log.php @@ -0,0 +1,66 @@ + "对不起...", + 'std_permission_denied_only' => "你没有该权限。只有", + 'std_or_above_can_view' => "及以上等级的用户才能查看日志。

请查看常见问题了解更多关于用户等级和权限的信息。

" .$SITENAME."管理组
", + 'head_site_log' => "常规日志", + 'text_search_log' => "搜素常规日志", + 'submit_search' => "给我搜", + 'text_log_empty' => "
没有日志

", + 'title_time_added' => "时间", + 'col_date' => "日期", + 'col_event' => "事件", + 'time_zone_note' => "

时间为北京时间。

\n", + 'text_daily_log' => " 常 规 日 志 ", + 'text_chronicle' => " 史  册 ", + 'text_code_update' => " 代 码 更 新 ", + 'text_funbox' => " 趣 味 盒 ", + 'text_news' => " 首 页 公 告 ", + 'text_poll' => " 投  票 ", + 'std_error' => "错误", + 'std_invalid_action' => "无效的行为", + 'head_chronicle' => "史册", + 'text_search_chronicle' => "搜索史册", + 'text_chronicle_empty'=> "史册没有记录
", + 'col_modify' => "行为", + 'text_edit' => "编辑", + 'text_delete' => "删除", + 'submit_add' => "添加", + 'text_add_chronicle' => "添加史册记录", + 'std_permission_denied' => "对不起!你没有该权限。", + 'submit_okay' => "确定", + 'text_edit_chronicle' => "编辑史册记录", + 'head_code_update' => "代码更新", + 'text_search_code_update' => "搜索代码更新事件", + 'text_add_code_update' => "添加代码更新记录", + 'text_edit_codeupdate' => "编辑代码更新记录", + 'text_codeupdate_empty' => "没有代码更新记录
", + 'head_funbox' => "趣味盒", + 'head_news' => "首页公告", + 'text_search_news' => "搜索首页公告", + 'text_news_empty' => "没有首页公告
", + 'col_title' => "标题", + 'col_body' => "正文", + 'std_delete_poll' => "删除投票", + 'std_delete_poll_confirmation' => "你确定要删除该投票吗?点击", + 'std_here_if_sure' => "这里来确认。", + 'std_sorry' => "对不起...", + 'std_no_polls' => "暂时没有投票!", + 'head_previous_polls' => "以前的投票", + 'text_previous_polls' => "以前的投票", + 'text_ago' => "以前", + 'text_votes' => "投票数:", + 'text_in' => "范围:", + 'text_funbox_empty' => "趣味盒是空的
", + 'text_search_funbox' => "搜索趣味盒", + 'text_title' => "标题", + 'text_body' => "正文", + 'text_both' => "两者", + 'text_all' => "所有", + 'text_normal' => "普通", + 'text_mod' => "机密", +); + +?> diff --git a/lang/chs/lang_login.php b/lang/chs/lang_login.php new file mode 100644 index 00000000..dbdb38de --- /dev/null +++ b/lang/chs/lang_login.php @@ -0,0 +1,35 @@ + "未登录!", + 'p_error' => "错误:", + 'p_after_logged_in' => "该页面必须在登录后才能访问", + 'p_need_cookies_enables' => "注意: 你需要启用cookies才能登录或切换语言", + 'p_fail_ban' => "次连续登录失败将导致你的IP地址被禁用!", + 'p_you_have' => "你还有", + 'p_remaining_tries' => "次尝试机会", + 'p_no_account_signup' => "还没有账号? 马上注册!", + 'p_forget_pass_recover' => "忘记了密码? 通过邮件来找回密码", + 'p_resend_confirm' => "没有收到验证邮件或验证链接无法打开? 重新发送验证邮件", + 'rowhead_username' => "用户名:", + 'rowhead_password' => "密码:", + 'button_login' => "登录", + 'button_reset' => "重置", + 'text_auto_logout' => "自动登出:", + 'text_restrict_ip' => "限制IP:", + 'text_ssl' => "SSL (HTTPS):", + 'checkbox_auto_logout' => " 15分钟后自动登出", + 'checkbox_restrict_ip' => " 限制只能使用本IP登录", + 'checkbox_ssl' => " 使用SSL数据加密协议浏览网站(浏览器)", + 'checkbox_ssl_tracker' => " 使用SSL数据加密协议连接Tracker(BT客户端)", + 'text_advanced_options' => "高级选项:", + 'text_helpbox' => "求助区", + 'text_helpbox_note' => "注册或登录遇到问题?请在此留言", + 'text_message' => "留言:", + 'sumbit_shout' => "发送", + 'submit_clear' => "清空", + 'text_select_lang' => "Select Site Language: ", + 'head_login' => "登录", +); +?> diff --git a/lang/chs/lang_mailtest.php b/lang/chs/lang_mailtest.php new file mode 100644 index 00000000..19f11e95 --- /dev/null +++ b/lang/chs/lang_mailtest.php @@ -0,0 +1,18 @@ + "邮件测试", + 'text_mail_test' => "邮件测试", + 'row_enter_email' => "输入邮箱地址", + 'text_enter_email_note' => "输入用于接收测试邮件的邮箱地址,如yourname@gmail.com", + 'submit_send_it' => "发送!", + 'text_smtp_testing_mail' => "测试邮件", + 'std_error' => "错误", + 'std_invalid_email_address' => "邮箱地址无效!", + 'mail_test_mail_content' => "你好,如果你看见这个信息,你的SMTP邮件发送功能正常。祝愉快!", + 'std_success' => "成功", + 'std_success_note' => "没有错误发生,但这不意为着邮件肯定已成功发送。请检查邮箱。" +); + +?> diff --git a/lang/chs/lang_makepoll.php b/lang/chs/lang_makepoll.php new file mode 100644 index 00000000..3e998206 --- /dev/null +++ b/lang/chs/lang_makepoll.php @@ -0,0 +1,24 @@ + "错误", + 'std_no_poll_id' => "不存在此投票ID", + 'std_missing_form_data' => "请填写必填项目!", + 'head_edit_poll' => "编辑投票", + 'text_edit_poll' => "编辑投票", + 'head_new_poll' => "新的投票", + 'text_day' => "天", + 'text_hour' => "时", + 'text_current_poll' => "注意:当前投票", + 'text_is_only' => "发布仅", + 'text_old' => "。", + 'text_make_poll' => "新的投票", + 'text_question' => "问题", + 'text_option' => "选项", + 'submit_edit_poll' => "编辑投票", + 'submit_create_poll' => "创建投票", + 'text_required' => " 必须填写" +); + +?> diff --git a/lang/chs/lang_messages.php b/lang/chs/lang_messages.php new file mode 100644 index 00000000..6db9f36a --- /dev/null +++ b/lang/chs/lang_messages.php @@ -0,0 +1,81 @@ + "错误", + 'std_invalid_mailbox' => "无效的短讯箱", + 'text_inbox' => "收件箱", + 'text_sentbox' => "发件箱", + 'text_sender' => "发讯者", + 'text_receiver' => "收讯者", + 'col_status' => "状态", + 'col_subject' => "主题", + 'col_date' => "日期", + 'col_act' => "行为", + 'text_no_messages' => "没有短讯", + 'text_remove_from_friends' => "[删除好友]", + 'text_add_to_friends' => "[加为好友]", + 'submit_move_to' => "移至", + 'text_or' => " 或 ", + 'submit_delete' => "删除", + 'text_unread_messages' => " 未读短讯", + 'text_read_messages' => " 已读短讯", + 'text_mailbox_manager' => "短讯箱管理", + 'std_no_permission' => "你没有阅读该短讯的权限。", + 'text_to' => "至", + 'text_from' => "自", + 'text_new' => "(新)", + 'text_reply' => "回复", + 'text_delete' => "删除", + 'text_forward_pm' => "转发短讯", + 'std_cannot_move_messages' => "无法移动短讯!", + 'std_cannot_delete_messages' => "无法删除短讯!", + 'std_no_action' => "无行为", + 'std_no_permission_forwarding' => "你没有转发该短讯的权限。", + 'row_to' => "至:", + 'row_original_receiver' => "原收讯者:", + 'row_original_sender' => "原发讯者:", + 'row_subject' => "主题:", + 'row_message' => "正文:", + 'checkbox_save_message' => "保存短讯", + 'submit_forward' => "转发", + 'std_no_such_user' => "对不起,不存在该用户名的账号。", + 'std_rufused' => "拒绝", + 'std_user_blocks_your_pms' => "该用户拒绝接受你的短讯。", + 'std_user_accepts_friends_pms' => "该用户只接受其好友的短讯。", + 'std_user_blocks_all_pms' => "该用户拒绝接受一切短讯。", + 'std_success' => "成功", + 'std_pm_forwarded' => "转发成功", + 'head_editing_mailboxes' => "编辑短讯箱", + 'text_editing_mailboxes' => "编辑短讯箱", + 'text_add_mailboxes' => "添加短讯箱", + 'text_extra_mailboxes_note' => "你可以添加额外的短讯箱。你不必只使用收件箱。", + 'submit_add' => "添加", + 'text_edit_mailboxes' => "编辑短讯箱", + 'text_edit_mailboxes_note' => "你可以编辑名字,或者删除短讯箱。
注意:删除短讯箱将导致其中所有短讯被删除。", + 'text_no_mailboxes_to_edit' => "没有可编辑的短讯箱。", + 'submit_edit' => "编辑", + 'std_no_message_id' => "没有该ID的短讯。", + 'std_could_not_delete_message' => "无法删除该短讯。", + 'text_jump_to' => "短讯箱:", + 'select_inbox' => "收件箱", + 'select_sentbox' => "发件箱", + 'submit_go' => "给我搜", + 'input_check_all' => "全选", + 'input_uncheck_all' => "全不选", + 'title_unread' => "未读", + 'title_read' => "已读", + 'text_system' => "系统", + 'text_no_subject' => "无主题", + 'col_search_message' => "搜索短讯", + 'text_search' => "搜索:", + 'text_in' => "范围:", + 'select_title' => "标题", + 'select_body' => "正文", + 'select_both' => "两者", + 'submit_mark_as_read' => "设为已读", + 'std_cannot_mark_messages' => "短讯无法设为已读。", + 'std_no_message_selected' => "请选中要操作的短讯。", +); + +?> diff --git a/lang/chs/lang_moforums.php b/lang/chs/lang_moforums.php new file mode 100644 index 00000000..7dc51b2b --- /dev/null +++ b/lang/chs/lang_moforums.php @@ -0,0 +1,26 @@ + "论坛分区管理", + 'text_forum_management' => "论坛管理", + 'text_overforum_management' => "论坛分区管理", + 'col_name' => "名字", + 'col_viewed_by' => "最低允许查看等级", + 'col_modify' => "修改", + 'text_edit' => "编辑", + 'text_delete' => "删除", + 'js_sure_to_delete_overforum' => "你确定要删除此论坛分区吗?", + 'text_no_records_found' => "对不起,没有记录!", + 'text_new_overforum' => "新论坛分区", + 'text_overforum_name' => "名字", + 'text_overforum_description' => "描述", + 'text_minimum_view_permission' => "最低允许阅读等级", + 'text_overforum_order' => "论坛分区排序", + 'text_overforum_order_note' => "按数字升序排列,即0显示在最顶端。", + 'submit_make_overforum' => "创建新的分区", + 'text_edit_overforum' => "编辑分区", + 'submit_edit_overforum' => "编辑分区" +); + +?> diff --git a/lang/chs/lang_moresmilies.php b/lang/chs/lang_moresmilies.php new file mode 100644 index 00000000..d594c1d9 --- /dev/null +++ b/lang/chs/lang_moresmilies.php @@ -0,0 +1,9 @@ + "更多可点表情", + 'text_close' => "关闭", +); + +?> diff --git a/lang/chs/lang_mybonus.php b/lang/chs/lang_mybonus.php new file mode 100644 index 00000000..d8236826 --- /dev/null +++ b/lang/chs/lang_mybonus.php @@ -0,0 +1,128 @@ + "对不起!", + 'std_karma_system_disabled' => "魔力值系统当前处于关闭中。", + 'std_points_active' => "不过你的魔力值仍在计算中。", + 'text_success_upload' => "祝贺你,你成功增加了上传值!", + 'text_success_invites' => "祝贺你,你获得了1个新的邀请名额!", + 'text_success_vip' => "祝贺你,你获得了一个月的", + 'text_success_vip_two' => "资格!", + 'text_no_permission' => "错误!你没有该权限。", + 'text_success_custom_title' => "祝贺你,你获得了".$CURUSER[title]."头衔!", + 'text_success_gift' => "你成功赠送了魔力值。", + 'head_karma_page' => "的魔力值", + 'text_karma_system' => "魔力值系统", + 'text_exchange_your_karma' => "用你的魔力值(当前", + 'text_for_goodies' => ")换东东!", + 'text_no_buttons_note' => "如果按钮不可点,则你的魔力值不足以交换该项。", + 'col_option' => "项目", + 'col_description' => "简介", + 'col_points' => "价格", + 'col_trade' => "交换", + 'text_username' => "用户名:", + 'text_to_be_given' => "赠送量:", + 'text_karma_points' => " 个魔力值!", + 'text_enter_titile' => "输入你想要的特殊头衔 ", + 'text_click_exchange' => " 点击交换!", + 'text_enter_receiver_name' => "输入赠送魔力值对象的用户名,选择赠送量然后点击赠送!", + 'text_min' => "最少", + 'text_max' => "最多", + 'submit_karma_gift' => "赠送", + 'text_plus_only' => "及以上方可!", + 'submit_exchange' => "交换", + 'text_unavailable' => "当前不可用!", + 'text_more_points_needed' => "需要更多魔力值", + 'text_what_is_karma' => "魔力值到底是什么玩意儿,我怎样才能得到它?", + 'text_get_by_seeding' => "做种每小时将得到如下的魔力值", + 'text_for_seeding_torrent' => " * 你的做种数 (做种数最多计", + 'text_torrent' => "个", + 'text_donors_always_get' => "捐赠者每次将得到", + 'text_times_of_bonus' => "倍的魔力值", + 'text_other_things_get_bonus' => "其他获取方式", + 'text_point' => "个魔力值", + 'text_upload_torrent' => "发布新种子 = ", + 'text_upload_subtitle' => "上传一个字幕 = ", + 'text_start_topic' => "发布新主题 = ", + 'text_make_post' => "回复帖子 = ", + 'text_add_comment' => "发布种子、候选的评论 = ", + 'text_poll_vote' => "参与一次调查投票 = ", + 'text_offer_vote' => "参与一次候选投票 = ", + 'text_funbox_vote' => "参与一次趣味盒投票 = ", + 'text_rate_torrent' => "评分种子 = ", + 'text_say_thanks' => "说谢谢 = ", + 'text_receive_thanks' => "收到感谢 = ", + 'text_funbox_reward' => "发布的趣味盒内容获得用户较高的评价(详见规则)", + 'text_howto_get_karma_four' => " +

注意点

+
    ", + 'text_howto_get_karma_five' => "
  • 与获取相反的事件也会消耗你的魔力值。
    如:如果你上传种子后又删除了它,你会先得到然后又失去", + 'text_howto_get_karma_six' => "。
  • +
  • 站点还有其他获取魔力值的事,请慢慢探索。:)
  • +
  • 管理组可以剥夺或发放魔力值,视用户是违反规则还是做贡献而定。
  • +
", + 'std_no_permission' => "没有该权限", + 'std_class_above_vip' => "你的等级比VIP高!", + 'text_wasted_karma' => "我刚刚浪费了魔力值", + 'text_huh' => "恩?", + 'text_karma_self_giving_warning' => "哥们,你玩够了吗...
你不能将魔力值送给自己...
如果要送,选择其他用户!

点击返回魔力值页面。", + 'text_receiver_not_exists' => "对不起...
不存在该用户。

点击回到你的魔力值页面。", + 'text_oups' => "啊哦!", + 'text_not_enough_karma' => "对不起,你没有足够的魔力值!
点击回到你的魔力值页面。", + 'text_cheat_alert' => "想作弊?没门!", + 'text_not_enough_bonus' => "对不起,你没有足够的魔力值。还有,你怎么到这来的?", + 'text_uploaded_one' => "1.0 GB上传量", + 'text_uploaded_note' => "如果有足够的魔力值,你可以用它来换取上传量。交易完成后,你的魔力值会减少,上传量则会增加。", + 'text_uploaded_two' => "5.0 GB上传量", + 'text_uploaded_three' => "10.0 GB上传量", + 'text_buy_invite' => "1个邀请名额", + 'text_buy_invite_note' => "如果有足够的魔力值,你可以用它来换取邀请名额。交易完成后,你的魔力值会减少,邀请名额数则会增加。", + 'text_custom_title' => "自定义头衔", + 'text_custom_title_note' => "如果有足够的魔力值,你就可以给自己定一个头衔了。注意:禁止使用脏话、攻击性的词汇或用户等级作为头衔。交易完成后,你的魔力值会减少,你的头衔将变成自定义的。", + 'text_vip_status' => "贵宾待遇", + 'text_vip_status_note' => "如果有足够的魔力值,你可以用它来换取一个月的贵宾待遇。交易完成后,你的魔力值会减少,同时你的等级将变为贵宾。", + 'text_bonus_gift' => "赠送魔力值", + 'text_bonus_gift_note' => "可能你不需要魔力值,为什么不把它送给那些需要的人呢?你可以把自己的魔力值作为礼物送给别人。交易完成后,你的魔力值会减少,礼物接收者的魔力值则会增加。同时,接收者会收到一条关于你的馈赠的短讯。", + 'text_error' => "错误", + 'text_ratio_too_high' => "分享率已很高", + 'text_bonus_formula_one' => "每小时获得的魔力值点数由下面的公式给出
    \"A
    \"B
+式中
  • A为中间变量
  • Ti为第i个种子的生存时间, 即自种子发布起到现在所经过的时间, 单位是周
  • T0为参数。T0 = ", + 'text_bonus_formula_two' => "
  • Si为第i个种子的大小,单位是GB
  • Ni为第i个种子当前的做种者数
  • N0为参数。N0 = ", + 'text_bonus_formula_three' => "
  • B为1小时中用户获得的做种魔力值点数
  • B0为参数,代表用户1小时获得魔力值的上限。B0 = ", + 'text_bonus_formula_four' => "
  • L为参数。L = ", + 'text_bonus_formula_five' => "
简言之,为做种人数少、文件体积大的种子做种能获得更多魔力值。", + 'text_user_with_ratio_above' => "分享率高于", + 'text_and_uploaded_amount_above' => "且上传量大于", + 'text_cannot_exchange_uploading' => "GB的用户不能换取更多的上传量。", + 'text_you_are_currently_getting' => "你当前每小时能获取", + 'text_per_hour' => "", + 'text_custom' => "自定义", + 'bonus_amount_not_allowed' => "魔力值数量不允许。你每次只能赠送25.0至1000.0个魔力值。", + 'text_system_charges_receiver' => "注意:系统向礼物接收者索取", + 'text_tax_bonus_point' => "个魔力值", + 'text_tax_plus' => " + ", + 'text_percent_of_transfered_amount' => "% * 赠送额的魔力值", + 'text_as_tax' => "作为税收。例如,当你选择赠送100个魔力值,接收者实际只收到", + 'text_tax_example_note' => "个魔力值。", + 'text_no_advertisements' => "天不显示广告", + 'text_no_advertisements_note' => "如果有足够的魔力值,你可以用它来换取一定期限内不显示广告的权限。交易完成后,你的魔力值会减少,同时在一定期限内你将看不到网站中的广告。如果在此期间你需要显示广告,你可以随时在控制面板开启它。", + 'text_success_no_ad' => "享受无广告的时间!", + 'submit_class_above_no_ad' => "你可在控制面板关闭广告", + 'submit_already_disabled' => "广告已可关闭", + 'text_click_on_ad' => "点击一次广告(每个广告只计一次) = ", + 'text_promotion_link_clicked' => "宣传链接获得一次点击(每个IP只计一次)= ", + 'text_charity_giving' => "慈善捐赠", + 'text_charity_giving_note' => "你可以将你的魔力值通过慈善捐赠送与有需要的用户群体。而且,完全由你决定赠与群体的条件。", + 'text_ratio_below' => "平均分配给用户:分享率低于", + 'text_and_downloaded_above' => "且下载量大于", + 'text_select_receiver_ratio' => "选择你想捐赠予的用户群体的分享率,选择你想赠送的魔力值总值,然后点击慈善捐赠!", + 'submit_charity_giving' => "慈善捐赠", + 'text_message' => "留言:", + 'bonus_amount_not_allowed_two' => "魔力值数量不允许。你每次只能赠送1000.0至50000.0个魔力值。", + 'bonus_ratio_not_allowed' => "分享率不符合要求!只有分享率低于0.8的用户需要慈善帮助。", + 'std_no_users_need_charity' => "暂时没有需要慈善帮助的用户。", + 'text_success_charity' => "谢谢!感谢你的慷慨捐赠。" +); + +?> diff --git a/lang/chs/lang_news.php b/lang/chs/lang_news.php new file mode 100644 index 00000000..29187dec --- /dev/null +++ b/lang/chs/lang_news.php @@ -0,0 +1,21 @@ + "删除最近消息", + 'std_are_you_sure' => "你真的要删除一条最近消息吗?如果确定,请点击", + 'std_here' => "这里", + 'std_if_sure' => "。", + 'std_error' => "错误", + 'std_news_body_empty' => "最近消息的正文不能为空!", + 'std_news_title_empty' => "最近消息的标题不能为空!", + 'std_something_weird_happened' => "奇怪的事情发生了。", + 'std_invalid_news_id' => "最近消息的ID不存在:", + 'head_edit_site_news' => "编辑最近消息", + 'text_edit_site_news' => "编辑最近消息", + 'text_notify_users_of_this' => "提醒用户查看这条消息。", + 'head_site_news' => "最近消息", + 'text_submit_news_item' => "提交新的消息" +); + +?> diff --git a/lang/chs/lang_offers.php b/lang/chs/lang_offers.php new file mode 100644 index 00000000..ae8f9081 --- /dev/null +++ b/lang/chs/lang_offers.php @@ -0,0 +1,142 @@ + "由", + 'text_inf' => "无限", + 'text_ratio' => "分享率:", + 'text_orphaned' => "(无此帐户)", + 'text_at' => "提交于", + 'text_edit' => "编辑", + 'text_delete' => "删除", + 'text_profile' => "个人资料", + 'text_pm' => "短讯", + 'text_report' => "举报", + 'text_last_edited_by' => "最后被", + 'text_edited_at' => "编辑于", + 'head_offer_error' => "候选错误", + 'std_error' => "错误!", + 'std_smell_rat' => "有地方不对劲!", + 'head_offer' => "候选", + 'submit_search' => "给我搜", + 'text_red_star_required' => "红星号(*)标记的区域必须填写", + 'text_offers_open_to_all' => "候选区对所有用户均开放...提高分享率的好方式!", + 'select_type_select' => "(请选择)", + 'row_type' => "类型", + 'row_title' => "标题", + 'row_post_or_photo' => "海报或图片", + 'text_link_to_picture' => "(图标的链接。不要加标签代码! 显示在简介里)", + 'row_description' => "简介", + 'submit_add_offer' => "添加", + 'col_type' => "类型", + 'col_title' => "标题", + 'title_time_added' => "添加时间", + 'col_offered_by' => "添加者", + 'submit_show_all' => "显示全部", + 'std_must_enter_name' => "你必须输入标题!", + 'std_must_select_category' => "你必须选择候选的类型!", + 'stdst_enter_description' => "你必须填写简介!", + 'std_wrong_image_format' => "图片必须是jpg, gif 或png格式。", + 'head_success' => "成功!", + 'head_error' => "错误!", + 'std_offer_exists' => "候选已经存在!", + 'text_view_all_offers' => "查看所有候选", + 'head_offer_detail_for' => "候选详情", + 'text_offer_detail' => "候选详情", + 'row_time_added' => "添加时间", + 'row_status' => "状态", + 'text_pending' => "待定", + 'text_allowed' => "允许", + 'text_denied' => "拒绝", + 'text_edit_offer' => "编辑候选", + 'text_delete_offer' => "删除候选", + 'report_offer' => "举报候选", + 'row_allow' => "允许", + 'submit_allow' => "允许", + 'submit_let_votes_decide' => "让投票决定", + 'row_vote' => "投票", + 'text_for' => "支持", + 'text_against' => "反对", + 'row_offer_allowed' => "候选已允许", + 'text_voter_receives_pm_note' => "当候选被上传时投票者会收到通知短讯!", + 'text_urge_upload_offer_note' => "该候选已经被允许!请尽快上传该种子。", + 'row_vote_results' => "投票状态", + 'text_see_vote_detail' => "[查看投票详情]", + 'row_report_offer' => "举报候选", + 'text_for_breaking_rules' => "该候选违反了规则 ", + 'submit_report_offer' => "举报", + 'text_add_comment' => "添加评论", + 'text_no_comments' => "没有评论", + 'std_access_denied' => "访问被拒绝!", + 'std_mans_job' => "这是人的工作", + 'std_have_no_permission' => "你没有该权限", + 'std_sorry' => "对不起", + 'std_no_votes_yet' => "暂时没有投票... ", + 'std_back_to_offer_detail' => "回到候选详情", + 'std_cannot_edit_others_offer' => "你没有权限编辑别人的候选", + 'head_edit_offer' => "编辑候选", + 'text_edit_offer' => "编辑候选", + 'submit_edit_offer' => "编辑候选", + 'head_offer_voters' => "候选投票者", + 'text_vote_results_for' => "候选投票状态", + 'col_user' => "用户", + 'col_uploaded' => "上传量", + 'col_downloaded' => "下载量", + 'col_ratio' => "分享率", + 'col_vote' => "投票", + 'std_already_voted' => "你已经投过票", + 'std_already_voted_note' => "

你已经投过票,每个候选只能投一次。

返回到", + 'std_back_to_offer_detail' => "候选详情

", + 'head_vote_for_offer' => "候选投票", + 'std_vote_accepted' => "投票成功", + 'std_vote_accepted_note' => "

你的投票成功了。

返回到", + 'std_cannot_delete_others_offer' => "你没有权限删除别人的候选", + 'std_delete_offer' => "删除候选", + 'std_delete_offer_note' => "你将要删除该候选。", + 'head_offers' => "候选", + 'text_offers_section' => "候选区", + 'text_add_offer' => "添加候选", + 'text_view_request' => "查看求种", + 'select_show_all' => "(显示全部)", + 'submit_view_only_selected' => "显示选择", + 'text_search_offers' => "搜索:", + 'title_comment' => "评论", + 'col_vote_results' => "投票", + 'text_nothing_found' => "空!", + 'text_yep' => "是", + 'text_nah' => "否", + 'title_show_vote_details' => "显示投票详情", + 'title_i_want_this' => "我要!", + 'title_do_not_want_it' => "没兴趣", + 'row_action' => "行为", + 'text_quick_comment' => "快速评论", + 'submit_add_comment' => "添加", + 'text_blank' => "提交于", + 'col_act' => "行为", + 'title_delete' => "删除", + 'title_edit' => "编辑", + 'col_timeout' => "过期", + 'row_info' => "信息", + 'text_reason_is' => "原因:", + 'submit_confirm' => "确定", + 'title_add_comments' => "添加评论", + 'text_at_time' => "发布于", + 'text_blank_two' => "发布在", + 'text_last_commented_by' => "最新评论由", + 'title_has_new_comment' => "有新评论", + 'title_no_new_comment' => "无新评论", + 'text_new' => "新", + 'std_cannot_vote_youself' => "你不能给自己提交的候选投票。", + 'text_rules' => "规则:", + 'text_rule_one_one' => "", + 'text_rule_one_two' => "及以上等级的用户可直接发布种子,无需经过候选。", + 'text_rule_one_three' => "或以上等级的用户可以添加候选。", + 'text_rule_two_one' => "当候选的支持票比反对票多", + 'text_rule_two_two' => "票时,候选被通过。", + 'text_rule_three_one' => "如候选在添加", + 'text_rule_three_two' => "小时后未被通过,它将被删除。", + 'text_rule_four_one' => "如在候选通过后", + 'text_rule_four_two' => "小时内用户没有发布种子,通过的候选将被删除。", +); + +?> diff --git a/lang/chs/lang_ok.php b/lang/chs/lang_ok.php new file mode 100644 index 00000000..957a576d --- /dev/null +++ b/lang/chs/lang_ok.php @@ -0,0 +1,24 @@ + "用户注册", + 'std_account_activated' => "注册成功,但账号未激活!", + 'account_activated_note' => "你的账号已成功创建。不过新用户需要在管理员批准后才能成为注册用户并访问站点。谢谢你的理解。", + 'account_activated_note_two' => "你的账号已成功创建。不过新用户需要在邀请者批准后才能成为注册用户并访问站点。谢谢你的理解。", + 'std_signup_successful' => "注册成功!", + 'std_confirmation_email_note' => "一封验证邮件已发送到你指定的邮箱(" , + 'std_confirmation_email_note_end' => ")。在使用账号前你必须按邮件内容指示通过验证。如果你不这样做,注册的新账号会在较短时间后被删除。", + 'head_sysop_activation' => "系统操作员账号激活", + 'std_sysop_activation_note' => "

系统操作员账号成功激活!

\n", + 'std_auto_logged_in_note' => "

你的账号已成功激活!你已自动登录。你现在可以访问首页并使用你的账号。

\n", + 'std_cookies_disabled_note' => "

你的账号已成功激活!但是,你没有自动登录。你可能需要打开浏览器的新窗口才能登录。
或者是因为你禁用了浏览器的cookies。你必须启用cookies才能使用你的账号。请启用cookies然后再次尝试登录

\n", + 'head_already_confirmed' => "已经通过验证", + 'std_already_confirmed' => "

已经通过验证

\n", + 'std_already_confirmed_note' => "

该账号已经通过验证。你可以使用它来登录

\n", + 'head_signup_confirmation' => "注册验证", + 'std_account_confirmed' => "

账号成功通过验证!

\n", + 'std_read_rules_faq' => "

在使用".$SITENAME."前,请务必先阅读并熟悉站点的规则常见问题

\n" +); + +?> diff --git a/lang/chs/lang_polloverview.php b/lang/chs/lang_polloverview.php new file mode 100644 index 00000000..c2f16f71 --- /dev/null +++ b/lang/chs/lang_polloverview.php @@ -0,0 +1,21 @@ + "错误", + 'head_poll_overview' => "投票概况", + 'text_polls_overview' => "投票概况", + 'col_id' => "ID", + 'col_added' => "添加时间", + 'col_question' => "问题", + 'text_no_users_voted' => "对不起...还没有用户投过票!", + 'text_no_poll_id' => "对不起...没有该ID的投票!", + 'text_poll_question' => "投票问题", + 'col_option_no' => "编号", + 'col_options' => "选项", + 'text_polls_user_overview' => "投票用户情况", + 'col_username' => "用户名", + 'col_selection' => "选项", +); + +?> diff --git a/lang/chs/lang_polls.php b/lang/chs/lang_polls.php new file mode 100644 index 00000000..3b6488cc --- /dev/null +++ b/lang/chs/lang_polls.php @@ -0,0 +1,20 @@ + "错误", + 'std_permission_denied' => "你没有该权限", + 'std_delete_poll' => "删除投票", + 'std_delete_poll_confirmation' => "你确定要删除该投票吗?点击\n", + 'std_here_if_sure' => "这里来确认。", + 'std_sorry' => "对不起...", + 'std_no_polls' => "暂时没有投票!", + 'head_previous_polls' => "以前的投票", + 'text_previous_polls' => "以前的投票", + 'text_ago' => "以前", + 'text_edit' => "编辑", + 'text_delete' => "删除", + 'text_votes' => "投票数:" +); + +?> \ No newline at end of file diff --git a/lang/chs/lang_preview.php b/lang/chs/lang_preview.php new file mode 100644 index 00000000..fa566b91 --- /dev/null +++ b/lang/chs/lang_preview.php @@ -0,0 +1,8 @@ + "预览" +); + +?> \ No newline at end of file diff --git a/lang/chs/lang_promotionlink.php b/lang/chs/lang_promotionlink.php new file mode 100644 index 00000000..ddcdc304 --- /dev/null +++ b/lang/chs/lang_promotionlink.php @@ -0,0 +1,29 @@ + "宣传链接", + 'text_promotion_link' => "宣传链接", + 'text_promotion_link_note_one' => "如果你很喜欢本站,想让更多人知道它,你可以使用你的宣传链接帮助我们宣传。", + 'text_promotion_link_note_two' => "每个用户都有唯一的确定其身份的宣传链接,由系统随机生成。当网友点击你的宣传链接时,他将会被转向本站,同时系统会对你进行奖励。", + 'text_you_would_get' => "你将获得", + 'text_bonus_points' => "个魔力值,如果你的宣传链接获得一次来自一个未记录的IP的点击。", + 'text_seconds' => "秒内最多奖励一次点击。", + 'text_your_promotion_link_is' => "你的宣传链接为:", + 'text_promotion_link_note_four' => "你可以通过各种方式将你的宣传链接传播出去,以下是一些例子。", + 'col_type' => "类型", + 'col_code' => "代码", + 'col_result' => "效果", + 'col_note' => "注释", + 'row_xhtml' => "XHTML 1.0", + 'text_xhtml_note' => "如果你有个人网站,你可以在页面中使用XHTML代码。", + 'row_html' => "HTML 4.01", + 'text_html_note' => "如果你有个人网站,你可以在页面中使用HTML代码。", + 'row_bbcode' => "BBCode论坛代码", + 'text_bbcode_note' => "大部分论坛程序(如vBulletin,Discuz!,PHPWind)支持名为BBCode的论坛代码。你可以将此代码放在你的签名档中。", + 'row_bbcode_userbar' => "论坛代码 - 个性条", + 'text_bbcode_userbar_note' => "获取你的个性条。如果你在控制面板中将你的隐私等级设为“高”,则不能使用个性条。", + 'row_bbcode_userbar_alt' => "论坛代码 - 个性条(另一方式)", + 'text_bbcode_userbar_alt_note' => "当上面方式不可用时使用此方式。如果你在控制面板中将你的隐私等级设为“高”,则不能使用个性条。" +) +?> diff --git a/lang/chs/lang_recover.php b/lang/chs/lang_recover.php new file mode 100644 index 00000000..c1ec09d7 --- /dev/null +++ b/lang/chs/lang_recover.php @@ -0,0 +1,39 @@ + "找回密码失败!(请看下面)", + 'std_missing_email_address' => "你必须输入邮箱地址!", + 'std_invalid_email_address' => "无效的邮箱地址!", + 'std_email_not_in_database' => "数据库中不存在该邮箱地址。", + 'std_error' => "错误", + 'std_database_error' => "数据库错误。请将该错误告诉管理员。", + 'std_unable_updating_user_data' => "无法更新用户数据。请将该错误向管理员报告。", + 'text_recover_user' => "找回用户名或密码", + 'text_use_form_below' => "使用以下表格重置密码,更新后的帐户信息会发送到你的邮箱。", + 'text_reply_to_confirmation_email' => "(请按邮件指示执行)", + 'text_note' => "注意:连续", + 'text_ban_ip' => "次错误尝试会导致你的IP地址被禁用!", + 'row_registered_email' => "注册邮箱:", + 'submit_recover_it' => "确定", + 'text_you_have' => "你还有", + 'text_remaining_tries' => "次尝试机会。", + + 'mail_this_link' => "这个链接", + 'mail_here' => "这里", + + 'mail_title' => " 网站密码重置验证", + 'mail_one' => "你好,

你请求重置你在".$SITENAME."网站账户的密码。
该账户的邮箱地址为 ", + 'mail_two' => " 。

发送请求的IP地址为 ", + 'mail_three' => ".

如果你没有发过该请求,请忽视本邮件。请勿回复本邮件。

如果你的确发过该请求,请点击这个链接来确认: ", + 'mail_four' => "
确认后,你的密码将被重置并通过另一封邮件发送给你。

------
".$SITENAME." 网站", + + 'mail_two_title' => " 网站账户信息", + 'mail_two_one' => "你好,

依你的请求,我们给你的账户生成了新的密码。

以下是你的账户重置后的信息:

用户名:", + 'mail_two_two' => "
密码:", + 'mail_two_three' => "

你可以从这里登录: ", + 'mail_two_four' => "

登录后你可以在控制面板-安全设定中修改密码。
------
".$SITENAME." 网站", + 'text_select_lang' => "Select Site Language: ", + 'std_user_account_unconfirmed' => "该账户还未通过验证。如果你没有收到验证邮件,试试重新发送验证邮件。", +); +?> diff --git a/lang/chs/lang_report.php b/lang/chs/lang_report.php new file mode 100644 index 00000000..b94cc1fc --- /dev/null +++ b/lang/chs/lang_report.php @@ -0,0 +1,41 @@ + "错误", + 'std_missing_reason' => "必须填写原因!", + 'std_message' => "消息", + 'std_successfully_reported' => "举报成功!", + 'std_already_reported_this' => "你已经举报过该项目!", + 'std_sorry' => "对不起", + 'std_cannot_report_oneself' => "你不能举报自己!", + 'std_invalid_user_id' => "无效的用户ID!", + 'std_cannot_report' => "你不能举报", + 'std_are_you_sure' => "确认", + 'text_are_you_sure_user' => "你确信用户", + 'text_to_staff' => "违反了规则,要向管理组举报?", + 'text_not_for_leechers' => "请不要用于举报吸血鬼,系统有脚本对付他们。", + 'text_reason_is' => "原因(必需填写) ", + 'submit_confirm' => "确信", + 'text_reason_note' => "请注意! 如果没有理由乱举报,你会受到警告。", + 'std_invalid_torrent_id' => "无效的种子ID!", + 'text_are_you_sure_torrent' => "你确信种子", + 'std_invalid_forum_id' => "无效的论坛帖子ID!", + 'text_are_you_sure_post' => "你确信论坛帖子(帖子ID:", + 'text_of_topic' => ";主题:", + 'text_of_torrent' => ";种子:", + 'text_of_offer' => ";候选:", + 'text_of_request' => ";求种:", + 'text_by' => ")的发布者", + 'std_invalid_comment_id' => "无效的评论ID!", + 'std_orphaned_comment' => "评论不属于任何内容。请向管理员报告此情况。", + 'text_are_you_sure_comment' => "你确信评论(ID:", + 'std_invalid_offer_id' => "无效的候选ID!", + 'text_are_you_sure_offer' => "你确信候选", + 'std_invalid_request_id' => "无效的求种ID!", + 'std_are_you_sure_request' => "你确信求种", + 'std_invalid_action' => "无效的行为。", + 'text_are_you_sure_subtitle' => "你确信字幕", +); + +?> diff --git a/lang/chs/lang_reports.php b/lang/chs/lang_reports.php new file mode 100644 index 00000000..b5e389a2 --- /dev/null +++ b/lang/chs/lang_reports.php @@ -0,0 +1,41 @@ + "噢哦!", + 'std_no_report' => "没有举报信息。", + 'head_reports' => "举报", + 'text_reports' => "举报", + 'col_added' => "时间", + 'col_reporter' => "举报者", + 'col_reporting' => "举报内容", + 'col_type' => "类型", + 'col_reason' => "原因", + 'col_dealt_with' => "处理", + 'col_action' => "行为", + 'text_yes' => "是", + 'text_no' => "否", + 'text_torrent' => "种子", + 'text_torrent_does_not_exist' => "种子不存在或已被删除。", + 'text_user' => "用户", + 'text_user_does_not_exist' => "用户不存在或已被删除。", + 'text_offer' => "候选", + 'text_offer_does_not_exist' => "候选不存在或已被删除。", + 'text_forum_post' => "论坛帖子", + 'text_post_does_not_exist' => "论坛帖子不存在或已被删除。", + 'text_post_id' => "帖子ID:", + 'text_of_topic' => ";主题:", + 'text_by' => ";作者:", + 'text_comment' => "评论", + 'text_comment_does_not_exist' => "评论不存在或已被删除。", + 'text_of_torrent' => ";种子:", + 'text_of_offer' => ";候选:", + 'text_comment_id' => "评论ID:", + 'text_subtitle' => "字幕", + 'text_subtitle_does_not_exist' => "字幕不存在或已被删除。", + 'text_for_torrent_id' => ";种子ID:", + 'submit_set_dealt' => "设为已处理", + 'submit_delete' => "删除", +); + +?> diff --git a/lang/chs/lang_rules.php b/lang/chs/lang_rules.php new file mode 100644 index 00000000..b43a4c92 --- /dev/null +++ b/lang/chs/lang_rules.php @@ -0,0 +1,8 @@ + "规则" +); + +?> diff --git a/lang/chs/lang_sendmessage.php b/lang/chs/lang_sendmessage.php new file mode 100644 index 00000000..37b72ada --- /dev/null +++ b/lang/chs/lang_sendmessage.php @@ -0,0 +1,24 @@ + "错误", + 'std_permission_denied' => "没有该权限", + 'head_send_message' => "发送短讯", + 'text_mass_message' => "群发短讯给", + 'text_users' => "个用户", + 'text_subject' => "主题:", + 'text_comment' => "评论:", + 'text_from' => "发送者:", + 'text_take_snapshot' => "使用快照:", + 'submit_send_it' => "发送", + 'submit_preview' => "预览", + 'text_templates' => "模版:", + 'submit_use' => "使用", + 'std_no_user_id' => "没有该ID的用户。", + 'text_message_to' => "发送短讯给", + 'checkbox_delete_message_replying_to' => "回复后删除", + 'checkbox_save_message_to_sendbox' => "保存到发件箱" +); + +?> \ No newline at end of file diff --git a/lang/chs/lang_settings.php b/lang/chs/lang_settings.php new file mode 100644 index 00000000..6c957c7b --- /dev/null +++ b/lang/chs/lang_settings.php @@ -0,0 +1,679 @@ + "是", + 'text_no' => "否", + 'text_website_settings' => "站点设定", + 'text_configuration_file_saving_note' => "在保存设定前,请确保配置文件和其目录的访问权限已正确配置。", + 'head_save_main_settings' => "保存主要设定", + 'std_message' => "信息", + 'std_click' => "点击", + 'std_here' => "这里", + 'std_to_go_back' => "返回。", + 'head_save_basic_settings' => "保存基础设定", + 'head_save_code_settings' => "保存代码设定", + 'head_save_bonus_settings' => "保存魔力值设定", + 'head_save_account_settings' => "保存账号设定", + 'head_save_torrent_settings' => "保存种子设定", + 'head_save_smtp_settings' => "保存SMTP设定", + 'head_save_security_settings' => "保存安全设定", + 'head_save_authority_settings' => "保存权限设定", + 'head_save_tweak_settings' => "保存次要设定", + 'head_save_bot_settings' => "保存机器人设定", + 'head_bot_settings' => "机器人设定", + 'head_tweak_settings' => "次要设定", + 'row_save_user_location' => "保存用户位置", + 'text_save_user_location_note' => "默认'否'。保存用户最近访问位置。", + 'row_log_user_ips' => "记录用户IP地址", + 'text_store_user_ips_note' => "默认'是'。当用户改变IP地址时做记录。", + 'row_kps_enabled' => "开启魔力值系统", + 'text_enabled' => "开启", + 'text_disabled_but_save' => "关闭但仍记录数值", + 'text_disabled_no_save' => "完全关闭", + 'text_kps_note' => "默认‘开启’。开启或关闭魔力值系统,是否记录数值。", + 'row_tracker_founded_date' => "网站创立时间", + 'text_tracker_founded_date_note' => "时间格式为'年年年年-月月-日日',将它设成网站创立的时间。", + 'row_save_settings' => "保存设定", + 'submit_save_settings' => "保存设定! (只需点击一次)", + 'head_smtp_settings' => "SMTP设定", + 'row_mail_function_type' => "邮件函数类型", + 'head_security_settings' => "安全设定", + 'row_enable_ssl' => "使用SSL(网页)", + 'row_enable_ssl_tracker' => "使用SSL(Tracker)", + 'text_optional' => "可选(允许用户选择)", + 'text_ssl_note' => "默认'否'。你的HTTP服务器需要做额外的配置才能支持SSL。另外,你需要一个证书(从证书签发机构申请或自签名)。", + 'row_enable_image_verification' => "开启图片验证码", + 'text_image_verification_note' => "默认'否'。用户在注册/登录/找回密码过程中需要填写验证码", + 'row_allow_email_change' => "允许用户改变邮箱", + 'text_email_change_note' => "默认'否'。设为'否'将禁止用户改变其邮箱地址。", + 'row_cheater_detection_level' => "作弊者检测级别", + 'select_none' => "无", + 'select_conservative' => "保守", + 'select_normal' => "正常", + 'select_strict' => "严格", + 'select_paranoid' => "多疑", + 'text_cheater_detection_level_note' => "默认'正常'。请将它设为最适合你的网站的级别。级别越严格,越降低同伴汇报速度。", + 'text_never_suspect' => "永远不怀疑", + 'text_or_above' => "及以上等级的用户,即对他们不做检测。默认", + 'row_max_ips' => "最多允许IP数", + 'text_max_ips_note' => "相同IP地址最大允许的注册数。", + 'row_max_login_attemps' => "最大登录尝试", + 'text_max_login_attemps_note' => "超过这个限制的IP地址将被禁用。", + 'head_authority_settings' => "权限设定", + 'row_default_class' => "默认等级", + 'text_default_user_class' => "默认用户等级:", + 'text_default' => " 默认为", + 'text_default_class_note' => "。注册时获得的等级。", + 'row_staff_member' => "管理组成员", + 'text_minimum_class' => "最低允许等级:", + 'text_staff_member_note' => "。被认为是管理组成员的等级,如可以查看管理组信箱。", + 'row_news_management' => "管理最近消息", + 'text_news_management_note' => "。添加、编辑、删除最近消息。", + 'row_post_funbox_item' => "发布趣味盒内容", + 'text_post_funbox_item_note' => "。允许发布新的趣味盒内容及编辑自己发布的趣味盒内容。", + 'row_funbox_management' => "管理趣味盒", + 'text_funbox_management_note' => "。编辑、删除、禁止任何人发布的趣味盒内容。", + 'row_shoutbox_management' => "管理群聊区", + 'text_shoutbox_management_note' => "。删除群聊区和救助区的信息。", + 'row_poll_management' => "管理投票", + 'text_poll_management_note' => "。添加、编辑、删除投票。", + 'row_apply_for_links' => "申请链接", + 'text_apply_for_links_note' => "。申请在首页的友情链接。", + 'row_link_management' => "管理友情链接", + 'text_link_management_note' => "。添加、编辑、删除友情链接。 ", + 'row_forum_post_management' => "管理论坛帖子", + 'text_forum_post_management_note' => "。编辑、删除、移动、置顶、锁定论坛帖子。", + 'row_comment_management' => "管理评论", + 'text_comment_management_note' => "。编辑、删除种子和候选的评论。", + 'row_forum_management' => "管理论坛版块", + 'text_forum_management_note' => "。添加、编辑、删除、移动论坛版块。", + 'row_view_userlist' => "查看用户列表", + 'text_view_userlist_note' => "。查看、搜索用户列表。", + 'row_torrent_management' => "管理种子", + 'text_torrent_management_note' => "。编辑、删除种子,但不能将种子设为置顶或促销。", + 'row_torrent_sticky' => "设定种子置顶", + 'text_torrent_sticky_note' => "。将种子设为置顶", + 'row_torrent_on_promotion' => "设定种子为促销", + 'text_torrent_promotion_note' => "。将种子设为促销。", + 'row_ask_for_reseed' => "请求续种", + 'text_ask_for_reseed_note' => "。当种子断种时请求续种。", + 'row_view_nfo' => "查看NFO", + 'text_view_nfo_note' => "。查看NFO文件。", + 'row_view_torrent_structure' => "查看种子结构", + 'text_view_torrent_structure_note' => "。查看种子文件的结构。", + 'row_send_invite' => "发送邀请", + 'text_send_invite_note' => "。发送加入网站的邀请函给其他人。", + 'row_view_history' => "查看历史记录", + 'text_view_history_note' => "。查看其他用户的评论和帖子历史记录。", + 'row_view_topten' => "查看排行榜", + 'text_view_topten_note' => "。查看排行榜。", + 'row_view_general_log' => "查看一般日志", + 'text_view_general_log_note' => "。查看一般日志,不能查看机密日志。", + 'row_view_confidential_log' => "查看机密日志", + 'text_view_confidential_log_note' => "。查看机密日志,如站点设定更改。", + 'row_view_user_confidential' => "查看用户机密档案", + 'text_view_user_confidential_note' => "。查看用户的机密档案,如IP地址,邮箱地址。", + 'row_view_user_torrent' => "查看用户种子历史记录", + 'text_view_user_torrent_note' => "。查看用户的种子历史记录,如下载种子的历史记录。
只有用户的隐私等级没有设为’强‘时才生效。", + 'row_general_profile_management' => "管理用户基本档案", + 'text_general_profile_management_note' => "。改变用户的基本档案,但不能改变其中重要的项目,如邮箱地址、用户名、上传量、下载量、魔力值数。", + 'row_crucial_profile_management' => "管理用户重要档案信息", + 'text_crucial_profile_management_note' => "。改变用户所有档案信息,除了捐赠信息外(只有", + 'text_can_manage_donation' => "能管理捐赠信息)。", + 'row_upload_subtitle' => "上传字幕", + 'text_upload_subtitle_note' => "。上传种子对应的字幕。", + 'row_delete_own_subtitle' => "删除自己的字幕", + 'text_delete_own_subtitle_note' => "。删除自己上传的字幕。", + 'row_subtitle_management' => "管理字幕", + 'text_subtitle_management' => "。删除任何字幕。", + 'row_update_external_info' => "更新外部信息", + 'text_update_external_info_note' => "。更新外部信息,如IMDb信息。", + 'row_view_anonymous' => "查看匿名者", + 'text_view_anonymous_note' => "。查看匿名者的真实身份。", + 'row_be_anonymous' => "作为匿名", + 'text_be_anonymous_note' => "。在发布种子、上传字幕时选择匿名。", + 'row_add_offer' => "添加候选", + 'text_add_offer_note' => "。允许发起候选。", + 'row_offer_management' => "管理候选", + 'text_offer_management_note' => "。通过、编辑、删除候选。", + 'row_upload_torrent' => "发布种子", + 'text_upload_torrent_note' => "。发布种子到种子区。", + 'row_upload_special_torrent' => "发布种子至特别区", + 'text_upload_special_torrent_note' => "。发布种子到特别区。", + 'row_move_torrent' => "移动种子", + 'text_move_torrent_note' => "。将种子在各区间移动。", + 'row_chronicle_management' => "管理史册", + 'text_chronicle_management_note' => "。添加、编辑、删除史册内容。", + 'row_view_invite' => "查看邀请", + 'text_view_invite_note' => "。查看用户的邀请历史记录。", + 'row_buy_invites' => "购买邀请", + 'text_buy_invites_note' => "。允许在魔力值中心购买邀请。", + 'row_see_banned_torrents' => "查看被禁止的种子", + 'text_see_banned_torrents_note' => "。查看、下载被禁止的种子。", + 'row_vote_against_offers' => "对候选投反对票", + 'text_vote_against_offers_note' => "。对候选投反对票。", + 'row_allow_userbar' => "允许个性条", + 'text_allow_userbar_note' => "。允许用户使用个性条。", + 'head_basic_settings' => "基础设定", + 'row_site_name' => "网站名", + 'text_site_name_note' => "你的网站的名字。", + 'row_base_url' => "基础URL", + 'text_it_should_be' => "应该设为", + 'text_base_url_note' => "。在末尾不要添加斜杠(/)!", + 'row_announce_url' => "Tracker地址", + 'row_mysql_host' => "MySQL主机", + 'text_mysql_host_note' => "请填写你的MySQL主机地址。如果MySQL和HTTP服务器运行在同一台服务器上,请填写'localhost'。否则请填写运行MySQL的主机的IP地址。", + 'row_mysql_user' => "MySQL用户名", + 'text_mysql_user_note' => "请填写你的MySQL用户名。MySQL默认用户名是'root'。然而,基于安全考虑,推荐你为此网站的数据库另外创建一个用户。", + 'row_mysql_password' => "MySQL密码", + 'text_mysql_password_note' => "基于安全考虑,当前MySQL用户密码未显示在此。如果你要对基础设定做修改,每次都必须填写MySQL密码。", + 'row_mysql_database_name' => "MySQL数据库名", + 'text_mysql_database_name_note' => "请填写你的网站的MySQL数据库名字。", + 'head_code_settings' => "代码设定", + 'row_main_version' => "主版本", + 'text_main_version_note' => "代码的主版本。", + 'row_sub_version' => "次版本", + 'text_sub_version_note' => "代码的次版本", + 'row_release_date' => "发布时间", + 'text_release_date_note' => "时间格式为'年年年年-月月-日日'。代码发布的时间。", + 'row_authorize_to' => "被授权者", + 'text_authorize_to_note' => "被授权的网站或个人的名字。", + 'row_authorization_type' => "授权类型", + 'text_free' => "免费授权", + 'text_commercial' => "商业授权", + 'row_web_site' => "网站", + 'text_web_site_note' => "", + 'text_web_site_note_two' => "的网站URL。", + 'row_email' => "邮箱", + 'text_email_note_one' => "", + 'text_email_note_two' => "的联系邮箱。", + 'row_msn' => "MSN", + 'text_msn_note_one' => "", + 'text_msn_note_two' => "的联系MSN。", + 'row_qq' => "QQ", + 'text_qq_note_one' => "", + 'text_qq_note_two' => "的联系QQ。", + 'row_telephone' => "电话", + 'text_telephone_note_one' => "", + 'text_telephone_note_two' => "的联系电话。", + 'head_bonus_settings' => "魔力值设定", + 'text_bonus_by_seeding' => "做种获得魔力值", + 'row_donor_gets_double' => "捐赠者加倍", + 'text_donor_gets' => "捐赠者通过做种能获得正常情况", + 'text_times_as_many' => "倍的魔力值。默认'2'。设为'0'则将捐赠者和其他用户同等对待。", + 'row_basic_seeding_bonus' => "基础做种魔力值", + 'text_user_would_get' => "对于每个做种中的种子,用户将获得", + 'text_bonus_points' => "个魔力值,最多计算", + 'text_torrents_default' => "个种子。默认'1','7'。将魔力值数设为'0'来禁止此规则。", + 'row_seeding_formula' => "做种公式", + 'text_bonus_formula_one' => "每小时获得的魔力值点数由下面的公式给出", + 'text_where' => "式中", + 'text_bonus_formula_two' => "A为中间变量
  • Ti为第i个种子的生存时间,即自种子发布起到现在所经过的时间, 单位是周", + 'text_bonus_formula_three' => "T0为参数。T0 = ", + 'text_bonus_formula_four' => "。默认为'4'", + 'text_bonus_formula_five' => "Si为第i个种子的大小,单位是GB", + 'text_bonus_formula_six' => "Ni为第i个种子当前的做种者数
  • N0为参数。N0 = ", + 'text_bonus_formula_seven' => "。默认为'7'", + 'text_bonus_formula_eight' => "B为1小时中用户获得的做种魔力值点数", + 'text_bonus_formula_nine' => "B0为参数,代表用户1小时获得魔力值的上限。B0 = ", + 'text_bonus_formula_ten' => "。默认为'100'", + 'text_bonus_formula_eleven' => "L为参数。L = ", + 'text_bonus_formula_twelve' => "。默认为'300'", + 'text_misc_ways_get_bonus' => "其他获取方式", + 'row_uploading_torrent' => "发布新种子", + 'text_user_would_get' => "用户将获得", + 'text_uploading_torrent_note' => "个魔力值,如果他发布一个新种子。默认'15'。", + 'row_uploading_subtitle' => "上传一个字幕", + 'text_uploading_subtitle_note' => "个魔力值,如果他上传一个字幕。默认'5'。", + 'row_starting_topic' => "发布新主题", + 'text_starting_topic_note' => "个魔力值,如果他在论坛发布一个新的主题。默认'2'。", + 'row_making_post' => "回复帖子", + 'text_making_post_note' => "个魔力值,如果他在论坛发布一个帖子。默认'1'。", + 'row_adding_comment' => "发布评论", + 'text_adding_comment_note' => "个魔力值,如果他对种子、候选发表了一次评论。默认'1'。", + 'row_voting_on_poll' => "参与调查投票", + 'text_voting_on_poll_note' => "个魔力值,如果他参与一次调查投票。默认'1'。", + 'row_voting_on_offer' => "参与候选投票", + 'text_voting_on_offer_note' => "个魔力值,如果他参与一次候选投票。默认'1'。", + 'row_voting_on_funbox' => "趣味盒投票", + 'text_voting_on_funbox_note' => "个魔力值,如果他参与一次趣味盒投票。默认'1'。", + 'row_saying_thanks' => "说谢谢", + 'text_giver_and_receiver_get' => "感谢表达者和接受者将分别得到", + 'text_saying_thanks_and' => "和", + 'text_saying_thanks_default' => "个魔力值。默认'0.5','0'。", + 'row_funbox_stuff_reward' => "趣味盒奖励", + 'text_funbox_stuff_reward_note' => "个魔力值,如果他发布的趣味盒内容被评为“有趣”。默认'5'。", + 'text_things_cost_bonus' => "消耗魔力值的项目", + 'row_one_gb_credit' => "1.0 GB上传量", + 'text_it_costs_user' => "用户将失去", + 'text_one_gb_credit_note' => "个魔力值,如果他选择交换1.0 GB上传量。默认'300'。", + 'row_five_gb_credit' => "5.0 GB上传量", + 'text_five_gb_credit_note' => "个魔力值,如果他选择交换5.0 GB上传量。默认'800'。", + 'row_ten_gb_credit' => "10.0 GB上传量", + 'text_ten_gb_credit_note' => "个魔力值,如果他选择交换5.0 GB上传量。默认'1200'。", + 'row_ratio_limit' => "分享率限制", + 'text_user_with_ratio' => "当用户的分享率高于", + 'text_uploaded_amount_above' => "且其上传量大于", + 'text_ratio_limit_default' => " GB时,他不能交换更多的上传量。默认'6','50'。将分享率设为'0'来禁止此规则。", + 'row_buy_an_invite' => "购买邀请名额", + 'text_buy_an_invite_note' => "个魔力值,如果他选择交换一个邀请名额。默认'1000'。", + 'row_custom_title' => "自定义头衔", + 'text_custom_title_note' => "个魔力值,如果他选择自定义一次头衔。默认'5000'。", + 'row_vip_status' => "贵宾待遇", + 'text_vip_status_note' => "个魔力值,如果他选择给自己换取一个月的贵宾待遇。默认'8000'。", + 'row_allow_giving_bonus_gift' => "允许魔力值赠送", + 'text_giving_bonus_gift_note' => "允许用户间相互赠送魔力值。默认'是'。", + 'head_account_settings' => "账号设定", + 'row_never_delete' => "永远保留", + 'text_delete_inactive_accounts' => "删除不活跃账号", + 'text_never_delete' => "及以上等级的账号将永远保留。默认", + 'row_never_delete_if_packed' => "封存后永远保留", + 'text_never_delete_if_packed' => "及以上等级的账号如果在封存后将永远保留。默认", + 'row_delete_packed' => "删除封存账号", + 'text_delete_packed_note_one' => "封存的账号如果连续", + 'text_delete_packed_note_two' => "天不登录,将被删除。默认'400',设为'0'来禁止此规则。", + 'row_delete_unpacked' => "删除未封存账号", + 'text_delete_unpacked_note_one' => "未封存的账号如果连续", + 'text_delete_unpacked_note_two' => "天不登录,将被删除。默认'150',设为'0'来禁止此规则。", + 'row_delete_no_transfer' => "删除没有流量的用户", + 'text_delete_transfer_note_one' => "没有流量的用户(即上传/下载数据都为0)如果连续", + 'text_delete_transfer_note_two' => "天不登录,或者注册时间满", + 'text_delete_transfer_note_three' => "天,将被删除账号。默认'60','0'。
    注意:两条规则是分开执行的。将其中任一规则设为‘0’禁止一条规则。", + 'text_user_promotion_demotion' => "用户升级和降级", + 'row_ban_peasant_one' => "禁用", + 'row_ban_peasant_two' => "", + 'text_ban_peasant_note_one' => "如果在", + 'text_ban_peasant_note_two' => "天内仍未改善分享率,将被禁用。默认'30',设为'0'将马上禁止。", + 'row_demoted_to_peasant_one' => "降级至", + 'row_demoted_to_peasant_two' => "", + 'text_demoted_peasant_note_one' => "用户在以下任一情况下将被降为", + 'text_demoted_peasant_note_two' => ":", + 'text_downloaded_amount_larger_than' => "下载量超过", + 'text_and_ratio_below' => " GB且分享率低于", + 'text_demote_peasant_default_one' => "。默认'50','0.4'。", + 'text_demote_peasant_default_two' => "。默认'100','0.5'。", + 'text_demote_peasant_default_three' => "。默认'200','0.6'。", + 'text_demote_peasant_default_four' => "。默认'400','0.7'。", + 'text_demote_peasant_default_five' => "。默认'800','0.8'。", + 'text_demote_peasant_note' => "注意:不要改变下载量递增的排序。将下载量设为'0'将禁止相应的规则。", + 'row_promote_to_one' => "升级至", + 'row_promote_to_two' => "", + 'text_member_longer_than' => "注册时间大于", + 'text_downloaded_more_than' => "周,下载量大于", + 'text_with_ratio_above' => " GB且分享率大于", + 'text_be_promoted_to' => "的用户,将升级为", + 'text_promote_to_default_one' => "。默认", + 'text_promote_to_default_two' => ",他将被降级。默认", + 'text_demote_with_ratio_below' => "然而,一旦用户的分享率低于", + 'head_torrent_settings' => "种子设定", + 'row_promotion_rules' => "促销规则", + 'text_promotion_rules_note' => "开启一些自动促销规则。代码待完善,如果不清楚用处请不要启用。", + 'row_random_promotion' => "随机促销", + 'text_random_promotion_note_one' => "种子在发布时由系统自动随机促销。", + 'text_halfleech_chance_becoming' => "%的可能成为50%。默认'5'。", + 'text_free_chance_becoming' => "%的可能成为免费。默认'2'。", + 'text_twoup_chance_becoming' => "%的可能成为2X。默认'2'。", + 'text_freetwoup_chance_becoming' => "%的可能成为2X免费。默认'1'。", + 'text_twouphalfleech_chance_becoming' => "%的可能成为2x 50%。默认'0'。", + 'text_random_promotion_note_two' => "将值设为'0'来禁止相应规则。", + 'row_large_torrent_promotion' => "大体积种子促销", + 'text_torrent_larger_than' => "体积大于", + 'text_gb_promoted_to' => " GB的种子将在发布时由系统自动设为", + 'text_by_system_upon_uploading' => "。", + 'text_large_torrent_promotion_note' => "默认'20','免费'。将种子体积设为'0'来禁止此规则。", + 'row_promotion_timeout' => "促销时限", + 'text_promotion_timeout_note_one' => "种子的促销将在一段时间后过期。", + 'text_halfleech_will_become' => "50%将变为", + 'text_after' => ",如果离发布时间已过去", + 'text_halfleech_timeout_default' => "天。默认'普通','150'。", + 'text_free_will_become' => "免费将变为", + 'text_free_timeout_default' => "天。默认'普通','60'。", + 'text_twoup_will_become' => "2X将变为", + 'text_twoup_timeout_default' => "天。默认'普通','60'。", + 'text_freetwoup_will_become' => "2X免费将变为", + 'text_freetwoup_timeout_default' => "天。默认'普通','30'。", + 'text_halfleechtwoup_will_become' => "2X 50%将变为", + 'text_halfleechtwoup_timeout_default' => "天。默认'普通','30'。", + 'text_normal_will_become' => "普通将变为", + 'text_normal_timeout_default' => "天。默认'普通','0'。", + 'text_promotion_timeout_note_two' => "将天数设为'0'来使促销永远不过期。", + 'row_auto_pick_hot' => "自动挑选热门种子", + 'text_torrents_uploaded_within' => "在发布后", + 'text_days_with_more_than' => "天内,如果种子的做种数曾超过", + 'text_be_picked_as_hot' => ",它将被标记为热门。", + 'text_auto_pick_hot_default' => "默认'7','10'。将天数设为'0'来禁止此规则。", + 'row_uploader_get_double' => "发布者加倍上传量", + 'text_torrent_uploader_gets' => "对于一个种子,它的发布者将得到正常情况", + 'text_times_uploading_credit' => "倍的上传量。", + 'text_uploader_get_double_default' => "默认'1'。设为'1'则将发布者和其他用户同等对待。", + 'row_delete_dead_torrents' => "删除断种", + 'text_torrents_being_dead_for' => "连续断种", + 'text_days_be_deleted' => "天的种子将被自动删除。默认'0'。设为'0'来禁止此规则。", + 'row_delete_dead_torrents_note' => "警告:种子一旦被删除将不可恢复。如果你的站点可能长期关闭,一定要禁止这条规则。", + 'head_main_settings' => "主要设定", + 'row_site_online' => "站点在线", + 'text_site_online_note' => "默认'是'。在做站更新和其他维护时,你可能需要临时关闭站点。注意:此时网站管理员仍能访问网站。", + 'row_enable_invite_system' => "开启邀请系统", + 'text_invite_system_note' => "默认'是'。允许新用户通过邀请系统注册。", + 'row_initial_uploading_amount' => "初始上传量", + 'text_initial_uploading_amount_note' => "单位为Byte,即1073741824为1 GB。新注册用户的初始上传量。默认'0'。", + 'row_initial_invites' => "初始邀请名额", + 'text_initial_invites_note' => "新注册用户的初始邀请名额。默认'0'。", + 'row_invite_timeout' => "邀请过期", + 'text_invite_timeout_note' => "单位为天。邀请码如在发出X天后仍未使用,将被删除。默认'7'。", + 'row_enable_registration_system' => "开启注册系统", + 'row_allow_registrations' => "若开启,则允许自由注册。默认'是'。", + 'row_verification_type' => "用户验证方式", + 'text_email' => "邮件", + 'text_admin' => "管理员", + 'text_automatically' => "自动", + 'text_verification_type_note' => "邮件:发送验证邮件;管理员:管理员手动;自动:注册完成后自动激活。", + 'row_enable_wait_system' => "开启等待系统", + 'text_wait_system_note' => "默认'否'。开启或关闭等待系统。参看常见问题。", + 'row_enable_max_slots_system' => "开启连接数系统", + 'text_max_slots_system_note' => "默认'否'。开启或关闭最大同时下载数限制。参看常见问题。", + 'row_show_polls' => "显示投票", + 'text_show_polls_note' => "默认'是'。在首页显示投票。", + 'row_show_stats' => "显示站点数据", + 'text_show_stats_note' => "默认'是'。在首页显示站点数据。", + 'row_show_last_posts' => "显示最近论坛帖子", + 'text_show_last_posts_note' => "默认'否'。在首页显示最近的论坛帖子。", + 'row_show_last_torrents' => "显示最近种子", + 'text_show_last_torrents_note' => "默认'否'。在首页显示最近发布的种子。", + 'row_show_server_load' => "显示服务器负载", + 'text_show_server_load_note' => "默认'是'。在首页显示服务器负载。", + 'row_show_forum_stats' => "显示论坛数据", + 'text_show_forum_stats_note' => "默认'是'。在论坛页面显示论坛数据。", + 'row_show_hot' => "显示热门资源", + 'text_show_hot_note' => "默认'是'。在首页显示热门资源。热门资源由系统自动挑选或由管理组成员挑选。", + 'row_show_classic' => "显示经典资源", + 'text_show_classic_note' => "默认'否'。在首页显示经典资源。只有指定的总版主或以上等级能够挑选热门资源。", + 'row_enable_imdb_system' => "开启IMDb系统", + 'text_imdb_system_note' => "默认'是'。全局IMDb系统设定。", + 'row_enable_school_system' => "开启学校系统", + 'text_school_system_note' => "默认'否'。如果对这项功能不清楚,不要开启它。", + 'row_restrict_email_domain' => "限制邮箱域", + 'text_restrict_email_domain_note' => "默认'否'。设为'是'则只允许指定的邮箱域来注册账号。参看这里。", + 'row_show_shoutbox' => "显示群聊区", + 'text_show_shoutbox_note' => "默认'是'。在首页显示群聊区。", + 'row_show_funbox' => "显示趣味盒", + 'text_show_funbox_note' => "默认'否'。在首页显示趣味盒。", + 'row_enable_offer_section' => "开启候选区", + 'text_offer_section_note' => "默认'是'。开启或关闭候选区。", + 'row_show_donation' => "开启捐赠", + 'text_show_donation_note' => "显示捐赠信息和捐赠排行榜。", + 'row_show_special_section' => "开启特别区", + 'text_show_special_section_note' => "默认'否'。如果对这项功能不清楚,不要开启它。", + 'row_weekend_free_uploading' => "周末自由发布", + 'text_weekend_free_uploading_note' => "默认'否'。设为'是'则允许所有用户在周末自由发布种子(从周六12:00到周日23:59)。", + 'row_enable_helpbox' => "开启求助区", + 'text_helpbox_note' => "默认'否'。设为'否'则禁止游客发送消息。", + 'row_enable_bitbucket' => "开启上传器", + 'text_bitbucket_note' => "默认'是'。设为'否'则禁止用户上传头像到网站。", + 'row_enable_small_description' => "开启副标题", + 'text_small_description_note' => "默认'是'。副标题显示在种子页面种子标题下面。", + 'row_ptshow_naming_style' => "PTShow命名风格", + 'text_ptshow_naming_style_note' => "默认'否'。格式为[月月.日日.年年][原始名][中文名]。如果对这项功能不清楚,不要开启它。", + 'row_use_external_forum' => "使用外部论坛", + 'text_use_external_forum_note' => "默认'否'。设为'是'使用外部论坛来代替内建论坛。", + 'row_external_forum_url' => "外部论坛URL", + 'text_external_forum_url_note' => "填写类似这样的地址:http://www.cc98.org", + 'row_torrents_category_mode' => "种子区分类模式", + 'text_torrents_category_mode_note' => "改变种子区的分类模式。", + 'row_special_category_mode' => "特殊区分类模式", + 'text_special_category_mode_note' => "改变特殊区的分类模式。", + 'row_default_site_language' => "默认站点语言", + 'text_default_site_language_note' => "改变登录页面的默认语言。", + 'row_default_stylesheet' => "默认界面风格", + 'text_default_stylesheet_note' => "新注册的用户将默认使用这个界面风格。", + 'row_max_torrent_size' => "种子文件体积限制", + 'text_max_torrent_size_note' => "单位为byte。默认1048576,即1 MB。", + 'row_announce_interval' => "汇报间隔", + 'text_announce_interval_note_one' => "单位为秒。Tracker将通知BitTorrent客户端以这个间隔时间汇报信息。需要注意的是,在实际情况中汇报间隔可能不同,因为BitTorrent客户端可能无视这个通知,而且用户可以选择手动连接Tracker。", + 'text_announce_default' => "默认:", + 'text_announce_default_default' => "默认'1800',即30分钟", + 'text_for_torrents_older_than' => "发布时间超过", + 'text_days' => "天的种子:", + 'text_announce_two_default' => "默认'7','2700'(即45分钟)。将天数设为'0'来禁止此规则", + 'text_announce_three_default' => "默认'30','3600'(即60分钟)。将天数设为'0'来禁止此规则", + 'text_announce_interval_note_two' => "注意不要改变天数递增的排序。
    越短的间隔将获得越准确的同伴信息更新,同时带来更大的服务器负载。", + 'row_cleanup_interval' => "自动清理间隔", + 'text_cleanup_interval_note_one' => "每XXX秒时间做自动清理工作(用户升级、降级、添加做种魔力值等)。", + 'text_priority_one' => "优先级1:", + 'text_priority_one_note' => "更新同伴状态;添加做种魔力值。默认'900',即15分钟。", + 'text_priority_two' => "优先级2:", + 'text_priority_two_note' => "更新种子可见性。默认'1800',即30分钟。", + 'text_priority_three' => "优先级3:", + 'text_priority_three_note' => "更新种子做种数、下载数、评论数;更新论坛帖子/主题数;删除过期的候选;种子促销到期;自动挑选热门种子。默认'3600',即60分钟。", + 'text_priority_four' => "优先级4:", + 'text_priority_four_note' => "删除未通过验证的账号,过期的登录尝试记录,过期的邀请码和图片验证码;清理用户账号(删除不活跃账号,账号升级、降级、禁用);发送上传的图片;更新用户总做种和下载时间。默认'43200',即24小时。", + 'text_priority_five' => "优先级5:", + 'text_priority_five_note' => "删除种子文件不存在的种子;锁定论坛的古老主题;删除古老的举报信息。默认'648000',即15天。", + 'text_cleanup_interval_note_two' => "注意不要改变时间递增的排序。", + 'row_signup_timeout' => "注册超时", + 'text_signup_timeout_note' => "单位为秒。如用户在提交注册信息XXX秒后未通过验证,其账号将被删除。默认'259200',即3天。", + 'row_min_offer_votes' => "最低候选投票", + 'text_min_offer_votes_note' => "当候选的支持票比反对票多XXX票时,候选被通过。默认'15'。", + 'row_offer_vote_timeout' => "候选投票超时", + 'text_offer_vote_timeout_note' => "单位为秒。如候选在发布XXX秒后未被通过,它将被删除。默认为'259200',即72小时。设为'0'则不设置超时限制。", + 'row_offer_upload_timeout' => "候选发布超时", + 'text_offer_upload_timeout_note' => "单位为秒。如候选在通过后XXX秒内未发布种子,它将被删除。默认'86400',即24小时。设为'0'则不设置超时限制。", + 'row_max_subtitle_size' => "最大字幕体积", + 'text_max_subtitle_size_note' => "单位为byte。允许上传的最大字幕体积。默认3145728,即3 MB。设为'0'则不设置体积限制。", + 'row_posts_per_page' => "默认每页帖子数", + 'text_posts_per_page_note' => "论坛主题每页显示的帖子数。默认'10'。
    注意:用户的个人设置将覆盖系统默认设置。", + 'row_topics_per_page' => "默认每页主题数", + 'text_topics_per_page_note' => "论坛每页显示的主题数。默认'20'。
    注意:用户的个人设置将覆盖系统默认设置。", + 'row_number_of_news' => "最近消息条数", + 'text_number_of_news_note' => "在首先显示的最近消息条数。默认'3'。", + 'row_torrent_dead_time' => "最大种子断种时间", + 'text_torrent_dead_time_note' => "单位为秒。当种子连续XXX秒没有任何做种者时,它将被标记为断种。默认'21600',即6小时。", + 'row_max_users' => "最大用户数", + 'text_max_users' => "当这个限制达到时,自由注册和邀请注册都将关闭。", + 'row_https_announce_url' => "HTTPS Tracker地址", + 'text_https_announce_url_note' => "如果你的网站为HTTP和HTTPS使用同样的地址,请留空。应该设为", + 'row_site_accountant_userid' => "网站会计用户ID", + 'text_site_accountant_userid_note' => "填写数字,如'1'。捐赠者将发送捐赠信息短讯至此ID的用户。", + 'row_alipay_account' => "支付宝账号", + 'text_alipal_account_note' => "你用于接收捐赠的支付宝账号,如'yourname@gmail.com'。如果没有,请留空。", + 'row_paypal_account' => "PayPal账号", + 'text_paypal_account_note' => "你用于接收捐赠的PayPal账号,如'yourname@gmail.com'。如果没有,请留空。", + 'row_site_email' => "网站邮箱地址", + 'text_site_email_note' => "网站的邮箱地址", + 'row_report_email' => "报告邮箱地址", + 'text_report_email_note' => "用户报告的邮箱地址", + 'row_site_slogan' => "网站标语", + 'text_site_slogan_note' => "网站的标语", + 'row_icp_license' => "ICP备案信息", + 'text_icp_license_note' => "这是适用于在中国运营的网站的许可证制度。如果没有,请留空。", + 'row_torrent_directory' => "种子目录", + 'text_torrent_directory' => "默认'torrents'。不要在末尾添加斜杠(/)!", + 'row_bitbucket_directory' => "上传器目录", + 'text_bitbucket_directory_note' => "默认'bitbucket'。不要在末尾添加斜杠(/)!", + 'row_cache_directory' => "缓存目录", + 'text_cache_directory_note' => "默认'cache'。不要在末尾添加斜杠(/)!", + 'row_torrent_name_prefix' => "种子文件名前缀", + 'text_torrent_name_prefix_note' => "在从网站下载的种子文件的文件名前添加前缀。默认'[Nexus]'。不要使用非法的文件名字符!", + 'row_peering_time_calculation' => "同伴时间开始计算时间", + 'text_peering_time_calculation_note' => "请留空。该设置因历史原因保留。", + 'row_new_subtitle_id' => "新的字幕ID", + 'text_new_subtitle_id_note' => "请保持'0'。该设置因历史原因保留。", + 'head_website_settings' => "站点设定", + 'row_basic_settings' => "基础设定", + 'submit_basic_settings' => "基础设定", + 'text_basic_settings_note' => "设定最基础的项目,如数据库,网站名等。如果对设定项目的功能不清楚,请不要做任何修改。
    基础设定出错可能导致网站无法运行。", + 'row_main_settings' => "主要设定", + 'submit_main_settings' => "主要设定", + 'text_main_settings_note' => "配置你的网站各种主要项目。", + 'row_smtp_settings' => "SMTP设定", + 'submit_smtp_settings' => "SMTP设定", + 'text_smtp_settings_note' => "配置网站SMTP邮件服务器。", + 'row_security_settings' => "安全设定", + 'submit_security_settings' => "安全设定", + 'text_security_settings_note' => "管理网站的安全。", + 'row_authority_settings' => "权限设定", + 'submit_authority_settings' => "权限设定", + 'text_authority_settings_note' => "配置各等级的用户所具有的权限。", + 'row_tweak_settings' => "次要设定", + 'submit_tweak_settings' => "次要设定", + 'text_tweak_settings_note' => "配置你的网站的次要项目。", + 'row_bonus_settings' => "魔力值设定", + 'submit_bonus_settings' => "魔力值设定", + 'text_bonus_settings_note' => "配置魔力值的获取和使用。", + 'row_account_settings' => "账号设定", + 'submit_account_settings' => "账号设定", + 'text_account_settings_settings' => "配置账号的升级,降级,删除等。", + 'row_torrents_settings' => "种子设定", + 'submit_torrents_settings' => "种子设定", + 'text_torrents_settings_note' => "配置种子的促销,筛选等。", + 'row_bots_settings' => "机器人设定", + 'submit_bots_settings' => "机器人设定", + 'text_bots_settings_note' => "管理网站的机器人。如果对设定项目的功能不清楚,请不要做任何修改。", + 'row_code_settings' => "代码设定", + 'submit_code_settings' => "代码设定", + 'text_code_settings_note' => "配置代码的版本。如果对设定项目的功能不清楚,请不要做任何修改。", + 'text_smtp_default' => "默认(使用PHP默认邮件函数)", + 'text_smtp_advanced' => "高级(使用PHP默认邮件函数,添加额外的头信息。有助于防止被视为垃圾邮件过滤)", + 'text_smtp_external' => "外部(使用外部SMTP服务器)", + 'text_setting_for_advanced_type' => "高级类型设定", + 'row_smtp_host' => "SMTP主机", + 'text_smtp_host_note' => "默认:'localhost'", + 'row_smtp_port' => "SMTP端口", + 'text_smtp_port_note' => "默认:25", + 'row_smtp_sendmail_from' => "SMTP邮件发送来源", + 'text_smtp_sendmail_from_note' => "默认:", + 'row_smtp_sendmail_path' => "Sendmail路径", + 'text_smtp_sendmail_path_note' => "请在php.ini中设置好sendmail_path", + 'text_setting_for_external_type' => "外部类型设定", + 'row_outgoing_mail_address' => "SMTP地址", + 'row_outgoing_mail_port' => "SMTP端口", + 'text_outgoing_mail_address_note' => "提示: smtp.yourisp.com", + 'text_outgoing_mail_port_note' => "提示: 25", + 'row_smtp_account_name' => "用户名", + 'text_smtp_account_name_note' => "提示: yourname@yourisp.com", + 'row_smtp_account_password' => "用户密码", + 'text_smtp_account_password_note' => "提示:输入你的密码", + 'text_mail_test_note' => "如何测试发送邮件功能?很简单,点击", + 'text_here' => "这里", + 'std_error' => "错误", + 'std_mysql_connect_error' => "无法连接MySQL,请检查设定。", + 'row_enable_location' => "显示地址", + 'text_enable_location_note' => "默认'否'。根据用户的IP地址显示其地理位置。如果你没有导入IP地址库,不要启用本项。", + 'row_torrents_per_page' => "默认每页种子数", + 'text_torrents_per_page_note' => "种子页面每页显示的种子数。默认'50'。
    注意:用户的个人设置将覆盖系统默认设置。", + 'row_title_keywords' => "页面标题关键字", + 'text_title_keywords_note' => "显示在页面标题末尾。填写这些关键字能帮助搜索引擎找到你的站点。多个关键字间用'|'分隔,如'BT|下载|电影'。如果想保持清爽的页面标题,请留空。", + 'row_meta_keywords' => "Meta关键字", + 'text_meta_keywords_note' => "出现在页面头部Meta标签中。填写与你站点相关的关键字。多个关键字间用半角逗号','分隔,如'BT, 下载, 电影'.", + 'row_meta_description' => "Meta描述", + 'text_meta_description_note' => "出现在页面头部Meta标签中。填写你站点的概要和描述。", + 'row_bonus_gift_tax' => "魔力值赠送税收", + 'text_system_charges' => "系统向礼物接收者索取", + 'text_bonus_points_plus' => "个魔力值 + 赠送额的", + 'text_bonus_gift_tax_note' => "%的魔力值作为税收。如设为'5','10'时,礼物赠送者发送100个魔力值,接收者只获得85个。默认'5','10'。
    注意:两条规则是分开执行的,将两个值都设为'0'才能完全免除税收。", + 'row_see_sql_debug' => "查看调试信息", + 'text_allow' => "允许", + 'text_see_sql_list' => "及以上等级的用户查看调试信息(在页面底部查看SQL语句列表,PHP报告信息)。默认", + 'text_smtp_none' => "无(将彻底禁止邮件发送功能)", + 'row_attachment_settings' => "附件设定", + 'submit_attachment_settings' => "附件设定", + 'text_attachment_settings_note' => "配置附件。", + 'head_attachment_settings' => "附件设定", + 'row_enable_attachment' => "开启附件", + 'text_enable_attachment_note' => "全局附件设定。如设为'否',所有人都不能上传附件。", + 'row_save_directory' => "附件保存位置", + 'row_http_directory' => "附件URL地址", + 'text_http_directory_note' => "可为当前URL下的相对地址或http://开头的绝对地址。不要在末尾添加斜杠(/)!默认'attachments'。", + 'row_attachment_authority' => "附件权限", + 'text_can_upload_at_most' => "及以上等级用户在24小时内最多允许上传", + 'text_file_size_below' => "个附件,每个附件文件大小不超过", + 'text_with_extension_name' => "KB,允许的文件扩展名为", + 'text_authority_default_one_one' => "。默认", + 'text_authority_default_one_two' => ",'5','256','jpeg, jpg, png, gif'。", + 'text_authority_default_two_one' => "。默认", + 'text_authority_default_two_two' => ",'10','512','torrent, zip, rar, 7z, gzip, gz'。", + 'text_authority_default_three_one' => "。默认", + 'text_authority_default_three_two' => ",'20','1024','mp3, oga, ogg, flv'。", + 'text_authority_default_four_one' => "。默认", + 'text_authority_default_four_two' => ",'500','2048',''。", + 'text_attachment_authority_note_two' => "注意:
    • 不要改变用户等级、文件数限制、文件大小限制递增的排序。
    • 将文件大小限制设为'0',文件数限制设为'0',允许的文件扩展名设为''(即留空)才能禁止相应规则。
    • 高等级的用户自动继承低等级用户的权限,所以必要在多条规则中填写相同的允许文件扩展名。
    • 多个允许的文件扩展名用半角逗号','分隔。
    • 无论如何设置,没有任何人能上传文件大小超过5 MB或扩展名为'exe, com, bat, msi'之一的附件。
    ", + 'text_attachment_authority_note_one' => "根据用户等级定义其拥有的上传附件的权限。", + 'text_save_directory_note' => "你保存附件的服务器路径。请确保目录访问权限已设置正确(777)。不要在末尾添加斜杠(/)!默认'./attachments'。", + 'row_save_directory_type' => "保存附件方式", + 'text_one_directory' => "全部文件存入同一目录", + 'text_directories_by_monthes' => "按月份存入不同目录", + 'text_directories_by_days' => "按天存入不同目录", + 'text_save_directory_type_note' => "此设定只影响新上传的附件。默认'按月份存入不同目录'。", + 'row_image_thumbnails' => "图片缩略图", + 'text_no_thumbnail' => "1. 不启用缩略图功能。只保存原始图片。", + 'text_create_thumbnail' => "2. 为尺寸大的图片生成缩略图,同时保存缩略图和原始图片。", + 'text_resize_big_image' => "3. 缩小尺寸大的图片,只保存缩略图。", + 'text_image_thumbnail_note' => "默认'2'。", + 'row_thumbnail_quality' => "缩略图质量", + 'text_thumbnail_quality_note' => "设定缩略图的质量。该参数范围为1至100内的整数。数值越大,缩略图质量越高,同时文件大小越大。默认'80'。", + 'row_thumbnail_size' => "缩略图尺寸", + 'text_thumbnail_size_note' => "宽度 * 高度,单位为像素。为宽度高度超过此限制的图片生成缩略图。默认'500','500'。", + 'row_watermark' => "水印位置", + 'text_no_watermark' => "不启用水印功能", + 'text_left_top' => "#1", + 'text_top' => "#2", + 'text_right_top' => "#3", + 'text_left' => "#4", + 'text_center' => "#5", + 'text_right' => "#6", + 'text_left_bottom' => "#7", + 'text_bottom' => "#8", + 'text_right_bottom' => "#9", + 'text_random_position' => "随机位置", + 'text_watermark_note' => "为上传的图片文件(JPEG/PNG/GIF)添加水印。你可以替换水印PNG图片文件'pic/watermark.png'以实现不同的水印效果。选择水印添加的位置。不支持给动画GIF文件添加水印。默认'不启用水印功能'。", + 'row_image_size_for_watermark' => "水印添加条件", + 'text_watermark_size_note' => "宽度 * 高度,单位为像素。为宽度高度都超过此限制的图片添加水印。默认'300','300'。", + 'row_jpeg_quality_with_watermark' => "JPEG图片水印质量", + 'text_jpeg_watermark_quality_note' => "添加水印后的JPEG文件的图片质量。该参数范围为1至100内的整数。数值越大,缩略图质量越高,同时文件大小越大。默认'85'。", + 'head_save_attachment_settings' => "保存附件设定", + 'row_css_date' => "CSS日期", + 'text_css_date' => "时间格式为'年年年年月月日日时时分分',如'200911030110'。修改此项目能帮助强制用户的浏览器更新CSS缓存。当你对CSS文件做一些修改后可能需要用到此项。如果不明白此项用处,请留空。默认为空。", + 'row_alternative_thumbnail_size' => "缩略图另一尺寸", + 'text_alternative_thumbnail_size_note' => "用户能选择缩略图另外一种尺寸。默认'180','135'。", + 'row_add_watermark_to_thumbnail' => "给缩略图添加水印", + 'text_watermark_to_thumbnail_note' => "选择是否给缩略图也添加水印。默认'否'。当全局缩略图设定启用时被项才能生效。", + 'row_advertisement_settings' => "广告设定", + 'submit_advertisement_settings' => "广告设定", + 'text_advertisement_settings_note' => "配置你站点中的广告。", + 'head_advertisement_settings' => "广告设定", + 'row_enable_advertisement' => "启用广告", + 'text_enable_advertisement_note' => "全局广告设定。", + 'row_no_advertisement' => "可关闭广告", + 'text_can_choose_no_advertisement' => "及以上等级用户可在控制面板中选择不显示广告。默认", + 'row_bonus_no_advertisement' => "魔力值交换可关闭广告", + 'text_no_advertisement_with_bonus' => "及以上等级用户可用魔力值换取一定期限内不显示广告的权限。默认", + 'row_no_advertisement_bonus_price' => "无广告魔力值", + 'text_bonus_points_to_buy' => "个魔力值,如果他选择交换", + 'text_days_without_advertisements' => "天不显示广告的权限。默认'10000','15'。", + 'row_click_advertisement_bonus' => "点击广告获取魔力值", + 'text_points_clicking_on_advertisements' => "个魔力值,如果他第一次点击某个广告。设为'0'来禁用此规则。
    注意:一些广告服务(如Google Adsense)禁止站点激励用户点击广告的行为。", + 'head_save_advertisement_settings' => "保存广告设定", + 'row_enable_tooltip' => "允许悬浮提示", + 'text_enable_tooltip_note' => "是否允许用户使用悬浮提示功能。默认'是'。", + 'text_thirtypercentleech_chance_becoming' => "%的可能成为30%。默认'0'。", + 'text_thirtypercentleech_will_become' => "30%将变为", + 'text_thirtypercentleech_timeout_default' => "天。默认'普通','30'。", + 'row_site_logo' => "网站logo", + 'text_site_logo_note' => "网站logo图片文件。建议图片尺寸为220x70。如不填写,将使用文字。默认''。", + 'row_promotion_link_click' => "宣传链接点击", + 'text_promotion_link_note_one' => "个魔力值,如果他的宣传链接获得一次来自一个未记录的IP的点击。", + 'text_promotion_link_note_two' => "秒内最多奖励一次点击。将魔力值设为'0'来禁用宣传链接功能。默认'0','600'。", + 'row_promotion_link_example_image' => "宣传链接示例图片", + 'text_promotion_link_example_note' => "在宣传链接介绍示例中的图片。必须使用相对地址,如'pic/prolink.png'.", + 'row_enable_nfo' => "启用NFO", + 'text_enable_nfo_note' => "默认'是'。全局NFO设定。", + 'row_web_analytics_code' => "网站统计代码", + 'text_web_analytics_code_note' => "填写由第三方(如Google Analytics)提供的网站统计代码。如无请留空。
    注意:请确保代码安全可信。", + 'row_enable_email_notification' => "允许用户收取邮件提示", + 'text_email_notification_note' => "是否允许用户在收取新短讯、评论等时候收到邮件提示。", + 'text_users_get' => "首次升级至此等级的用户将获得", + 'text_invitations_default' => "个邀请名额。默认", +); + +?> diff --git a/lang/chs/lang_shoutbox.php b/lang/chs/lang_shoutbox.php new file mode 100644 index 00000000..cb65e5b9 --- /dev/null +++ b/lang/chs/lang_shoutbox.php @@ -0,0 +1,15 @@ + "删", + 'std_access_denied' => "拒绝访问", + 'std_access_denied_note' => "游客不允许查看该页面。", + 'text_to_guest' => "对游客说", + 'text_guest' => "游客", + 'text_ago' => "前", + 'text_helpbox_disabled' => "求助区当前关闭中。你在搞什么鬼?", + 'text_no_permission_to_shoutbox' => "你没有在群聊区发言的权力。你在搞什么鬼?", +); + +?> diff --git a/lang/chs/lang_signup.php b/lang/chs/lang_signup.php new file mode 100644 index 00000000..e11fd376 --- /dev/null +++ b/lang/chs/lang_signup.php @@ -0,0 +1,35 @@ + "注册", + 'text_cookies_note' => "注意:你必须启用cookies才能注册或登录。", + 'row_desired_username' => "用户名", + 'text_allowed_characters' => "有效字符:(a-z), (A-Z), (0-9),至多12个字符", + 'row_pick_a_password' => "输入密码", + 'text_minimum_six_characters' => "至少6个字符。", + 'row_enter_password_again' => "再次输入密码", + 'row_question' => "密码丢失问题", + 'row_enter_hint_answer' => "输入答案", + 'text_hint_note' => "用于找回忘记的密码。至少6个字符。", + 'row_email_address' => "邮箱地址", + 'text_email_note' => "你只能使用以下邮箱注册:", + 'row_country' => "国家/地区", + 'row_gender' => "性别", + 'radio_male' => "男 ", + 'radio_female' => "女 ", + 'row_verification' => "确认", + 'checkbox_read_rules' => "我已阅读并同意遵守站点规则。", + 'checkbox_read_faq' => "我会在提问前先查看常见问题。", + 'checkbox_age' => "我已满13周岁。", + 'text_all_fields_required' => "所有区域都必须填写!", + 'submit_sign_up' => "注册!(只需点击一次)", + 'select_none_selected' => "未选", + 'text_select_lang' => "Select Site Language: ", + 'row_school' => "学校", + 'head_invite_signup' => "受邀注册", + 'std_uninvited' => "邀请码错误,无法注册。", + 'std_error' => "错误", +); + +?> diff --git a/lang/chs/lang_staff.php b/lang/chs/lang_staff.php new file mode 100644 index 00000000..be81a87b --- /dev/null +++ b/lang/chs/lang_staff.php @@ -0,0 +1,33 @@ + "管理组", + 'text_staff' => "管理组", + 'text_firstline_support' => "一线客服", + 'text_firstline_support_note' => "普通问题请咨询以下用户。注意:他们帮助你所花的时间和精力都是无回报的,请对他们表示感谢!", + 'text_movie_critics' => "批评家", + 'text_movie_critics_note' => "批评家负责挑选优秀的电影、音乐等资源,撰写点评,奖励用户的评论。总之,致力于创造交流的良好氛围。", + 'text_general_staff' => "常规管理员", + 'text_general_staff_note' => "所有软件和常见问题中已解答的问题将被无视。

    点击这里发短讯给管理组。", + 'text_username' => "用户名", + 'text_online_or_offline' => "是否在线", + 'text_country' => "国家", + 'text_contact' => "联系", + 'text_language' => "语言", + 'text_support_for' => "帮助内容", + 'text_responsible_for' => "负责内容", + 'text_duties' => "职责", + 'title_online' => "在线", + 'title_offline' => "不在线", + 'title_send_pm' => "发送短讯", + 'text_vip' => "VIP", + 'text_vip_note' => "VIP资格只授予对".$SITENAME."做出过特殊贡献的用户。如曾经的管理组成员。", + 'text_reason' => "原因", + 'text_apply_for_it' => "申请加入", + 'text_forum_moderators' => "论坛版主", + 'text_forum_moderators_note' => "论坛版主负责论坛的日常管理。", + 'text_forums' => "版块" +); + +?> diff --git a/lang/chs/lang_staffbox.php b/lang/chs/lang_staffbox.php new file mode 100644 index 00000000..1161c139 --- /dev/null +++ b/lang/chs/lang_staffbox.php @@ -0,0 +1,34 @@ + "管理组信箱", + 'text_staff_pm' => "管理组信箱", + 'std_sorry' => "对不起", + 'std_no_messages_yet' => "暂时没有短讯!", + 'col_subject' => "主题", + 'col_sender' => "发讯者", + 'col_added' => "时间", + 'col_answered' => "回复", + 'col_action' => "行为", + 'text_yes' => "是", + 'text_no' => "否", + 'submit_set_answered' => "设为已回复", + 'submit_delete' => "删除", + 'text_system' => "系统", + 'head_view_staff_pm' => "查看管理组信箱", + 'col_from' => "自", + 'col_date' => "日期", + 'col_answered_by' => "回复者", + 'text_reply' => "回复", + 'text_mark_answered' => "设为已回复", + 'text_delete' => "删除", + 'std_error' => "错误", + 'std_no_user_id' => "没有此ID的用户。", + 'head_answer_to_staff_pm' => "回复管理组信息", + 'text_answering_to' => "回复", + 'text_sent_by' => " - 来自", + 'std_body_is_empty' => "回复不能为空白!", +); + +?> diff --git a/lang/chs/lang_subtitles.php b/lang/chs/lang_subtitles.php new file mode 100644 index 00000000..462372ff --- /dev/null +++ b/lang/chs/lang_subtitles.php @@ -0,0 +1,64 @@ + "错误!", + 'std_must_login_to_upload' => "必须登录后才能上传字幕", + 'head_subtitles' => "字幕区", + 'std_nothing_received' => "上传失败!

    没有接受到文件!选择的文件可能太大。", + 'std_subs_too_big' => "上传失败!

    字幕文件太大!", + 'std_wrong_subs_format' => "上传失败!

    我不允许保存你上传的文件:|", + 'std_file_already_exists' => "上传失败!

    已存在该文件", + 'std_missing_torrent_id' => "上传失败!

    必须填写种子ID!", + 'std_invalid_torrent_id' => "上传失败!

    种子ID无效!", + 'std_no_permission_uploading_others' => "上传失败!

    你所在的用户等级不能上传他人种子的字幕!", + 'std_file_same_name_exists' => "该文件名的文件已存在", + 'std_must_choose_language' => "上传失败!

    请选择字幕的语言!", + 'std_failed_moving_file' => "无法移动上传的文件。请将该问题反应给管理员。", + 'std_this_file' => "该文件名", + 'std_is_invalid' =>"在文件夹中无效。", + 'text_upload_subtitles' => "上传字幕 - 总上传量", + 'text_rules' => "规则:", + 'text_rule_one' => "1.上传的文件请使用英文文件名!", + 'text_rule_two' => "2.字幕必须与视频文件同步。否则纯粹是浪费空间。", + 'text_rule_three' => "3.标题中并不需要字幕的语言标记,因为已经有国旗标记。不过,如果你觉得需要也可以在文件名末尾添加,如chs。", + 'text_rule_four' => "4.如果你上传的字幕是合集,请将它们打包为zip或rar后再上传。", + 'text_rule_five' => "5.如果你上传的字幕是Vobsub格式(idx+sub),请打包为zip或rar后再上传。", + 'text_rule_six' => "6.如果你上传的字幕是proper(正确版本)或re-synced(重新调校)的字幕,请在字幕文件名末尾添加proper或resynced标记。", + 'text_red_star_required' => "

    红星号(*)标记的区域必须填写

    \n", + 'text_uploading_subtitles_for_torrent' => "为种子上传字幕:", + 'row_file' => "文件", + 'text_maximum_file_size' => "文件最大限制:", + 'row_torrent_id' => "种子ID", + 'text_torrent_id_note' => "(种子详情页面网址末尾的数字。
    如 http://".$BASEURL."/details.php?id=16 数字16即种子ID)", + 'row_title' => "标题", + 'text_title_note' => "(可选,不填则使用种子文件名)", + 'row_language' => "语言", + 'select_choose_one' => "(请选择)", + 'row_show_uploader' => "匿名上传", + 'hide_uploader_note' => "不要显示我的用户名。", + 'submit_upload_file' => "上传文件", + 'submit_reset' => "重置", + 'text_sorry' => "对不起", + 'text_nothing_here' => "对不起,暂无字幕:( ", + 'submit_search' => "给我搜", + 'text_prev' => "上一页", + 'text_next' => "下一页", + 'col_lang' => "语言", + 'col_title' => "标题", + 'title_date_added' => "添加时间", + 'title_size' => "大小", + 'col_hits' => "点击", + 'col_upped_by' => "上传者", + 'text_delete' => "[删除]", + 'text_anonymous' => "匿名", + 'std_delete_subtitle' => "删除字幕", + 'std_delete_subtitle_note' => "你将删除该字幕。", + 'text_reason_is' => "原因:", + 'submit_confirm' => "确定", + 'col_report' => "举报", + 'title_report_subtitle' => "举报该字幕", + 'select_all_languages' => "(所有语言)", +); + +?> diff --git a/lang/chs/lang_tags.php b/lang/chs/lang_tags.php new file mode 100644 index 00000000..52f0735c --- /dev/null +++ b/lang/chs/lang_tags.php @@ -0,0 +1,134 @@ + "简介:", + 'text_syntax' => "语法:", + 'text_example' => "例子:", + 'text_result' => "结果:", + 'text_remarks' => "说明:", + 'head_tags' => "标签", + 'text_tags' => "标签", + 'text_bb_tags_note' => "".$SITENAME."论坛支持一些BBCode标签代码,你可以在帖子中使用它们改变显示效果。", + 'submit_test_this_code' => "测试标签!", + 'text_bold' => "粗体", + 'text_bold_description' => "使文字变粗", + 'text_bold_syntax' => "[b]文字[/b]", + 'text_bold_example' => "[b]这是粗体[/b]", + 'text_italic' => "斜体", + 'text_italic_description' => "使文字斜体", + 'text_italic_syntax' => "[i]文字[/i]", + 'text_italic_example' => "[i]这是斜体[/i]", + 'text_underline' => "下划线", + 'text_underline_description' => "在文字下加划线", + 'text_underline_syntax' => "[u]文字[/u]", + 'text_underline_example' => "[u]这是下划线[/u]", + 'text_color_one' => "颜色 (方式1)", + 'text_color_one_description' => "改变文字颜色", + 'text_color_one_syntax' => "[color=Color]文字[/color]", + 'text_color_one_example' => "[color=blue]这是蓝色文字[/color]", + 'text_color_one_remarks' => "有效颜色取决于浏览器,一些基本颜色如red, green, blue, yellow, pink等一般都支持", + 'text_color_two' => "颜色(方式2)", + 'text_color_two_description' => "改变文字颜色", + 'text_color_two_syntax' => "[color=#RGB]文字[/color]", + 'text_color_two_example' => "[color=#0000ff]这是蓝色文字[/color]", + 'text_color_two_remarks' => "RGB必须是六位的十六进制数字", + 'text_size' => "字号", + 'text_size_description' => "改变文字的大小", + 'text_size_syntax' => "[size=n]文字[/size]", + 'text_size_example' => "[size=4]这是4号字体的文字[/size]", + 'text_size_remarks' => "n必须是在1(最小)到7(最大)间的整数。默认字号为2", + 'text_font' => "字体", + 'text_font_description' => "改变文字的字体", + 'text_font_syntax' => "[font=字体]文字[/font]", + 'text_font_example' => "[font=Impact]Hello world![/font]", + 'text_font_remarks' => "你可以通过在字体名称间加逗号来设定备用字体", + 'text_hyperlink_one' => "超级链接(方式1)", + 'text_hyperlink_one_description' => "插入超级链接", + 'text_hyperlink_one_syntax' => "[url]URL[/url]", + 'text_hyperlink_one_example' => "[url]". "http://" . $BASEURL."[/url]", + 'text_hyperlink_one_remarks' => "该标签是多余的,所有URL都会自动加超级链接", + 'text_hyperlink_two' => "超级链接(方式2)", + 'text_hyperlink_two_description' => "插入超级链接", + 'text_hyperlink_two_syntax' => "[url=URL]链接文字[/url]", + 'text_hyperlink_two_example' => "[url="."http://" . $BASEURL."]".$SITENAME."[/url]", + 'text_hyperlink_two_remarks' => "当你需要将文字加超链接时使用。", + 'text_image_one' => "图片(方式1)", + 'text_image_one_description' => "插入图片", + 'text_image_one_syntax' => "[img=URL]", + 'text_image_one_example' => "[img=http://$BASEURL/pic/nexus.png]", + 'text_image_one_remarks' => "URL必须是.gif, .jpg, jpeg.png", + 'text_image_two' => "图片(方式2)", + 'text_image_two_description' => "插入图片", + 'text_image_two_syntax' => "[img]URL[/img]", + 'text_image_two_example' => "[img]http://$BASEURL/pic/nexus.png[/img]", + 'text_image_two_remarks' => "URL必须是.gif, .jpg, jpeg.png", + 'text_quote_one' => "引用(方式1)", + 'text_quote_one_description' => "插入引用", + 'text_quote_one_syntax' => "[quote]引用的文字[/quote]", + 'text_quote_one_example' => "[quote]我爱".$SITENAME."[/quote]", + 'text_quote_two' => "引用(方式2)", + 'text_quote_two_description' => "插入引用", + 'text_quote_two_syntax' => "[quote=作者]引用的文字[/quote]", + 'text_quote_two_example' => "[quote=".$CURUSER['username']."]我爱".$SITENAME."[/quote]", + 'text_list' => "列表", + 'text_description' => "插入列表项目", + 'text_list_syntax' => "[*]文字", + 'text_list_example' => "[*]这是项目1\n[*]这是项目2", + 'text_preformat' => "预格式化", + 'text_preformat_description' => "预格式化(等宽)文字。不自动换行", + 'text_preformat_syntax' => "[pre]文字[/pre]", + 'text_preformat_example' => "[pre]这是预格式化文字[/pre]", + 'text_code' => "代码", + 'text_code_description' => "文字特殊装饰显示", + 'text_code_syntax' => "[code]文字[/code]", + 'text_code_example' => "[code]这是代码[/code]", + 'text_you' => "[you]", + 'text_you_description' => "显示任何查看者的用户名", + 'text_you_syntax' => "[you]", + 'text_you_example' => "你正在看这段文字啊,[you]", + 'text_you_remarks' => "适合用于恶作剧", + 'text_site' => "[site]", + 'text_site_description' => "显示站点名字", + 'text_site_syntax' => "[site]", + 'text_site_example' => "你正在访问[site]", + 'text_siteurl' => "[siteurl]", + 'text_siteurl_description' => "显示站点的网址", + 'text_siteurl_syntax' => "[siteurl]", + 'text_siteurl_example' => "[site]的网址是[siteurl]", + 'text_flash' => "Flash(方式1)", + 'text_flash_description' => "在页面内插入指定宽度与高度的Flash", + 'text_flash_syntax' => "[flash,width,height]Flash URL[/flash]", + 'text_flash_example' => "[flash,500,300]http://$BASEURL/flash.demo.swf[/flash]", + 'text_flash_two' => "Flash(方式2)", + 'text_flash_two_description' => "在页面内插入默认宽度与高度(500 * 300)的Flash", + 'text_flash_two_syntax' => "[flash]Flash URL[/flash]", + 'text_flash_two_example' => "[flash]http://$BASEURL/flash.demo.swf[/flash]", + 'text_flv_one' => "Flash视频(方式1)", + 'text_flv_one_description' => "在页面内插入指定宽度与高度的Flash视频", + 'text_flv_one_syntax' => "[flv,width,height]Flash视频的URL[/flv]", + 'text_flv_one_example' => "[flv,320,240]http://$BASEURL/flash.video.demo.flv[/flv]", + 'text_flv_two' => "Flash视频(方式2)", + 'text_flv_two_description' => "在页面内插入默认宽度与高度(320 * 240)的Flash视频", + 'text_flv_two_syntax' => "[flv]Flash视频的URL[/flv]", + 'text_flv_two_example' => "[flv]http://$BASEURL/flash.video.demo.flv[/flv]", + 'text_youtube' => "YouTube", + 'text_youtube_description' => "在页面内插入YouTube网站的在线视频", + 'text_youtube_syntax' => "[youtube]YouTube视频的URL[/youtube]", + 'text_youtube_example' => "[youtube]http://www.youtube.com/watch?v=EsWKVcZ88Jw[/youtube]", + 'text_youku' => "优酷", + 'text_youku_description' => "在页面内插入优酷网的在线视频", + 'text_youku_syntax' => "[youku]优酷网视频的URL[/youku]", + 'text_youku_example' => "[youku]http://player.youku.com/player.php/sid/XMzM1MDExODg=/v.swf[/youku]", + 'text_tudou' => "土豆", + 'text_tudou_description' => "在页面内插入土豆网的在线视频", + 'text_tudou_syntax' => "[tudou]土豆网视频的URL[/tudou]", + 'text_tudou_example' => "[tudou]http://www.tudou.com/v/1jaI4LNa7sk[/tudou]", + 'text_ninety_eight_image' => "CC98图片", + 'text_ninety_eight_image_description' => "显示保存于CC98论坛的图片", + 'text_ninety_eight_image_syntax' => " [98img=[auto|number]]图片文件[/98img]", + 'text_ninety_eight_image_example' => "[98img=150]uploadfile/2008/10/30/2362924185.png[/98img]", + 'text_ninety_eight_image_remarks' => "CC98是浙江大学的一个论坛", +); + +?> diff --git a/lang/chs/lang_takeconfirm.php b/lang/chs/lang_takeconfirm.php new file mode 100644 index 00000000..a3f42cf1 --- /dev/null +++ b/lang/chs/lang_takeconfirm.php @@ -0,0 +1,14 @@ + "对不起...", + 'std_no_buddy_to_confirm' => "没有需要验证的用户。:(

    请点击", + 'std_here_to_go_back' => "这里返回。", + 'mail_title' => "网站账户验证", + 'mail_here' => "这里", + 'mail_content_1' => "你好,

    你的账号成功通过验证。你可以进入登录页面: ", + 'mail_content_2' => "

    使用你的账户登录。登录后请先阅读站点规则,提问前请自行参考常见问题。

    祝你好运! ".$SITENAME."!

    如果你不认识邀请你的人,请将本邮件转发至".$REPORTMAIL."
    ------
    ".$SITENAME." 网站" +); + +?> diff --git a/lang/chs/lang_takecontact.php b/lang/chs/lang_takecontact.php new file mode 100644 index 00000000..01f7247c --- /dev/null +++ b/lang/chs/lang_takecontact.php @@ -0,0 +1,17 @@ + "错误", + 'std_method' => "方式", + 'std_please_enter_something' => "请填写内容!", + 'std_please_define_subject' => "你必须输入标题!", + 'std_message_flooding' => "不允许滥发短讯,请在", + 'std_second' => "秒", + 'std_s' => "", + 'std_before_sending_pm' => "后重试。", + 'std_succeeded' => "成功", + 'std_message_succesfully_sent' => "短讯成功发送!" +); + +?> \ No newline at end of file diff --git a/lang/chs/lang_takeedit.php b/lang/chs/lang_takeedit.php new file mode 100644 index 00000000..4931ce10 --- /dev/null +++ b/lang/chs/lang_takeedit.php @@ -0,0 +1,12 @@ + "编辑失败!", + 'std_missing_form_data' => "有项目没有填写", + 'std_not_owner' => "你不是发种者!怎么回事?\n", + 'std_nfo_too_big' => "NFO过大!最大为65,535字节。", + 'std_cannot_move_torrent' => "你没有将种子移至另一区的权限。另外,你怎么会到这?" +); + +?> \ No newline at end of file diff --git a/lang/chs/lang_takeflush.php b/lang/chs/lang_takeflush.php new file mode 100644 index 00000000..5516791f --- /dev/null +++ b/lang/chs/lang_takeflush.php @@ -0,0 +1,11 @@ + "失败", + 'std_success' => "成功", + 'std_ghost_torrents_cleaned' => "个冗余种子被成功清除。", + 'std_cannot_flush_others' => "你只能清除自己的冗余种子" +); + +?> \ No newline at end of file diff --git a/lang/chs/lang_takeinvite.php b/lang/chs/lang_takeinvite.php new file mode 100644 index 00000000..3d111d9a --- /dev/null +++ b/lang/chs/lang_takeinvite.php @@ -0,0 +1,29 @@ + "邀请失败!", + 'std_must_enter_email' => "你必须输入邮箱地址!", + 'std_invalid_email_address' => "无效的邮箱地址!", + 'std_must_enter_personal_message' => "请添加信件中的私人内容。", + 'std_email_address' => "邮箱地址", + 'std_is_in_use' => "已经在使用。", + 'mail_here' => "这里", + 'mail_tilte' => "网站邀请函", + 'mail_one' => "你好,

    用户", + 'mail_two' => "邀请你加入".$SITENAME."社区。 +".$SITENAME."拥有知识丰富的用户。
    如果你有意加入,请在阅读网站规则后确认该邀请。

    请点击以下链接确认邀请:", + 'mail_three' => "请在", + 'mail_four' => "天内确认该邀请,之后邀请将作废。
    ".$SITENAME."真诚欢迎你加入我们的社区!

    来自邀请者", + 'mail_five' => "的话:", + 'mail_six' => "如果你根本不认识邀请者,请将此邮件转发至".$REPORTMAIL."

    ------
    ".$SITENAME."网站", + 'std_error' => "错误", + 'std_invite_denied' => "你的用户等级不允许发送邀请。你怎么到这来的?", + 'std_email_address_banned' => "邮箱地址被禁用!", + 'std_wrong_email_address_domains' => "不允许发送邀请给此邮箱地址!请使用以下邮箱:", + 'std_no_invite' => "你没有剩余邀请名额。你怎么到这来的?", + 'std_invitation_already_sent_to' => "发送失败!此邮箱", + 'std_await_user_registeration' => "已收到过邀请函,请勿重复发送。请等待用户注册。", +); + +?> diff --git a/lang/chs/lang_takelogin.php b/lang/chs/lang_takelogin.php new file mode 100644 index 00000000..b6d45f95 --- /dev/null +++ b/lang/chs/lang_takelogin.php @@ -0,0 +1,11 @@ + "错误: 用户名或密码不正确!

    忘记密码了?找回你的密码!", + 'std_login_fail' => "登录失败!", + 'std_account_disabled' => "该账号已被禁用。", + 'std_user_account_unconfirmed' => "该账户还未通过验证。如果你没有收到验证邮件,试试重新发送验证邮件。", +); + +?> diff --git a/lang/chs/lang_takemessage.php b/lang/chs/lang_takemessage.php new file mode 100644 index 00000000..2e4753b5 --- /dev/null +++ b/lang/chs/lang_takemessage.php @@ -0,0 +1,29 @@ + "错误", + 'std_permission_denied' => "你没有该权限!", + 'std_please_enter_something' => "不能为空!", + 'std_message_flooding_denied' => "禁止滥发短讯。请在", + 'std_before_sending_pm' => "秒后再发送。", + 'std_invalid_id' => "该账号已失效", + 'std_user_not_exist' => "不存在该账号", + 'std_refused' => "拒绝", + 'std_account_parked' => "该账号已被封存。", + 'std_user_blocks_your_pms' => "该用户拒绝接受你的短讯。", + 'std_user_accepts_friends_pms' => "该用户只接受其好友的短讯。", + 'std_user_blocks_all_pms' => "该用户拒绝接受一切短讯。", + 'std_succeeded' => "成功", + 'std_messages_out_of' => "条短讯(共", + 'std_were' => "条)已", + 'std_message_was' => "短讯已", + 'std_successfully_sent' => "成功发送!", + 'std_s_were' => "已", + 'std_was' => "已", + 'std_updated' => "更新", + 'std_no_permission_forwarding' => "你没有转发该短讯的权限。", + 'std_must_enter_username' => "你必须填写要转发的用户的用户名。", +); + +?> diff --git a/lang/chs/lang_takereseed.php b/lang/chs/lang_takereseed.php new file mode 100644 index 00000000..912e9c11 --- /dev/null +++ b/lang/chs/lang_takereseed.php @@ -0,0 +1,12 @@ + "续种请求!", + 'std_it_worked' => "成功了!完成下载的用户将收到请求续种的短讯。", + 'std_error' => "错误", + 'std_torrent_not_dead' => "该种子没有断种。", + 'std_reseed_sent_recently' => "该种子在过去15分钟内已收到一次续种请求。请耐心等待好心人续种。", +); + +?> diff --git a/lang/chs/lang_takesignup.php b/lang/chs/lang_takesignup.php new file mode 100644 index 00000000..4f80c0f0 --- /dev/null +++ b/lang/chs/lang_takesignup.php @@ -0,0 +1,42 @@ + "注册失败!(参看下面)", + 'std_invalid_email_address' => "邮箱地址无效!", + 'std_email_address_banned' => "邮箱地址被禁用!", + 'std_wrong_email_address_domains' => "不允许使用该邮箱地址注册!请使用以下邮箱:", + 'std_invalid_gender' => "性别无效!", + 'std_blank_field' => "有项目没有填写。", + 'std_hintanswer_too_short' => "对不起,密码提示问题答案过短(至少6个字符)", + 'std_username_too_long' => "对不起,用户名过长(至多12个字符)", + 'std_passwords_unmatched' => "两次输入的密码不一致!请重试。", + 'std_password_too_short' => "对不起,密码过短(至少6个字符)", + 'std_password_too_long' => "对不起,密码过长(至多40个字符)", + 'std_password_equals_username' => "对不起,用户名和密码不能相同。", + 'std_wrong_email_address_format' => "请输入正确的邮箱地址。", + 'std_invalid_username' => "无效的用户名。", + 'std_unqualified' => "对不起,你必须同意遵守站点规则才能注册。", + 'std_email_address' => "这个邮箱地址", + 'std_in_use' => "已经被使用。", + 'std_username_exists' => "用户名已经存在!", + 'std_database_in_distress' => "数据库出错", + 'std_almost_signup' => "即将完成注册!", + 'std_please_click' => "请点击", + 'std_here' => "这里", + 'std_to_finish_signup' => "来完成注册,谢谢!", + 'msg_subject' => "欢迎来到", + 'msg_congratulations' => "祝贺你,", + 'msg_you_are_a_member' => ",\n\n你已成为".$SITENAME."的一员,\n我们真诚地欢迎你的加入!\n\n请务必先阅读[url=rules.php][b]规则[/b][/url],提问前请自行参考[url=faq.php][b]常见问题[/b][/url],有空也请到[url=forums.php][b]论坛[/b][/url]看看。 \n\n祝你愉快。\n".$SITENAME."管理组", + 'mail_this_link' => "这个链接", + 'mail_here' => "这里", + 'mail_title' => " 网站用户注册验证", + 'mail_one' => "你好 ", + 'mail_two' => ",

    你请求在".$SITENAME."网站获取账号,并指定此邮箱地址 ", + 'mail_three' => " 为你的联系地址。

    如果你没有发过该请求,请忽视本邮件。输入你邮箱地址者的IP地址为 ", + 'mail_four' => "。请勿回复本邮件。

    如果你的确发过该请求,请点击以下链接来通过验证: ", + 'mail_four_1' => "

    如果以上链接打开出错、不存在或已经过期, 尝试在这里重新发送确认邮件 ", + 'mail_five' => "在通过验证后,你就可以使用新账号了。

    如果你在24小时内没有通过验证,你的账号将被删除。
    新人登录".$SITENAME."后请务必先阅读站点规则,提问前请参考常见问题。

    请注意:如果你并没有在".$SITENAME."网站注册,请举报此邮件至".$REPORTMAIL."

    ------

    ".$SITENAME." 网站.", + 'std_invalid_gender' => "性别无效!", +); +?> diff --git a/lang/chs/lang_takeupload.php b/lang/chs/lang_takeupload.php new file mode 100644 index 00000000..7d1c996a --- /dev/null +++ b/lang/chs/lang_takeupload.php @@ -0,0 +1,31 @@ + "上传失败!", + 'std_missing_form_data' => "请填写必填项目", + 'std_empty_filename' => "文件名不能为空!", + 'std_zero_byte_nfo' => "NFO文件为空", + 'std_nfo_too_big' => "NFO文件过大!最大允许65,535 bytes。", + 'std_nfo_upload_failed' => "NFO文件上传失败", + 'std_blank_description' => "你必须填写简介!", + 'std_category_unselected' => "你必须选择类型!", + 'std_invalid_filename' => "无效的文件名!", + 'std_filename_not_torrent' => "无效的文件名(不是.torrent文件).", + 'std_empty_file' => "空文件!", + 'std_not_bencoded_file' => "你在搞什么鬼?你上传的不是Bencode文件!", + 'std_not_a_dictionary' => "不是目录", + 'std_dictionary_is_missing_key' => "目录缺少值", + 'std_invalid_entry_in_dictionary' => "无效的目录项", + 'std_invalid_dictionary_entry_type' => "无效的目录项类型", + 'std_invalid_pieces' => "无效的文件块", + 'std_missing_length_and_files' => "缺少长度和文件", + 'std_filename_errors' => "文件名错误", + 'std_uploaded_not_offered' => "你只能上传通过候选的种子,请返回在你的候选中选择合适项目后再上传!", + 'std_unauthorized_upload_freely' => "你没有自由上传的权限!", + 'std_torrent_existed' => "该种子已存在!", + 'std_torrent_file_too_big' => "种子文件过大!最大允许", + 'std_remake_torrent_note' => " bytes。请使用更大的区块大小重新制作种子文件,或者将内容分为多个种子发布。", +); + +?> diff --git a/lang/chs/lang_topten.php b/lang/chs/lang_topten.php new file mode 100644 index 00000000..e7feca1e --- /dev/null +++ b/lang/chs/lang_topten.php @@ -0,0 +1,116 @@ + "错误!", + 'std_sorry' => "对不起...", + 'std_permission_denied_only' => "你没有该权限。只有", + 'std_or_above_can_view' => "及以上等级的用户才能查看排行榜。

    请查看"."常见问题了解更多关于用户等级和权限的信息。

    " .$SITENAME."管理组
    ", + 'col_rank' => "排名", + 'col_user' => "用户", + 'col_donated' => "捐赠", + 'col_ul_speed' => "上传速度", + 'col_downloaded' => "下载", + 'col_dl_speed' => "下载速度", + 'col_ratio' => "分享率", + 'col_joined' => "注册日期", + 'col_name' => "名称", + 'title_sna' => "完成数", + 'col_data' => "数据量", + 'title_se' => "种子数", + 'title_le' => "下载数", + 'col_to' => "总共", + 'col_country' => "国家/地区", + 'col_username' => "用户名", + 'col_upload_rate' => "上传速度", + 'col_download_rate' => "下载速度", + 'text_users' => "用户", + 'text_torrents' => "种子" , + 'text_countries' => "国家/地区", + 'text_peers' => "同伴", + 'text_community' => "社区", + 'text_search' => "搜索", + 'text_other' => "其它", + 'text_this_page_last_updated' => "本页最新更新于 ", + 'text_started_recording_date' => "统计开始于", + 'text_update_interval' => ", 每60分钟数据更新一次", + 'text_uploaders' => "上传者", + 'text_downloaders' => "下载者", + 'text_fastest_uploaders' => "最快上传者", + 'text_fastest_up_note' => "(平均值,包括非活动时间,至少上传50GB)", + 'text_fastest_note' => "(平均值,包括非活动时间)", + 'text_fastest_downloaders' => "最快下载者", + 'text_best_sharers' => "最佳分享者", + 'text_sharers_note' => "(至少下载50GB)", + 'text_worst_sharers' => "最差分享者", + 'text_most_active_torrents' => "最活跃种子", + 'text_most_snatched_torrents' => "完成数最多种子" , + 'text_most_data_transferred_torrents' => "流量最大种子", + 'text_best_seeded_torrents' => "供种率(做种/下载)最大种子", + 'text_best_seeded_torrents_note' => "(至少5个做种者)", + 'text_worst_seeded_torrents' => "供种率(做种/下载)最小种子", + 'text_worst_seeded_torrents_note' => "(至少有1个下载者, 不包括完成数为0的种子)", + + 'text_most_donated_USD' => "美元捐赠者", + 'text_most_donated_CNY' => "人民币捐赠者", + 'col_donated_usd' => "捐赠($)", + 'col_donated_cny' => "捐赠(¥)", + + 'text_most_supplied' => "最大资源提供者(不包括被删除的种子)", + 'text_most_snatched' => " 最大资源完成者(不包括被删除的种子)", + 'col_torrent_uploaded' => "# 上传", + 'col_torrent_downloaded' => "# 完成", + + 'text_most_topic' => " 论坛主题发起者(不包括被删除的主题)", + 'text_most_post' => " 论坛发帖者(不包括被删除的帖子)", + 'col_topics' => "主题", + 'col_posts' => "帖子", + + + 'text_biggest_topics' => "最热主题(不计特权论坛内的主题)", + 'col_subject' => "主题", + + 'col_number' => "数量", + 'text_most_browser' => "浏览器", + 'text_most_client' => "BT客户端(按最近访问服务器的客户端)", + + 'col_comments' => "评论", + 'text_most_commenter' => "种子评论者(不包括被删除的评论)", + + 'col_reviews' => "点评", + 'text_most_reviewer' => "电影点评者(不包括被删除的点评)", + + 'col_location' => "位置", + 'text_most_locations' => "同伴位置", + + 'col_keyword' => "关键字", + 'col_times' => "次数", + 'col_datetime' => "时间", + 'text_latest_search' => "最近搜索", + 'text_current_month_search' => "本月搜索", + 'text_last_month_search' => "上月搜索", + 'text_current_year_search' => "今年搜索", + + 'text_most_bonuses' => "魔力值", + 'col_bonus' => "魔力值", + 'text_countries_users' => "用户数", + 'col_users' => "用户数", + 'text_countries_uploaded' => "总上传量", + 'col_uploaded' => "上传量", + 'text_countries_per_user' => "用户平均上传量 (总上传量达到1TB且用户数超过100)", + 'col_average' => "平均", + 'text_countries_ratio' => "分享率 (总上传量达到1TB且用户数超过100)", + 'text_ago' => "以前", + 'text_inf' => "无限", + 'head_top_ten' => "排行榜", + 'text_most_stylesheet' => "界面风格", + 'text_most_language' => "用户语言", + 'text_top' => "Top ", + 'text_one_hundred' => "Top 100", + 'text_top_250' => "Top 250", + 'col_clicks' => "点击数", + 'text_most_clicks' => "宣传链接", + 'text_charity_giver' => "慈善家", +); + +?> diff --git a/lang/chs/lang_torrents.php b/lang/chs/lang_torrents.php new file mode 100644 index 00000000..11d29e92 --- /dev/null +++ b/lang/chs/lang_torrents.php @@ -0,0 +1,63 @@ + "搜索结果 - ", + 'text_search_box' => "搜索箱", + 'text_category' => "类型:", + 'text_source' => "来源:", + 'text_codec' => "编码:", + 'text_standard' => "分辨率:", + 'text_processing' => "处理:", + 'text_show_dead_active' => "显示断种/活种?", + 'select_including_dead' => "包括断种", + 'select_active' => "活种", + 'select_dead' => "断种", + 'text_show_special_torrents' => "显示促销种子?", + 'select_all' => "全部", + 'select_normal' => "普通", + 'select_free' => "免费", + 'select_two_times_up' => "2x上传", + 'select_free_two_times_up' => "免费&2x上传", + 'select_half_down' => "50%下载", + 'text_search' => "搜索关键字:", + 'submit_go' => "给我搜", + 'std_search_results_for' => "搜索结果 \"", + 'std_try_again' => "没有种子。请用准确的关键字重试。\n", + 'std_nothing_found' => "没有结果!", + 'std_no_active_torrents' => "没有种子:(\n", + 'input_check_all' => "全选", + 'input_uncheck_all' => "全不选", + 'text_download_client' => "下载指定客户端", + 'select_title' => "标题", + 'select_description' => "简介", + 'select_small_description' => "副标题", + 'select_uploader' => "发布者", + 'select_imdb_url' => "IMDb链接", + 'select_and' => "与", + 'select_or' => "或", + 'select_exact' => "准确", + 'select_parsed' => "语法", + 'text_in' => " 范围:", + 'text_with' => " 匹配模式:", + 'text_mode' => "", + 'text_show_bookmarked' => "显示收藏?", + 'select_bookmarked' => "仅收藏", + 'select_bookmarked_exclude' => "仅未收藏", + 'text_s_bookmarked_torrent' => "收藏的种子", + 'text_s_not_bookmarked_torrent' => "未收藏的种子", + 'head_torrents' => "种子", + 'head_music' => "音乐", + 'text_movies_and_tvs' => "电影 & 电视:", + 'text_games_and_appz' => "游戏 & 程序:", + 'text_others' => "其它:", + 'text_medium' => "媒介:", + 'text_team' => "制作组:", + 'text_audio_codec' => "音频编码:", + 'text_video' => "视频:", + 'text_tv' => "电视:", + 'text_music' => "音乐:", + 'text_software' => "软件:", +); + +?> diff --git a/lang/chs/lang_upload.php b/lang/chs/lang_upload.php new file mode 100644 index 00000000..e45c71e9 --- /dev/null +++ b/lang/chs/lang_upload.php @@ -0,0 +1,45 @@ + "发布", + 'std_sorry' => "对不起...", + 'std_unauthorized_to_upload' => "你没有发布种子的权限。请阅读(收件箱)", + 'std_please_offer' => "你没有发布种子的权限。如果你是普通会员,请到候选区提交你的发布请求(请查看常见问题中的“发布”)部分
    ", + 'text_red_star_required' => "红星号(*)标记的区域必须填写", + 'text_tracker_url' => "Tracker服务器的URL是", + 'row_torrent_file' => "种子文件", + 'row_torrent_name' => "标题", + 'text_torrent_name_note' => "(若不填将使用种子文件名。要求规范填写,如银翼杀手 Blade Runner 1982 Final Cut 720p HDDVD DTS x264-ESiR)\n", + 'row_small_description' => "副标题", + 'text_small_description_note' => "(将在种子页面种子标题下显示。如720p @ 4615 kbps - DTS 5.1 @ 1536 kbps)", + 'row_nfo_file' => "NFO文件", + 'text_only_viewed_by' => "(不允许", + 'text_or_above' => "以下用户查看。请上传.nfo文件)\n", + 'row_description' => "简介", + 'select_choose_one' => "请选择", + 'row_type' => "类型", + 'row_quality' => "质量", + 'text_source' => "来源:", + 'text_codec' => "编码:", + 'text_standard' => "分辨率:", + 'text_processing' => "处理:", + 'row_your_offer' => "你的候选", + 'text_please_select_offer' => "   如果发布的是通过候选的资源,请选择该候选项目。投票用户会收到通知。", + 'row_show_uploader' => "匿名发布", + 'checkbox_hide_uploader_note' => "不要在发布者项目中显示我的用户名", + 'text_read_rules' => "我已经阅读过规则", + 'submit_upload' => "发布", + 'text_to_browse_section' => "发布至种子区 ", + 'text_to_special_section' => "或音乐区 ", + 'text_type_note' => "   只选两者之一", + 'text_medium' => "媒介:", + 'text_team' => "制作组:", + 'text_audio_codec' => "音频编码:", + 'row_content' => "内容", + 'text_chinese_title' => "中文名:", + 'text_english_title' => "英文名:", + 'text_titles_note' => "(如果英文名不存在,使用拼音或不填写)", +); + +?> diff --git a/lang/chs/lang_uploaders.php b/lang/chs/lang_uploaders.php new file mode 100644 index 00000000..b3188914 --- /dev/null +++ b/lang/chs/lang_uploaders.php @@ -0,0 +1,22 @@ + "没有找到发布员!", + 'head_uploaders' => "发布员", + 'text_uploaders' => "发布员", + 'col_username' => "用户名", + 'col_torrents_size' => "种子大小", + 'col_torrents_num' => "种子数", + 'col_last_upload_time' => "最近发布时间", + 'col_last_upload' => "最近发布种子", + 'text_not_available' => "无", + 'submit_go' => "查找", + 'text_select_month' => "选择月份:", + 'text_order_by' => "排序", + 'text_username' => "用户名", + 'text_torrent_size' => "种子大小", + 'text_torrent_num' => "种子数", +); + +?> diff --git a/lang/chs/lang_usercp.php b/lang/chs/lang_usercp.php new file mode 100644 index 00000000..c04651d1 --- /dev/null +++ b/lang/chs/lang_usercp.php @@ -0,0 +1,248 @@ + "对不起...", + 'text_user_cp_home' => "  设  定  首  页  ", + 'text_personal_settings' => "  个  人  设  定  ", + 'text_tracker_settings' => "  网  站  设  定  ", + 'text_forum_settings' => "  论  坛  设  定  ", + 'text_security_settings' => "  安  全  设  定  ", + 'row_save_settings' => "保存设定", + 'submit_save_settings' => "保存设定! (只需点击一次)", + 'std_error' => "错误", + 'head_control_panel' => "控制面板", + 'head_personal_settings' => " - 个人设定", + 'std_invalid_action' => "无效的行为", + 'text_saved' => "已保存!", + 'row_account_parked' => "封存账号", + 'checkbox_pack_my_account' => "我将长期不使用账号。", + 'text_account_pack_note' => "注意:封存账号可避免因长期(如假期)不活动而被删除账号。封存后账号处于受限状态,此时不能下载种子或浏览某些页面。", + 'row_pms' => "短讯", + 'row_recommended_movies' => "推荐资源", + 'checkbox_show_hot' => "在首页显示推荐热门", + 'checkbox_show_classic' => "在首页显示推荐经典", + 'text_accept_pms' => "接受以下短讯:", + 'radio_all_except_blocks' => "所有(除了黑名单)", + 'radio_friends_only' => "仅好友", + 'radio_staff_only' => "管理组成员", + 'checkbox_delete_pms' => "回复后删除短讯", + 'checkbox_save_pms' => "保存短讯至发件箱", + 'checkbox_pm_on_comments' => "我发布的种子有新评论时通知我", + 'row_gender' => "性别", + 'radio_not_available' => "未知", + 'radio_male' => "男", + 'radio_female' => "女", + 'row_country' => "国家/地区", + 'row_download_speed' => "下载带宽", + 'row_upload_speed' => "上传带宽", + 'row_bt_client' => "BT客户端", + 'row_avatar_url' => "头像URL", + 'select_choose_avatar' => "选择头像", + 'select_nothing' => "默认头像", + 'text_avatar_note' => "最大宽度为150像素(必要的时候会被缩放)。", + 'text_bitbucket_note' => "如果你需要上传头像,请使用上传器。", + 'row_info' => "个人说明", + 'text_info_note' => "显示在你的个人信息页面。允许使用BBCode代码。", + 'head_tracker_settings' => " - 网站设定", + 'row_email_notification' => "邮件提示", + 'checkbox_notification_received_pm' => "收到短讯的时候提醒我。", + 'checkbox_notification_default_categories' => "当默认分类中有新种子的时候通知我。\n", + 'row_browse_default_categories' => "默认
    分类", + 'row_stylesheet' => "界面风格", + 'row_site_language' => "站点语言", + 'row_torrent_page' => "每页种子数", + 'text_zero_equals_default' => "(0=使用默认,最大=100)", + 'head_forum_settings' => " - 论坛设定", + 'row_topics_per_page' => "每页主题数", + 'row_posts_per_page' => "每页帖子数", + 'row_view_avatars' => "查看头像", + 'checkbox_low_bandwidth_note' => "(窄带用户可能需要关闭此项)", + 'row_view_signatures' => "查看签名档", + 'row_forum_signature' => "我的签名档", + 'head_security_settings' => " - 安全设定", + 'row_security_check' => "安全确认", + 'text_security_check_note' => "注意:你必须输入当前密码才能改变安全设定项目!", + 'std_enter_old_password' => "请先输入你的密码!", + 'std_wrong_password_note' => "你输入的密码错误!", + 'std_password_equals_username' => "对不起,用户名和密码不能相同。", + 'std_password_too_long' => "对不起,密码过长(至多40个字符)", + 'std_password_too_short' => "对不起,密码过短(至少6个字符)", + 'std_passwords_unmatched' => "两次输入的密码不一致!请重试。", + 'std_email_address_banned' => "该邮箱地址被禁用!", + 'std_wrong_email_address_domains' => "不允许使用该邮箱地址!请使用以下邮箱:", + 'std_wrong_email_address_format' => "你输入的不像是有效的邮箱地址。", + 'std_email_in_use' => "这个邮箱地址已经被使用。", + 'std_confirmation_email_sent' => "(确认邮件已经发送!)", + 'std_passkey_reset' => " (密钥已成功更新!)", + 'std_password_changed' => " (你的密码已成功修改!)", + 'std_privacy_level_updated' => " (你的隐私级别已成功更新!)", + 'row_reset_passkey' => "重置密钥", + 'checkbox_reset_my_passkey' => "我想重置密钥。", + 'text_reset_passkey_note' => "注意:当密钥被重置后,你必须重新下载相关的种子文件才能继续下载或做种。", + 'row_email_address' => "邮箱地址", + 'text_email_address_note' => "注意:改变邮箱地址后,你将在新地址收到验证邮件。你必须重新验证。", + 'row_change_password' => "修改密码", + 'row_type_password_again' => "确认新密码", + 'row_privacy_level' => "隐私等级", + 'radio_normal' => "普通", + 'radio_low' => "低(邮箱地址公开)", + 'radio_strong' => "强(个人信息全部隐藏)", + 'head_home' => " - 首页", + 'row_join_date' => "加入日期", + 'row_avatar' => "头像", + 'row_passkey' => "密钥", + 'row_invitations' => "邀请", + 'link_send_invitation' => "进入邀请系统", + 'row_karma_points' => "魔力值", + 'link_use_karma_points' => "使用魔力值", + 'row_ratings_submitted' => "评分数", + 'row_written_comments' => "评论数", + 'link_view_comments' => "查看评论", + 'row_forum_posts' => "论坛帖子数", + 'link_view_posts' => "查看帖子", + 'text_posts_per_day' => "帖子/天", + 'text_of_total_posts' => "总贴", + 'text_recently_read_topics' => "最近阅读主题", + 'col_topic_title' => "主题", + 'col_replies' => "回复", + 'col_topic_starter' => "发布者", + 'col_views' => "查看", + 'col_last_post' => "最后回复", + 'text_by' => "作者:", + 'select_none_selected' => "未选", + 'text_ago' => "以前", + 'mail_here' => "这里", + 'mail_change_email_one' => "你请求将你在".$SITENAME."站点的帐户(用户名", + 'mail_change_email_two' => ")改用此邮箱地址", + 'mail_change_email_three' => "作为联系地址。", + 'mail_change_email_four' => "如果你没有发过该请求,请忽视本邮件。输入你邮箱地址的用户的IP地址是", + 'mail_change_email_five' => "。请勿回复本邮件。", + 'mail_change_email_six' => "如果你的确发送过更改帐户信息的请求,请点击", + 'mail_change_email_six_1' => "来确认。", + 'mail_change_email_seven' => "你的新邮箱地址将显示在你的个人资料页面。注意:你的个人资料只有在点击以上地址后才会改变。", + 'mail_change_email_eight' => "", + 'mail_change_email_nine' => $SITENAME."网站", + 'mail_profile_change_confirmation' => "修改个人资料验证", + 'text_go_back' => "返回", + 'text_category' => "类型", + 'text_source' => "来源", + 'text_codec' => "编码", + 'text_standard' => "分辨率", + 'text_processing' => "处理", + 'text_show_dead_active' => "显示断种/活种?", + 'select_including_dead' => "包括断种", + 'select_active' => "活种", + 'select_dead' => "断种", + 'text_show_special_torrents' => "显示促销种子?", + 'select_all' => "全部", + 'select_normal' => "普通", + 'select_free' => "免费", + 'select_two_times_up' => "2x上传", + 'select_free_two_times_up' => "免费&2x上传", + 'text_show_bookmarked' => "显示收藏?", + 'select_bookmarked' => "仅收藏", + 'select_bookmarked_exclude' => "仅未收藏", + 'select_with' => "且", + 'select_without' => "但不", + 'text_review' => "显示点评", + 'row_pm_boxes' => "短讯箱", + 'text_show' => "每页显示", + 'text_pms_per_page' => "条短讯(最大=100)", + 'row_shoutbox' => "群聊区", + 'text_show_last' => "显示最新", + 'text_messages_at_shoutbox' => "条聊天记录(0=使用默认, 最小=10, 最大=500)", + 'text_refresh_shoutbox_every' => "每隔", + 'text_seconds' => "秒刷新群聊区(0=使用默认设置, 最小=10, 最大=3600)", + 'text_hide_helpbox_messages' => "不显示求助区的留言", + 'row_torrent_detail' => "种子详情页面", + 'text_show_description' => "显示简介", + 'text_show_nfo' => "显示NFO文件内容", + 'text_show_imdb_info' => "显示IMDb信息", + 'text_show_douban_info' => "显示豆瓣信息", + 'text_show_lastfm_info' => "显示Last.fm信息", + 'text_show_reviews' => "显示点评", + 'text_show_comments' => "显示评论", + 'row_browse_page' => "种子页面", + 'text_browse_setting_warning' => "警告:开启大量功能可能会降低你的浏览速度。", + 'text_torrents_per_page' => "个种子", + 'text_tooltip_type' => "种子标题上悬浮提示类型", + 'text_last_review' => "最新点评", + 'text_minor_imdb_info' => "简单IMDb信息 (片名 + 年代 + IMDb评分 + 国家 + 类别 + 导演 + 主演 + 标语)", + 'text_median_imdb_info' => "中型IMDb信息 (图片 + 片名 + 年代 + IMDb评分 + 片长 + 国家 + 对白语言 + 导演 + 类别 + 主演 + 英语剧情概要)", + 'text_douban_info' => "豆瓣信息 (图片 + 片名 + 年代 + 豆瓣评分 + 对白语言 + 导演 + 地区 + 主演 + 中文剧情概要)", + 'text_off' => "关闭悬浮提示", + 'text_show_lastfm_tooltip' => "悬浮提示Last.fm信息", + 'row_time_type' => "时间显示类型", + 'text_time_added' => "发生时间", + 'text_time_elapsed' => "已去时间", + 'text_append_words_to_torrents' => "特殊种子", + 'text_append_sticky' => "给固定于顶部的种子添加置顶图标 \"sticky\"", + 'text_append_new' => "给新种子添加'新'", + 'text_append_picked' => "给批评家推荐的资源添加标记,如'经典'", + 'text_show_action_icons' => "显示行为图标", + 'text_show_nfo_icon' => "查看NFO图标", + 'text_show_download_icon' => "下载图标", + 'text_show_edit_icon' => "编辑图标", + 'text_if_owner' => " (如果是发种者)", + 'text_show_bookmark_icon' => "收藏图标", + 'text_comments_reviews' => "评论", + 'text_show_comment_number' => "显示评论数", + 'text_last_comment_on_tooltip' => "悬浮提示最新评论内容", + 'text_show_review_number' => "显示点评数", + 'row_school' => "学校", + 'row_discuss' => "讨论", + 'row_funbox' => "趣味盒", + 'text_show_funbox' => "在首页显示趣味盒", + 'text_send' => "发送", + 'text_use' => "使用", + 'text_view' => "查看", + 'row_ip_location' => "IP/地点", + 'text_translation_note' => "你的语言不在列表中?看看你能不能", + 'text_translation_link' => "帮助我们翻译添加新语言", + 'text_movies_and_tvs' => "电影 & 电视:", + 'text_games_and_appz' => "游戏 & 程序:", + 'text_others' => "其它:", + 'text_at_browse_page' => "种子区", + 'text_at_special_page' => "音乐区", + 'text_additional_selection' => "补充设定", + 'text_stylesheet_note' => "更多界面风格?想自己设计?", + 'text_stylesheet_link' => "点击这里", + 'row_font_size' => "字体大小", + 'select_small' => "小", + 'select_large' => "大", + 'text_medium' => "媒介", + 'text_torrents_on_promotion' => "促销种子:", + 'text_highlight' => "高亮显示", + 'text_append_words' => "添加标记,如'2X免费'", + 'text_append_icon' => "添加图标,如\"free\"", + 'text_no_mark' => "无标记", + 'text_signature_note' => "允许使用BBCode代码。最大图片尺寸为500*200,只有第一张图片会显示。", + 'row_click_on_topic' => "点击主题时", + 'text_go_to_first_page' => "查看第一页", + 'text_go_to_last_page' => "查看最后页", + 'select_half_down' => "50%下载", + 'row_category_icons' => "分类图标", + 'text_team' => "制作组", + 'text_audio_codec' => "音频编码", + 'text_sub_category' => "次分类", + 'select_medium' => "中", + 'row_tooltip_last_post' => "悬浮提示最新帖子", + 'checkbox_last_post_note' => "(如果不喜欢悬浮提示,可关闭此项)", + 'row_network_bandwidth' => "网络带宽", + 'text_downstream_rate' => "下行带宽", + 'text_upstream_rate' => "上行带宽", + 'text_isp' => "互联网服务提供商", + 'text_show_title' => "显示标题", + 'text_show_small_description' => "显示副标题", + 'row_show_advertisements' => "显示广告", + 'text_can_turn_off_advertisement' => "及以上等级用户可选择不显示广告", + 'text_buy_no_advertisement' => "及以上等级用户可用魔力值兑换一定期限内不显示广告的权限,点击", + 'text_bonus_center' => "这里", + 'text_show_advertisement_note' => "我想看到广告", + 'row_promotion_link' => "宣传链接", + 'text_update_promotion_link' => "更新宣传链接", + 'text_read_more' => "了解更多" +); + +?> diff --git a/lang/chs/lang_userdetails.php b/lang/chs/lang_userdetails.php new file mode 100644 index 00000000..98d03774 --- /dev/null +++ b/lang/chs/lang_userdetails.php @@ -0,0 +1,145 @@ + "错误", + 'std_no_such_user' => "不存在该ID的用户!", + 'head_details_for' => "用户详情 - ", + 'text_account_disabled_note' => "该账号已被禁用!", + 'text_remove_from_friends' => "从好友列表中删除", + 'text_remove_from_blocks' => "从黑名单中删除", + 'text_add_to_friends' => "加入好友列表", + 'text_add_to_blocks' => "加入黑名单", + 'text_flush_ghost_torrents' => "清除冗余种子,点击", + 'text_here' => "这里", + 'row_invitation' => "邀请", + 'text_no_invitation' => "没有邀请资格", + 'link_send_invitation' => "发送邀请", + 'row_invited_by' => "邀请人", + 'row_join_date' => "加入日期", + 'row_last_seen' => "最近动向", + 'row_last_seen_location' => "最近动向(地点)", + 'row_email' => "邮箱", + 'row_users_ips' => "IP记录", + 'row_ip_history' => "IP历史", + 'text_user_earlier_used' => "该用户在以前使用了", + 'text_different_ips' => "个不同的IP地址", + 'row_ip_address' => "当前IP", + 'row_bt_client' => "BT客户端", + 'row_uploaded' => "上传量", + 'row_downloaded' => "下载量", + 'row_share_ratio' => "分享率", + 'row_internet_speed' => "网络带宽", + 'row_gender' => "性别", + 'row_donated' => "捐赠", + 'row_avatar' => "头像", + 'row_class' => "等级", + 'row_torrent_comment' => "种子评论", + 'link_view_comments' => "查看评论", + 'row_forum_posts' => "论坛帖子", + 'link_view_posts' => "查看帖子", + 'row_karma_points' => "魔力值", + 'row_uploaded_torrents' => "发布种子", + 'text_show_or_hide' => "[显示/隐藏]", + 'row_current_seeding' => "当前做种", + 'row_current_leeching' => "当前下载", + 'row_completed_torrents' => "完成种子", + 'row_incomplete_torrents' => "未完成种子", + 'text_public_access_denied' => "对不起,访问被用户", + 'text_user_wants_privacy' => "拒绝。用户想要保护其隐私。", + 'text_edit_user' => "编辑用户", + 'row_title' => "头衔", + 'row_privacy_level' => "隐私级别", + 'radio_low' => "低", + 'radio_normal' => "普通", + 'radio_strong' => "高", + 'row_avatar_url' => "头像URL", + 'row_signature' => "签名", + 'row_donor_status' => "捐赠状态", + 'row_donor' => "捐赠", + 'radio_yes' => "是", + 'radio_no' => "否", + 'row_support' => "支持员", + 'row_support_language' => "支持语言", + 'row_support_for' => "支持内容", + 'row_comment' => "备注", + 'row_seeding_karma' => "魔力值", + 'row_warning_system' => "警告系统

    (不良行为)", + 'text_not_warned' => "未警告.", + 'text_arbitrary_duration' => "(Arbitrary duration)", + 'text_until' => "直到 ", + 'text_to_go' => "剩余时间", + 'text_warn_for' => "警告时间", + 'text_week' => "周", + 'text_weeks' => "周", + 'text_unlimited' => "无限制", + 'text_reason_of_warning' => "警告原因", + 'text_times_warned' => "警告次数", + 'text_last_warning' => "最近一次警告", + 'text_not_warned_note' => "该用户没有被警告", + 'row_auto_warning' => "自动警告", + 'text_low_ratio' => "低分享率", + 'text_leech_warned' => "吸血", + 'text_for_unlimited_time' => "无期...", + 'row_movie_picker' => "批评家", + 'row_enabled' => "有效", + 'row_forum_post_possible' => "允许论坛发帖?", + 'row_upload_possible' => "允许上传?", + 'row_download_possible' => "允许下载?", + 'row_change_username' => "改变用户名", + 'row_change_email' => "改变邮箱地址", + 'row_change_password' => "改变密码", + 'row_repeat_password' => "确认密码", + 'row_amount_uploaded' => "上传量", + 'row_amount_downloaded' => "下载量", + 'row_passkey' => "秘钥", + 'checkbox_reset_passkey' => "重置秘钥", + 'submit_okay' => "确定", + 'text_delete_user' => "删除用户", + 'submit_delete' => "删除", + 'text_ago' => "以前", + 'title_show_or_hide' => "显示/隐藏", + 'title_download' => "下载:", + 'title_upload' => "上传:", + 'title_male' => "男生", + 'title_female' => "女生", + 'title_not_available' => "未知", + 'title_send_pm' => "发送短讯", + 'title_report_user' => "举报用户", + 'text_free' => "免费", + 'text_two_times_up' => "2X", + 'text_free_two_times_up' => "2X免费", + 'text_half_down' => "50%", + 'text_by' => "警告者:", + 'text_by_system' => "警告者:系统", + 'text_transaction_memo' => "交易备忘:", + 'row_pick_for' => "选片", + 'row_staff_duties' => "管理员职责/贵宾资格原因", + 'row_transfer' => "传输", + 'row_sltime' => "BT时间", + 'text_seeding_leeching_time_ratio' => "做种/下载时间比率", + 'text_seeding_time' => "做种时间", + 'text_leeching_time' => "下载时间", + 'text_since' => "自", + 'row_compatibility' => "趣味相投度", + 'text_unknown' => "未知", + 'text_super' => "超级", + 'text_very_high' => "很高", + 'text_high' => "较高", + 'text_medium' => "普通", + 'text_low' => "较低", + 'text_very_low' => "很低", + 'row_invites' => "邀请", + 'js_delete_user_note' => "如果确信的话,你现在可以删除该用户。", + 'std_sorry' => "对不起", + 'std_user_not_confirmed' => "该用户还未通过验证!", + 'text_not_available' => "N/A", + 'row_vip_by_bonus' => "贵宾资格为通过魔力值获得", + 'text_vip_by_bonus_note' => "该贵宾资格是否为通过魔力值换取。", + 'row_vip_until' => "贵宾资格结束时间", + 'text_vip_until_note' => "时间格式为'年年年年-月月-日日 时时:分分:秒秒'。贵宾资格结束的时间。'贵宾资格为通过魔力值获得'必须设为'是'此规则才能生效。", + 'row_show_ad' => "显示广告", + 'row_no_ad_until' => "不显示广告直到", + 'text_no_ad_until_note' => "时间格式为'年年年年-月月-日日 时时:分分:秒秒'。无广告待遇结束的时间。", +); +?> diff --git a/lang/chs/lang_userhistory.php b/lang/chs/lang_userhistory.php new file mode 100644 index 00000000..249c7718 --- /dev/null +++ b/lang/chs/lang_userhistory.php @@ -0,0 +1,26 @@ + "错误", + 'std_permission_denied' => "你没有该权限", + 'std_no_posts_found' => "没有找到该帖子", + 'head_posts_history' => "帖子历史", + 'text_posts_history_for' => "用户帖子历史-", + 'text_forum' => "论坛: ", + 'text_topic' => "主题: ", + 'text_post' => "帖子: ", + 'text_new' => "新!", + 'text_last_edited' => "最后被", + 'text_at' => "编辑于", + 'std_no_comments_found' => "没有找到评论", + 'head_comments_history' => "评论历史", + 'text_comments_history_for' => "用户评论历史-", + 'text_torrent' => "种子: ", + 'text_comment' => "评论: ", + 'std_history_error' => "错误", + 'std_unkown_action' => "未知行为", + 'std_invalid_or_no_query' => "无效或没有该项。" +); + +?> diff --git a/lang/chs/lang_users.php b/lang/chs/lang_users.php new file mode 100644 index 00000000..56fafbc0 --- /dev/null +++ b/lang/chs/lang_users.php @@ -0,0 +1,20 @@ + "用户", + 'text_users' => "

    用户

    \n", + 'text_search' => "搜索:", + 'select_any_class' => "(任何等级)", + 'submit_okay' => "给我搜", + 'text_prev' => "上一页", + 'text_next' => "下一页", + 'col_user_name' => "用户名", + 'col_registered' => "注册", + 'col_last_access' => "最后访问", + 'col_class' => "等级", + 'col_country' => "国家/地区", + 'select_any_country'=> "(任何国家/地区)", +); + +?> diff --git a/lang/chs/lang_viewfilelist.php b/lang/chs/lang_viewfilelist.php new file mode 100644 index 00000000..bdf2d7a3 --- /dev/null +++ b/lang/chs/lang_viewfilelist.php @@ -0,0 +1,8 @@ + "路径", +); + +?> diff --git a/lang/chs/lang_viewnfo.php b/lang/chs/lang_viewnfo.php new file mode 100644 index 00000000..d357059a --- /dev/null +++ b/lang/chs/lang_viewnfo.php @@ -0,0 +1,14 @@ + "奧哦", + 'head_view_nfo' => "查看NFO文件", + 'text_nfo_for' => "NFO文件:", + 'title_dos_vy' => "查看DOS样式", + 'text_dos_vy' => "DOS样式", + 'title_windows_vy' => "查看Windows样式", + 'text_windows_vy' => "Windows样式" +); + +?> \ No newline at end of file diff --git a/lang/chs/lang_viewpeerlist.php b/lang/chs/lang_viewpeerlist.php new file mode 100644 index 00000000..addb68dc --- /dev/null +++ b/lang/chs/lang_viewpeerlist.php @@ -0,0 +1,28 @@ + "用户", + 'col_location' => "地点", + 'col_connectable' => "可连接", + 'col_uploaded' => "上传", + 'col_rate' => "即时速度", + 'col_av_rate' => "平均速度", + 'col_downloaded' => "下载", + 'col_ratio' => "分享率", + 'col_complete' => "完成", + 'col_connected' => "连接时间", + 'col_idle' => "最近汇报", + 'col_client' => "客户端", + 'text_anonymous' => "匿名", + 'text_unknown' => "(未知)", + 'text_seeders' => "做种者", + 'text_leechers' => "下载者", + 'row_seeders' => "做种者", + 'row_leechers' => "下载者", + 'text_yes' => "是", + 'text_no' => "否", + 'text_inf' => "无限" +); + +?> diff --git a/lang/chs/lang_viewsnatches.php b/lang/chs/lang_viewsnatches.php new file mode 100644 index 00000000..4ff24726 --- /dev/null +++ b/lang/chs/lang_viewsnatches.php @@ -0,0 +1,33 @@ + "完成详情", + 'text_snatch_detail_for' => "种子完成详情 - ", + 'text_users_top_finished_recently' => "顶部的用户最后完成下载", + 'col_username' => "用户名", + 'col_uploaded' => "上传", + 'col_downloaded' => "下载", + 'col_ratio' => "分享率", + 'col_when_completed' => "完成", + 'col_last_action' => "最近动向", + 'col_se_time' => "做种时间", + 'col_le_time' => "下载时间", + 'col_seeding' => "做种", + 'col_pm_user' => "短讯", + 'col_report_user' => "举报", + 'col_on_or_off' => "在线", + 'text_global' => "全局", + 'text_torrent' => "本种", + 'text_yes' => "是", + 'text_no'=> "否", + 'title_report' => "举报", + 'col_ip' => "IP", + 'text_per_second' => "/秒", + 'text_anonymous' => "匿名", + 'text_inf' => "无限", + 'std_sorry' => "对不起", + 'text_no_snatched_users' => "还没有用户完成该种子。", +); + +?> diff --git a/lang/cht/lang_aboutnexus.php b/lang/cht/lang_aboutnexus.php new file mode 100644 index 00000000..a8fdec35 --- /dev/null +++ b/lang/cht/lang_aboutnexus.php @@ -0,0 +1,38 @@ + "版本", + 'text_version_note' => "本站".$SITENAME."使用的代碼來自".PROJECTNAME."。以下是版本詳情。", + 'text_main_version' => "主版本", + 'text_sub_version' => "次版本", + 'text_release_date' => "發布時間", + 'text_authorize_to' => "被授權者", + 'text_authorization_type' => "授權類型", + 'text_commercial' => "商業授權", + 'text_free' => "免費授權", + 'text_nexus' => "關于", + 'text_nexus_note' => "由來自浙江大學的Nexus團隊發起并開發完成。它的目標是代替TBSource項目,提供一個完整的、有序的、重視用戶信譽和知識的資源分享社區的解決方案。

    +".PROJECTNAME."第一階段的版本是基于TBSource開發的。我們在后者的基礎上添加或完善了大量功能,同時極大地提高了代碼效率。除TBSource外,我們還吸取了一些其它private tracker的想法或代碼,如Bit-HDTV,What.cd和SceneTorrents。", + 'text_authorization' => "關于授權", + 'text_authorization_note' => "如果你有意使用".PROJECTNAME."來架設你的分享網站,請聯系我們。", + 'text_translation' => "關于翻譯", + 'text_translation_note' => "支持用戶端的多語言切換。我們的主要語言為英語。

    如果你的語言當前未被支持(unavailable),而且你有意幫助我們翻譯,請在閱讀過翻譯說明聯系我們。我們永遠歡迎新的翻譯。另外,已有的翻譯經常需要維護,特別是以下被標記為過期(outdate),不完整(incomplete)或需要新翻譯(need-new)的語言。", + 'text_flag' => "旗", + 'text_language' => "語言", + 'text_state' => "狀態", + 'text_stylesheet' => "關于界面風格", + 'text_stylesheet_note' => PROJECTNAME."的頁面布局完全基于CSS設計,這使得用戶自定義網站外觀和添加新的界面風格都變得簡單。

    以下為本站".$SITENAME."中擁有的界面風格列表。如果你想要獲得更多界面風格或自己設計,請聯系我們。", + 'text_name' => "名字", + 'text_designer' => "設計者", + 'text_comment' => "說明", + 'text_contact' => "聯系", + 'text_contact_note' => "有意加入?有建議?找到代碼的Bug?洽談業務?請通過以下任一方式聯系我們。", + 'text_web_site' => "網站", + 'text_email' => "郵箱", + 'text_msn' => "MSN", + 'text_qq' => "QQ", + 'text_telephone' => "電話", +); + +?> diff --git a/lang/cht/lang_admanage.php b/lang/cht/lang_admanage.php new file mode 100644 index 00000000..28f22d6f --- /dev/null +++ b/lang/cht/lang_admanage.php @@ -0,0 +1,103 @@ + "管理廣告", + 'text_ad_management' => "管理廣告", + 'text_add_ad' => "添加廣告", + 'text_header' => "頁頭", + 'text_footer' => "頁尾", + 'text_below_navigation' => "導航欄下面", + 'text_below_searchbox' => "搜索箱下面", + 'text_torrent_detail' => "種子詳情頁面", + 'text_comment_page' => "評論頁面", + 'text_inter_overforums' => "論壇割區間", + 'text_forum_post_page' => "論壇帖子間", + 'text_popup' => "即現廣告", + 'text_no_ads_yet' => "暫無廣告!", + 'col_enabled' => "啟用", + 'col_name' => "名字", + 'col_position' => "位置", + 'col_order' => "排序", + 'col_type' => "展現方式", + 'col_start_time' => "起始時間", + 'col_end_time' => "終止時間", + 'col_action' => "行為", + 'text_yes' => "是", + 'text_no' => "否", + 'text_bbcodes' => "BBCode程式碼", + 'text_xhtml' => "XHTML程式碼", + 'text_text' => "文字", + 'text_image' => "圖片", + 'text_flash' => "Flash", + 'text_delete' => "移除", + 'text_edit' => "編輯", + 'js_sure_to_delete_ad' => "你確定要移除此廣告嗎?", + 'std_error' => "錯誤", + 'std_invalid_id' => "無效ID", + 'std_invalid_position' => "廣告位置無效", + 'head_add_ad' => "添加廣告", + 'head_edit_ad' => "編輯廣告", + 'text_note' => "注意", + 'text_ad_detail' => "廣告詳情", + 'row_name' => "名字", + 'row_start_time' => "起始時間", + 'row_end_time' => "終止時間", + 'row_enabled' => "啟用", + 'row_order' => "排序", + 'row_type' => "展現方式", + 'row_image_url' => "圖片URL", + 'row_image_link' => "廣告鏈結", + 'row_image_width' => "圖片寬度", + 'row_image_height' => "圖片高度", + 'row_image_tooltip' => "鏈結懸浮輔助說明文字", + 'row_text_content' => "文字內容", + 'row_text_link' => "廣告鏈結", + 'row_text_size' => "文字大小", + 'row_bbcodes_code' => "BBCode程式碼", + 'row_xhtml_code' => "XHTML程式碼", + 'row_flash_url' => "Flash URL", + 'row_flash_width' => "Flash寬度", + 'row_flash_height' => "Flash高度", + 'submit_submit' => "提交", + 'text_ad' => "廣告", + 'text_header_note' => "察看在所有頁面的右上方。建議使用大小在580x90內的圖片或Flash。只察看優先級最高的一個廣告。", + 'text_footer_note' => "察看在所有頁面的最底部。建議廣告大小在728x160內。只察看優先級最高的一個廣告。", + 'text_below_navigation_note' => "察看在所有頁面導航欄的下面。建議廣告大小為728x90。只察看優先級最高的一個廣告。", + 'text_below_searchbox_note' => "察看在種子頁面搜索箱的下面。建議廣告大小為728x90。只察看優先級最高的一個廣告。", + 'text_torrent_detail_note' => "察看在種子詳情頁面的種子介紹中。建議廣告大小為600x160。只察看優先級最高的一個廣告。", + 'text_comment_page_note' => "察看在種子和候選的評論間。建議廣告大小為600x160。可同時察看多個廣告。", + 'text_inter_overforums_note' => "察看在論壇首頁論壇割區間。建議廣告大小為728x90。可同時察看多個廣告。", + 'text_forum_post_page_note' => "察看在論壇主題詳情頁面的帖子間。建議廣告大小為600x160。可同時察看多個廣告。", + 'text_popup_note' => "在所有頁面談促。極具侵擾性,請慎用。建議廣告大小為468x90。", + 'text_name_note' => "給廣告命名,便于識別。", + 'text_start_time_note' => "時間格式為'年年年年-月月-日日 時時:分分:秒秒',如'2007-12-24 21:00:00'。廣告起始生效的時間。
    如留空則廣告將馬上生效。", + 'text_end_time_note' => "時間格式為'年年年年-月月-日日 時時:分分:秒秒',如'2008-01-24 21:00:00'。廣告結束的時間。
    如留空則廣告永不結束,直到添加了新的廣告。", + 'text_order_note' => "廣告的察看優先級。數值'0'具有最高的優先級。
    當某個廣告位置具有多個有效廣告:如果該位置只允許一個廣告,將察看優先級最高的廣告;如果該位置允許多個廣告,將按照優先級從高到低順序察看多個廣告。如多個廣告具有相同的優先級,最近添加的廣告將具有高優先權。", + 'text_enabled_note' => "只有啟用的廣告才會察看。", + 'text_type_note' => "選取廣告的展現方式。", + 'text_image_url_note' => "廣告圖片檔案的URL。
    可使用相對位址(如'pic/ad.jpg')或絕對位址(如'http://www.nexusphp.com/ad.jpg')。", + 'text_image_link_note' => "廣告指向的鏈結。如'http://www.nexusphp.com/ad.html'。", + 'text_image_width_note' => "單位為像素。圖片察看的寬度。", + 'text_image_height_note' => "單位為像素。圖片察看的高度。", + 'text_image_tooltip_note' => "廣告鏈結懸浮輔助說明文字資訊。", + 'text_text_content_note' => "文字廣告的察看內容", + 'text_text_link_note' => "廣告指向的鏈結。如'http://www.nexusphp.com/ad.html'。", + 'text_text_size_note' => "廣告文字的字型大小。可使用pt、px、em為單位,如'30pt'。如留空,則使用'30pt'。", + 'text_bbcodes_code_note' => "什么是BBCode程式碼?見", + 'text_here' => "這裡", + 'text_xhmtl_code_note' => "通常情況下,你應該儘量避免直接使用XHTML展現廣告,因為這樣做不但容易因程式碼錯誤導致整體頁面混亂,而且具有安全隱患。如果一定要用,請確保XHTML程式碼是安全和正確的。
    注意:請按XHTML 1.0 Transitional規格填寫程式碼,而不是HTML 4.01規格。", + 'text_flash_url_note' => "Flash檔案的URL。
    可使用相對位址(如'pic/flash.demo.swf')或絕對位址(如'http://www.nexusphp.com/flash.demo.swf')。", + 'text_flash_width_note' => "單位為像素。Flash察看的寬度。", + 'text_flash_height_note' => "單位為像素。Flash察看的高度。", + 'std_missing_form_data' => "有必填項目未寫。", + 'std_invalid_type' => "展現方式無效。", + 'std_success' => "成功", + 'std_edit_success' => "廣告編輯成功。", + 'std_add_success' => "廣告添加成功。", + 'text_unlimited' => "無限制", + 'std_go_back' => "傳回廣告清單", + 'col_clicks' => "點擊數" +); + +?> diff --git a/lang/cht/lang_adredir.php b/lang/cht/lang_adredir.php new file mode 100644 index 00000000..270e50ec --- /dev/null +++ b/lang/cht/lang_adredir.php @@ -0,0 +1,11 @@ + "錯誤", + 'std_ad_system_disabled' => "廣告系統關閉中。", + 'std_invalid_ad_id' => "無效的廣告ID", + 'std_no_redirect_url' => "無跳轉鏈結。" +); + +?> diff --git a/lang/cht/lang_attachment.php b/lang/cht/lang_attachment.php new file mode 100644 index 00000000..84e59e1d --- /dev/null +++ b/lang/cht/lang_attachment.php @@ -0,0 +1,20 @@ + "失敗!沒有收到檔案!", + 'text_file_number_limit_reached' => "失敗!你暫時無法上傳更多屬裝置!請等待些時間。", + 'text_file_size_too_big' => "失敗!檔案過大。", + 'text_file_extension_not_allowed' => "失敗!不允許該檔案副檔名。", + 'text_invalid_image_file' => "失敗!圖片檔案無效。", + 'text_cannot_move_file' => "失敗!無法移動上傳的檔案。", + 'submit_upload' => "上傳", + 'text_left' => "今日剩餘:", + 'text_of' => "/", + 'text_size_limit' => "大小限制:", + 'text_file_extensions' => "允許副檔名:", + 'text_mouse_over_here' => "滑鼠移至此", + 'text_small_thumbnail' => "小縮略圖", +); + +?> diff --git a/lang/cht/lang_bitbucket-upload.php b/lang/cht/lang_bitbucket-upload.php new file mode 100644 index 00000000..d99b6914 --- /dev/null +++ b/lang/cht/lang_bitbucket-upload.php @@ -0,0 +1,36 @@ + "上傳失敗", + 'std_nothing_received' => "沒有接收到文件!", + 'std_file_too_large' => "對不起,文件過大無法上傳。", + 'std_bad_file_name' => "文件名錯誤。", + 'std_file_with_the_name' => "對不起,該文件", + 'std_already_exists' => "已經存在。", + 'std_error' => "錯誤", + 'std_invalid_image_format' => "擴展名無效:只允許gif,jpg或png!", + 'std_image_processing_failed' => "圖片處理失敗", + 'std_sorry_the_uploaded' => "對不起,上傳的文件", + 'std_failed_processing' => "處理失敗。請用圖片編輯軟體處理後再上傳。謝謝!", + 'std_success' => "成功", + 'std_use_following_url' => "使用以下URL訪問檔案:", + 'std_upload_another_file' => "上傳其他文件", + 'std_image' => "圖片", + 'std_need_not_rescaling' => "不需要縮小", + 'std_rescaled_from' => "從", + 'std_to' => "縮小到", + 'std_profile_updated' => "
    注意:你的頭像已經被更新!", + 'head_avatar_upload' => "頭像上傳", + 'text_avatar_upload' => "頭像上傳", + 'text_upload_directory_unwritable' => "注意:上傳路徑不可寫。請將該情況報告給管理員!", + 'text_disclaimer' => "聲明
    不要上傳未授權或非法的圖片。
    上傳的圖片被認為是公開的圖片,因此不要上傳你不想讓陌生人觀看的圖片。
    若圖片高度超過", + 'text_disclaimer_two' => "象素或寬度超過", + 'text_disclaimer_three' => "象素則會被按寬高比縮小。
    檔案大小不能超過", + 'text_disclaimer_four' => " Bytes。", + 'row_file' => "文件", + 'checkbox_avatar_shared' => "共用頭像(其他用戶可以選擇使用我的頭像)。", + 'submit_upload' => "上傳", +); + +?> diff --git a/lang/cht/lang_catmanage.php b/lang/cht/lang_catmanage.php new file mode 100644 index 00000000..f2f65e9a --- /dev/null +++ b/lang/cht/lang_catmanage.php @@ -0,0 +1,81 @@ + "分類管理", + 'text_category_management' => "分類管理", + 'text_manage' => "管理", + 'text_searchbox' => "種子分類型態", + 'text_category_icons' => "分類圖像", + 'text_second_icons' => "第二圖像", + 'text_categories' => "分類", + 'text_sources' => "來源", + 'text_media' => "媒介", + 'text_codecs' => "編碼", + 'text_standards' => "解析度", + 'text_processings' => "處理", + 'text_teams' => "制作組", + 'text_audio_codecs' => "聲訊編碼", + 'std_error' => "錯誤", + 'std_invalid_type' => "無效的類別。", + 'text_add' => "添加", + 'text_no_record_yet' => "暫無記錄!", + 'col_id' => "ID", + 'col_name' => "名字", + 'col_order' => "排序", + 'col_action' => "行為", + 'text_delete' => "移除", + 'text_edit' => "編輯", + 'js_sure_to_delete_this' => "你確信要移除此項目嗎?", + 'col_sub_category' => "次分類", + 'text_per_row' => "每行項目數", + 'text_padding' => "間隔", + 'text_enabled' => "察看", + 'text_disabled' => "不察看", + 'col_folder' => "圖像檔案夾", + 'text_multi_language' => "多語言", + 'text_second_icon' => "第二圖像", + 'text_css_file' => "CSS檔案", + 'text_none' => "無", + 'text_css_file_note' => "為此分類圖像指定CSS檔案。填寫完整路徑,如'styles/scenetorrents.css'。若無請留空。
    允許的字元:[a-z](小寫),[0-9],[_./]。", + 'text_designer' => "設計者", + 'text_comment' => "說明", + 'text_yes' => "是", + 'text_no' => "否", + 'col_image' => "圖片檔名", + 'text_class_name' => "class屬性值", + 'col_mode' => "型態", + 'std_invalid_id' => "無效的id", + 'submit_submit' => "提交", + 'text_subcategory_name_note' => "不要使用過長的名字。建議在10個字母內。", + 'text_order_note' => "遞增排序,即'0'排在最前。", + 'row_searchbox_name' => "分類型態名字", + 'text_searchbox_name_note' => "允許的字元:[a-z](小寫),[0-9],[_./]。", + 'row_show_sub_category' => "察看次分類", + 'text_show_sub_category_note' => "勾選你想啟用的次分類。", + 'row_items_per_row' => "每行項目數", + 'text_items_per_row_note' => "設定在搜索箱中每行察看的項目數,如'8'。", + 'row_padding_between_items' => "項目間距", + 'text_padding_between_items_note' => "單位為像素。搜索箱中項目的水平間隔距離,如'3'。", + 'text_category_icon_name_note' => "允許的字元:[a-z](小寫),[0-9],[_./]。", + 'text_folder_note' => "分類圖像所在的檔案夾名。允許的字元:[a-z](小寫),[0-9],[_./]。
    必須在末尾添加斜杠(/),如'mycaticon/'", + 'text_multi_language_note' => "是否為不同語言使用不同的分類圖像。如果設為'是',將多份圖像分別擺入命名如'en','chs'等的檔案夾中。", + 'text_second_icon_note' => "是否使用第二圖像察看補充資訊。如果設為'是',將第二圖像擺入普通圖像目錄下命名為'additional'的檔案夾中。", + 'text_designer_note' => "此圖像集的設計者。", + 'text_comment_note' => "此圖像集的說明。", + 'text_icon_directory_note' => "你必須將圖像檔案擺入伺服器正確的目錄才能使得以下設定起作用。將普通的分類圖像擺入'pic/category/分類型態名字/圖像檔案夾[語言縮寫/]',將第二圖像擺入'pic/category/分類型態名字/圖像檔案夾[語言縮寫/]additional/'.
    不明白?參照下面的例子:
      • 分類型態名字='nhd'
      • 圖像檔案夾='scenetorrents/'
      • 多語言='是'
      • 第二圖像='否'
      你應該將一個英語的電影類別的圖像(如'movies.png')檔案擺入'pic/category/nhd/scenetorrents/en/'。
      • 分類型態名字='chd'
      • 圖像檔案夾='nanosofts/'
      • 多語言='否'
      • 第二圖像='是'
      你應該將一個英語的電影類別的圖像(如'movies.png')檔案擺入'pic/category/chd/nanosofts/',將一個第二圖像(如'bdh264.png')擺入'pic/category/chd/nanosofts/additional/'。
    ", + 'text_second_icon_name_note' => "不要使用過長的名字。建議在10個字母內。", + 'text_image_note' => "圖片檔案的名字。允許的字元:[a-z](小寫),[0-9],[_./]。", + 'row_selections' => "選取", + 'text_selections_note' => "如果某個選取未指定,其所有選項都符合此規則。必須至少指定一個選取。", + 'row_category_name' => "分類名", + 'text_category_name_note' => "不要使用過長的名字。建議在10個字母內。", + 'row_mode' => "型態", + 'text_class_name_note' => "為圖片指定class屬性值。若無請留空。允許的字元: [a-z](小寫),[0-9],[_],第一個字元必須是字母。", + 'std_missing_form_data' => "有必填項目未填寫。", + 'std_invalid_character_in_filename' => "此檔名包含不合法字元:", + 'std_must_define_one_selection' => "你必須至少指定一個選取!", + 'std_invalid_mode_id' => "無效的型態id。" +); + +?> diff --git a/lang/cht/lang_cheaterbox.php b/lang/cht/lang_cheaterbox.php new file mode 100644 index 00000000..461e2244 --- /dev/null +++ b/lang/cht/lang_cheaterbox.php @@ -0,0 +1,28 @@ + "噢哦!", + 'std_no_suspect_detected' => "還沒有檢測到任何作弊嫌疑者。", + 'head_cheaterbox' => "作弊者", + 'text_cheaterbox' => "作弊者 BETA", + 'col_added' => "時間", + 'col_suspect' => "嫌疑者", + 'col_hit' => "次數", + 'col_torrent' => "種子", + 'col_ul' => "上傳", + 'col_dl' => "下載", + 'col_ann_time' => "匯報時間", + 'col_seeders' => "做種者", + 'col_leechers' => "下載者", + 'col_comment' => "備注", + 'col_dealt_with' => "處理", + 'col_action' => "行為", + 'text_torrent_does_not_exist' => "種子不存在或已被刪除", + 'text_yes' => "是", + 'text_no' => "否", + 'submit_set_dealt' => "設為已處理", + 'submit_delete' => "刪除" +); + +?> diff --git a/lang/cht/lang_checkuser.php b/lang/cht/lang_checkuser.php new file mode 100644 index 00000000..fb3905ba --- /dev/null +++ b/lang/cht/lang_checkuser.php @@ -0,0 +1,17 @@ + "錯誤", + 'std_no_user_id' => "沒有該ID的用戶!", + 'std_no_permission' => "你沒有該權限", + 'head_detail_for' => "用戶詳情 - ", + 'text_account_disabled' => "

    該帳號被禁用!

    \n", + 'row_join_date' => "加入日期", + 'row_gender' => "性別", + 'row_email' => "郵箱", + 'row_ip' => "IP", + 'submit_confirm_this_user' => "確認該用戶" +); + +?> diff --git a/lang/cht/lang_comment.php b/lang/cht/lang_comment.php new file mode 100644 index 00000000..dcb09f31 --- /dev/null +++ b/lang/cht/lang_comment.php @@ -0,0 +1,50 @@ + "錯誤", + 'std_comment_flooding_denied' => "禁止濫發評論。請在", + 'std_before_posting_another' => "秒後再發。", + 'std_no_torrent_id' => "沒有該ID的種子。", + 'std_no_comment_id' => "沒有該ID的評論", + 'std_comment_body_empty' => "評論內容不能為空!", + 'head_add_comment_to' => "添加評論 - ", + 'text_add_comment_to' => "添加評論 - ", + 'submit_okay' => "  確定  ", + 'text_comments_in_reverse_order' => "逆序顯示,頂部為最後發佈的評論\n", + 'std_invalid_id' => "無效的ID", + 'std_permission_denied' => "沒有該權限。", + 'head_edit_comment_to' => "編輯評論 - ", + 'text_edit_comment_to' => "編輯評論 - ", + 'std_delete_comment' => "刪除評論", + 'std_delete_comment_note' => "你即將刪除評論。點擊\n", + 'std_here_if_sure' => ">這裏來確認。", + 'head_original_comment' => "原始評論", + 'text_original_content_of_comment' => "原始評論內容", + 'std_unknown_action' => "未知行為。", + 'std_no_review_id' => "該ID的點評不存在", + 'std_review_body_empty' => "點評正文不能為空!", + 'text_reviews_in_reverse_order' => "

    逆序顯示,頂部為最后發布的點評

    \n", + 'head_edit_review_to' => "編輯點評 - ", + 'text_edit_review_to' => "編輯點評 - ", + 'std_delete_review' => "刪除點評", + 'std_delete_review_note' => "你即將刪除點評。點擊\n", + 'head_original_review' => "原始點評", + 'text_original_content_of_review' => "原始點評內容", + 'row_user_comment' => "用戶評論", + 'row_editor_notes' => "編輯評注", + 'row_bouns_change' => "魔力值改變", + 'text_bouns_change_notes' => " 分值范圍是0 - 1000,視點評質量取數值(超過1000當做1000,其他不在范圍內的值當做0)", + 'std_review_no_external_info' => "沒有外部信息,無法標記評論!", + 'std_review_unmark' => "去除點評標記", + 'std_unmark_review_note' => "你即將去除點評的標記。點擊\n", + 'row_original_torrent' => "原始種子", + 'text_no_exists' => "不再存在!", + 'text_torrent_id' => "種子ID:", + 'text_back' => "返回", + 'text_body' => "正文", + 'text_compose' => "撰寫", + 'text_edit' => "編輯", +); + +?> diff --git a/lang/cht/lang_confirm_resend.php b/lang/cht/lang_confirm_resend.php new file mode 100644 index 00000000..1c8ab86d --- /dev/null +++ b/lang/cht/lang_confirm_resend.php @@ -0,0 +1,36 @@ + "重發確認郵件失敗", + 'std_fields_blank' => "有項目沒有填寫。", + 'std_invalid_email_address' => "郵箱地址無效!", + 'std_email_not_found' => "資料庫中沒有該郵箱地址。\n", + 'std_user_already_confirm' => "該郵箱的用戶已經通過驗證。\n", + 'std_passwords_unmatched' => "兩次輸入的密碼不一致!肯定拼錯了,請重試。", + 'std_password_too_short' => "對不起,密碼過短(至少6個字元)", + 'std_password_too_long' => "對不起,密碼過長(至多40個字元)", + 'std_password_equals_username' => "對不起,用戶名和密碼不能相同。", + 'std_error' => "錯誤", + 'std_database_error' => "數據庫錯誤!請將該情況報告給管理員。", + 'text_resend_confirmation_mail_note' => "

    重發確認郵件

    填寫以下表格使系統重發驗證郵件。

    你必須在過去24小時內註冊且沒有通過驗證才能使用該功能,
    否則你的帳號信息已被刪除,需要重新註冊。

    注意:連續".$maxloginattempts."次嘗試失敗將導致你的IP地址被禁用!

    ", + 'row_registered_email' => "註冊郵箱:", + 'row_new_password' => "新密碼:", + 'text_password_note' => "至少6個字元", + 'row_enter_password_again' => "再次輸入新密碼:", + 'submit_send_it' => "發送!", + 'text_you_have' => "你還有", + 'text_remaining_tries' => "次嘗試機會。", + 'mail_title' => "用戶註冊驗證(重發)", + 'mail_this_link' => "這個鏈接", + 'mail_here' => "這裏", + 'mail_one' => "你好 ", + 'mail_two' => ",

    你請求重新收取".$SITENAME."網站的註冊確認郵件,並指定此郵箱地址 ", + 'mail_three' => " 為你的聯系地址。

    如果你沒有發過該請求,請忽視本郵件。輸入你郵箱地址者的IP地址為 ", + 'mail_four' => ". 。請勿回復本郵件。

    如果你的確發過該請求,請點擊以下鏈接來通過驗證: ", + 'mail_four_1' => "

    如果以上鏈接打開出錯、不存在或已經過期, 嘗試在這裏重新發送確認郵件 ", + 'mail_five' => "在通過驗證後,你就可以使用新賬號了。

    如果你在24小時內沒有通過驗證,你的賬號將被刪除。
    新人登錄".$SITENAME."後請務必先閱讀站點規則,提問前請參考常見問題。

    請註意:如果你並沒有在".$SITENAME."網站註冊,請舉報此郵件至".$REPORTMAIL."

    ------

    ".$SITENAME." 網站.", + 'text_select_lang' => "Select Site Language: ", + 'std_need_admin_verification' => "賬戶需要通過管理員手動驗証。" +); +?> diff --git a/lang/cht/lang_contactstaff.php b/lang/cht/lang_contactstaff.php new file mode 100644 index 00000000..77d0c22d --- /dev/null +++ b/lang/cht/lang_contactstaff.php @@ -0,0 +1,12 @@ + "聯繫管理組", + 'text_message_to_staff' => "給管理組發短訊", + 'row_subject' => "標題", + 'row_body' => "正文", + 'submit_send_it' => "發送" +); + +?> diff --git a/lang/cht/lang_delete.php b/lang/cht/lang_delete.php new file mode 100644 index 00000000..93f64bf3 --- /dev/null +++ b/lang/cht/lang_delete.php @@ -0,0 +1,17 @@ + "刪除失敗!", + 'std_missing_form_date' => "有項目未填", + 'std_not_owner' => "你不是發種者!你怎麼會來這?\n", + 'std_invalid_reason' => "無效的理由", + 'std_describe_violated_rule' => "請填寫具體違反的規則。", + 'std_enter_reason' => "請填寫刪除該種子的原因。", + 'head_torrent_deleted' => "成功刪除種子!", + 'text_go_back' => "回到剛才的地方", + 'text_back_to_index' => "返回首頁", + 'text_torrent_deleted' => "成功刪除種子!" +); + +?> \ No newline at end of file diff --git a/lang/cht/lang_deletedisabled.php b/lang/cht/lang_deletedisabled.php new file mode 100644 index 00000000..c26e9ea6 --- /dev/null +++ b/lang/cht/lang_deletedisabled.php @@ -0,0 +1,12 @@ + "移除被禁用戶", + 'text_delete_diasabled' => "移除被禁用戶", + 'submit_delete_all_disabled_users' => "移除所有被禁用戶", + 'text_delete_disabled_note' => "如果你點擊下面的按鈕,網站中所有的被禁止用戶將被移除。除非十分確定,否則不要點此按鈕。", + 'text_users_are_disabled' => "個用戶被移除。" +); + +?> diff --git a/lang/cht/lang_deletemessage.php b/lang/cht/lang_deletemessage.php new file mode 100644 index 00000000..418dc7be --- /dev/null +++ b/lang/cht/lang_deletemessage.php @@ -0,0 +1,12 @@ + "錯誤短訊ID", + 'std_not_suggested' => "如果我是你,我不會這麼做...", + 'std_not_in_inbox' => "你的收件箱中沒有該短訊。", + 'std_not_in_sentbox' => "你的發件箱中沒有該短訊。", + 'std_unknown_pm_type' => "未知短訊類型。" +); + +?> \ No newline at end of file diff --git a/lang/cht/lang_details.php b/lang/cht/lang_details.php new file mode 100644 index 00000000..3683c940 --- /dev/null +++ b/lang/cht/lang_details.php @@ -0,0 +1,223 @@ + "錯誤", + 'std_no_torrent_id' => "沒有該ID的種子", + 'head_details_for_torrent' => "種子詳情 ", + 'text_successfully_uploaded' => "發布成功!", + 'text_redownload_torrent_note' => "你必須重新下載種子才能開始做種。", + 'text_successfully_edited' => "編輯成功!", + 'text_go_back' => "傳回到", + 'text_whence_you_came' => "原先地點", + 'text_rating_added' => "添加評分成功!", + 'text_thanks_added' => "感謝表示成功!", + 'text_free' => "免費", + 'text_two_times_up' => "2X", + 'text_free_two_times_up' => "2X免費", + 'text_half_down' => "50%", + 'row_download' => "下載", + 'text_downloading_not_allowed' => "你被禁止下載。", + 'row_small_description' => "副標題", + 'row_info_hash' => "Hash碼", + 'row_description' => "簡介", + 'text_nfo' => "NFO", + 'text_view_nfo' => "[所有型態]", + 'row_imdb_url' => "IMDb鏈結", + 'row_subtitles' => "字幕", + 'text_no_subtitles' => "該種子暫無字幕", + 'submit_upload_subtitles' => "上傳字幕", + 'row_info' => "資訊", + 'text_imdb' => "IMDb", + 'text_lastfm' => "Last.fm", + 'text_douban' => "豆瓣", + 'text_not_ready' => "資訊未抓取,點擊", + 'text_here_to_retrieve' => "這裡重新檢索", + 'text_someone_has_requested' => "某用戶在", + 'text_please_be_patient' => "秒以前傳送檢索要求,請等待。", + 'text_information' => "資訊:", + 'text_title' => " 片名: ", + 'text_title_chinese' => "中文片名: ", + 'text_also_known_as' => " 代號: ", + 'text_year' => " 年代: ", + 'text_runtime' => " 片長: ", + 'text_mins' => "分鐘", + 'text_votes' => " 票數: ", + 'text_rating' => " 評分: ", + 'text_language' => " 對白語言: ", + 'text_country' => " 國家: ", + 'text_all_genres' => " 類別: ", + 'text_tagline' => " 標語: ", + 'text_director' => " 導演: ", + 'text_written_by' => " 編劇: ", + 'text_performed_by' => " 演出: ", + 'text_offcial_site' => " 官方網站: ", + 'text_imdb_link' => " IMDb鏈結: ", + 'text_produced_by' => " 制作: ", + 'text_music' => " 音樂: ", + 'text_plot_outline' => " 劇情概要:", + 'text_cast' => " 主演:", + 'text_as' => " .... ", + 'text_recommended_comment' => " 建議評論:", + 'text_information_updated_at' => "

    注意:該資訊最后更新于", + 'text_might_be_outdated' => ",可能已過期,點擊", + 'text_here_to_update' => "這裡更新資訊", + 'text_network_error' => "警告!網路狀態不允許實時檢索資訊", + 'text_avprogress' => "平均進度:", + 'row_type' => "類別", + 'text_none_selected' => "(未選)", + 'text_source' => "來源:", + 'text_codec' => "編碼:", + 'text_stardard' => "解析度:", + 'text_processing' => "處理:", + 'row_quality' => "品質", + 'col_type' => "類別", + 'col_name' => "標題", + 'col_quality' => "品質", + 'title_size' => "大小", + 'title_time_added' => "添加時間", + 'title_seeders' => "種子數", + 'title_leechers' => "下載數", + 'col_special' => "促銷?", + 'text_normal' => "普通", + 'row_other_copies' => "其他版本", + 'row_last_seeder' => "最近現行:", + 'text_ago' => "以前", + 'text_size' => "大小:", + 'text_none_yet' => "暫無(需要".$minvotes."票,現在只有", + 'text_only' => "票", + 'text_none' => "無", + 'text_no_votes_yet' => "暫無評分", + 'text_invalid' => "無效?", + 'text_out_of_five_with' => "/5分,共", + 'text_votes_total' => "票", + 'text_login_to_vote' => "登入后才能評分", + 'text_you_rated_as' => "(你將該種子評分為\"", + 'select_add_rating' => "(添加評分)", + 'submit_vote' => "我投", + 'row_rating' => "評分", + 'row_time' => "時間", + 'row_hot_meter' => "熱度表", + 'text_views' => "檢視: ", + 'text_hits' => "點擊: ", + 'text_snatched' => "完成: ", + 'text_view_snatches' => "
    次 <--- 點擊檢視完成詳情", + 'text_average_speed' => "平均速度: ", + 'text_total_speed' => "總速度: ", + 'text_health_note' => "(資料為按時間計算的平均值,不一定准確)", + 'text_traffic' => "流量: ", + 'text_no_traffic' => "沒有流量", + 'text_status' => "狀態:", + 'text_dead' => "斷種", + 'row_health' => "活力度", + 'text_anonymous' => "匿名", + 'text_edit_torrent' => "編輯/刪除", + 'title_edit_torrent' => "點擊編輯或移除本種子", + 'row_upped_by' => "由", + 'text_click' => "點擊", + 'text_num_files' => "檔案數:", + 'text_see_full_list' => "[檢視清單]", + 'text_files' => "個檔案", + 'row_file_list' => "檔案清單", + 'text_hide_list' => "[隱藏清單]", + 'row_action' => "行為", + 'text_download_torrent' => "下載種子", + 'title_download_torrent' => "下載種子", + 'text_ask_for_reseed' => "要求續種", + 'title_ask_for_reseed' => "當沒有種子時要求完成者續種", + 'text_report_torrent' => "舉報種子", + 'title_report_torrent' => "舉報該種子違反了規則", + 'text_here' => "這裡.", + 'row_peers' => "同伴", + 'text_seeders' => "個做種者", + 'text_leechers' => "個下載者", + 'text_peers_total' => "個同伴", + 'row_seeders' => "做種者", + 'row_leechers' => "下載者", + 'submit_say_thanks' => "  說謝謝  ", + 'submit_you_said_thanks' => "你已說過謝謝", + 'text_no_thanks_added' => "暫無感謝者", + 'row_thanks_by' => "感謝者", + 'row_torrent_info' => "種子檔案", + 'text_torrent_structure' => "種子架構:", + 'text_torrent_info_note' => "[檢視架構]", + 'head_comments_for_torrent' => "種子評論 - ", + 'text_comments_for' => "種子評論 - ", + 'text_snatch_detail_for' => "種子完成詳情-", + 'text_users_top_finished_recently' => "頂部的用戶最后完成下載", + 'col_username' => "用戶名", + 'col_uploaded' => "上傳量", + 'col_downloaded' => "下載量", + 'col_when_completed' => "完成", + 'col_last_action' => "最近動向", + 'col_seeding' => "做種", + 'col_pm_user' => "短訊", + 'col_report_user' => "舉報", + 'col_on_or_off' => "在線", + 'text_global' => "全域", + 'text_torrent' => "本種", + 'text_yes' => "是", + 'text_no'=> "否", + 'text_add_a_comment' => "添加評論", + 'text_no_comments_yet' => "暫無評論", + 'text_quick_comment' => "快速評論", + 'submit_add_comment' => "  添加  ", + 'title_pm' => "傳送短訊", + 'title_report' => "舉報", + 'title_online' => "在線", + 'title_offline' => "不在線", + 'select_kewl' => "狂贊!", + 'select_pretty_good' => "較好", + 'select_decent' => "一般", + 'select_pretty_bad' => "較差", + 'select_sucks' => "垃圾!", + 'text_lastfm_not_ready' => "Last.fm資訊未抓取,點擊", + 'text_biography' => "小傳", + 'text_tags' => "標簽:", + 'text_similiar_artists' => "類似藝朮家:", + 'text_may_also_like' => "可能也喜歡:", + 'text_top_albums' => "熱門專輯:", + 'text_listener' => "個聽眾", + 'text_scrobbled' => "次播放", + 'text_album' => "專輯", + 'text_album_name' => "專輯名: ", + 'text_track_number_info' => "曲目:", + 'text_release_date' => "發行日期:", + 'text_label' => "唱片公司:", + 'text_track_list' => "曲目清單:", + 'text_track_number' => "#   ", + 'text_track_name' => "曲目名", + 'text_track_duration' => "時長", + 'text_track_listener' => "聽者", + 'text_ratings_legend' => "平均: ", + 'text_points' => "分", + 'text_totalvotes' => "票", + 'text_author' => "作者:", + 'text_from' => "來自", + 'h1_user_reviews' => "用戶點評選", + 'h1_critic_reviews' => "影評家點評", + 'h1_user_comments' => "用戶評論", + 'text_local_link' => "區域鏈結", + 'text_at' => "發布于", + 'row_basic_info' => "基本資訊", + 'text_site_rating' => "評分", + 'text_blank' => "發布于", + 'text_creator' => "主創: ", + 'submit_search_at_shooter' => "搜索射手網", + 'submit_search_at_opensubtitles' => "搜索Opensubtitles", + 'title_bookmark' => "收藏", + 'text_album_information' => "專輯資訊:", + 'text_about_album' => "關于該專輯:", + 'text_artist' => "藝朮家", + 'text_artist_name' => "藝朮家:", + 'text_medium' => "媒介:", + 'text_team' => "制作組:", + 'text_audio_codec' => "聲訊編碼:", + 'text_delete' => "移除", + 'text_other_copies' => "個其他版本", + 'row_uploader_bandwidth' => "發布者頻寬", + 'text_and_more' => "……(這裏只顯示最新記錄。共", + 'text_users_in_total' => "個用戶表示了感謝)", +); + +?> diff --git a/lang/cht/lang_donate.php b/lang/cht/lang_donate.php new file mode 100644 index 00000000..bb32629b --- /dev/null +++ b/lang/cht/lang_donate.php @@ -0,0 +1,31 @@ + "對不起", + 'std_do_not_accept_donation' => "我們目前不接收捐贈。", + 'std_success' => "成功", + 'std_donation_success_note_one' => "感謝你的捐贈!你的付款已完成。請點擊", + 'std_here' => "這裡", + 'std_donation_success_note_two' => "傳送你的付款資訊給我們,方便我們確認你的捐贈。", + 'head_donation' => "捐贈", + 'text_donate' => "捐贈", + 'std_error' => "錯誤", + 'std_no_donation_account_available' => "沒有設定接收捐贈的賬號。請將此情況告訴管理組。", + 'text_donation_note' => "感謝你有意捐贈。無論捐贈的數目是多少,我們都表示最真誠的感謝!", + 'text_donate_with_paypal' => "使用PayPal捐贈", + 'text_donate_paypal_note' => "1. 選取你的捐贈金額。
    2. 點擊PayPal按鈕。
    3. 在PayPal網站完成付款。", + 'text_select_donation_amount' => "請選取你的捐贈金額:", + 'select_choose_donation_amount' => "---選取捐贈金額---", + 'select_other_donation_amount' => "其他金額", + 'text_usd_mark' => "", + 'text_donation' => "美元", + 'text_donate_with_alipay' => "使用支付寶捐贈", + 'text_donate_alipay_note_one' => "1. 點擊支付寶按鈕。
    2. 選取“向陌生賣家付款”。
    3. 在“收款方支付寶賬戶”中填寫我們的支付寶賬號", + 'text_donate_alipay_note_two' => "。
    4. 繼續直到完成付款。", + 'text_after_donation_note_one' => "在完成捐贈后,請一定將你的付款資訊通過站短", + 'text_send_us' => "傳送給我們", + 'text_after_donation_note_two' => ",方便我們確認你的捐贈。", +); + +?> diff --git a/lang/cht/lang_downloadnotice.php b/lang/cht/lang_downloadnotice.php new file mode 100644 index 00000000..033a3426 --- /dev/null +++ b/lang/cht/lang_downloadnotice.php @@ -0,0 +1,38 @@ + "下載輔助說明", + 'text_client_banned_notice' => "被禁止用戶端輔助說明", + 'text_client_banned_note' => "Tracker檢查到你最近一次使用的BT用戶端屬于被禁的范疇。請閱讀以下說明。", + 'text_low_ratio_notice' => "低分享率輔助說明", + 'text_low_ratio_note_one' => "警告:你的分享率過低!你必須在", + 'text_low_ratio_note_two' => "內改善它,否則你在本站的賬號將被禁止。如果你不明白什么是分享率,請仔細閱讀以下說明。", + 'text_first_time_download_notice' => "第一次下載輔助說明", + 'text_first_time_download_note' => "你好!
    這可能是你第一次在本站下載種子。
    在此之前請閱讀以下几個簡短的注意事項。", + 'text_this_is_private_tracker' => "這是非公開BT網站,有分享率要求", + 'text_private_tracker_note_one' => "這是非公開BT網站(Private Tracker),即我們的Tracker提供給註冊會員使用。", + 'text_learn_more' => "關于非公開BT網站,見", + 'text_nexuswiki' => "NexusWiki", + 'text_private_tracker_note_two' => "要維持你的會員資格,你必須保持一個最低要求的上傳量/下載量的比值(即分享率)。分享率過低將導致你失去在這裡的會員資格。", + 'text_see_ratio' => "關于分享率要求,見", + 'text_private_tracker_note_three' => "你目前的分享率會一直察看在導航功能表的正下面,請經常關注它。", + 'text_private_tracker_note_four' => "怎樣才能獲得良好的分享率?
    最好的方式是一直保持你的BT用戶端處于執行狀態,為你下載的資源做種直到移除相應的檔案為止。", + 'text_use_allowed_clients' => "只能使用允許的BT用戶端", + 'text_allowed_clients_note_one' => "BT用戶端有很多種。但是在本站,我們允許其中的部分。其他用戶端(如位元彗星,迅雷)屬于被禁范疇,我們的Tracker不會接受其連接請求。", + 'text_why_banned' => "關于為什么禁止一些用戶端,見", + 'text_allowed_clients_note_two' => "你可以在", + 'text_allowed_clients_note_three' => "中看到所有被允許的用戶端。如果你不清楚該使用哪個用戶端,可以選取以下兩個建議之一:", + 'title_download' => "下載", + 'text_for' => "支援平台:", + 'text_for_more_information_read' => "了解更多資訊,見", + 'text_rules' => "規則", + 'text_and' => "和", + 'text_faq' => "常見問題", + 'text_let_me_download' => "我會提高分享率的。", + 'text_notice_not_show_again' => "下次不察看此輔助說明", + 'text_notice_always_show' => "每次都會察看此輔助說明,直到你改善了分享率為止。", + 'submit_download_the_torrent' => "下載種子檔案", +); + +?> diff --git a/lang/cht/lang_edit.php b/lang/cht/lang_edit.php new file mode 100644 index 00000000..5075aa04 --- /dev/null +++ b/lang/cht/lang_edit.php @@ -0,0 +1,72 @@ + "編輯種子 - ", + 'text_cannot_edit_torrent' => "無法編輯該種子", + 'text_cannot_edit_torrent_note' => "你不是發種者,或者你沒有正確登錄。\n", + 'row_torrent_name' => "標題", + 'row_small_description' => "副標題", + 'row_nfo_file' => "NFO文件", + 'radio_keep_current' => "原文件", + 'radio_update' => "更新", + 'radio_remove' => "去除", + 'row_description' => "簡介", + 'row_type' => "類型", + 'text_source' => "來源:", + 'select_choose_one' => "請選擇", + 'text_codec' => "編碼:", + 'text_standard' => "解析度:", + 'text_processing' => "處理:", + 'row_quality' => "品質", + 'text_quality_note' => "只適用於視頻檔。", + 'row_visible' => "顯示", + 'checkbox_visible' => "在流覽頁面顯示", + 'text_visible_note' => "注意:有上傳者時種子會自動顯示,若沒有種子一段時間(斷種)則會隱藏。選中這項可手動加快該過程。同時請注意,隱藏的種子還是能被查看或搜索到,只是默認狀態下不顯示。", + 'row_anonymous_uploader' => "匿名上傳", + 'checkbox_anonymous_note' => "不要在流覽頁面顯示用戶名", + 'row_special_torrent' => "促銷種子", + 'select_use_global_setting' => "使用全域設定", + 'select_forever' => "永久", + 'select_until' => "直到", + 'text_keep_current' => "原設定", + 'text_ie_for' => "時長", + 'text_promotion_until_note' => "(時間格式為'年年年年-月月-日日 時時:分分:秒秒')", + 'select_normal' => "普通", + 'select_free' => "免費", + 'select_two_times_up' => "2x上傳", + 'select_free_two_times_up' => "免費&2x上傳", + 'select_half_down' => "50%下載", + 'select_choose_torrent_state' => "設定種子的促銷狀態", + 'row_torrent_position' => "種子位置", + 'row_recommended_movie' => "推薦影片", + 'select_choose_recommended_movie' => "選擇影片海報是否在首頁“推薦熱片”或“推薦經典”中顯示", + 'select_hot' => "熱門", + 'select_classic' => "經典", + 'select_recommended' => "推薦", + 'select_sticky' => "置頂", + 'select_choose_if_sticky' => "選擇種子是否在流覽頁面置頂", + 'row_banned' => "禁止", + 'checkbox_banned' => "禁止", + 'submit_edit_it' => "編輯", + 'submit_revert_changes' => "重置", + 'text_delete_torrent' => "刪除種子 - 原因:", + 'radio_dead' => "斷種", + 'text_dead_note' => " 0 做種者 + 0 下載者 = 0 總同伴", + 'radio_dupe' => "重複", + 'radio_nuked' => "劣質", + 'radio_rules' => "違規", + 'text_req' => "(必填)", + 'radio_other' => "其他", + 'submit_delete_it' => "刪除", + 'text_move_to_browse' => "類型變為種子區的 ", + 'text_move_to_special' => "類型變為音樂區的 ", + 'text_medium' => "媒介:", + 'row_pick' => "挑選", + 'row_check' => "勾選", + 'text_team' => "製作組", + 'text_audio_codec' => "音頻編碼", + 'row_content' => "內容" +); + +?> diff --git a/lang/cht/lang_faq.php b/lang/cht/lang_faq.php new file mode 100644 index 00000000..fe82dd23 --- /dev/null +++ b/lang/cht/lang_faq.php @@ -0,0 +1,12 @@ + "常見問題", + 'text_welcome_to' => "歡迎來到", + 'text_welcome_content_one' => "我們的目標是提供純粹高品質的東西。因此,只有授權的用戶才能發布種子。如果你有0-day資源的來源,請不要遲疑聯繫我們!

    這是非公開BT站點,你必須註冊後才能訪問。", + 'text_welcome_content_two' => "在".$SITENAME."幹任何事前,我們建議你先閱讀站點的規則!規則只有簡單幾條,但我們要求用戶嚴格遵照。

    在使用前,請閱讀".$SITENAME."用戶協定。", + 'text_contents' => "目錄", +); + +?> diff --git a/lang/cht/lang_fastdelete.php b/lang/cht/lang_fastdelete.php new file mode 100644 index 00000000..6950b6d4 --- /dev/null +++ b/lang/cht/lang_fastdelete.php @@ -0,0 +1,13 @@ + "刪除失敗!", + 'std_missing_form_data' => "有項目沒填", + 'text_no_permission' => "你沒有許可權刪除該種子,只有版主及以上用戶才可以。如果你想刪除自己發佈的種子,請聯繫他們。\n", + 'std_delete_torrent' => "刪除種子", + 'std_delete_torrent_note' => "確認:你即將刪除種子,點擊", + 'std_here_if_sure' => "這裏來確認。" +); + +?> diff --git a/lang/cht/lang_forummanage.php b/lang/cht/lang_forummanage.php new file mode 100644 index 00000000..d9766a8f --- /dev/null +++ b/lang/cht/lang_forummanage.php @@ -0,0 +1,38 @@ + "論壇管理", + 'text_forum_management' => "論壇管理", + 'text_edit_forum' => "編輯論壇版塊", + 'row_forum_name' => "版塊名字", + 'row_forum_description' => "版塊描述", + 'row_overforum' => "論壇分區", + 'row_moderator' => "版主", + 'text_moderator_note' => "最多3個版主。用','分割用戶名", + 'row_minimum_read_permission' => "最低允許閱讀等級", + 'row_minimum_write_permission' => "最低允許回復等級", + 'row_minimum_create_topic_permission' => "最低允許發布主題等級", + 'row_forum_order' => "論壇版塊排序", + 'text_forum_order_note' => "按數字升序排列,即0顯示在最頂端。", + 'submit_edit_forum' => "編輯論壇版塊", + 'text_no_records_found' => "對不起,沒有記錄!", + 'text_add_forum' => "添加論壇版塊", + 'text_make_new_forum' => "添加新的版塊", + 'submit_overforum_management' => "論壇分區管理", + 'submit_add_forum' => "添加版塊", + 'col_name' => "名字", + 'col_overforum' => "論壇分區", + 'col_read' => "讀", + 'col_write' => "回復", + 'col_create_topic' => "創建主題", + 'col_moderator' => "版主", + 'col_modify' => "修改", + 'text_not_available' => "暫無", + 'text_edit' => "編輯", + 'text_delete' => "刪除", + 'js_sure_to_delete_forum' => "你確定要刪除此論壇版塊嗎?", + 'submit_make_forum' => "創建論壇版塊" +); + +?> diff --git a/lang/cht/lang_forums.php b/lang/cht/lang_forums.php new file mode 100644 index 00000000..0f8d3735 --- /dev/null +++ b/lang/cht/lang_forums.php @@ -0,0 +1,203 @@ + "論壇當前沒有活躍用戶。", + 'text_stats' => "數據", + 'text_our_members_have' => "用戶共發佈", + 'text_posts_in_topics' => "個帖子,", + 'text_in_topics' => "個主題。", + 'text_there' => "論壇共有", + 'text_online_user' => "個", + 'text_in_forum_now' => "線上用戶。", + 'std_no_post_found' => "沒有帖子", + 'text_quick_jump' => "跳轉至", + 'submit_go' => "確定", + 'std_bad_forum_id' => "無效版塊ID", + 'text_new_topic_in' => "新主題 - ", + 'text_forum' => "版塊", + 'std_forum_error' => "論壇錯誤", + 'std_topic_not_found' => "沒有找到該主題。", + 'text_reply_to_topic' => "回復主題:", + 'text_compose' => "撰寫", + 'std_error' => "錯誤", + 'std_no_post_id' => "該ID的帖子不存在", + 'submit_submit' => "提交", + 'submit_preview' => "預覽", + 'text_tags' => "標籤", + 'text_smilies' => "表情", + 'text_ten_last_posts' => "10個最近帖子,按逆序排列", + 'text_by' => "", + 'text_at' => "", + 'head_edit_forum' => "編輯版塊", + 'text_edit_forum' => "編輯版塊", + 'row_forum_name' => "版塊名字", + 'row_description' => "簡介", + 'row_permission' => "許可權", + 'text_minimum' => "", + 'select_minimum_class_view' => "及以上才能查看
    ", + 'select_minimum_class_post' => "及以上才能回復
    ", + 'select_minimum_class_topic' => "及以上才能發新主題
    ", + 'std_no_forum_id' => "版塊ID不存在。", + 'std_must_specify_forum_name' => "你必須指定版塊的名字。", + 'std_must_provide_forum_description' => "你必須填寫版塊簡介。", + 'head_delete_forum' => "刪除版塊", + 'text_warning' => "** 警告! **", + 'text_deleting_forum_id' => "刪除版塊ID ", + 'text_will_also_delete' => "的同時也會刪除", + 'text_posts_in' => "個帖子和", + 'text_topics' => "個主題。", + 'text_accept' => "同意", + 'text_cancel' => "取消", + 'std_unauthorised_performing_action' => "你沒有該權限!", + 'head_new_topic' => "新主題", + 'std_must_enter_subject' => "你必須填寫話題。", + 'std_subject_limited' => "話題長度過大。請減少字數。", + 'std_bad_topic_id' => "主題ID錯誤", + 'std_sorry' => "對不起...", + 'std_unauthorized_to_post' => "你沒有發帖的許可權。請查看(收件箱)", + 'std_permission_denied' => "沒有該權限。", + 'std_no_body_text' => "正文不能為空。", + 'std_post_flooding' => "禁止濫發帖子。請在", + 'std_seconds_before_making' => "秒後重試。", + 'std_no_topic_id_returned' => "沒有訪回任何主題ID", + 'std_topic_locked' => "該主題已被鎖定。", + 'std_post_id_not_available' => "帖子ID不存在", + 'std_unpermitted_viewing_topic' => "你沒有閱讀該主題的權限。", + 'text_prev' => "上一頁", + 'text_next' => "下一頁", + 'head_view_topic' => "查看主題", + 'text_forums' => "論壇", + 'text_ago' => "以前", + 'text_quote' => "引用", + 'text_last_edited_by' => "最後被", + 'text_last_edit_at' => "編輯于", + 'text_posts' => "帖子:", + 'text_ul' => "上傳:", + 'text_dl' => "下載:", + 'text_ratio' => "分享率:", + 'text_class' => "等級:", + 'text_back_to_top' => "返回頂部", + 'title_sticky' => "置頂", + 'submit_sticky' => "置頂", + 'submit_unsticky' => "取消置頂", + 'submit_unlock' => "解除主題鎖定", + 'submit_lock' => "鎖定主題", + 'submit_delete_topic' => "刪除主題", + 'text_rename_topic' => "重命名主題:", + 'submit_okay' => "確定", + 'text_move_thread_to' => "將該主題移至", + 'submit_move' => "移動", + 'text_topic_locked_new_denied' => "

    該主題已被鎖定;禁止發佈新貼。

    ", + 'text_unpermitted_posting_here' => "

    你沒有在該版塊回復的權限。

    ", + 'head_post_reply' => "回復", + 'std_forum_not_found' => "沒有該版塊。", + 'std_cannot_get_posts_count' => "無法獲取帖子總數。", + 'std_delete_topic' => "刪除主題", + 'std_delete_topic_note' => "確認:你即將刪除主題,點擊", + 'std_here_if_sure' => "這裏來確認。", + 'std_no_topic_for_post' => "該帖子沒有對應的主題", + 'std_denied' => "拒絕!", + 'std_body_empty' => "正文不能為空!", + 'std_subject_empty' => "話題不能為空!", + 'std_success' => "成功", + 'std_post_edited_successfully' => "帖子編輯成功。", + 'text_edit_post' => "編輯帖子", + 'std_how_could_this_happen' => "這是怎麼回事?!", + 'std_post_not_found' => "該帖子不存在", + 'std_cannot_delete_post' => "無法刪除帖子。此帖子為該主題的第一個帖子,你應該", + 'std_delete_topic_instead' => "刪除該主題。", + 'std_delete_post' => "刪除帖子", + 'std_delete_post_note' => "確認:你即將刪除帖子,點擊", + 'std_must_enter_new_title' => "你必須輸入新的話題!", + 'std_not_permitted' => "禁止", + 'std_sql_error' => "SQL錯誤", + 'head_forum' => "版塊", + 'col_topic' => "主題", + 'col_replies' => "回復", + 'col_views' => "查看", + 'col_author' => "作者", + 'col_last_post' => "最近回復", + 'text_no_topics_found' => "沒有主題", + 'text_new_posts' => "新帖子", + 'text_locked_topic' => "鎖定主題", + 'text_unpermitted_starting_new_topics' => "你沒有在該版塊發佈新話題的許可權。", + 'submit_view_unread' => "查看未讀", + 'submit_new_topic' => "發新主題", + 'text_topics_with_unread_posts' => "新回復的帖子", + 'col_forum' => "版塊", + 'text_more_than' => "找到超過", + 'text_items_found_displaying_first' => "個專案,顯示最近", + 'text_catch_up' => "全部設置已讀", + 'text_nothing_found' => "沒有結果", + 'head_forum_search' => "論壇搜索", + 'col_post' => "帖子", + 'col_posted_by' => "帖子作者", + 'text_found' => "找到", + 'text_num_posts' => "個帖子", + 'text_search_on_forum' => "搜索論壇", + 'text_by_keyword' => "按關鍵字", + 'head_forums' => "論壇", + 'col_forums' => "版塊", + 'col_topics' => "主題", + 'col_posts' => "帖子", + 'std_bad_forum_last_post' => "最近回復錯誤", + 'text_in' => "主題:", + 'text_edit' => "編輯", + 'text_delete' => "刪除", + 'std_unknown_action' => "未知行為", + 'text_search' => "搜索", + 'text_view_unread' => "查看未讀", + 'text_forum_manager' => "論壇管理", + 'title_reply_with_quote' => "引用該貼", + 'title_reply_directly' => "直接回復", + 'title_delete_post' => "刪除帖子", + 'title_edit_post' => "編輯帖子", + 'text_quick_reply' => "快速回復", + 'submit_add_reply' => "提交", + 'text_add_reply' => "回復主題", + 'title_online' => "在線", + 'title_offline' => "不在線", + 'title_send_message_to' => "發短訊給", + 'title_report_this_post' => "舉報該帖子", + 'title_new_topic' => "新主題", + 'col_moderator' => "版主", + 'text_apply_now' => "誠征中", + 'text_locked' => "鎖定", + 'text_number' => "", + 'text_lou' => "樓", + 'there_is' => "該主題共被查看", + 'hits_on_this_topic' => "次", + 'title_read' => "已讀", + 'title_unread' => "未讀", + 'title_locked' => "鎖定", + 'title_locked_new' => "鎖定且未讀", + 'text_highlight_topic' => "高亮顯示主題", + 'select_color' => "無", + 'submit_change' => "確定", + 'head_view_unread' => "查看未讀", + 'text_today' => "今日: ", + 'text_new_post' => "個今日", + 'text_posts_today' => "帖子。", + 'text_at_time' => "發布于", + 'text_blank' => "發布于", + 'text_last_posted_by' => "最新帖子由", + 'text_fast_search' => "快速搜索:", + 'text_go' => "給我搜", + 'submit_show_more' => "查看更多", + 'text_view_all_posts' => "顯示全部帖子", + 'text_view_this_author_only' => "只看該作者", + 'title_jump_to_unread' => "跳至未讀帖子", + 'text_new' => "新", + 'title_order_topic_desc' => "按發布時間降序", + 'title_order_topic_asc' => "按發布時間升序", + 'title_order_post_asc' => "按最近回覆升序", + 'title_order_post_desc' => "按最近回覆降序", + 'text_order' => "排序方式", + 'text_topic_desc' => "發布時間降序", + 'text_topic_asc' => "發布時間升序", + 'text_post_asc' => "最近回覆升序", + 'text_post_desc' => "最近回覆降序", +); + +?> diff --git a/lang/cht/lang_friends.php b/lang/cht/lang_friends.php new file mode 100644 index 00000000..721bee68 --- /dev/null +++ b/lang/cht/lang_friends.php @@ -0,0 +1,38 @@ + "錯誤", + 'std_invalid_id' => "無效的ID", + 'std_access_denied' => "訪問拒絕。", + 'std_no_user_id' => "沒有用戶的ID為", + 'std_unknown_type' => "未知類型", + 'std_user_id' => "用戶", + 'std_already_in' => "已經在你的", + 'std_list' => "列表中。", + 'std_delete' => "刪除", + 'std_delete_note' => "你真要刪除一個", + 'std_click' => "嗎?點擊\n", + 'std_here_if_sure' => "這裏來確認。", + 'std_no_friend_found' => "沒有好友的ID為", + 'std_no_block_found' => "沒有壞人的ID為", + 'head_personal_lists_for' => "社交名單 - ", + 'text_personallist' => "社交名單", + 'text_friendlist' => "好友", + 'text_friends_empty' => "暫無好友", + 'text_neighbors_empty' => "暫無鄰居", + 'text_last_seen_on' => "最後訪問時間:", + 'text_ago' => "以前", + 'text_remove_from_friends' => "刪除好友", + 'text_send_pm' => "發送短訊", + 'text_added_you_to_friendslist' => "添你為好友者", + 'text_add_to_friends' => "加為好友", + 'text_blocklist_empty' => "你的黑名單為空", + 'text_blocked_users' => "黑名單", + 'text_find_user' => "搜索用戶/流覽用戶列表", + 'text_neighbors' => "鄰居", + 'text_friend' => "好友", + 'text_block' => "壞人", +); + +?> diff --git a/lang/cht/lang_fun.php b/lang/cht/lang_fun.php new file mode 100644 index 00000000..a442e5f4 --- /dev/null +++ b/lang/cht/lang_fun.php @@ -0,0 +1,44 @@ + "刪除趣味內容?", + 'text_please_click' => "你真的要刪除該趣味內容嗎?點擊\n", + 'text_here_if_sure' => "這里來確認。", + 'std_error' => "錯誤", + 'std_invalid_id' => "無效的ID", + 'std_permission_denied' => "訪問被拒絕!", + 'text_fun_title' => "標題", + 'text_body' => "正文", + 'submit_okay' => "確定", + 'head_new_fun' => "新趣味內容", + 'text_submit_new_fun' => "提交新趣味內容", + 'text_new_compose' => "新撰寫", + 'head_fun' => "趣味內容", + 'text_on' => "于", + 'text_blank' => "發布于", + 'text_ago' => "以前", + 'text_posted_by' => "由", + 'text_not_funny' => "無聊", + 'text_funny' => "有趣", + 'text_very_funny' => "爆笑", + 'head_edit_fun' => "編輯趣味內容", + 'text_edit_fun' => "編輯趣味內容", + 'std_body_is_empty' => "正文不能為空!", + 'std_title_is_empty' => "標題不能為空!", + 'std_fun_added_successfully' => "趣味條目成功添加。", + 'std_error_happened' => "出了點問題。", + 'std_the_newest_fun_item' => "最新的趣味條目", + 'std_posted_on' => "發布于", + 'std_need_to_wait' => "。請等它發布時間超過24小時后再添加新的趣味內容。", + 'std_are_you_sure' => "你確定嗎?", + 'std_only_against_rule' => "你確定要禁止改趣味條目嗎?注意只有當該趣味內容違反了規則后才需這么做。另外,你也可以同時給用戶一次警告。", + 'std_reason_required' => "原因(必須填寫): ", + 'std_reason_is_empty' => "你必須填寫原因!", + 'std_success' => "成功", + 'std_fun_item_banned' => "該趣味內容被成功禁止。", + 'std_already_vote' => "你已經投過票了!", + 'std_cannot_give_bonus' => "系統無法給趣味內容發布者獎勵魔力值。請將該問題報告給管理員。", +); + +?> diff --git a/lang/cht/lang_functions.php b/lang/cht/lang_functions.php new file mode 100644 index 00000000..a57172a7 --- /dev/null +++ b/lang/cht/lang_functions.php @@ -0,0 +1,293 @@ + "訪問拒絕!", + 'std_fake_account' => "我們懷疑你在使用偽造帳戶,因此記錄了本次行為!", + 'std_permission_denied' => "你沒有該許可權!", + 'std_already_logged_in' => "你已經登錄!", + 'text_page_last_updated' => "本頁面最後更新於", + 'text_browser_cookies_note' => "如果在啟用Cookies後仍然無法登錄,則你的登錄Cookie可能有問題。我們建議你在刪除Cookies後重試。刪除Internet Explorer的Cookies的方法是,進入工具Internet選項...然後點擊刪除Cookies按鈕。注意這樣也會刪除保存在你電腦中其他站點的Cookies。", + 'std_error' => "錯誤", + 'text_unable_to_send_mail' => "無法發送郵件。請將該錯誤報告給管理員。", + 'std_success' => "成功", + 'std_confirmation_email_sent' => "驗證郵件已經發至", + 'std_please_wait' => "請等候郵件抵達。", + 'std_account_details_sent' => "新的帳戶資訊已發至", + 'std_locked' => " 鎖定!(認證的最大錯誤嘗試次數", + 'std_attempts_reached' => "次已到)", + 'std_your_ip_banned' => "我們懷疑你在欺騙系統,因此禁用了你的IP位址!", + 'std_login_failed' => "登錄失敗!", + 'std_login_failed_note' => "錯誤: 用戶名或密碼不正確!或者你還沒有通過驗證

    忘記了密碼?找回你的密碼?", + 'std_failed' => "失敗", + 'std_sorry' => "對不起", + 'std_oops' => "哦奧!", + 'std_invite_system_disabled' => "邀請系統當前未開放...", + 'std_open_registration_disabled' => "自由註冊當前關閉,只允許邀請註冊。如果你想加入,請找到能夠邀請你進入本站的朋友:)我們只想知道有多少作弊者和吸血鬼在被踢後才開始想到珍惜帳戶。是的,在被踢後不是你想回來就能回來。請具備邀請資格的用戶注意,如果你在知情的情況下將邀請發給作弊者和行為不端者,你和被邀請者都會被踢。如果你想重新啟用帳戶必須經過我們同意。", + 'std_account_limit_reached' => "當前帳戶上限數已到。系統會經常刪除不活動的帳戶,請過段時間再試...", + 'std_the_ip' => "該IP", + 'std_used_many_times' => "已經被很多帳戶使用...".$SITENAME."不允許該IP註冊更多帳戶。", + 'std_invalid_image_code' => "圖片代碼無效!
    不要返回,圖片代碼已被清除!

    點擊", + 'std_here_to_request_new' => "這裏獲取新的圖片代碼。", + 'row_security_image' => "驗證圖片:", + 'row_security_code' => "驗證碼:", + 'text_slots' => "連接數:", + 'text_unlimited' => "無限制", + 'std_server_load_very_high' => "伺服器負載過高,正在重試,請稍後...", + 'std_too_many_users' => "太多用戶。請刷新頁面重試。", + 'text_unauthorized_ip' => "

    403 Forbidden

    未授權的IP地址。", + 'text_home' => " 首  頁 ", + 'text_forums' => " 論  壇 ", + 'text_torrents' => " 種  子 ", + 'text_offers' => " 候  選 ", + 'text_request' => " 求  種 ", + 'text_upload' => " 發  布 ", + 'text_subtitles' => " 字  幕 ", + 'text_user_cp' => " 控制面板 ", + 'text_top_ten' => "排 行 榜", + 'text_log' => " 日  志 ", + 'text_rules' => " 規  則 ", + 'text_faq' => " 常見問題 ", + 'text_staff' => "管 理 組", + 'std_site_down_for_maintenance' => "站點關閉維護中,請稍後再訪問...謝謝", + 'text_click_view_full_image' => "點擊這裏查看完整圖像", + 'text_image_resized' => "圖像被縮小,點擊這裏查看完整圖像", + 'text_click_view_small_image' => "點擊這裏查看縮小圖像", + 'text_login' => "登錄", + 'text_signup' => "註冊", + 'text_inf' => "無限", + 'title_donor' => "捐贈者", + 'title_warned' => "被警告者", + 'title_inbox_new_messages' => "收件箱 (有新短訊)", + 'title_inbox_no_new_messages' => "收件箱 (無新短訊)", + 'text_yes' => "是", + 'text_no' => "否", + 'text_unknown' => "未知", + 'text_welcome_back' => "歡迎回來", + 'text_staff_panel' => "管理組面板", + 'text_site_settings' => "站點設定", + 'text_logout' => "退出", + 'text_bonus' => "魔力值 ", + 'text_use' => "使用", + 'text_ratio' => "分享率:", + 'text_uploaded' => "上傳量:", + 'text_downloaded' => "下載量:", + 'text_active_torrents' => "當前活動:", + 'title_torrents_seeding' => "當前做種", + 'title_torrents_leeching' => "當前下載", + 'text_connectable' => "可連接:", + 'text_the_time_is_now' => "當前時間:", + 'text_message_new' => " 新", + 'title_sentbox' => "發件箱", + 'title_inbox' => "收件箱", + 'title_buddylist' => "社交名單", + 'text_you_have' => "       你有", + 'text_new_message' => "條新短訊", + 'text_click_here_to_read' => "!點擊查看       ", + 'text_your_friends' => "你的好友", + 'text_awaiting_confirmation' => "等待你的確認!", + 'text_website_offline_warning' => "警告:站點當前不線上!點擊這裏改變設置。", + 'text_there_is' => "       有", + 'text_new_report' => "條新舉報資訊       ", + 'text_new_staff_message' => "條新管理組資訊       ", + 'text_search' => "搜索", + 'text_profile' => "個人資料", + 'text_chat' => "聊天", + 'text_dox' => "文檔", + 'text_links' => "鏈結", + 'text_username' => "用戶名:", + 'text_password' => "密碼:", + 'submit_log_in' => "登錄", + 'text_register' => "註冊", + 'text_rules_link' => "規則", + 'text_faq_link' => "常見問題", + 'text_useragreement' => "用戶協定", + 'text_prev' => "上一頁", + 'text_next' => "下一頁", + 'text_by' => "", + 'text_orphaned' => "(無此帳戶)", + 'text_at' => "", + 'text_quote' => "引用", + 'text_edit' => "編輯", + 'text_delete' => "刪除", + 'text_view_original' => "查看原始", + 'text_last_edited_by' => "最後被", + 'text_edited_at' => "編輯于", + 'col_type' => "類型", + 'col_name' => "標題", + 'col_dl' => "下載", + 'col_wait' => "等待", + 'col_edit' => "編輯", + 'col_visible' => "可見", + 'title_number_of_comments' => "評論數", + 'title_time_added' => "添加時間", + 'title_size' => "大小", + 'title_number_of_seeders' => "種子數", + 'title_number_of_leechers' => "下載數", + 'title_number_of_snatched' => "完成數", + 'col_uploader' => "發佈者", + 'col_action' => "行為", + 'text_normal' => "普通", + 'text_free' => "免費", + 'text_two_times_up' => "2X", + 'text_free_two_times_up' => "2X免費", + 'text_half_down' => "50%", + 'text_half_down_two_up' => "2X 50%", + 'text_new_uppercase' => "新", + 'text_sticky' => "置頂", + 'title_download_torrent' => "下載本種", + 'text_h' => "時", + 'text_none' => "無", + 'text_anonymous' => "匿名", + 'text_promoted_torrents_note' => "高亮的種子是:   免費 | 2x上傳 | 免費&2x上傳 | 50%下載 | 50%下載&2x上傳 | 30%下載
    下載它們是提高分享率的好方式!", + 'std_file' => "文件", + 'std_does_not_exist' => "不存在", + 'std_access_permission_note' => "!
    在設定前,請確保已恰當設置檔和目錄的訪問許可權。請參考下面。

    chmod -R 777 config (設置目錄)。", + 'std_cannot_read_file' => "無法閱讀文件", + 'std_cannot_serialize_file' => "無法序列化檔", + 'std_cannot_open_file' => "無法打開文件", + 'std_to_save_info' => "來保存資訊", + 'text_cannot_save_info_in' => "無法將資訊保存到檔(序列化出錯)", + 'std_your_account_parked' => "你的帳戶處於封存中。", + 'title_online' => "線上", + 'title_offline' => "不線上", + 'title_send_message_to' => "發短訊給", + 'title_report_this_comment' => "舉報該評論", + 'text_bookmarks' => "收藏", + 'title_bookmark_torrent' => "收藏", + 'title_delbookmark_torrent' => "去除收藏", + 'text_mark' => "標記", + 'text_unmark' => "去除標記", + 'text_award' => "魔力值獎勵:", + 'text_additional_notes' => "附加注釋:", + 'title_view_reviews' => "點擊查看點評", + 'title_has_new_comment' => "有新評論", + 'title_no_new_comment' => "無新評論", + 'row_external_info' => "外部信息", + 'row_imdb_url' => "IMDb鏈接", + 'text_imdb_url_note' => "(來自IMDb的鏈接。如電影The Dark Knight的鏈接是http://www.imdb.com/title/tt0468569/)", + 'text_artist' => "藝術家:", + 'text_album' => "專輯名:", + 'title_get_rss' => "獲取RSS", + 'text_hot' => "熱門", + 'text_classic' => "經典", + 'text_recommended' => "推薦", + 'title_view_nfo' => "查看NFO檔", + 'title_edit_torrent' => "編輯/刪除种子", + 'title_time_alive' => "存活時間", + 'title_add_comments' => "添加評論", + 'text_at_time' => "發布與", + 'text_blank' => "發布在", + 'text_ago' => "前", + 'text_last_commented_by' => "最新評論由", + 'text_imdb' => "IMDb", + 'text_votes' => "票", + 'text_country' => "國家", + 'text_genres' => "類別", + 'text_director' => "導演", + 'text_starring' => "主演", + 'text_runtime' => "片長", + 'text_language' => "對白語言", + 'text_douban' => "豆瓣", + 'text_region' => "地區", + 'text_creator' => "主創", + 'text_awaiting_five_votes' => "等待5票", + 'text_invite' => "邀請 ", + 'text_send' => "發送", + 'text_tracks' => "曲目", + 'text_label' => "唱片公司", + 'text_tags' => "標簽", + 'text_user_ip' => "用戶IP", + 'text_location_main' => "地點主分類", + 'text_location_sub' => "地點次分類", + 'text_ip_range' => "IP範圍", + 'text_min' => "分鐘", + 'text_music' => " 音  樂 ", + 'title_reply_with_quote' => "引用", + 'title_add_reply' => "回復", + 'title_delete' => "刪除", + 'title_edit' => "編輯", + 'title_reportbox' => "舉報信箱", + 'title_staffbox' => "管理組信箱", + 'title_sticky' => "置頂", + 'text_new_news' => "條未讀的重要消息       ", + 'std_no_user_named' => "沒有用戶的名字是", + 'text_banned' => "禁止", + 'text_are' => "", + 'text_is' => "", + 'select_choose_one' => "請選擇", + 'text_space' => "", + 'text_day' => "天", + 'text_new_suspected_cheater' => "個新的作弊嫌疑者       ", + 'title_cheaterbox' => "作弊者", + 'text_will_end_in' => "剩餘時間:", + 'text_alt_pageup_shortcut' => "Alt+Pageup", + 'text_alt_pagedown_shortcut' => "Alt+Pagedown", + 'text_shift_pageup_shortcut' => "Shift+Pageup", + 'text_shift_pagedown_shortcut' => "Shift+Pagedown", + 'text_code' => "代碼", + 'std_invalid_id' => "無效的ID!基於安全考慮,我們記錄了本次行為。", + 'text_smilies' => "表情", + 'col_type_something' => "輸入...", + 'col_to_make_a' => "得到...", + 'text_year' => "年", + 'text_month' => "月", + 'text_s' => "", + 'text_day' => "天", + 'text_hour' => "時", + 'text_min' => "分", + 'select_color' => "顏色", + 'select_font' => "字體", + 'select_size' => "字型大小", + 'text_subject' => "主題:", + 'text_more_smilies' => "更多表情", + 'js_prompt_enter_url' => "你必須輸入一個URL", + 'js_prompt_enter_title' => "你必須輸入一個標題", + 'js_prompt_error' => "錯誤!", + 'js_prompt_enter_item' =>"輸入一個列表的項目. 在列表的末尾, 按取消或將下一個留空", + 'js_prompt_enter_image_url' => "你必須輸入一個完整的圖像URL", + 'js_prompt_enter_email' => "你必須輸入一個Email位址", + 'text_new' => "新撰寫", + 'text_reply' => "回復", + 'submit_submit' => "提交", + 'submit_preview' => "預覽", + 'text_tags' => "標籤", + 'row_subject' => "主題", + 'row_body' => "正文", + 'text_peasant' => "Peasant", + 'text_user' => "User", + 'text_power_user' => "Power User", + 'text_elite_user' => "Elite User", + 'text_crazy_user' => "Crazy User", + 'text_insane_user' => "Insane User", + 'text_veteran_user' => "Veteran User", + 'text_extreme_user' => "Extreme User", + 'text_ultimate_user' => "Ultimate User", + 'text_nexus_master' => "Nexus Master", + 'text_vip' => "貴賓", + 'text_retiree' => "養老族", + 'text_uploader' => "發布員", + 'text_forum_moderator' => "論壇版主", + 'text_moderators' => "總版主", + 'text_administrators' => "管理員", + 'text_sysops' => "維護開发員", + 'text_staff_leader' => "主管", + 'text_short_year'=> "年", + 'text_short_month' => "月", + 'text_short_day' => "日", + 'text_short_hour' => "時", + 'text_short_min' => "分", + 'submit_edit' => "編輯", + 'text_banned_client_warning' => "你最近一次使用的BT用戶端是被禁止的!點擊這裡。", + 'text_please_improve_ratio_within' => "請在", + 'text_or_you_will_be_banned' =>"內改善你的分享率,否則你的賬號將被禁用!點擊這裡。", + 'text_size' => "大小", + 'text_downloads' => "下載", + 'text_attachment_key' => "附件", + 'text_not_found' => "無效", + 'text_thirty_percent_down' => "30%", + 'text_please_download_something_within' => "請在", + 'text_inactive_account_be_deleted' => "內做些下載。沒有流量的用戶會被移除賬號。", +); + +?> diff --git a/lang/cht/lang_getrss.php b/lang/cht/lang_getrss.php new file mode 100644 index 00000000..e333b963 --- /dev/null +++ b/lang/cht/lang_getrss.php @@ -0,0 +1,46 @@ + "RSS訂閱", + 'head_rss_feeds' => "RSS訂閱", + 'std_error' => "錯誤", + 'std_no_row' => "請選擇每頁內容顯示條數!", + 'std_no_categories' => "請選擇分類!", + 'std_done' => "完成!", + 'std_use_following_url' => "你可以在RSS閱讀器(如Google Reader)使用以下URL:", + 'std_utorrent_feed_url' => "你可以在支持RSS訂閱功能的BT客戶端(如uTorrent)使用以下URL:", + 'row_categories_to_retrieve' => "檢索分類", + 'row_feed_type' => "訂閱類型", + 'text_web_link' => "網頁鏈接", + 'text_download_link' => "下載鏈接", + 'row_rows_per_page' => "每頁條數", + 'submit_generatte_rss_link' => "生成RSS鏈接", + 'text_category' => "類型", + 'text_source' => "來源", + 'text_codec' => "編碼", + 'text_standard' => "解析度", + 'text_processing' => "處理", + 'text_medium' => "媒介", + 'text_team' => "製作組", + 'text_audio_codec' => "音頻編碼", + 'row_item_title_type' => "項目標題格式", + 'text_item_category' => "[類型] + ", + 'text_item_title' => "標題 + ", + 'text_item_small_description' => "[副標題] + ", + 'text_item_size' => "[大小] + ", + 'text_item_uploader' => "[發佈者]", + 'row_show_bookmarked' => "顯示收藏", + 'text_all' => "全部", + 'text_only_bookmarked' => "僅收藏", + 'text_show_bookmarked_note' => "僅適用BT客戶端", + 'row_keyword' => "關鍵字", + 'text_with' => "匹配模式:", + 'select_and' => "和", + 'select_or' => "或", + 'select_exact' => "准確", + 'text_mode' => "", + 'text_keyword_note' => "只訂閱標題中包含此關鍵字的項目" +); + +?> diff --git a/lang/cht/lang_getusertorrentlistajax.php b/lang/cht/lang_getusertorrentlistajax.php new file mode 100644 index 00000000..e8e4f88d --- /dev/null +++ b/lang/cht/lang_getusertorrentlistajax.php @@ -0,0 +1,20 @@ + "類別", + 'col_name' => "標題", + 'title_size' => "大小", + 'title_seeders' => "種子數", + 'title_leechers' => "下載數", + 'col_uploaded' => "上傳", + 'col_downloaded' => "下載", + 'col_ratio' => "分享率", + 'col_anonymous' => "匿名", + 'col_time_completed' => "完成時間", + 'col_se_time' => "做種時間", + 'col_le_time' => "下載時間", + 'text_record' => "條記錄", + 'text_no_record' => "沒有記錄", +); +?> diff --git a/lang/cht/lang_index.php b/lang/cht/lang_index.php new file mode 100644 index 00000000..52def875 --- /dev/null +++ b/lang/cht/lang_index.php @@ -0,0 +1,103 @@ + "沒有調查", + 'std_error' => "錯誤", + 'std_duplicate_votes_denied' => "不允許完全相同的投票選項!", + 'std_vote_not_counted' => "發生錯誤。你的投票沒有被接受。", + 'std_option_unselected' => "請選擇項目。", + 'text_news_page' => "發布", + 'text_recent_news' => "最近消息", + 'text_e' => "編輯", + 'text_d' => "刪除", + 'text_hotmovies' => "熱門", + 'text_classicmovies' => "經典", + 'text_free' => "免費", + 'text_two_times_up' => "2X", + 'text_free_two_times_up' => "2X免費", + 'text_shoutbox' => "群聊區", + 'text_message' => "聊天:", + 'sumbit_shout' => "我喊", + 'submit_clear' => "清空", + 'text_last_five_posts' => "論壇最新帖子", + 'col_topic_title' => "標題", + 'col_view' => "查看", + 'col_author' => "作者", + 'col_posted_at' => "發表時間", + 'text_in' => "版塊:", + 'std_no_torrent_found' => "沒有種子", + 'text_last_five_torrent' => "最近5個上傳種子", + 'col_name' => "標題", + 'col_seeder' => "做種", + 'col_leecher' => "下載", + 'text_polls' => "投票 ", + 'text_new' => "新投票", + 'text_edit' => "編輯", + 'text_delete' => "刪除", + 'text_votes' => "投票數:", + 'radio_blank_vote' => "棄權(\"我想偷看結果!\")", + 'submit_vote' => "投票", + 'text_previous_polls' => "以前的投票", + 'text_tracker_statistics' => "站點數據", + 'row_registered_users' => "註冊用戶 / 上限", + 'row_unconfirmed_users' => "未驗證用戶", + 'row_vips' => "VIP", + 'row_donors' => "捐贈者", + 'row_warned_users' => "被警告用戶", + 'row_banned_users' => "被禁用戶", + 'row_male_users' => "男生", + 'row_female_users' => "女生", + 'row_torrents' => "種子", + 'row_dead_torrents' => "斷種", + 'row_seeders' => "做種數", + 'row_leechers' => "下載數", + 'row_peers' => "同伴", + 'row_seeder_leecher_ratio' => "做種數 / 下載數比例", + 'row_total_size_of_torrents' => "種子總大小", + 'row_total_uploaded' => "總上傳量", + 'row_total_downloaded' => "總下載量", + 'row_total_data' => "總數據量", + 'text_no_users_day' => "過去24小時內沒有活躍用戶。", + 'text_no_active_users_now' => "當前沒有活躍用戶。", + 'text_no_user_torrenting' => "無 :(", + 'text_tracker_load' => "伺服器負載", + 'text_our_tracker_load' => "網站同伴數負載:", + 'text_global_server_load' => "伺服器負載: ", + 'text_whats_going_on' => "當前情況", + 'text_members_have_visited' => "個用戶在過去24小時訪問,歡迎我們的最新用戶,", + 'text_users_browsing_now' => "個用戶過去15分鐘在線上。", + 'text_peers_active_now' => "個當前做種或下載的用戶。", + 'text_disclaimer' => "免責條款", + 'text_disclaimer_content' => "本站列出的檔並沒有保存在本站的伺服器上。本站僅負責連接,我們對被傳播檔的內容一無所知。本站的鏈結均由用戶自發提供。".$SITENAME."的管理員無法對用戶的提交內容或其他行為負責。您不能使用".$SITENAME."傳播或下載任何您沒有使用許可的檔或材料,由此引起的後果由您自己承擔。", + 'text_browser_note' => "獲得本站最佳效果,請使用\"Internet\"Firefox\"且使用大于1024*768的解析度。建議BT用戶端為 \"Azureus\"\"uTorrent\"", + 'title_show_or_hide' => "顯示/隱藏", + 'text_links' => "友情鏈接", + 'text_manage_links' => "管理鏈接", + 'text_author' => "作者:", + 'text_datetime' => "時間:", + 'p_critic_reviews' => "影評家點評", + 'p_user_reviews' => "用戶點評選", + 'head_home' => "首頁", + 'sumbit_to_guest' => "對游客", + 'text_apply_for_link' => "申請鏈接", + 'text_ago' => "以前", + 'text_seconds' => "秒後自動刷新", + 'text_funbox' => "趣味盒", + 'text_more_fun' => "更多", + 'text_new_fun' => "發布", + 'text_ban' => "禁止", + 'submit_fun' => "有趣", + 'submit_dull' => "無聊", + 'text_out_of' => "個用戶(共", + 'text_people_found_it' => "票)認為它有趣。", + 'text_your_opinion' => "你覺得呢?", + 'text_vote_accepted' => "謝謝!你的投票已提交。", + 'row_users_active_today' => "今日訪問用戶數", + 'row_users_active_this_week' => "本周訪問用戶數", + 'row_active_browsing_users' => "當前訪問用戶數", + 'row_tracker_active_users' => "當前Tracker用戶數", + 'text_detail' => "詳情", +); + +?> diff --git a/lang/cht/lang_invite.php b/lang/cht/lang_invite.php new file mode 100644 index 00000000..25bc46e1 --- /dev/null +++ b/lang/cht/lang_invite.php @@ -0,0 +1,51 @@ + "對不起", + 'std_permission_denied' => "沒有該許可權!", + 'head_invites' => "邀請", + 'std_no_invites_left' => "你沒有剩餘邀請名額。 :(

    點擊", + 'here_to_go_back' => "這裏返回。", + 'text_invite_code_sent' => "邀請代碼已發送!
    ", + 'text_invite_someone' => "邀請其他人加入", + 'text_s' => "", + 'text_invitation_left' => "過剩餘邀請", + 'text_left' => "", + 'text_email_address' => "郵箱地址", + 'text_email_address_note' => "郵箱位址必須是有效的。被邀請人會收到你的邀請函。", + 'text_message' => "信息", + 'submit_invite' => "邀請", + 'text_invite_status' => "被邀者當前狀態", + 'text_no_invites' => "沒有被邀者", + 'text_username' => "用戶名", + 'text_email' => "郵箱", + 'text_uploaded' => "上傳", + 'text_downloaded' => "下載", + 'text_ratio' => "分享率", + 'text_status' => "狀態", + 'text_confirm' => "確認", + 'text_confirmed' => "已確認", + 'text_pending' => "待定", + 'submit_confirm_users' => "確認用戶", + 'sumbit_invite_someone' => "邀請其他人", + 'text_sent_invites_status' => "已發邀請狀態", + 'text_no_invitation_sent' => "當前沒有已發邀請", + 'text_hash' => "Hash", + 'text_send_date' => "發送日期", + 'text_invitation_body' => " +你好, + +我邀請你加入 $SITENAME, 這是一個擁有豐富高質量資源的非開放社區. +如果你有興趣加入我們請閱讀規則並確認邀請.最後,確保維持一個良好的分享率 +分享允許的資源. + +歡迎到來! :) +", + 'text_invite_system' => "的邀請系統", + 'std_only' => "只有", + 'std_or_above_can_invite' => "及以上的用戶才能發送邀請。", + 'text_email_restriction_note' => "你只能發送邀請給以下郵箱:", +); + +?> diff --git a/lang/cht/lang_iphistory.php b/lang/cht/lang_iphistory.php new file mode 100644 index 00000000..00fc4adb --- /dev/null +++ b/lang/cht/lang_iphistory.php @@ -0,0 +1,16 @@ + "錯誤", + 'std_invalid_id' => "無效的ID", + 'text_user_not_found' => "沒有該用戶", + 'head_ip_history_log_for' => "用戶IP曆史 - ", + 'text_historical_ip_by' => "用戶IP位址曆史 - ", + 'col_last_access' => "最近存取", + 'col_ip' => "IP", + 'col_hostname' => "主機名", + 'text_not_available' => "無", + 'text_duplicate' => "重複", +); +?> diff --git a/lang/cht/lang_ipsearch.php b/lang/cht/lang_ipsearch.php new file mode 100644 index 00000000..ccc945e4 --- /dev/null +++ b/lang/cht/lang_ipsearch.php @@ -0,0 +1,24 @@ + "錯誤", + 'std_invalid_ip' => "無效的IP位址。", + 'std_invalid_subnet_mask' => "無效的網路遮罩。", + 'head_search_ip_history' => "搜索IP曆史", + 'text_search_ip_history' => "搜索IP曆史", + 'row_ip' => "IP", + 'row_subnet_mask' => "網路遮罩", + 'submit_search' => "給我搜", + 'text_no_users_found' => "沒有找到用戶", + 'text_users_used_the_ip' => "個用戶使用過此IP:", + 'col_username' => "用戶名", + 'col_last_ip' => "最近IP", + 'col_last_access' => "最近存取", + 'col_ip_num' => "IP數", + 'col_last_access_on' => "此IP最近存取", + 'col_added' => "加入時間", + 'col_invited_by' => "邀請者", + 'text_not_available' => "無", +); +?> diff --git a/lang/cht/lang_linksmanage.php b/lang/cht/lang_linksmanage.php new file mode 100644 index 00000000..7c64d0e2 --- /dev/null +++ b/lang/cht/lang_linksmanage.php @@ -0,0 +1,42 @@ + "申請鏈接", + 'text_apply_for_links' => "申請鏈接", + 'text_rules' => "交換鏈接規則:", + 'text_rule_one' => "1.申請人員請先將本站的鏈接".$SITENAME."放置在其網站,然后再向我們提出申請。 ", + 'text_rule_two' => "2.申請鏈接的網站不得涉及任何違法內容。".$SITENAME."的管理員不對申請網站的任何行為責任。", + 'text_rule_three' => "3.本站所做鏈接均為文字鏈接。", + 'text_rule_four' => "4.申請網站至少要有200名注冊用戶,或者平均日訪問人數不少于50。", + 'text_rule_five' => "5.本站".$SITENAME."保留可不經過任何通知,自由修改或刪除本站上的鏈接的權力。", + 'text_rule_six' => "6.如果你的網站符合以上條款,歡迎向我們".$SITENAME."提出交換鏈接的申請。然而,我們不保證接受所有申請。", + 'text_red_star_required' => "紅星號(*)標記的區域必須填寫", + 'text_site_name' => "網站名", + 'text_url' => "鏈接地址", + 'text_title' => "標語", + 'text_title_note' => "標語將顯示在鏈接的提示上,如NexusPHP", + 'text_administrator' => "管理員", + 'text_administrator_note' => "要求填寫管理員的真實姓名", + 'text_email' => "郵箱", + 'text_reason' => "理由", + 'submit_okay' => "確定", + 'submit_reset' => "清空", + 'std_error' => "錯誤", + 'std_no_sitename' => "網站名不能為空。", + 'std_no_url' => "鏈接地址不能為空。", + 'std_no_admin' => "管理員不能為空。請填寫管理員的姓名。", + 'std_no_email' => "郵箱地址不能為空。", + 'std_invalid_email' => "郵箱地址無效。", + 'std_no_reason' => "理由不能為空。請填寫申請理由。", + 'std_reason_too_short' => "理由過短。請詳細填寫。", + 'std_success' => "成功", + 'std_success_note' => "你的申請已成功提交。請等待我們的回復。", + 'text_sitename_note' => "申請網站的名字,如NexusPHP", + 'text_url_note' => "如http://www.nexusphp.com", + 'text_email_note' => "請填寫申請網站的管理員的郵箱地址,便于我們聯系", + 'js_sure_to_delete_link' => "你確定要刪除此鏈接?", +); + +?> + diff --git a/lang/cht/lang_log.php b/lang/cht/lang_log.php new file mode 100644 index 00000000..8916fad5 --- /dev/null +++ b/lang/cht/lang_log.php @@ -0,0 +1,66 @@ + "對不起...", + 'std_permission_denied_only' => "你沒有該權限。只有", + 'std_or_above_can_view' => "及以上等級的用戶才能查看日志。

    請查看常見問題了解更多關于用戶等級和權限的信息。

    " .$SITENAME."管理組
    ", + 'head_site_log' => "常規日志", + 'text_search_log' => "搜素常規日志", + 'submit_search' => "給我搜", + 'text_log_empty' => "
    沒有日志

    ", + 'title_time_added' => "時間", + 'col_date' => "日期", + 'col_event' => "事件", + 'time_zone_note' => "

    時間為北京時間。

    \n", + 'text_daily_log' => " 常 規 日 志 ", + 'text_chronicle' => " 史  冊 ", + 'text_code_update' => " 代 碼 更 新 ", + 'text_funbox' => " 趣 味 盒 ", + 'text_news' => " 首 頁 公 告 ", + 'text_poll' => " 投  票 ", + 'std_error' => "錯誤", + 'std_invalid_action' => "無效的行為", + 'head_chronicle' => "史冊", + 'text_search_chronicle' => "搜索史冊", + 'text_chronicle_empty'=> "史冊沒有記錄
    ", + 'col_modify' => "行為", + 'text_edit' => "編輯", + 'text_delete' => "刪除", + 'submit_add' => "添加", + 'text_add_chronicle' => "添加史冊記錄", + 'std_permission_denied' => "對不起!你沒有該權限。", + 'submit_okay' => "確定", + 'text_edit_chronicle' => "編輯史冊記錄", + 'head_code_update' => "代碼更新", + 'text_search_code_update' => "搜索代碼更新事件", + 'text_add_code_update' => "添加代碼更新記錄", + 'text_edit_codeupdate' => "編輯代碼更新記錄", + 'text_codeupdate_empty' => "沒有代碼更新記錄
    ", + 'head_funbox' => "趣味盒", + 'head_news' => "首頁公告", + 'text_search_news' => "搜索首頁公告", + 'text_news_empty' => "沒有首頁公告
    ", + 'col_title' => "標題", + 'col_body' => "正文", + 'std_delete_poll' => "刪除投票", + 'std_delete_poll_confirmation' => "你確定要刪除該投票嗎?點擊", + 'std_here_if_sure' => "這里來確認。", + 'std_sorry' => "對不起...", + 'std_no_polls' => "暫時沒有投票!", + 'head_previous_polls' => "以前的投票", + 'text_previous_polls' => "以前的投票", + 'text_ago' => "以前", + 'text_votes' => "投票數:", + 'text_in' => "范圍:", + 'text_funbox_empty' => "趣味盒是空的
    ", + 'text_search_funbox' => "搜索趣味盒", + 'text_title' => "標題", + 'text_body' => "正文", + 'text_both' => "兩者", + 'text_all' => "所有", + 'text_normal' => "普通", + 'text_mod' => "機密", +); + +?> diff --git a/lang/cht/lang_login.php b/lang/cht/lang_login.php new file mode 100644 index 00000000..a3b798ee --- /dev/null +++ b/lang/cht/lang_login.php @@ -0,0 +1,35 @@ + "未登錄!", + 'p_error' => "錯誤:", + 'p_after_logged_in' => "該頁面必須在登錄後才能訪問", + 'p_need_cookies_enables' => "注意: 你需要啟用cookies才能登錄或切換語言", + 'p_fail_ban' => "次連續登錄失敗將導致你的IP位址被禁用!", + 'p_you_have' => "你還有", + 'p_remaining_tries' => "次嘗試機會", + 'p_no_account_signup' => "還沒有帳號? 馬上註冊!", + 'p_forget_pass_recover' => "忘記了密碼? 通過郵件來找回密碼", + 'p_resend_confirm' => "沒有收到驗證郵件或驗證鏈結無法打開? 重新發送驗證郵件", + 'rowhead_username' => "用戶名:", + 'rowhead_password' => "密碼:", + 'button_login' => "登錄", + 'button_reset' => "重置", + 'text_auto_logout' => "自動登出:", + 'text_restrict_ip' => "限制IP:", + 'text_ssl' => "SSL (HTTPS):", + 'checkbox_auto_logout' => " 15分鐘後自動登出", + 'checkbox_restrict_ip' => " 限制只能使用本IP登錄", + 'checkbox_ssl' => " 使用SSL數據加密協議流覽網站(流覽器)", + 'checkbox_ssl_tracker' => " 使用SSL數據加密協議連接Tracker(BT客戶端)", + 'text_advanced_options' => "高級選項:", + 'text_helpbox' => "求助區", + 'text_helpbox_note' => "注冊或登錄遇到問題?請在此留言", + 'text_message' => "留言:", + 'sumbit_shout' => "發送", + 'submit_clear' => "清空", + 'text_select_lang' => "Select Site Language: ", + 'head_login' => "登錄", +); +?> diff --git a/lang/cht/lang_mailtest.php b/lang/cht/lang_mailtest.php new file mode 100644 index 00000000..2c1fd2ab --- /dev/null +++ b/lang/cht/lang_mailtest.php @@ -0,0 +1,18 @@ + "郵件測試", + 'text_mail_test' => "郵件測試", + 'row_enter_email' => "匯入郵箱位址", + 'text_enter_email_note' => "匯入用于接收測試郵件的郵箱位址,如yourname@gmail.com", + 'submit_send_it' => "傳送!", + 'text_smtp_testing_mail' => "測試郵件", + 'std_error' => "錯誤", + 'std_invalid_email_address' => "郵箱位址無效!", + 'mail_test_mail_content' => "你好,如果你看見這個資訊,你的SMTP郵件傳送功能正常。祝愉快!", + 'std_success' => "成功", + 'std_success_note' => "沒有錯誤發生,但這不意為着郵件肯定已成功傳送。請檢查郵箱。" +); + +?> diff --git a/lang/cht/lang_makepoll.php b/lang/cht/lang_makepoll.php new file mode 100644 index 00000000..f7341d7c --- /dev/null +++ b/lang/cht/lang_makepoll.php @@ -0,0 +1,24 @@ + "錯誤", + 'std_no_poll_id' => "不存在此投票ID", + 'std_missing_form_data' => "請填寫比填項目!", + 'head_edit_poll' => "編輯投票", + 'text_edit_poll' => "編輯投票", + 'head_new_poll' => "新的投票", + 'text_day' => "天", + 'text_hour' => "時", + 'text_current_poll' => "注意:當前投票", + 'text_is_only' => "發布僅", + 'text_old' => "。", + 'text_make_poll' => "新的投票", + 'text_question' => "問題", + 'text_option' => "選項", + 'submit_edit_poll' => "編輯投票", + 'submit_create_poll' => "創建投票", + 'text_required' => " 必須填寫" +); + +?> diff --git a/lang/cht/lang_messages.php b/lang/cht/lang_messages.php new file mode 100644 index 00000000..c258e148 --- /dev/null +++ b/lang/cht/lang_messages.php @@ -0,0 +1,81 @@ + "錯誤", + 'std_invalid_mailbox' => "無效的短訊箱", + 'text_inbox' => "收件箱", + 'text_sentbox' => "發件箱", + 'text_sender' => "發訊者", + 'text_receiver' => "收訊者", + 'col_status' => "狀態", + 'col_subject' => "主題", + 'col_date' => "日期", + 'col_act' => "行為", + 'text_no_messages' => "沒有短訊", + 'text_remove_from_friends' => "[刪除好友]", + 'text_add_to_friends' => "[加為好友]", + 'submit_move_to' => "移至", + 'text_or' => " 或 ", + 'submit_delete' => "刪除", + 'text_unread_messages' => " 未讀短訊", + 'text_read_messages' => " 已讀短訊", + 'text_mailbox_manager' => "短訊箱管理", + 'std_no_permission' => "你沒有閱讀該短訊的許可權。", + 'text_to' => "至", + 'text_from' => "自", + 'text_new' => "(新)", + 'text_reply' => "回復", + 'text_delete' => "刪除", + 'text_forward_pm' => "轉發短訊", + 'std_cannot_move_messages' => "無法移動短訊!", + 'std_cannot_delete_messages' => "無法刪除短訊!", + 'std_no_action' => "無行為", + 'std_no_permission_forwarding' => "你沒有轉發該短訊的許可權。", + 'row_to' => "至:", + 'row_original_receiver' => "原收訊者:", + 'row_original_sender' => "原發訊者:", + 'row_subject' => "主題:", + 'row_message' => "正文:", + 'checkbox_save_message' => "保存短訊", + 'submit_forward' => "轉發", + 'std_no_such_user' => "對不起,不存在該用戶名的帳號。", + 'std_rufused' => "拒絕", + 'std_user_blocks_your_pms' => "該用戶拒絕接受你的短訊。", + 'std_user_accepts_friends_pms' => "該用戶只接受其好友的短訊。", + 'std_user_blocks_all_pms' => "該用戶拒絕接受一切短訊。", + 'std_success' => "成功", + 'std_pm_forwarded' => "轉發成功", + 'head_editing_mailboxes' => "編輯短訊箱", + 'text_editing_mailboxes' => "編輯短訊箱", + 'text_add_mailboxes' => "添加短訊箱", + 'text_extra_mailboxes_note' => "你可以添加額外的短訊箱。你不必只使用收件箱。", + 'submit_add' => "添加", + 'text_edit_mailboxes' => "編輯短訊箱", + 'text_edit_mailboxes_note' => "你可以編輯名字,或者刪除短訊箱。
    注意:刪除短訊箱將導致其中所有短訊被刪除。", + 'text_no_mailboxes_to_edit' => "沒有可編輯的短訊箱。", + 'submit_edit' => "編輯", + 'std_no_message_id' => "沒有該ID的短訊。", + 'std_could_not_delete_message' => "無法刪除該短訊。", + 'text_jump_to' => "短訊箱:", + 'select_inbox' => "收件箱", + 'select_sentbox' => "發件箱", + 'submit_go' => "確定", + 'input_check_all' => "全選", + 'input_uncheck_all' => "全不選", + 'title_unread' => "未讀", + 'title_read' => "已讀", + 'text_system' => "系統", + 'text_no_subject' => "無主題", + 'col_search_message' => "搜索短訊", + 'text_search' => "搜索:", + 'text_in' => "範圍:", + 'select_title' => "標題", + 'select_body' => "正文", + 'select_both' => "兩者", + 'submit_mark_as_read' => "設為已讀", + 'std_cannot_mark_messages' => "短訊無法設為已讀。", + 'std_no_message_selected' => "請選中要操作的短訊。" +); + +?> diff --git a/lang/cht/lang_moforums.php b/lang/cht/lang_moforums.php new file mode 100644 index 00000000..31b33680 --- /dev/null +++ b/lang/cht/lang_moforums.php @@ -0,0 +1,26 @@ + "論壇分區管理", + 'text_forum_management' => "論壇管理", + 'text_overforum_management' => "論壇分區管理", + 'col_name' => "名字", + 'col_viewed_by' => "最低允許查看等級", + 'col_modify' => "修改", + 'text_edit' => "編輯", + 'text_delete' => "刪除", + 'js_sure_to_delete_overforum' => "你確定要刪除此論壇分區嗎?", + 'text_no_records_found' => "對不起,沒有記錄!", + 'text_new_overforum' => "新論壇分區", + 'text_overforum_name' => "名字", + 'text_overforum_description' => "描述", + 'text_minimum_view_permission' => "最低允許閱讀等級", + 'text_overforum_order' => "論壇分區排序", + 'text_overforum_order_note' => "按數字升序排列,即0顯示在最頂端。", + 'submit_make_overforum' => "創建新的分區", + 'text_edit_overforum' => "編輯分區", + 'submit_edit_overforum' => "編輯分區" +); + +?> diff --git a/lang/cht/lang_moresmilies.php b/lang/cht/lang_moresmilies.php new file mode 100644 index 00000000..19694e1c --- /dev/null +++ b/lang/cht/lang_moresmilies.php @@ -0,0 +1,9 @@ + "更多可點表情", + 'text_close' => "關閉", +); + +?> diff --git a/lang/cht/lang_mybonus.php b/lang/cht/lang_mybonus.php new file mode 100644 index 00000000..6f097a8b --- /dev/null +++ b/lang/cht/lang_mybonus.php @@ -0,0 +1,128 @@ + "對不起!", + 'std_karma_system_disabled' => "魔力值系統當前處於關閉中。", + 'std_points_active' => "不過你的魔力值仍在計算中。", + 'text_success_upload' => "祝賀你,你成功增加了上傳值!", + 'text_success_invites' => "祝賀你,你獲得了1個新的邀請名額!", + 'text_success_vip' => "祝賀你,你獲得了一個月的", + 'text_success_vip_two' => "資格!", + 'text_no_permission' => "錯誤!你沒有該許可權。", + 'text_success_custom_title' => "祝賀你,你獲得了".$CURUSER[title]."頭銜!", + 'text_success_gift' => "你成功贈送了魔力值。", + 'head_karma_page' => "的魔力值", + 'text_karma_system' => "魔力值系統", + 'text_exchange_your_karma' => "用你的魔力值(當前", + 'text_for_goodies' => ")換東東!", + 'text_no_buttons_note' => "如果按鈕不可點,則你的魔力值不足以交換該項。", + 'col_option' => "項目", + 'col_description' => "簡介", + 'col_points' => "價格", + 'col_trade' => "交換", + 'text_username' => "用戶名:", + 'text_to_be_given' => "贈送量:", + 'text_karma_points' => " 個魔力值!", + 'text_enter_titile' => "輸入你想要的特殊頭銜 ", + 'text_click_exchange' => " 點擊交換!", + 'text_enter_receiver_name' => "輸入贈送魔力值物件的用戶名,選擇贈送量然後點擊贈送!", + 'text_min' => "最少", + 'text_max' => "最多", + 'submit_karma_gift' => "贈送", + 'text_plus_only' => "及以上方可!", + 'submit_exchange' => "交換", + 'text_unavailable' => "當前不可用!", + 'text_more_points_needed' => "需要更多魔力值", + 'text_what_is_karma' => "魔力值到底是什麼玩意兒,我怎樣才能得到它?", + 'text_get_by_seeding' => "做種每小時將得到如下的魔力值", + 'text_for_seeding_torrent' => " * 你的做種數 (做種數最多計", + 'text_torrent' => "個", + 'text_donors_always_get' => "捐贈者每次將得到", + 'text_times_of_bonus' => "倍的魔力值", + 'text_other_things_get_bonus' => "其他獲取方式", + 'text_point' => "個魔力值", + 'text_upload_torrent' => "發布新種子 = ", + 'text_upload_subtitle' => "上傳一個字幕 = ", + 'text_start_topic' => "發佈新主題 = ", + 'text_make_post' => "回復帖子 = ", + 'text_add_comment' => "發佈種子、候選的評論 = ", + 'text_poll_vote' => "參與一次調查投票 = ", + 'text_offer_vote' => "参与一次候选投票 = ", + 'text_funbox_vote' => "參與一次候選投票 = ", + 'text_rate_torrent' => "評分種子 = ", + 'text_say_thanks' => "說謝謝 = ", + 'text_receive_thanks' => "收到感謝 = ", + 'text_funbox_reward' => "發佈的趣味盒內容獲得用戶較高的評價(詳見規則)", + 'text_howto_get_karma_four' => " +

    注意點

    +
      ", + 'text_howto_get_karma_five' => "
    • 與獲取相反的事件也會消耗你的魔力值。
      如:如果你上傳種子後又刪除了它,你會先得到然後又失去", + 'text_howto_get_karma_six' => "。
    • +
    • 站點還有其他獲取魔力值的事,請慢慢探索。:)
    • +
    • 管理組可以剝奪或發放魔力值,視用戶是違反規則還是做貢獻而定。
    • +
    ", + 'std_no_permission' => "沒有該許可權", + 'std_class_above_vip' => "你的等級比VIP高!", + 'text_wasted_karma' => "我剛剛浪費了魔力值", + 'text_huh' => "恩?", + 'text_karma_self_giving_warning' => "哥們,你玩夠了嗎...
    你不能將魔力值送給自己...
    如果要送,選擇其他用戶!

    點擊返回魔力值頁面。", + 'text_receiver_not_exists' => "對不起...
    不存在該用戶。

    點擊回到你的魔力值頁面。", + 'text_oups' => "啊哦!", + 'text_not_enough_karma' => "對不起,你沒有足夠的魔力值!
    點擊回到你的魔力值頁面。", + 'text_cheat_alert' => "想作弊?沒門!", + 'text_not_enough_bonus' => "對不起,你沒有足夠的魔力值。還有,你怎麼到這來的?", + 'text_uploaded_one' => "1.0 GB上傳量", + 'text_uploaded_note' => "如果有足夠的魔力值,你可以用它來換取上傳量。交易完成後,你的魔力值會減少,上傳量則會增加。", + 'text_uploaded_two' => "5.0 GB上傳量", + 'text_uploaded_three' => "10.0 GB上傳量", + 'text_buy_invite' => "1個邀請名額", + 'text_buy_invite_note' => "如果有足夠的魔力值,你可以用它來換取邀請名額。交易完成後,你的魔力值會減少,邀請名額數則會增加。", + 'text_custom_title' => "自定義頭銜", + 'text_custom_title_note' => "如果有足夠的魔力值,你就可以給自己定一個頭銜了。注意:禁止使用髒話、攻擊性的辭彙或用戶等級作為頭銜。交易完成後,你的魔力值會減少,你的頭銜將變成自定義的。", + 'text_vip_status' => "貴賓待遇", + 'text_vip_status_note' => "如果有足夠的魔力值,你可以用它來換取一個月的貴賓待遇。交易完成後,你的魔力值會減少,同時你的等級將變為貴賓。", + 'text_bonus_gift' => "贈送魔力值", + 'text_bonus_gift_note' => "可能你不需要魔力值,為什麼不把它送給那些需要的人呢?你可以把自己的魔力值作為禮物送給別人。交易完成後,你的魔力值會減少,禮物接收者的魔力值則會增加。同時,接收者會收到一條關於你的饋贈的短訊。", + 'text_error' => "錯誤", + 'text_ratio_too_high' => "分享率已很高", + 'text_bonus_formula_one' => "每小時獲得的魔力值點數由下面的公式給出
        \"A
        \"B
    +式中
    • A為中間變量
    • Ti為第i個種子的生存時間, 即自種子發布起到現在所經過的時間, 單位是周
    • T0為參數。T0 = ", + 'text_bonus_formula_two' => "
    • Si為第i個種子的大小,單位是GB
    • Ni為第i個種子當前的做種者數
    • N0為參數。N0 = ", + 'text_bonus_formula_three' => "
    • B為1小時中用戶獲得的做種魔力值點數
    • B0為參數,代表用戶1小時獲得魔力值的上限。B0 = ", + 'text_bonus_formula_four' => "
    • L為參數。L = ", + 'text_bonus_formula_five' => "
    簡言之,為做種人數少、文件體積大的種子做種能獲得更多魔力值。", + 'text_user_with_ratio_above' => "分享率高于", + 'text_and_uploaded_amount_above' => "且上傳量大于", + 'text_cannot_exchange_uploading' => "GB的用戶不能換取更多的上傳量。", + 'text_you_are_currently_getting' => "你當前每小時能獲取", + 'text_per_hour' => "", + 'text_custom' => "自定義", + 'bonus_amount_not_allowed' => "魔力值數量不允許。你每次只能贈送25.0至1000.0個魔力值。", + 'text_system_charges_receiver' => "注意:系統向禮物接收者索取", + 'text_tax_bonus_point' => "個魔力值", + 'text_tax_plus' => " + ", + 'text_percent_of_transfered_amount' => "% * 贈送額的魔力值", + 'text_as_tax' => "作為稅收。例如,當你選取贈送100個魔力值,接收者實際只收到", + 'text_tax_example_note' => "個魔力值。", + 'text_no_advertisements' => "天不察看廣告", + 'text_no_advertisements_note' => "如果有足夠的魔力值,你可以用它來換取一定期限內不察看廣告的許可權。交易完成后,你的魔力值會減少,同時在一定期限內你將看不到網站中的廣告。如果在此期間你需要察看廣告,你可以隨時在控制面板開啟它。", + 'text_success_no_ad' => "享受無廣告的時間!", + 'submit_class_above_no_ad' => "你可在控制面板關閉廣告", + 'submit_already_disabled' => "廣告已可關閉", + 'text_click_on_ad' => "點擊一次廣告(每個廣告只計一次) = ", + 'text_promotion_link_clicked' => "宣傳鏈結獲得一次點擊(每個IP只計一次) = ", + 'text_charity_giving' => "慈善捐贈", + 'text_charity_giving_note' => "你可以將你的魔力值通過慈善捐贈送與有需要的用戶群體。而且,完全由你決定贈與群體的條件。", + 'text_ratio_below' => "平均配置給用戶:分享率低于", + 'text_and_downloaded_above' => "且下載量大于", + 'text_select_receiver_ratio' => "選取你想捐贈予的用戶的分享率,選取你想贈送的魔力值總值,然后點擊慈善捐贈!", + 'submit_charity_giving' => "慈善捐贈", + 'text_message' => "留言:", + 'bonus_amount_not_allowed_two' => "魔力值數量不允許。你每次只能贈送1000.0至50000.0個魔力值。", + 'bonus_ratio_not_allowed' => "分享率不符合要求!只有分享率低于0.8的用戶需要慈善輔助說明。", + 'std_no_users_need_charity' => "暫時沒有需要慈善輔助說明的用戶。", + 'text_success_charity' => "謝謝!感謝你的慷慨捐贈。" +); + +?> diff --git a/lang/cht/lang_news.php b/lang/cht/lang_news.php new file mode 100644 index 00000000..b99ad2a7 --- /dev/null +++ b/lang/cht/lang_news.php @@ -0,0 +1,21 @@ + "刪除最近消息", + 'std_are_you_sure' => "你真的要刪除一條最近消息嗎?如果確定,請點擊", + 'std_here' => "這里", + 'std_if_sure' => "。", + 'std_error' => "錯誤", + 'std_news_body_empty' => "最近消息的正文不能為空!", + 'std_news_title_empty' => "最近消息的標題不能為空!", + 'std_something_weird_happened' => "奇怪的事情發生了。", + 'std_invalid_news_id' => "最近消息的ID不存在:", + 'head_edit_site_news' => "編輯最近消息", + 'text_edit_site_news' => "編輯最近消息", + 'text_notify_users_of_this' => "提醒用戶查看這條消息。", + 'head_site_news' => "最近消息", + 'text_submit_news_item' => "提交新的消息" +); + +?> diff --git a/lang/cht/lang_offers.php b/lang/cht/lang_offers.php new file mode 100644 index 00000000..76d7efcc --- /dev/null +++ b/lang/cht/lang_offers.php @@ -0,0 +1,142 @@ + "由", + 'text_inf' => "無限", + 'text_ratio' => "分享率:", + 'text_orphaned' => "(無此帳戶)", + 'text_at' => "提交于", + 'text_edit' => "編輯", + 'text_delete' => "移除", + 'text_profile' => "個人資料", + 'text_pm' => "短訊", + 'text_report' => "舉報", + 'text_last_edited_by' => "最后被", + 'text_edited_at' => "編輯于", + 'head_offer_error' => "候選錯誤", + 'std_error' => "錯誤!", + 'std_smell_rat' => "有地方不對勁!", + 'head_offer' => "候選", + 'submit_search' => "給我搜", + 'text_red_star_required' => "紅狀圖形(*)記號的區域必須填寫", + 'text_offers_open_to_all' => "候選區對所有用戶均開放...提高分享率的好方式!", + 'select_type_select' => "(請選取)", + 'row_type' => "類別", + 'row_title' => "標題", + 'row_post_or_photo' => "海報或圖片", + 'text_link_to_picture' => "(圖像的鏈結。不要加標簽程式碼! 察看在簡介裡)", + 'row_description' => "簡介", + 'submit_add_offer' => "添加", + 'col_type' => "類別", + 'col_title' => "標題", + 'title_time_added' => "添加時間", + 'col_offered_by' => "添加者", + 'submit_show_all' => "察看全部", + 'std_must_enter_name' => "你必須匯入標題!", + 'std_must_select_category' => "你必須選取候選的類別!", + 'stdst_enter_description' => "你必須填寫簡介!", + 'std_wrong_image_format' => "圖片必須是jpg, gif 或png格式。", + 'head_success' => "成功!", + 'head_error' => "錯誤!", + 'std_offer_exists' => "候選已經存在!", + 'text_view_all_offers' => "檢視所有候選", + 'head_offer_detail_for' => "候選詳情", + 'text_offer_detail' => "候選詳情", + 'row_time_added' => "添加時間", + 'row_status' => "狀態", + 'text_pending' => "待定", + 'text_allowed' => "允許", + 'text_denied' => "拒絕", + 'text_edit_offer' => "編輯候選", + 'text_delete_offer' => "移除候選", + 'report_offer' => "舉報候選", + 'row_allow' => "允許", + 'submit_allow' => "允許", + 'submit_let_votes_decide' => "讓投票決定", + 'row_vote' => "投票", + 'text_for' => "支援", + 'text_against' => "反對", + 'row_offer_allowed' => "候選已允許", + 'text_voter_receives_pm_note' => "當候選被上傳時投票者會收到通知短訊!", + 'text_urge_upload_offer_note' => "該候選已經被允許!請儘快上傳該種子。", + 'row_vote_results' => "投票狀態", + 'text_see_vote_detail' => "[檢視投票詳情]", + 'row_report_offer' => "舉報候選", + 'text_for_breaking_rules' => "該候選違反了規則 ", + 'submit_report_offer' => "舉報", + 'text_add_comment' => "添加評論", + 'text_no_comments' => "沒有評論", + 'std_access_denied' => "存取被拒絕!", + 'std_mans_job' => "這是人的工作", + 'std_have_no_permission' => "你沒有該許可權", + 'std_sorry' => "對不起", + 'std_no_votes_yet' => "暫時沒有投票... ", + 'std_back_to_offer_detail' => "回到候選詳情", + 'std_cannot_edit_others_offer' => "你沒有許可權編輯別人的候選", + 'head_edit_offer' => "編輯候選", + 'text_edit_offer' => "編輯候選", + 'submit_edit_offer' => "編輯候選", + 'head_offer_voters' => "候選投票者", + 'text_vote_results_for' => "候選投票狀態", + 'col_user' => "用戶", + 'col_uploaded' => "上傳量", + 'col_downloaded' => "下載量", + 'col_ratio' => "分享率", + 'col_vote' => "投票", + 'std_already_voted' => "你已經投過票", + 'std_already_voted_note' => "

    你已經投過票,每個候選只能投一次。

    傳回到", + 'std_back_to_offer_detail' => "候選詳情

    ", + 'head_vote_for_offer' => "候選投票", + 'std_vote_accepted' => "投票成功", + 'std_vote_accepted_note' => "

    你的投票成功了。

    傳回到", + 'std_cannot_delete_others_offer' => "你沒有許可權移除別人的候選", + 'std_delete_offer' => "移除候選", + 'std_delete_offer_note' => "你將要移除該候選。", + 'head_offers' => "候選", + 'text_offers_section' => "候選區", + 'text_add_offer' => "添加候選", + 'text_view_request' => "檢視求種", + 'select_show_all' => "(察看全部)", + 'submit_view_only_selected' => "察看選取", + 'text_search_offers' => "搜索:", + 'title_comment' => "評論", + 'col_vote_results' => "投票", + 'text_nothing_found' => "空!", + 'text_yep' => "是", + 'text_nah' => "否", + 'title_show_vote_details' => "察看投票詳情", + 'title_i_want_this' => "我要!", + 'title_do_not_want_it' => "沒興趣", + 'row_action' => "行為", + 'text_quick_comment' => "快速評論", + 'submit_add_comment' => "添加", + 'text_blank' => "提交于", + 'col_act' => "行為", + 'title_delete' => "移除", + 'title_edit' => "編輯", + 'col_timeout' => "過期", + 'row_info' => "資訊", + 'text_reason_is' => "原因:", + 'submit_confirm' => "確定", + 'title_add_comments' => "添加評論", + 'text_at_time' => "發布于", + 'text_blank_two' => "發布在", + 'text_last_commented_by' => "最新評論由", + 'title_has_new_comment' => "有新評論", + 'title_no_new_comment' => "無新評論", + 'text_new' => "新", + 'std_cannot_vote_youself' => "你無法給自己提交的候選投票。", + 'text_rules' => "規則:", + 'text_rule_one_one' => "", + 'text_rule_one_two' => "及以上等級的用戶可直接發布種子,無需經過候選。", + 'text_rule_one_three' => "或以上等級的用戶可以添加候選。", + 'text_rule_two_one' => "當候選的支援票比反對票多", + 'text_rule_two_two' => "票時,候選被通過。", + 'text_rule_three_one' => "如候選在添加", + 'text_rule_three_two' => "小時后未被通過,它將被移除。", + 'text_rule_four_one' => "如在候選通過后", + 'text_rule_four_two' => "小時內用戶沒有發布種子,通過的候選將被移除。", +); + +?> diff --git a/lang/cht/lang_ok.php b/lang/cht/lang_ok.php new file mode 100644 index 00000000..3e5ab7b4 --- /dev/null +++ b/lang/cht/lang_ok.php @@ -0,0 +1,24 @@ + "用戶註冊", + 'std_account_activated' => "註冊成功,但帳號未啟動!", + 'account_activated_note' => "你的帳號已成功創建。不過新用戶需要在管理員批准後才能成為註冊用戶並訪問站點。謝謝你的理解。", + 'account_activated_note_two' => "你的帳號已成功創建。不過新用戶需要在邀請者批准後才能成為註冊用戶並訪問站點。謝謝你的理解。", + 'std_signup_successful' => "註冊成功!", + 'std_confirmation_email_note' => "一封驗證郵件已發送到你指定的郵箱(" , + 'std_confirmation_email_note_end' => ")。在使用帳號前你必須按郵件內容指示通過驗證。如果你不這樣做,註冊的新帳號會在較短時間後被刪除。", + 'head_sysop_activation' => "系統操作員帳號啟動", + 'std_sysop_activation_note' => "

    系統操作員帳號成功啟動!

    \n", + 'std_auto_logged_in_note' => "

    你的帳號已成功啟動!你已自動登錄。你現在可以訪問首頁並使用你的帳號。

    \n", + 'std_cookies_disabled_note' => "

    你的帳號已成功啟動!但是,你沒有自動登錄。你可能需要打開瀏覽器的新視窗才能登錄。
    或者是因為你禁用了瀏覽器的cookies。你必須啟用cookies才能使用你的帳號。請啟用cookies然後再次嘗試登錄

    \n", + 'head_already_confirmed' => "已經通過驗證", + 'std_already_confirmed' => "

    已經通過驗證

    \n", + 'std_already_confirmed_note' => "

    該帳號已經通過驗證。你可以使用它來登錄

    \n", + 'head_signup_confirmation' => "註冊驗證", + 'std_account_confirmed' => "

    帳號成功通過驗證!

    \n", + 'std_read_rules_faq' => "

    在使用".$SITENAME."前,請務必先閱讀並熟悉站點的規則常見問題

    \n" +); + +?> diff --git a/lang/cht/lang_polloverview.php b/lang/cht/lang_polloverview.php new file mode 100644 index 00000000..c0034246 --- /dev/null +++ b/lang/cht/lang_polloverview.php @@ -0,0 +1,21 @@ + "錯誤", + 'head_poll_overview' => "投票概況", + 'text_polls_overview' => "投票概況", + 'col_id' => "ID", + 'col_added' => "添加時間", + 'col_question' => "問題", + 'text_no_users_voted' => "對不起...還沒有用戶投過票!", + 'text_no_poll_id' => "對不起...沒有該ID的投票!", + 'text_poll_question' => "投票問題", + 'col_option_no' => "編號", + 'col_options' => "選項", + 'text_polls_user_overview' => "投票用戶情況", + 'col_username' => "用戶名", + 'col_selection' => "選項", +); + +?> diff --git a/lang/cht/lang_polls.php b/lang/cht/lang_polls.php new file mode 100644 index 00000000..b4912b7f --- /dev/null +++ b/lang/cht/lang_polls.php @@ -0,0 +1,20 @@ + "錯誤", + 'std_permission_denied' => "你沒有該許可權", + 'std_delete_poll' => "刪除投票", + 'std_delete_poll_confirmation' => "你確定要刪除該投票嗎?點擊\n", + 'std_here_if_sure' => "這裏來確認。", + 'std_sorry' => "對不起...", + 'std_no_polls' => "暫時沒有投票!", + 'head_previous_polls' => "以前的投票", + 'text_previous_polls' => "以前的投票", + 'text_ago' => "以前", + 'text_edit' => "編輯", + 'text_delete' => "刪除", + 'text_votes' => "投票數:" +); + +?> \ No newline at end of file diff --git a/lang/cht/lang_preview.php b/lang/cht/lang_preview.php new file mode 100644 index 00000000..1ad3373d --- /dev/null +++ b/lang/cht/lang_preview.php @@ -0,0 +1,8 @@ + "預覽" +); + +?> \ No newline at end of file diff --git a/lang/cht/lang_promotionlink.php b/lang/cht/lang_promotionlink.php new file mode 100644 index 00000000..f620996f --- /dev/null +++ b/lang/cht/lang_promotionlink.php @@ -0,0 +1,29 @@ + "宣傳鏈結", + 'text_promotion_link' => "宣傳鏈結", + 'text_promotion_link_note_one' => "如果你很喜歡本站,想讓更多人知道它,你可以使用你的宣傳鏈結輔助說明我們宣傳。", + 'text_promotion_link_note_two' => "每個用戶都有唯一的確定其身份的宣傳鏈結,由系統隨機生成。當網友點擊你的宣傳鏈結時,他將會被轉向本站,同時系統會對你進行獎勵。", + 'text_you_would_get' => "你將獲得", + 'text_bonus_points' => "個魔力值,如果你的宣傳鏈結獲得一次來自一個未記錄的IP的點擊。", + 'text_seconds' => "秒內最多獎勵一次點擊。", + 'text_your_promotion_link_is' => "你的宣傳鏈結為:", + 'text_promotion_link_note_four' => "你可以通過各種方式將你的宣傳鏈結傳遞出去,以下是一些例子。", + 'col_type' => "類別", + 'col_code' => "程式碼", + 'col_result' => "效果", + 'col_note' => "註釋", + 'row_xhtml' => "XHTML 1.0", + 'text_xhtml_note' => "如果你有個人網站,你可以在頁面中使用XHTML程式碼。", + 'row_html' => "HTML 4.01", + 'text_html_note' => "如果你有個人網站,你可以在頁面中使用HTML程式碼。", + 'row_bbcode' => "BBCode論壇程式碼", + 'text_bbcode_note' => "大部分論壇程式(如vBulletin,Discuz!,PHPWind)支援名為BBCode的論壇程式碼。你可以將此程式碼放在你的簽名檔中。", + 'row_bbcode_userbar' => "論壇程式碼 - 個性條", + 'text_bbcode_userbar_note' => "抓取你的個性條。如果你在控制面板中將你的隱私等級設為“高”,則無法使用個性條。", + 'row_bbcode_userbar_alt' => "論壇程式碼 - 個性條(另一方式)", + 'text_bbcode_userbar_alt_note' => "當上面方式不可用時使用此方式。如果你在控制面板中將你的隱私等級設為“高”,則無法使用個性條。" +) +?> diff --git a/lang/cht/lang_recover.php b/lang/cht/lang_recover.php new file mode 100644 index 00000000..b4fbc013 --- /dev/null +++ b/lang/cht/lang_recover.php @@ -0,0 +1,39 @@ + "找回密碼失敗!(請看下麵)", + 'std_missing_email_address' => "你必須輸入郵箱地址!", + 'std_invalid_email_address' => "無效的郵箱地址!", + 'std_email_not_in_database' => "數據庫中不存在該郵箱地址。", + 'std_error' => "錯誤", + 'std_database_error' => "數據庫錯誤。請將該錯誤告訴管理員。", + 'std_unable_updating_user_data' => "無法更新用戶資料。請將該錯誤向管理員報告。", + 'text_recover_user' => "找回用戶名或密碼", + 'text_use_form_below' => "使用以下表格重置密碼,更新後的帳戶資訊會發送到你的郵箱。", + 'text_reply_to_confirmation_email' => "(請按郵件指示執行)", + 'text_note' => "注意:連續", + 'text_ban_ip' => "次錯誤嘗試會導致你的IP地址被禁用!", + 'row_registered_email' => "註冊郵箱:", + 'submit_recover_it' => "確定", + 'text_you_have' => "你還有", + 'text_remaining_tries' => "次嘗試機會。", + + 'mail_this_link' => "這個鏈接", + 'mail_here' => "這裏", + + 'mail_title' => " 網站密碼重置驗證", + 'mail_one' => "你好,

    你請求重置你在".$SITENAME."網站賬戶的密碼。
    該賬戶的郵箱地址為 ", + 'mail_two' => " 。

    發送請求的IP地址為 ", + 'mail_three' => ".

    如果你沒有發過該請求,請忽視本郵件。請勿回復本郵件。

    如果你的確發過該請求,請點擊這個鏈接來確認: ", + 'mail_four' => "
    確認後,你的密碼將被重置並通過另一封郵件發送給你。

    ------
    ".$SITENAME." 網站", + + 'mail_two_title' => " 網站賬戶信息", + 'mail_two_one' => "你好,

    依你的請求,我們給你的賬戶生成了新的密碼。

    以下是你的賬戶重置後的信息:

    用戶名:", + 'mail_two_two' => "
    密碼:", + 'mail_two_three' => "

    你可以從這裏登錄: ", + 'mail_two_four' => "

    登錄後你可以在控制面板-安全設定中修改密碼。
    ------
    ".$SITENAME." 網站", + 'text_select_lang' => "Select Site Language: ", + 'std_user_account_unconfirmed' => "該賬戶還未通過驗證。如果你沒有收到驗證郵件,試試重新發送驗證郵件。", +); +?> diff --git a/lang/cht/lang_report.php b/lang/cht/lang_report.php new file mode 100644 index 00000000..6c735c02 --- /dev/null +++ b/lang/cht/lang_report.php @@ -0,0 +1,41 @@ + "錯誤", + 'std_missing_reason' => "必須填寫原因!", + 'std_message' => "消息", + 'std_successfully_reported' => "舉報成功!", + 'std_already_reported_this' => "你已經舉報過該專案!", + 'std_sorry' => "對不起", + 'std_cannot_report_oneself' => "你不能舉報自己!", + 'std_invalid_user_id' => "無效的用戶ID!", + 'std_cannot_report' => "你不能舉報", + 'std_are_you_sure' => "確認", + 'text_are_you_sure_user' => "你確信用戶", + 'text_to_staff' => "違反了規則,要向管理組舉報?", + 'text_not_for_leechers' => "請不要用於舉報吸血鬼,系統有腳本對付他們。", + 'text_reason_is' => "原因(必需填寫) ", + 'submit_confirm' => "確信", + 'text_reason_note' => "請注意! 如果沒有理由亂舉報,你會受到警告。", + 'std_invalid_torrent_id' => "無效的種子ID!", + 'text_are_you_sure_torrent' => "你確信種子", + 'std_invalid_forum_id' => "無效的論壇帖子ID!", + 'text_are_you_sure_post' => "你確信論壇帖子(帖子ID:", + 'text_of_topic' => ";主題:", + 'text_of_torrent' => ";種子:", + 'text_of_offer' => ";候選:", + 'text_of_request' => ";求種:", + 'text_by' => ")的發佈者", + 'std_invalid_comment_id' => "無效的評論ID!", + 'std_orphaned_comment' => "評論不屬於任何內容。請向管理員報告此情況。", + 'text_are_you_sure_comment' => "你確信評論(ID:", + 'std_invalid_offer_id' => "無效的候選ID!", + 'text_are_you_sure_offer' => "你確信候選", + 'std_invalid_request_id' => "無效的求種ID!", + 'std_are_you_sure_request' => "你確信求種", + 'std_invalid_action' => "無效的行為。", + 'text_are_you_sure_subtitle' => "你確信字幕", +); + +?> diff --git a/lang/cht/lang_reports.php b/lang/cht/lang_reports.php new file mode 100644 index 00000000..04da36fe --- /dev/null +++ b/lang/cht/lang_reports.php @@ -0,0 +1,41 @@ + "噢哦!", + 'std_no_report' => "沒有舉報信息。", + 'head_reports' => "舉報", + 'text_reports' => "舉報", + 'col_added' => "時間", + 'col_reporter' => "舉報者", + 'col_reporting' => "舉報內容", + 'col_type' => "類型", + 'col_reason' => "原因", + 'col_dealt_with' => "處理", + 'col_action' => "行為", + 'text_yes' => "是", + 'text_no' => "否", + 'text_torrent' => "種子", + 'text_torrent_does_not_exist' => "種子不存在或已被刪除。", + 'text_user' => "用戶", + 'text_user_does_not_exist' => "用戶不存在或已被刪除。", + 'text_offer' => "候選", + 'text_offer_does_not_exist' => "候選不存在或已被刪除。", + 'text_forum_post' => "論壇帖子", + 'text_post_does_not_exist' => "論壇帖子不存在或已被刪除。", + 'text_post_id' => "帖子ID:", + 'text_of_topic' => ";主題:", + 'text_by' => ";作者:", + 'text_comment' => "評論", + 'text_comment_does_not_exist' => "評論不存在或已被刪除。", + 'text_of_torrent' => ";種子:", + 'text_of_offer' => ";候選:", + 'text_comment_id' => "評論ID:", + 'text_subtitle' => "字幕", + 'text_subtitle_does_not_exist' => "字幕不存在或已被刪除。", + 'text_for_torrent_id' => ";種子ID:", + 'submit_set_dealt' => "設為已處理", + 'submit_delete' => "刪除", +); + +?> diff --git a/lang/cht/lang_rules.php b/lang/cht/lang_rules.php new file mode 100644 index 00000000..054f62f0 --- /dev/null +++ b/lang/cht/lang_rules.php @@ -0,0 +1,8 @@ + "Ҏt" +); + +?> diff --git a/lang/cht/lang_sendmessage.php b/lang/cht/lang_sendmessage.php new file mode 100644 index 00000000..367cec1e --- /dev/null +++ b/lang/cht/lang_sendmessage.php @@ -0,0 +1,24 @@ + "錯誤", + 'std_permission_denied' => "沒有該許可權", + 'head_send_message' => "發送短訊", + 'text_mass_message' => "群發短訊給", + 'text_users' => "個用戶", + 'text_subject' => "主題:", + 'text_comment' => "評論:", + 'text_from' => "發送者:", + 'text_take_snapshot' => "使用快照:", + 'submit_send_it' => "發送", + 'submit_preview' => "預覽", + 'text_templates' => "模版:", + 'submit_use' => "使用", + 'std_no_user_id' => "沒有該ID的用戶。", + 'text_message_to' => "發送短訊給", + 'checkbox_delete_message_replying_to' => "回復後刪除", + 'checkbox_save_message_to_sendbox' => "保存到發件箱" +); + +?> \ No newline at end of file diff --git a/lang/cht/lang_settings.php b/lang/cht/lang_settings.php new file mode 100644 index 00000000..4d091f67 --- /dev/null +++ b/lang/cht/lang_settings.php @@ -0,0 +1,679 @@ + "是", + 'text_no' => "否", + 'text_website_settings' => "網站設定", + 'text_configuration_file_saving_note' => "在儲存設定前,請確保配置檔案和其目錄的存取許可權已正確配置。", + 'head_save_main_settings' => "儲存主要設定", + 'std_message' => "資訊", + 'std_click' => "點擊", + 'std_here' => "這裡", + 'std_to_go_back' => "傳回。", + 'head_save_basic_settings' => "儲存基礎設定", + 'head_save_code_settings' => "儲存程式碼設定", + 'head_save_bonus_settings' => "儲存魔力值設定", + 'head_save_account_settings' => "儲存賬號設定", + 'head_save_torrent_settings' => "儲存種子設定", + 'head_save_smtp_settings' => "儲存SMTP設定", + 'head_save_security_settings' => "儲存安全設定", + 'head_save_authority_settings' => "儲存許可權設定", + 'head_save_tweak_settings' => "儲存次要設定", + 'head_save_bot_settings' => "儲存機器人設定", + 'head_bot_settings' => "機器人設定", + 'head_tweak_settings' => "次要設定", + 'row_save_user_location' => "儲存用戶位置", + 'text_save_user_location_note' => "預設'否'。儲存用戶最近存取位置。", + 'row_log_user_ips' => "記錄用戶IP位址", + 'text_store_user_ips_note' => "預設'是'。當用戶改變IP位址時做記錄。", + 'row_kps_enabled' => "開啟魔力值系統", + 'text_enabled' => "開啟", + 'text_disabled_but_save' => "關閉但仍記錄數值", + 'text_disabled_no_save' => "完全關閉", + 'text_kps_note' => "預設‘開啟’。開啟或關閉魔力值系統,是否記錄數值。", + 'row_tracker_founded_date' => "網站創立時間", + 'text_tracker_founded_date_note' => "時間格式為'年年年年-月月-日日',將它設成網站創立的時間。", + 'row_save_settings' => "儲存設定", + 'submit_save_settings' => "儲存設定! (只需點擊一次)", + 'head_smtp_settings' => "SMTP設定", + 'row_mail_function_type' => "郵件函數類別", + 'head_security_settings' => "安全設定", + 'row_enable_ssl' => "使用SSL(網頁)", + 'row_enable_ssl_tracker' => "使用SSL(Tracker)", + 'text_optional' => "可選(允許用戶選取)", + 'text_ssl_note' => "預設'否'。你的HTTP伺服器需要做其餘的配置才能支援SSL。另外,你需要一個證書(從證書籤發機搆申請或自簽名)。", + 'row_enable_image_verification' => "開啟圖片驗證碼", + 'text_image_verification_note' => "預設'否'。用戶在註冊/登入/找回密碼過程中需要填寫驗證碼", + 'row_allow_email_change' => "允許用戶改變郵箱", + 'text_email_change_note' => "預設'否'。設為'否'將禁止用戶改變其郵箱位址。", + 'row_cheater_detection_level' => "作弊者偵測級別", + 'select_none' => "無", + 'select_conservative' => "保守", + 'select_normal' => "正常", + 'select_strict' => "嚴格", + 'select_paranoid' => "多疑", + 'text_cheater_detection_level_note' => "預設'正常'。請將它設為最適合你的網站的級別。級別越嚴格,越降低同伴彙報速度。", + 'text_never_suspect' => "永遠不懷疑", + 'text_or_above' => "及以上等級的用戶,即對他們不做偵測。預設", + 'row_max_ips' => "最多允許IP數", + 'text_max_ips_note' => "相同IP位址最大允許的註冊數。", + 'row_max_login_attemps' => "最大登入嘗試", + 'text_max_login_attemps_note' => "超過這個限制的IP位址將被禁用。", + 'head_authority_settings' => "許可權設定", + 'row_default_class' => "預設等級", + 'text_default_user_class' => "預設用戶等級:", + 'text_default' => " 預設為", + 'text_default_class_note' => "。註冊時獲得的等級。", + 'row_staff_member' => "管理組成員", + 'text_minimum_class' => "最低允許等級:", + 'text_staff_member_note' => "。被認為是管理組成員的等級,如可以檢視管理組郵箱。", + 'row_news_management' => "管理最近訊息", + 'text_news_management_note' => "。添加、編輯、移除最近訊息。", + 'row_post_funbox_item' => "發布趣味盒內容", + 'text_post_funbox_item_note' => "。允許發布新的趣味盒內容及編輯自己發布的趣味盒內容。", + 'row_funbox_management' => "管理趣味盒", + 'text_funbox_management_note' => "。編輯、移除、禁止任何人發布的趣味盒內容。", + 'row_shoutbox_management' => "管理群聊區", + 'text_shoutbox_management_note' => "。移除群聊區和救助區的資訊。", + 'row_poll_management' => "管理投票", + 'text_poll_management_note' => "。添加、編輯、移除投票。", + 'row_apply_for_links' => "申請鏈結", + 'text_apply_for_links_note' => "。申請在首頁的友情鏈結。", + 'row_link_management' => "管理友情鏈結", + 'text_link_management_note' => "。添加、編輯、移除友情鏈結。 ", + 'row_forum_post_management' => "管理論壇帖子", + 'text_forum_post_management_note' => "。編輯、移除、移動、置頂、鎖定論壇帖子。", + 'row_comment_management' => "管理評論", + 'text_comment_management_note' => "。編輯、移除種子和候選的評論。", + 'row_forum_management' => "管理論壇版塊", + 'text_forum_management_note' => "。添加、編輯、移除、移動論壇版塊。", + 'row_view_userlist' => "檢視用戶清單", + 'text_view_userlist_note' => "。檢視、搜索用戶清單。", + 'row_torrent_management' => "管理種子", + 'text_torrent_management_note' => "。編輯、移除種子,但無法將種子設為置頂或促銷。", + 'row_torrent_sticky' => "設定種子置頂", + 'text_torrent_sticky_note' => "。將種子設為置頂", + 'row_torrent_on_promotion' => "設定種子為促銷", + 'text_torrent_promotion_note' => "。將種子設為促銷。", + 'row_ask_for_reseed' => "要求續種", + 'text_ask_for_reseed_note' => "。當種子斷種時要求續種。", + 'row_view_nfo' => "檢視NFO", + 'text_view_nfo_note' => "。檢視NFO檔案。", + 'row_view_torrent_structure' => "檢視種子架構", + 'text_view_torrent_structure_note' => "。檢視種子檔案的架構。", + 'row_send_invite' => "傳送邀請", + 'text_send_invite_note' => "。傳送加入網站的邀請函給其他人。", + 'row_view_history' => "檢視曆史記錄", + 'text_view_history_note' => "。檢視其他用戶的評論和帖子曆史記錄。", + 'row_view_topten' => "檢視排行榜", + 'text_view_topten_note' => "。檢視排行榜。", + 'row_view_general_log' => "檢視一般日誌", + 'text_view_general_log_note' => "。檢視一般日誌,無法檢視機密日誌。", + 'row_view_confidential_log' => "檢視機密日誌", + 'text_view_confidential_log_note' => "。檢視機密日誌,如網站設定變更。", + 'row_view_user_confidential' => "檢視用戶機密檔案", + 'text_view_user_confidential_note' => "。檢視用戶的機密檔案,如IP位址,郵箱位址。", + 'row_view_user_torrent' => "檢視用戶種子曆史記錄", + 'text_view_user_torrent_note' => "。檢視用戶的種子曆史記錄,如下載種子的曆史記錄。
    只有用戶的隱私等級沒有設為’強‘時才生效。", + 'row_general_profile_management' => "管理用戶基本檔案", + 'text_general_profile_management_note' => "。改變用戶的基本檔案,但無法改變其中重要的項目,如郵箱位址、用戶名、上傳量、下載量、魔力值數。", + 'row_crucial_profile_management' => "管理用戶重要檔案資訊", + 'text_crucial_profile_management_note' => "。改變用戶所有檔案資訊,除了捐贈資訊外(只有", + 'text_can_manage_donation' => "能管理捐贈資訊)。", + 'row_upload_subtitle' => "上傳字幕", + 'text_upload_subtitle_note' => "。上傳種子對應的字幕。", + 'row_delete_own_subtitle' => "移除自己的字幕", + 'text_delete_own_subtitle_note' => "。移除自己上傳的字幕。", + 'row_subtitle_management' => "管理字幕", + 'text_subtitle_management' => "。移除任何字幕。", + 'row_update_external_info' => "更新外部資訊", + 'text_update_external_info_note' => "。更新外部資訊,如IMDb資訊。", + 'row_view_anonymous' => "檢視匿名者", + 'text_view_anonymous_note' => "。檢視匿名者的真實身份。", + 'row_be_anonymous' => "作為匿名", + 'text_be_anonymous_note' => "。在發布種子、上傳字幕時選取匿名。", + 'row_add_offer' => "添加候選", + 'text_add_offer_note' => "。允許發起候選。", + 'row_offer_management' => "管理候選", + 'text_offer_management_note' => "。通過、編輯、移除候選。", + 'row_upload_torrent' => "發布種子", + 'text_upload_torrent_note' => "。發布種子到種子區。", + 'row_upload_special_torrent' => "發布種子至特別區", + 'text_upload_special_torrent_note' => "。發布種子到特別區。", + 'row_move_torrent' => "移動種子", + 'text_move_torrent_note' => "。將種子在各區間移動。", + 'row_chronicle_management' => "管理史冊", + 'text_chronicle_management_note' => "。添加、編輯、移除史冊內容。", + 'row_view_invite' => "檢視邀請", + 'text_view_invite_note' => "。檢視用戶的邀請曆史記錄。", + 'row_buy_invites' => "購買邀請", + 'text_buy_invites_note' => "。允許在魔力值中心購買邀請。", + 'row_see_banned_torrents' => "檢視被禁止的種子", + 'text_see_banned_torrents_note' => "。檢視、下載被禁止的種子。", + 'row_vote_against_offers' => "對候選投反對票", + 'text_vote_against_offers_note' => "。對候選投反對票。", + 'row_allow_userbar' => "允許個性條", + 'text_allow_userbar_note' => "。允許用戶使用個性條。", + 'head_basic_settings' => "基礎設定", + 'row_site_name' => "網站名", + 'text_site_name_note' => "你的網站的名字。", + 'row_base_url' => "基礎URL", + 'text_it_should_be' => "應該設為", + 'text_base_url_note' => "。在末尾不要添加斜杠(/)!", + 'row_announce_url' => "Tracker位址", + 'row_mysql_host' => "MySQL主機", + 'text_mysql_host_note' => "請填寫你的MySQL主機位址。如果MySQL和HTTP伺服器執行在同一台伺服器上,請填寫'localhost'。否則請填寫執行MySQL的主機的IP位址。", + 'row_mysql_user' => "MySQL用戶名", + 'text_mysql_user_note' => "請填寫你的MySQL用戶名。MySQL預設用戶名是'root'。然而,基于安全考慮,建議你為此網站的資料程式庫另外建立一個用戶。", + 'row_mysql_password' => "MySQL密碼", + 'text_mysql_password_note' => "基于安全考慮,目前MySQL用戶密碼未察看在此。如果你要對基礎設定做修改,每次都必須填寫MySQL密碼。", + 'row_mysql_database_name' => "MySQL資料程式庫名", + 'text_mysql_database_name_note' => "請填寫你的網站的MySQL資料程式庫名字。", + 'head_code_settings' => "程式碼設定", + 'row_main_version' => "主版本", + 'text_main_version_note' => "程式碼的主版本。", + 'row_sub_version' => "次版本", + 'text_sub_version_note' => "程式碼的次版本", + 'row_release_date' => "發布時間", + 'text_release_date_note' => "時間格式為'年年年年-月月-日日'。程式碼發布的時間。", + 'row_authorize_to' => "被授權者", + 'text_authorize_to_note' => "被授權的網站或個人的名字。", + 'row_authorization_type' => "授權類別", + 'text_free' => "免費授權", + 'text_commercial' => "商業授權", + 'row_web_site' => "網站", + 'text_web_site_note' => "", + 'text_web_site_note_two' => "的網站URL。", + 'row_email' => "郵箱", + 'text_email_note_one' => "", + 'text_email_note_two' => "的聯繫郵箱。", + 'row_msn' => "MSN", + 'text_msn_note_one' => "", + 'text_msn_note_two' => "的聯繫MSN。", + 'row_qq' => "QQ", + 'text_qq_note_one' => "", + 'text_qq_note_two' => "的聯繫QQ。", + 'row_telephone' => "電話", + 'text_telephone_note_one' => "", + 'text_telephone_note_two' => "的聯繫電話。", + 'head_bonus_settings' => "魔力值設定", + 'text_bonus_by_seeding' => "做種獲得魔力值", + 'row_donor_gets_double' => "捐贈者加倍", + 'text_donor_gets' => "捐贈者通過做種能獲得正常情況", + 'text_times_as_many' => "倍的魔力值。預設'2'。設為'0'則將捐贈者和其他用戶同等對待。", + 'row_basic_seeding_bonus' => "基礎做種魔力值", + 'text_user_would_get' => "對于每個做種中的種子,用戶將獲得", + 'text_bonus_points' => "個魔力值,最多計算", + 'text_torrents_default' => "個種子。預設'1','7'。將魔力值數設為'0'來禁止此規則。", + 'row_seeding_formula' => "做種公式", + 'text_bonus_formula_one' => "每小時獲得的魔力值點數由下面的公式給出", + 'text_where' => "式中", + 'text_bonus_formula_two' => "A為中間變數
  • Ti為第i個種子的生存時間,即自種子發布起到現在所經過的時間, 單位是周", + 'text_bonus_formula_three' => "T0為參數。T0 = ", + 'text_bonus_formula_four' => "。預設為'4'", + 'text_bonus_formula_five' => "Si為第i個種子的大小,單位是GB", + 'text_bonus_formula_six' => "Ni為第i個種子目前的做種者數
  • N0為參數。N0 = ", + 'text_bonus_formula_seven' => "。預設為'7'", + 'text_bonus_formula_eight' => "B為1小時中用戶獲得的做種魔力值點數", + 'text_bonus_formula_nine' => "B0為參數,代表用戶1小時獲得魔力值的上限。B0 = ", + 'text_bonus_formula_ten' => "。預設為'100'", + 'text_bonus_formula_eleven' => "L為參數。L = ", + 'text_bonus_formula_twelve' => "。預設為'300'", + 'text_misc_ways_get_bonus' => "其他抓取方式", + 'row_uploading_torrent' => "發布新種子", + 'text_user_would_get' => "用戶將獲得", + 'text_uploading_torrent_note' => "個魔力值,如果他發布一個新種子。預設'15'。", + 'row_uploading_subtitle' => "上傳一個字幕", + 'text_uploading_subtitle_note' => "個魔力值,如果他上傳一個字幕。預設'5'。", + 'row_starting_topic' => "發布新主題", + 'text_starting_topic_note' => "個魔力值,如果他在論壇發布一個新的主題。預設'2'。", + 'row_making_post' => "回覆帖子", + 'text_making_post_note' => "個魔力值,如果他在論壇發布一個帖子。預設'1'。", + 'row_adding_comment' => "發布評論", + 'text_adding_comment_note' => "個魔力值,如果他對種子、候選發表了一次評論。預設'1'。", + 'row_voting_on_poll' => "參與調查投票", + 'text_voting_on_poll_note' => "個魔力值,如果他參與一次調查投票。預設'1'。", + 'row_voting_on_offer' => "參與候選投票", + 'text_voting_on_offer_note' => "個魔力值,如果他參與一次候選投票。預設'1'。", + 'row_voting_on_funbox' => "趣味盒投票", + 'text_voting_on_funbox_note' => "個魔力值,如果他參與一次趣味盒投票。預設'1'。", + 'row_saying_thanks' => "說謝謝", + 'text_giver_and_receiver_get' => "感謝表達者和接受者將分別得到", + 'text_saying_thanks_and' => "和", + 'text_saying_thanks_default' => "個魔力值。預設'0.5','0'。", + 'row_funbox_stuff_reward' => "趣味盒獎勵", + 'text_funbox_stuff_reward_note' => "個魔力值,如果他發布的趣味盒內容被評為“有趣”。預設'5'。", + 'text_things_cost_bonus' => "消耗魔力值的項目", + 'row_one_gb_credit' => "1.0 GB上傳量", + 'text_it_costs_user' => "用戶將失去", + 'text_one_gb_credit_note' => "個魔力值,如果他選取交換1.0 GB上傳量。預設'300'。", + 'row_five_gb_credit' => "5.0 GB上傳量", + 'text_five_gb_credit_note' => "個魔力值,如果他選取交換5.0 GB上傳量。預設'800'。", + 'row_ten_gb_credit' => "10.0 GB上傳量", + 'text_ten_gb_credit_note' => "個魔力值,如果他選取交換5.0 GB上傳量。預設'1200'。", + 'row_ratio_limit' => "分享率限制", + 'text_user_with_ratio' => "當用戶的分享率高于", + 'text_uploaded_amount_above' => "且其上傳量大于", + 'text_ratio_limit_default' => " GB時,他無法交換更多的上傳量。預設'6','50'。將分享率設為'0'來禁止此規則。", + 'row_buy_an_invite' => "購買邀請名額", + 'text_buy_an_invite_note' => "個魔力值,如果他選取交換一個邀請名額。預設'1000'。", + + 'row_custom_title' => "自訂頭銜", + 'text_custom_title_note' => "個魔力值,如果他選取自訂一次頭銜。預設'5000'。", + 'row_vip_status' => "貴賓待遇", + 'text_vip_status_note' => "個魔力值,如果他選取給自己換取一個月的貴賓待遇。預設'8000'。", + 'row_allow_giving_bonus_gift' => "允許魔力值贈送", + 'text_giving_bonus_gift_note' => "允許用戶間相互贈送魔力值。預設'是'。", + 'head_account_settings' => "賬號設定", + 'row_never_delete' => "永遠保留", + 'text_delete_inactive_accounts' => "移除不活躍賬號", + 'text_never_delete' => "及以上等級的賬號將永遠保留。預設", + 'row_never_delete_if_packed' => "封存后永遠保留", + 'text_never_delete_if_packed' => "及以上等級的賬號如果在封存后將永遠保留。預設", + 'row_delete_packed' => "移除封存賬號", + 'text_delete_packed_note_one' => "封存的賬號如果連續", + 'text_delete_packed_note_two' => "天不登入,將被移除。預設'400',設為'0'來禁止此規則。", + 'row_delete_unpacked' => "移除未封存賬號", + 'text_delete_unpacked_note_one' => "未封存的賬號如果連續", + 'text_delete_unpacked_note_two' => "天不登入,將被移除。預設'150',設為'0'來禁止此規則。", + 'row_delete_no_transfer' => "移除沒有流量的用戶", + 'text_delete_transfer_note_one' => "沒有流量的用戶(即上傳/下載資料都為0)如果連續", + 'text_delete_transfer_note_two' => "天不登入,或者註冊時間滿", + 'text_delete_transfer_note_three' => "天,將被移除賬號。預設'60','0'。
    注意:兩條規則是分開執行的。將其中任一規則設為‘0’禁止一條規則。", + 'text_user_promotion_demotion' => "用戶升級和降級", + 'row_ban_peasant_one' => "禁用", + 'row_ban_peasant_two' => "", + 'text_ban_peasant_note_one' => "如果在", + 'text_ban_peasant_note_two' => "天內仍未改善分享率,將被禁用。預設'30',設為'0'將馬上禁止。", + 'row_demoted_to_peasant_one' => "降級至", + 'row_demoted_to_peasant_two' => "", + 'text_demoted_peasant_note_one' => "用戶在以下任一情況下將被降為", + 'text_demoted_peasant_note_two' => ":", + 'text_downloaded_amount_larger_than' => "下載量超過", + 'text_and_ratio_below' => " GB且分享率低于", + 'text_demote_peasant_default_one' => "。預設'50','0.4'。", + 'text_demote_peasant_default_two' => "。預設'100','0.5'。", + 'text_demote_peasant_default_three' => "。預設'200','0.6'。", + 'text_demote_peasant_default_four' => "。預設'400','0.7'。", + 'text_demote_peasant_default_five' => "。預設'800','0.8'。", + 'text_demote_peasant_note' => "注意:不要改變下載量遞增的排序。將下載量設為'0'將禁止相應的規則。", + 'row_promote_to_one' => "升級至", + 'row_promote_to_two' => "", + 'text_member_longer_than' => "註冊時間大于", + 'text_downloaded_more_than' => "周,下載量大于", + 'text_with_ratio_above' => " GB且分享率大于", + 'text_be_promoted_to' => "的用戶,將升級為", + 'text_promote_to_default_one' => "。預設", + 'text_promote_to_default_two' => ",他將被降級。預設", + 'text_demote_with_ratio_below' => "然而,一旦用戶的分享率低于", + 'head_torrent_settings' => "種子設定", + 'row_promotion_rules' => "促銷規則", + 'text_promotion_rules_note' => "開啟一些自動促銷規則。程式碼待完善,如果不清楚用處請不要啟用。", + 'row_random_promotion' => "隨機促銷", + 'text_random_promotion_note_one' => "種子在發布時由系統自動隨機促銷。", + 'text_halfleech_chance_becoming' => "%的可能成為50%。預設'5'。", + 'text_free_chance_becoming' => "%的可能成為免費。預設'2'。", + 'text_twoup_chance_becoming' => "%的可能成為2X。預設'2'。", + 'text_freetwoup_chance_becoming' => "%的可能成為2X免費。預設'1'。", + 'text_twouphalfleech_chance_becoming' => "%的可能成為2x 50%。預設'0'。", + 'text_random_promotion_note_two' => "將值設為'0'來禁止相應規則。", + 'row_large_torrent_promotion' => "大體積種子促銷", + 'text_torrent_larger_than' => "體積大于", + 'text_gb_promoted_to' => " GB的種子將在發布時由系統自動設為", + 'text_by_system_upon_uploading' => "。", + 'text_large_torrent_promotion_note' => "預設'20','免費'。將種子體積設為'0'來禁止此規則。", + 'row_promotion_timeout' => "促銷時限", + 'text_promotion_timeout_note_one' => "種子的促銷將在一段時間后過期。", + 'text_halfleech_will_become' => "50%將變為", + 'text_after' => ",如果離發布時間已過去", + 'text_halfleech_timeout_default' => "天。預設'普通','150'。", + 'text_free_will_become' => "免費將變為", + 'text_free_timeout_default' => "天。預設'普通','60'。", + 'text_twoup_will_become' => "2X將變為", + 'text_twoup_timeout_default' => "天。預設'普通','60'。", + 'text_freetwoup_will_become' => "2X免費將變為", + 'text_freetwoup_timeout_default' => "天。預設'普通','30'。", + 'text_halfleechtwoup_will_become' => "2X 50%將變為", + 'text_halfleechtwoup_timeout_default' => "天。預設'普通','30'。", + 'text_normal_will_become' => "普通將變為", + 'text_normal_timeout_default' => "天。預設'普通','0'。", + 'text_promotion_timeout_note_two' => "將天數設為'0'來使促銷永遠不過期。", + 'row_auto_pick_hot' => "自動挑揀熱門種子", + 'text_torrents_uploaded_within' => "在發布后", + 'text_days_with_more_than' => "天內,如果種子的做種數曾超過", + 'text_be_picked_as_hot' => ",它將被記號為熱門。", + 'text_auto_pick_hot_default' => "預設'7','10'。將天數設為'0'來禁止此規則。", + 'row_uploader_get_double' => "發布者加倍上傳量", + 'text_torrent_uploader_gets' => "對于一個種子,它的發布者將得到正常情況", + 'text_times_uploading_credit' => "倍的上傳量。", + 'text_uploader_get_double_default' => "預設'1'。設為'1'則將發布者和其他用戶同等對待。", + 'row_delete_dead_torrents' => "移除斷種", + 'text_torrents_being_dead_for' => "連續斷種", + 'text_days_be_deleted' => "天的種子將被自動移除。預設'0'。設為'0'來禁止此規則。", + 'row_delete_dead_torrents_note' => "警告:種子一旦被移除將不可回復。如果你的網站可能長期關閉,一定要禁止這條規則。", + 'head_main_settings' => "主要設定", + 'row_site_online' => "網站在線", + 'text_site_online_note' => "預設'是'。在做站更新和其他維護時,你可能需要臨時關閉網站。注意:此時網站管理員仍能存取網站。", + 'row_enable_invite_system' => "開啟邀請系統", + 'text_invite_system_note' => "預設'是'。允許新用戶通過邀請系統註冊。", + 'row_initial_uploading_amount' => "初始上傳量", + 'text_initial_uploading_amount_note' => "單位為Byte,即1073741824為1 GB。新註冊用戶的初始上傳量。預設'0'。", + 'row_initial_invites' => "初始邀請名額", + 'text_initial_invites_note' => "新註冊用戶的初始邀請名額。預設'0'。", + 'row_invite_timeout' => "邀請過期", + 'text_invite_timeout_note' => "單位為天。邀請碼如在發出X天后仍未使用,將被移除。預設'7'。", + 'row_enable_registration_system' => "開啟註冊系統", + 'row_allow_registrations' => "若開啟,則允許自由註冊。預設'是'。", + 'row_verification_type' => "用戶驗證方式", + 'text_email' => "郵件", + 'text_admin' => "管理員", + 'text_automatically' => "自動", + 'text_verification_type_note' => "郵件:傳送驗證郵件;管理員:管理員手動;自動:註冊完成后自動啟動。", + 'row_enable_wait_system' => "開啟等待系統", + 'text_wait_system_note' => "預設'否'。開啟或關閉等待系統。參看常見問題。", + 'row_enable_max_slots_system' => "開啟連線數系統", + 'text_max_slots_system_note' => "預設'否'。開啟或關閉最大同時下載數限制。參看常見問題。", + 'row_show_polls' => "察看投票", + 'text_show_polls_note' => "預設'是'。在首頁察看投票。", + 'row_show_stats' => "察看網站資料", + 'text_show_stats_note' => "預設'是'。在首頁察看網站資料。", + 'row_show_last_posts' => "察看最近論壇帖子", + 'text_show_last_posts_note' => "預設'否'。在首頁察看最近的論壇帖子。", + 'row_show_last_torrents' => "察看最近種子", + 'text_show_last_torrents_note' => "預設'否'。在首頁察看最近發布的種子。", + 'row_show_server_load' => "察看伺服器負載", + 'text_show_server_load_note' => "預設'是'。在首頁察看伺服器負載。", + 'row_show_forum_stats' => "察看論壇資料", + 'text_show_forum_stats_note' => "預設'是'。在論壇頁面察看論壇資料。", + 'row_show_hot' => "察看熱門資源", + 'text_show_hot_note' => "預設'是'。在首頁察看熱門資源。熱門資源由系統自動挑揀或由管理組成員挑揀。", + 'row_show_classic' => "察看經典資源", + 'text_show_classic_note' => "預設'否'。在首頁察看經典資源。只有指定的總版主或以上等級能夠挑揀熱門資源。", + 'row_enable_imdb_system' => "開啟IMDb系統", + 'text_imdb_system_note' => "預設'是'。全域IMDb系統設定。", + 'row_enable_school_system' => "開啟學校系統", + 'text_school_system_note' => "預設'否'。如果對這項功能不清楚,不要開啟它。", + 'row_restrict_email_domain' => "限制郵箱域", + 'text_restrict_email_domain_note' => "預設'否'。設為'是'則只允許指定的郵箱域來註冊賬號。參看這裡。", + 'row_show_shoutbox' => "察看群聊區", + 'text_show_shoutbox_note' => "預設'是'。在首頁察看群聊區。", + 'row_show_funbox' => "察看趣味盒", + 'text_show_funbox_note' => "預設'否'。在首頁察看趣味盒。", + 'row_enable_offer_section' => "開啟候選區", + 'text_offer_section_note' => "預設'是'。開啟或關閉候選區。", + 'row_show_donation' => "開啟捐贈", + 'text_show_donation_note' => "察看捐贈資訊和捐贈排行榜。", + 'row_show_special_section' => "開啟特別區", + 'text_show_special_section_note' => "預設'否'。如果對這項功能不清楚,不要開啟它。", + 'row_weekend_free_uploading' => "周末自由發布", + 'text_weekend_free_uploading_note' => "預設'否'。設為'是'則允許所有用戶在周末自由發布種子(從周六12:00到周日23:59)。", + 'row_enable_helpbox' => "開啟求助區", + 'text_helpbox_note' => "預設'否'。設為'否'則禁止游客傳送訊息。", + 'row_enable_bitbucket' => "開啟上傳器", + 'text_bitbucket_note' => "預設'是'。設為'否'則禁止用戶上傳頭像到網站。", + 'row_enable_small_description' => "開啟副標題", + 'text_small_description_note' => "預設'是'。副標題察看在種子頁面種子標題下面。", + 'row_ptshow_naming_style' => "PTShow命名風格", + 'text_ptshow_naming_style_note' => "預設'否'。格式為[月月.日日.年年][初始名][中文名]。如果對這項功能不清楚,不要開啟它。", + 'row_use_external_forum' => "使用外部論壇", + 'text_use_external_forum_note' => "預設'否'。設為'是'使用外部論壇來代替內建論壇。", + 'row_external_forum_url' => "外部論壇URL", + 'text_external_forum_url_note' => "填寫類似這樣的位址:http://www.cc98.org", + 'row_torrents_category_mode' => "種子區分類型態", + 'text_torrents_category_mode_note' => "改變種子區的分類型態。", + 'row_special_category_mode' => "特殊區分類型態", + 'text_special_category_mode_note' => "改變特殊區的分類型態。", + 'row_default_site_language' => "預設網站語言", + 'text_default_site_language_note' => "改變登入頁面的預設語言。", + 'row_default_stylesheet' => "預設介面風格", + 'text_default_stylesheet_note' => "新註冊的用戶將預設使用這個介面風格。", + 'row_max_torrent_size' => "種子檔案體積限制", + 'text_max_torrent_size_note' => "單位為byte。預設1048576,即1 MB。", + 'row_announce_interval' => "彙報間隔", + 'text_announce_interval_note_one' => "單位為秒。Tracker將通知BitTorrent用戶端以這個間隔時間彙報資訊。需要注意的是,在實際情況中彙報間隔可能不同,因為BitTorrent客戶端可能無視這個通知,而且用戶可以選取手動連線Tracker。", + 'text_announce_default' => "預設:", + 'text_announce_default_default' => "預設'1800',即30分鐘", + 'text_for_torrents_older_than' => "發布時間超過", + 'text_days' => "天的種子:", + 'text_announce_two_default' => "預設'7','2700'(即45分鐘)。將天數設為'0'來禁止此規則", + 'text_announce_three_default' => "預設'30','3600'(即60分鐘)。將天數設為'0'來禁止此規則", + 'text_announce_interval_note_two' => "注意不要改變天數遞增的排序。
    越短的間隔將獲得越准確的同伴資訊更新,同時帶來更大的伺服器負載。", + 'row_cleanup_interval' => "自動清理間隔", + 'text_cleanup_interval_note_one' => "每XXX秒時間做自動清理工作(用戶升級、降級、添加做種魔力值等)。", + 'text_priority_one' => "優先級1:", + 'text_priority_one_note' => "更新同伴狀態;添加做種魔力值。預設'900',即15分鐘。", + 'text_priority_two' => "優先級2:", + 'text_priority_two_note' => "更新種子可見性。預設'1800',即30分鐘。", + 'text_priority_three' => "優先級3:", + 'text_priority_three_note' => "更新種子做種數、下載數、評論數;更新論壇帖子/主題數;移除過期的候選;種子促銷到期;自動挑揀熱門種子。預設'3600',即60分鐘。", + 'text_priority_four' => "優先級4:", + 'text_priority_four_note' => "移除未通過驗證的賬號,過期的登入嘗試記錄,過期的邀請碼和圖片驗證碼;清理用戶賬號(移除不活躍賬號,賬號升級、降級、禁用);傳送上傳的圖片;更新用戶總做種和下載時間。預設'43200',即24小時。", + 'text_priority_five' => "優先級5:", + 'text_priority_five_note' => "移除種子檔案不存在的種子;鎖定論壇的古老主題;移除古老的舉報資訊。預設'648000',即15天。", + 'text_cleanup_interval_note_two' => "注意不要改變時間遞增的排序。", + 'row_signup_timeout' => "註冊逾時", + 'text_signup_timeout_note' => "單位為秒。如用戶在提交註冊資訊XXX秒后未通過驗證,其賬號將被移除。預設'259200',即3天。", + 'row_min_offer_votes' => "最低候選投票", + 'text_min_offer_votes_note' => "當候選的支援票比反對票多XXX票時,候選被通過。預設'15'。", + 'row_offer_vote_timeout' => "候選投票逾時", + 'text_offer_vote_timeout_note' => "單位為秒。如候選在發布XXX秒后未被通過,它將被移除。預設為'259200',即72小時。設為'0'則不設定逾時限制。", + 'row_offer_upload_timeout' => "候選發布逾時", + 'text_offer_upload_timeout_note' => "單位為秒。如候選在通過后XXX秒內未發布種子,它將被移除。預設'86400',即24小時。設為'0'則不設定逾時限制。", + 'row_max_subtitle_size' => "最大字幕體積", + 'text_max_subtitle_size_note' => "單位為byte。允許上傳的最大字幕體積。預設3145728,即3 MB。設為'0'則不設定體積限制。", + 'row_posts_per_page' => "預設每頁帖子數", + 'text_posts_per_page_note' => "論壇主題每頁察看的帖子數。預設'10'。
    注意:用戶的個人設定將覆寫系統預設設定。", + 'row_topics_per_page' => "預設每頁主題數", + 'text_topics_per_page_note' => "論壇每頁察看的主題數。預設'20'。
    注意:用戶的個人設定將覆寫系統預設設定。", + 'row_number_of_news' => "最近訊息條數", + 'text_number_of_news_note' => "在首先察看的最近訊息條數。預設'3'。", + 'row_torrent_dead_time' => "最大種子斷種時間", + 'text_torrent_dead_time_note' => "單位為秒。當種子連續XXX秒沒有任何做種者時,它將被記號為斷種。預設'21600',即6小時。", + 'row_max_users' => "最大用戶數", + 'text_max_users' => "當這個限制達到時,自由註冊和邀請註冊都將關閉。", + 'row_https_announce_url' => "HTTPS Tracker位址", + 'text_https_announce_url_note' => "如果你的網站為HTTP和HTTPS使用同樣的位址,請留空。應該設為", + 'row_site_accountant_userid' => "網站會計用戶ID", + 'text_site_accountant_userid_note' => "填寫數字,如'1'。捐贈者將傳送捐贈資訊短訊至此ID的用戶。", + 'row_alipay_account' => "支付寶賬號", + 'text_alipal_account_note' => "你用于接收捐贈的支付寶賬號,如'yourname@gmail.com'。如果沒有,請留空。", + 'row_paypal_account' => "PayPal賬號", + 'text_paypal_account_note' => "你用于接收捐贈的PayPal賬號,如'yourname@gmail.com'。如果沒有,請留空。", + 'row_site_email' => "網站郵箱位址", + 'text_site_email_note' => "網站的郵箱位址", + 'row_report_email' => "報告郵箱位址", + 'text_report_email_note' => "用戶報告的郵箱位址", + 'row_site_slogan' => "網站標語", + 'text_site_slogan_note' => "網站的標語", + 'row_icp_license' => "ICP備案信息", + 'text_icp_license_note' => "這是適用于在中國運營的網站的許可證制度。如果沒有,請留空。", + 'row_torrent_directory' => "種子目錄", + 'text_torrent_directory' => "預設'torrents'。不要在末尾添加斜杠(/)!", + 'row_bitbucket_directory' => "上傳器目錄", + 'text_bitbucket_directory_note' => "預設'bitbucket'。不要在末尾添加斜杠(/)!", + 'row_cache_directory' => "緩衝區目錄", + 'text_cache_directory_note' => "預設'cache'。不要在末尾添加斜杠(/)!", + 'row_torrent_name_prefix' => "種子檔名前置", + 'text_torrent_name_prefix_note' => "在從網站下載的種子檔案的檔名前添加前置。預設'[Nexus]'。不要使用非法的檔名字元!", + 'row_peering_time_calculation' => "同伴時間開始計算時間", + 'text_peering_time_calculation_note' => "請留空。該設定因曆史原因保留。", + 'row_new_subtitle_id' => "新的字幕ID", + 'text_new_subtitle_id_note' => "請保持'0'。該設定因曆史原因保留。", + 'head_website_settings' => "網站設定", + 'row_basic_settings' => "基礎設定", + 'submit_basic_settings' => "基礎設定", + 'text_basic_settings_note' => "設定最基礎的項目,如資料程式庫,網站名等。如果對設定項目的功能不清楚,請不要做任何修改。
    基礎設定出錯可能導致網站無法執行。", + 'row_main_settings' => "主要設定", + 'submit_main_settings' => "主要設定", + 'text_main_settings_note' => "配置你的網站各種主要項目。", + 'row_smtp_settings' => "SMTP設定", + 'submit_smtp_settings' => "SMTP設定", + 'text_smtp_settings_note' => "配置網站SMTP郵件伺服器。", + 'row_security_settings' => "安全設定", + 'submit_security_settings' => "安全設定", + 'text_security_settings_note' => "管理網站的安全。", + 'row_authority_settings' => "許可權設定", + 'submit_authority_settings' => "許可權設定", + 'text_authority_settings_note' => "配置各等級的用戶所具有的許可權。", + 'row_tweak_settings' => "次要設定", + 'submit_tweak_settings' => "次要設定", + 'text_tweak_settings_note' => "配置你的網站的次要項目。", + 'row_bonus_settings' => "魔力值設定", + 'submit_bonus_settings' => "魔力值設定", + 'text_bonus_settings_note' => "配置魔力值的抓取和使用。", + 'row_account_settings' => "賬號設定", + 'submit_account_settings' => "賬號設定", + 'text_account_settings_settings' => "配置賬號的升級,降級,移除等。", + 'row_torrents_settings' => "種子設定", + 'submit_torrents_settings' => "種子設定", + 'text_torrents_settings_note' => "配置種子的促銷,篩選等。", + 'row_bots_settings' => "機器人設定", + 'submit_bots_settings' => "機器人設定", + 'text_bots_settings_note' => "管理網站的機器人。如果對設定項目的功能不清楚,請不要做任何修改。", + 'row_code_settings' => "程式碼設定", + 'submit_code_settings' => "程式碼設定", + 'text_code_settings_note' => "配置程式碼的版本。如果對設定項目的功能不清楚,請不要做任何修改。", + 'text_smtp_default' => "預設(使用PHP預設郵件函數)", + 'text_smtp_advanced' => "進階(使用PHP預設郵件函數,添加其餘的頭資訊。有助于防止被視為垃圾郵件過濾)", + 'text_smtp_external' => "外部(使用外部SMTP伺服器)", + 'text_setting_for_advanced_type' => "進階類別設定", + 'row_smtp_host' => "SMTP主機", + 'text_smtp_host_note' => "預設:'localhost'", + 'row_smtp_port' => "SMTP通訊埠", + 'text_smtp_port_note' => "預設:25", + 'row_smtp_sendmail_from' => "SMTP郵件傳送來源", + 'text_smtp_sendmail_from_note' => "預設:", + 'row_smtp_sendmail_path' => "Sendmail路徑", + 'text_smtp_sendmail_path_note' => "請在php.ini中設定好sendmail_path", + 'text_setting_for_external_type' => "外部類別設定", + 'row_outgoing_mail_address' => "SMTP位址", + 'row_outgoing_mail_port' => "SMTP通訊埠", + 'text_outgoing_mail_address_note' => "輔助說明: smtp.yourisp.com", + 'text_outgoing_mail_port_note' => "輔助說明: 25", + 'row_smtp_account_name' => "用戶名", + 'text_smtp_account_name_note' => "輔助說明: yourname@yourisp.com", + 'row_smtp_account_password' => "用戶密碼", + 'text_smtp_account_password_note' => "輔助說明:匯入你的密碼", + 'text_mail_test_note' => "如何測試傳送郵件功能?很簡單,點擊", + 'text_here' => "這裡", + 'std_error' => "錯誤", + 'std_mysql_connect_error' => "無法連線MySQL,請檢查設定。", + 'row_enable_location' => "顯示地址", + 'text_enable_location_note' => "默認'否'。根據用戶的IP地址顯示其地理位置。如果你沒有導入IP地址庫,不要啟用本項。", + 'row_torrents_per_page' => "默認每頁種子數", + 'row_title_keywords' => "頁面標題關鍵字", + 'text_title_keywords_note' => "察看在頁面標題末尾。填寫這些關鍵字能輔助說明搜索引擎找到你的網站。多個關鍵字間用'|'分隔,如'BT|下載|電影'。如果想保持清爽的頁面標題,請留空。", + 'row_meta_keywords' => "Meta關鍵字", + 'text_meta_keywords_note' => "出現在頁面頭部Meta標簽中。填寫與你網站相關的關鍵字。多個關鍵字間用半角逗點','分隔,如'BT, 下載, 電影'.", + 'row_meta_description' => "Meta說明", + 'text_meta_description_note' => "出現在頁面頭部Meta標簽中。填寫你網站的概要和說明。", + 'row_bonus_gift_tax' => "魔力值贈送稅收", + 'text_system_charges' => "系統向禮物接收者索取", + 'text_bonus_points_plus' => "個魔力值 + 贈送額的", + 'text_bonus_gift_tax_note' => "%的魔力值作為稅收。如設為'5','10'時,禮物贈送者傳送100個魔力值,接收者只獲得85個。預設'5','10'。
    注意:兩條規則是分開執行的,將兩個值都設為'0'才能完全免除稅收。", + 'row_see_sql_debug' => "檢視除錯資訊", + 'text_allow' => "允許", + 'text_see_sql_list' => "及以上等級的用戶檢視除錯資訊(在頁面底部檢視SQL敘述清單,PHP報告資訊)。預設", + 'text_smtp_none' => "無(將徹底禁止郵件發送功能)", + 'row_attachment_settings' => "屬裝置設定", + 'submit_attachment_settings' => "屬裝置設定", + 'text_attachment_settings_note' => "配置屬裝置。", + 'head_attachment_settings' => "屬裝置設定", + 'row_enable_attachment' => "開啟屬裝置", + 'text_enable_attachment_note' => "全域屬裝置設定。如設為'否',所有人都無法上傳屬裝置。", + 'row_save_directory' => "屬裝置儲存位置", + 'row_http_directory' => "屬裝置URL位址", + 'text_http_directory_note' => "可為目前URL下的相對位址或http://開頭的絕對位址。不要在末尾添加斜杠(/)!預設'attachments'。", + 'row_attachment_authority' => "屬裝置許可權", + 'text_can_upload_at_most' => "及以上等級用戶在24小時內最多允許上傳", + 'text_file_size_below' => "個屬裝置,每個屬裝置檔案大小不超過", + 'text_with_extension_name' => "KB,允許的檔案副檔名為", + 'text_authority_default_one_one' => "。預設", + 'text_authority_default_one_two' => ",'5','256','jpeg, jpg, png, gif'。", + 'text_authority_default_two_one' => "。預設", + 'text_authority_default_two_two' => ",'10','512','torrent, zip, rar, 7z, gzip, gz'。", + 'text_authority_default_three_one' => "。預設", + 'text_authority_default_three_two' => ",'20','1024','mp3, oga, ogg, flv'。", + 'text_authority_default_four_one' => "。預設", + 'text_authority_default_four_two' => ",'500','2048',''。", + 'text_attachment_authority_note_two' => "注意:
    • 不要改變用戶等級、檔案數限制、檔案大小限制遞增的排序。
    • 將檔案大小限制設為'0',檔案數限制設為'0',允許的檔案副檔名設為''(即留空)才能禁止相應規則。
    • 高等級的用戶自動繼承低等級用戶的許可權,所以必要在多條規則中填寫相同的允許檔案副檔名。
    • 多個允許的檔案副檔名用半角逗點','分隔。
    • 無論如何設定,沒有任何人能上傳檔案大小超過5 MB或副檔名為'exe, com, bat, msi'之一的屬裝置。
    ", + 'text_attachment_authority_note_one' => "根據用戶等級定義其擁有的上傳屬裝置的許可權。", + 'text_save_directory_note' => "你儲存屬裝置的伺服器路徑。請確保目錄存取許可權已設定正確(777)。不要在末尾添加斜杠(/)!預設'./attachments'。", + 'row_save_directory_type' => "儲存屬裝置方式", + 'text_one_directory' => "全部檔案存入同一目錄", + 'text_directories_by_monthes' => "按月份存入不同目錄", + 'text_directories_by_days' => "按天存入不同目錄", + 'text_save_directory_type_note' => "此設定只影響新上傳的屬裝置。預設'按月份存入不同目錄'。", + 'row_image_thumbnails' => "圖片縮略圖", + 'text_no_thumbnail' => "1. 不啟用縮略圖功能。只儲存初始圖片。", + 'text_create_thumbnail' => "2. 為大小大的圖片生成縮略圖,同時儲存縮略圖和初始圖片。", + 'text_resize_big_image' => "3. 縮小大小大的圖片,只儲存縮略圖。", + 'text_image_thumbnail_note' => "預設'2'。", + 'row_thumbnail_quality' => "縮略圖品質", + 'text_thumbnail_quality_note' => "設定縮略圖的品質。該參數範圍為1至100內的整數。數值越大,縮略圖品質越高,同時檔案大小越大。預設'80'。", + 'row_thumbnail_size' => "縮略圖大小", + 'text_thumbnail_size_note' => "寬度 * 高度,單位為像素。為寬度高度超過此限制的圖片生成縮略圖。預設'500','500'。", + 'row_watermark' => "水印位置", + 'text_no_watermark' => "不啟用水印功能", + 'text_left_top' => "#1", + 'text_top' => "#2", + 'text_right_top' => "#3", + 'text_left' => "#4", + 'text_center' => "#5", + 'text_right' => "#6", + 'text_left_bottom' => "#7", + 'text_bottom' => "#8", + 'text_right_bottom' => "#9", + 'text_random_position' => "隨機位置", + 'text_watermark_note' => "為上傳的圖片檔案(JPEG/PNG/GIF)添加水印。你可以替代水印PNG圖片檔案'pic/watermark.png'以實現不同的水印效果。選取水印添加的位置。不支援給動畫GIF檔案添加水印。預設'不啟用水印功能'。", + 'row_image_size_for_watermark' => "水印添加條件", + 'text_watermark_size_note' => "寬度 * 高度,單位為像素。為寬度高度都超過此限制的圖片添加水印。預設'300','300'。", + 'row_jpeg_quality_with_watermark' => "JPEG圖片水印品質", + 'text_jpeg_watermark_quality_note' => "添加水印后的JPEG檔案的圖片品質。該參數範圍為1至100內的整數。數值越大,縮略圖品質越高,同時檔案大小越大。預設'85'。", + 'head_save_attachment_settings' => "儲存屬裝置設定", + 'row_css_date' => "CSS日期", + 'text_css_date' => "時間格式為'年年年年月月日日時時分分',如'200911030110'。修改此項目能輔助說明強制用戶的瀏覽器更新CSS緩衝區。當你對CSS檔案做一些修改后可能需要用到此項。如果不明白此項用處,請留空。預設為空。", + 'row_alternative_thumbnail_size' => "縮略圖另一尺寸", + 'text_alternative_thumbnail_size_note' => "用戶能選取縮略圖另外一種尺寸。預設'180','135'。", + 'row_add_watermark_to_thumbnail' => "給縮略圖添加水印", + 'text_watermark_to_thumbnail_note' => "選取是否給縮略圖也添加水印。預設'否'。當全域縮略圖設定啟用時被項才能生效。", + 'row_advertisement_settings' => "廣告設定", + 'submit_advertisement_settings' => "廣告設定", + 'text_advertisement_settings_note' => "配置你網站中的廣告。", + 'head_advertisement_settings' => "廣告設定", + 'row_enable_advertisement' => "啟用廣告", + 'text_enable_advertisement_note' => "全域廣告設定。", + 'row_no_advertisement' => "可關閉廣告", + 'text_can_choose_no_advertisement' => "及以上等級用戶可在控制面板中選取不察看廣告。預設", + 'row_bonus_no_advertisement' => "魔力值交換可關閉廣告", + 'text_no_advertisement_with_bonus' => "及以上等級用戶可用魔力值換取一定期限內不察看廣告的許可權。預設", + 'row_no_advertisement_bonus_price' => "無廣告魔力值", + 'text_bonus_points_to_buy' => "個魔力值,如果他選取交換", + 'text_days_without_advertisements' => "天不察看廣告的許可權。預設'10000','15'。", + 'row_click_advertisement_bonus' => "點擊廣告抓取魔力值", + 'text_points_clicking_on_advertisements' => "個魔力值,如果他第一次點擊某個廣告。設為'0'來禁用此規則。
    注意:一些廣告服務(如Google Adsense)禁止網站激勵用戶點擊廣告的行為。", + 'head_save_advertisement_settings' => "儲存廣告設定", + 'row_enable_tooltip' => "允許懸浮輔助說明", + 'text_enable_tooltip_note' => "是否允許用戶使用懸浮輔助說明功能。預設'是'。", + 'text_thirtypercentleech_chance_becoming' => "%的可能成為30%。預設'0'。", + 'text_thirtypercentleech_will_become' => "30%將變為", + 'text_thirtypercentleech_timeout_default' => "天。預設'普通','30'。", + 'row_site_logo' => "網站logo", + 'text_site_logo_note' => "網站logo圖片檔案。建議圖片大小為220x70。如不填寫,將使用文字。預設''。", + 'row_promotion_link_click' => "宣傳鏈結點擊", + 'text_promotion_link_note_one' => "個魔力值,如果他的宣傳鏈結獲得一次來自一個未記錄的IP的點擊。", + 'text_promotion_link_note_two' => "秒內最多獎勵一次點擊。將魔力值設為'0'來禁用宣傳鏈結功能。預設'0','600'。", + 'row_promotion_link_example_image' => "宣傳鏈結示例圖片", + 'text_promotion_link_example_note' => "在宣傳鏈結介紹示例中的圖片。必須使用相對地址,如'pic/prolink.png'.", + 'row_enable_nfo' => "啟用NFO", + 'text_enable_nfo_note' => "預設'是'。全域NFO設定。", + 'row_web_analytics_code' => "網站統計程式碼", + 'text_web_analytics_code_note' => "填寫由第三方(如Google Analytics)提供的網站統計程式碼。如無請留空。
    注意:請確保程式碼安全可信。", + 'row_enable_email_notification' => "允許用戶收取郵件輔助說明", + 'text_email_notification_note' => "是否允許用戶在收取新短訊、評論等時候收到郵件輔助說明。", + 'text_users_get' => "首次升級至此等級的用戶將獲得", + 'text_invitations_default' => "個邀請名額。預設", +); + +?> diff --git a/lang/cht/lang_shoutbox.php b/lang/cht/lang_shoutbox.php new file mode 100644 index 00000000..9f667552 --- /dev/null +++ b/lang/cht/lang_shoutbox.php @@ -0,0 +1,15 @@ + "刪", + 'std_access_denied' => "拒絕訪問", + 'std_access_denied_note' => "游客不允許查看該頁面。", + 'text_to_guest' => "對游客說", + 'text_guest' => "游客", + 'text_ago' => "前", + 'text_helpbox_disabled' => "求助區當前關閉中。你在搞什麼鬼?", + 'text_no_permission_to_shoutbox' => "你沒有在群聊區發言的權力。你在搞什麼鬼?", +); + +?> diff --git a/lang/cht/lang_signup.php b/lang/cht/lang_signup.php new file mode 100644 index 00000000..3b4bf17e --- /dev/null +++ b/lang/cht/lang_signup.php @@ -0,0 +1,35 @@ + "註冊", + 'text_cookies_note' => "注意:你必須啟用cookies才能註冊或登錄。", + 'row_desired_username' => "用戶名", + 'text_allowed_characters' => "有效字元:(a-z), (A-Z), (0-9),至多12個字元", + 'row_pick_a_password' => "輸入密碼", + 'text_minimum_six_characters' => "至少6個字元。", + 'row_enter_password_again' => "再次輸入密碼", + 'row_question' => "密碼丟失問題", + 'row_enter_hint_answer' => "輸入答案", + 'text_hint_note' => "用於找回忘記的密碼。至少6個字元。", + 'row_email_address' => "郵箱地址", + 'text_email_note' => "你只能使用以下郵箱註冊:", + 'row_country' => "國家/地區", + 'row_gender' => "性別", + 'radio_male' => "男 ", + 'radio_female' => "女 ", + 'row_verification' => "確認", + 'checkbox_read_rules' => "我已閱讀並同意遵守站點規則。", + 'checkbox_read_faq' => "我會在提問前先查看常見問題。", + 'checkbox_age' => "我已滿13周歲。", + 'text_all_fields_required' => "所有區域都必須填寫!", + 'submit_sign_up' => "註冊!(只需點擊一次)", + 'select_none_selected' => "未選", + 'text_select_lang' => "Select Site Language: ", + 'row_school' => "學校", + 'head_invite_signup' => "受邀注冊", + 'std_uninvited' => "邀請碼錯誤,無法注冊。", + 'std_error' => "錯誤", +); + +?> diff --git a/lang/cht/lang_staff.php b/lang/cht/lang_staff.php new file mode 100644 index 00000000..4b612a2b --- /dev/null +++ b/lang/cht/lang_staff.php @@ -0,0 +1,33 @@ + "管理組", + 'text_staff' => "管理組", + 'text_firstline_support' => "一線客服", + 'text_firstline_support_note' => "普通問題請咨詢以下用戶。注意:他們幫助你所花的時間和精力都是無回報的,請對他們表示感謝!", + 'text_movie_critics' => "批評家", + 'text_movie_critics_note' => "批評家負責挑選優秀的電影、音樂等資源,撰寫點評,獎勵用戶的評論。總之,致力于創造交流的良好氛圍。", + 'text_general_staff' => "常規管理員", + 'text_general_staff_note' => "所有軟件和常見問題中已解答的問題將被無視。

    點擊這里發短訊給管理組。", + 'text_username' => "用戶名", + 'text_online_or_offline' => "是否在線", + 'text_country' => "國家", + 'text_contact' => "聯系", + 'text_language' => "語言", + 'text_support_for' => "幫助內容", + 'text_responsible_for' => "負責內容", + 'text_duties' => "職責", + 'title_online' => "在線", + 'title_offline' => "不在線", + 'title_send_pm' => "發送短訊", + 'text_vip' => "VIP", + 'text_vip_note' => "VIP資格只授予對".$SITENAME."做出過特殊貢獻的用戶。如曾經的管理組成員。", + 'text_reason' => "原因", + 'text_apply_for_it' => "申請加入", + 'text_forum_moderators' => "論壇版主", + 'text_forum_moderators_note' => "論壇版主負責論壇的日常管理。", + 'text_forums' => "版塊" +); + +?> diff --git a/lang/cht/lang_staffbox.php b/lang/cht/lang_staffbox.php new file mode 100644 index 00000000..3490f5de --- /dev/null +++ b/lang/cht/lang_staffbox.php @@ -0,0 +1,34 @@ + "管理組信箱", + 'text_staff_pm' => "管理組信箱", + 'std_sorry' => "對不起", + 'std_no_messages_yet' => "暫時沒有短訊!", + 'col_subject' => "主題", + 'col_sender' => "發訊者", + 'col_added' => "時間", + 'col_answered' => "回復", + 'col_action' => "行為", + 'text_yes' => "是", + 'text_no' => "否", + 'submit_set_answered' => "設為已回復", + 'submit_delete' => "刪除", + 'text_system' => "系統", + 'head_view_staff_pm' => "查看管理組信箱", + 'col_from' => "自", + 'col_date' => "日期", + 'col_answered_by' => "回復者", + 'text_reply' => "回復", + 'text_mark_answered' => "設為已回復", + 'text_delete' => "刪除", + 'std_error' => "錯誤", + 'std_no_user_id' => "沒有此ID的用戶。", + 'head_answer_to_staff_pm' => "回復管理組信息", + 'text_answering_to' => "回復", + 'text_sent_by' => " - 來自", + 'std_body_is_empty' => "回復不能為空白!", +); + +?> diff --git a/lang/cht/lang_subtitles.php b/lang/cht/lang_subtitles.php new file mode 100644 index 00000000..d99fb6ba --- /dev/null +++ b/lang/cht/lang_subtitles.php @@ -0,0 +1,64 @@ + "錯誤!", + 'std_must_login_to_upload' => "必須登錄後才能上傳字幕", + 'head_subtitles' => "字幕區", + 'std_nothing_received' => "上傳失敗!

    沒有接受到檔!選擇的檔可能太大。", + 'std_subs_too_big' => "上傳失敗!

    字幕文件太大!", + 'std_wrong_subs_format' => "上傳失敗!

    我不允許保存你上傳的檔:|", + 'std_file_already_exists' => "上傳失敗!

    已存在該文件", + 'std_missing_torrent_id' => "上傳失敗!

    必須填寫種子ID!", + 'std_invalid_torrent_id' => "上傳失敗!

    種子ID無效!", + 'std_no_permission_uploading_others' => "上傳失敗!

    你所在的用戶等級不能上傳他人種子的字幕!", + 'std_file_same_name_exists' => "該檔案名的文件已存在", + 'std_must_choose_language' => "上傳失敗!

    請選擇字幕的語言!", + 'std_failed_moving_file' => "無法移動上傳的文件。請將該問題反應給管理員。", + 'std_this_file' => "該檔案名", + 'std_is_invalid' =>"在檔夾中無效。", + 'text_upload_subtitles' => "上傳字幕 - 總上傳量", + 'text_rules' => "規則:", + 'text_rule_one' => "1.上傳的檔請使用英文檔案名!", + 'text_rule_two' => "2.字幕必須與視頻檔同步。否則純粹是浪費空間。", + 'text_rule_three' => "3.標題中並不需要字幕的語言標記,因為已經有國旗標記。不過,如果你覺得需要也可以在檔案名末尾添加,如chs。", + 'text_rule_four' => "4.如果你上傳的字幕是合集,請將它們打包為zip或rar後再上傳。", + 'text_rule_five' => "5.如果你上傳的字幕是Vobsub格式(idx+sub),請打包為zip或rar後再上傳。", + 'text_rule_six' => "6.如果你上傳的字幕是proper(正確版本)或re-synced(重新調校)的字幕,請在字幕檔案名末尾添加proper或resynced標記。", + 'text_red_star_required' => "

    紅星號(*)標記的區域必須填寫

    \n", + 'text_uploading_subtitles_for_torrent' => "為種子上傳字幕:", + 'row_file' => "文件", + 'text_maximum_file_size' => "檔最大限制:", + 'row_torrent_id' => "種子ID", + 'text_torrent_id_note' => "(種子詳情頁面網址末尾的數位。
    如 http://".$BASEURL."/details.php?id=16 數字16即種子ID)", + 'row_title' => "標題", + 'text_title_note' => "(可選,不填則使用種子檔案名)", + 'row_language' => "語言", + 'select_choose_one' => "(請選擇)", + 'row_show_uploader' => "匿名上傳", + 'hide_uploader_note' => "不要顯示我的用戶名。", + 'submit_upload_file' => "上傳文件", + 'submit_reset' => "重置", + 'text_sorry' => "對不起", + 'text_nothing_here' => "對不起,暫無字幕:( ", + 'submit_search' => "給我搜", + 'text_prev' => "上一頁", + 'text_next' => "下一頁", + 'col_lang' => "語言", + 'col_title' => "標題", + 'title_date_added' => "添加時間", + 'title_size' => "大小", + 'col_hits' => "點擊", + 'col_upped_by' => "上傳者", + 'text_delete' => "[刪除]", + 'text_anonymous' => "匿名", + 'std_delete_subtitle' => "刪除字幕", + 'std_delete_subtitle_note' => "你將刪除該字幕。", + 'text_reason_is' => "原因:", + 'submit_confirm' => "確定", + 'col_report' => "舉報", + 'title_report_subtitle' => "舉報該字幕", + 'select_all_languages' => "(所有語言)", +); + +?> diff --git a/lang/cht/lang_tags.php b/lang/cht/lang_tags.php new file mode 100644 index 00000000..1bf9d4b1 --- /dev/null +++ b/lang/cht/lang_tags.php @@ -0,0 +1,135 @@ + "簡介:", + 'text_syntax' => "語法:", + 'text_example' => "例子:", + 'text_result' => "結果:", + 'text_remarks' => "說明:", + 'head_tags' => "標籤", + 'text_tags' => "標籤", + 'text_bb_tags_note' => "".$SITENAME."論壇支援一些BBCode標籤代碼,你可以在帖子中使用它們改變顯示效果。", + 'submit_test_this_code' => "測試標籤!", + 'text_bold' => "粗體", + 'text_bold_description' => "使文字變粗", + 'text_bold_syntax' => "[b]文字[/b]", + 'text_bold_example' => "[b]這是粗體[/b]", + 'text_italic' => "斜體", + 'text_italic_description' => "使文字斜體", + 'text_italic_syntax' => "[i]文字[/i]", + 'text_italic_example' => "[i]這是斜體[/i]", + 'text_underline' => "下劃線", + 'text_underline_description' => "在文字下加劃線", + 'text_underline_syntax' => "[u]文字[/u]", + 'text_underline_example' => "[u]這是下劃線[/u]", + 'text_color_one' => "顏色 (方式1)", + 'text_color_one_description' => "改變文字顏色", + 'text_color_one_syntax' => "[color=Color]文字[/color]", + 'text_color_one_example' => "[color=blue]這是藍色文字[/color]", + 'text_color_one_remarks' => "有效顏色取決於流覽器,一些基本顏色如red, green, blue, yellow, pink等一般都支援", + 'text_color_two' => "顏色(方式2)", + 'text_color_two_description' => "改變文字顏色", + 'text_color_two_syntax' => "[color=#RGB]文字[/color]", + 'text_color_two_example' => "[color=#0000ff]這是藍色文字[/color]", + 'text_color_two_remarks' => "RGB必須是六位元的十六進位數位", + 'text_size' => "字型大小", + 'text_size_description' => "改變文字的大小", + 'text_size_syntax' => "[size=n]文字[/size]", + 'text_size_example' => "[size=4]這是4號字體的文字[/size]", + 'text_size_remarks' => "n必須是在1(最小)到7(最大)間的整數。默認字型大小為2", + 'text_font' => "字體", + 'text_font_description' => "改變文字的字體", + 'text_font_syntax' => "[font=字體]文字[/font]", + 'text_font_example' => "[font=Impact]Hello world![/font]", + 'text_font_remarks' => "你可以通過在字體名稱間加逗號來設定備用字體", + 'text_hyperlink_one' => "超連結(方式1)", + 'text_hyperlink_one_description' => "插入超連結", + 'text_hyperlink_one_syntax' => "[url]URL[/url]", + 'text_hyperlink_one_example' => "[url]http://".$BASEURL."[/url]", + 'text_hyperlink_one_remarks' => "該標籤是多餘的,所有URL都會自動加超連結", + 'text_hyperlink_two' => "超連結(方式2)", + 'text_hyperlink_two_description' => "插入超連結", + 'text_hyperlink_two_syntax' => "[url=URL]鏈結文字[/url]", + 'text_hyperlink_two_example' => "[url=http://".$BASEURL."]".$SITENAME."[/url]", + 'text_hyperlink_two_remarks' => "當你需要將文字加超鏈結時使用。", + 'text_image_one' => "圖片(方式1)", + 'text_image_one_description' => "插入圖片", + 'text_image_one_syntax' => "[img=URL]", + 'text_image_one_example' => "[img=http://$BASEURL/pic/nexus.png]", + 'text_image_one_remarks' => "URL必須是.gif, .jpg, jpeg.png", + 'text_image_two' => "圖片(方式2)", + 'text_image_two_description' => "插入圖片", + 'text_image_two_syntax' => "[img]URL[/img]", + 'text_image_two_example' => "[img]http://$BASEURL/pic/nexus.png[/img]", + 'text_image_two_remarks' => "URL必須是.gif, .jpg, jpeg.png", + 'text_quote_one' => "引用(方式1)", + 'text_quote_one_description' => "插入引用", + 'text_quote_one_syntax' => "[quote]引用的文字[/quote]", + 'text_quote_one_example' => "[quote]我愛".$SITENAME."[/quote]", + 'text_quote_two' => "引用(方式2)", + 'text_quote_two_description' => "插入引用", + 'text_quote_two_syntax' => "[quote=作者]引用的文字[/quote]", + 'text_quote_two_example' => "[quote=".$CURUSER['username']."]我愛".$SITENAME."[/quote]", + 'text_list' => "列表", + 'text_description' => "插入列表項目", + 'text_list_syntax' => "[*]文字", + 'text_list_example' => "[*]這是項目1\n[*]這是項目2", + 'text_preformat' => "預格式化", + 'text_preformat_description' => "預格式化(等寬)文字。不自動換行", + 'text_preformat_syntax' => "[pre]文字[/pre]", + 'text_preformat_example' => "[pre]這是預格式化文字[/pre]", + 'text_code' => "代碼", + 'text_code_description' => "文字特殊裝飾顯示", + 'text_code_syntax' => "[code]文字[/code]", + 'text_code_example' => "[code]這是代碼[/code]", + 'text_you' => "[you]", + 'text_you_description' => "顯示任何查看者的用戶名", + 'text_you_syntax' => "[you]", + 'text_you_example' => "你正在看這段文字啊,[you]", + 'text_you_remarks' => "適合用于惡作劇", + 'text_site' => "[site]", + 'text_site_description' => "顯示站點名字", + 'text_site_syntax' => "[site]", + 'text_site_example' => "你正在訪問[site]", + 'text_siteurl' => "[siteurl]", + 'text_siteurl_description' => "顯示站點的網址", + 'text_siteurl_syntax' => "[siteurl]", + 'text_siteurl_example' => "[site]的網址是[siteurl]", + 'text_flash' => "Flash(方式1)", + 'text_flash_description' => "在頁面內插入指定寬度與高度的Flash", + 'text_flash_syntax' => "[flash,width,height]Flash URL[/flash]", + 'text_flash_example' => "[flash,500,300]http://$BASEURL/flash.demo.swf[/flash]", + 'text_flash_two' => "Flash(方式2)", + 'text_flash_two_description' => "在頁面內插入默認寬度與高度的Flash", + 'text_flash_two_syntax' => "[flash]Flash URL[/flash]", + 'text_flash_two_example' => "[flash]http://$BASEURL/flash.demo.swf[/flash]", + 'text_flv_one' => "Flash視頻(方式1)", + 'text_flv_one_description' => "在頁面內插入指定寬度與高度的Flash視頻", + 'text_flv_one_syntax' => "[flv,width,height]Flash視頻的URL[/flv]", + 'text_flv_one_example' => "[flv,320,240]http://$BASEURL/flash.video.demo.flv[/flv]", + 'text_flv_two' => "Flash視頻(方式2)", + 'text_flv_two_description' => "在在頁面內插入默認寬度與高度(320 * 240)的Flash視頻", + 'text_flv_two_syntax' => "[flv]Flash視頻的URL[/flv]", + 'text_flv_two_example' => "[flv]http://$BASEURL/flash.video.demo.flv[/flv]", + 'text_youtube' => "YouTube", + 'text_youtube_description' => "在頁面內插入YouTube網站的在線視頻", + 'text_youtube_syntax' => "[youtube]YouTube視頻的URL[/youtube]", + 'text_youtube_example' => "[youtube]http://www.youtube.com/watch?v=EsWKVcZ88Jw[/youtube]", + 'text_youku' => "優酷", + 'text_youku_description' => "在頁面內插入優酷網的在線視頻", + 'text_youku_syntax' => "[youku]優酷網視頻的URL[/youku]", + 'text_youku_example' => "[youku]http://player.youku.com/player.php/sid/XMzM1MDExODg=/v.swf[/youku]", + 'text_tudou' => "土豆", + 'text_tudou_description' => "在頁面內插入土豆網的在線視頻", + 'text_tudou_syntax' => "[tudou]土豆網視頻的URL[/tudou]", + 'text_tudou_example' => "[tudou]http://www.tudou.com/v/1jaI4LNa7sk[/tudou]", + 'text_ninety_eight_image' => "CC98圖片", + 'text_ninety_eight_image_description' => "顯示保存于CC98論壇的圖片", + 'text_ninety_eight_image_syntax' => " [98img=[auto|number]]圖片文件[/98img]", + 'text_ninety_eight_image_example' => "[98img=150]uploadfile/2008/10/30/2362924185.png[/98img]", + 'text_ninety_eight_image_remarks' => "CC98是浙江大學的一個論壇", + +); + +?> diff --git a/lang/cht/lang_takeconfirm.php b/lang/cht/lang_takeconfirm.php new file mode 100644 index 00000000..4c8a2ee0 --- /dev/null +++ b/lang/cht/lang_takeconfirm.php @@ -0,0 +1,13 @@ + "對不起...", + 'std_no_buddy_to_confirm' => "沒有需要驗證的用戶。:(

    請點擊", + 'std_here_to_go_back' => "這裏返回。", + 'mail_title' => "網站帳戶驗證", + 'mail_here' => "這裏", + 'mail_content_1' => "你好,

    你的賬號成功通過驗證。你可以進入登錄頁面: ", + 'mail_content_2' => "

    使用你的賬戶登錄。登錄後請先閱讀站點規則,提問前請自行參考常見問題。

    祝你好運! ".$SITENAME."!

    如果你不認識邀請你的人,請將本郵件轉發至".$REPORTMAIL."
    ------
    ".$SITENAME." 網站" +); +?> diff --git a/lang/cht/lang_takecontact.php b/lang/cht/lang_takecontact.php new file mode 100644 index 00000000..ab8416a8 --- /dev/null +++ b/lang/cht/lang_takecontact.php @@ -0,0 +1,17 @@ + "錯誤", + 'std_method' => "方式", + 'std_please_enter_something' => "請填寫內容!", + 'std_please_define_subject' => "你必須輸入標題!", + 'std_message_flooding' => "不允許濫發短訊,請在", + 'std_second' => "秒", + 'std_s' => "", + 'std_before_sending_pm' => "後重試。", + 'std_succeeded' => "成功", + 'std_message_succesfully_sent' => "短訊成功發送!" +); + +?> \ No newline at end of file diff --git a/lang/cht/lang_takeedit.php b/lang/cht/lang_takeedit.php new file mode 100644 index 00000000..45d676ea --- /dev/null +++ b/lang/cht/lang_takeedit.php @@ -0,0 +1,12 @@ + "編輯失敗!", + 'std_missing_form_data' => "有項目沒有填寫", + 'std_not_owner' => "你不是發種者!怎麼回事?\n", + 'std_nfo_too_big' => "NFO過大!最大為65,535位元組。", + 'std_cannot_move_torrent' => "你沒有將種子移至另一區的許可權。另外,你怎麼會到這?" +); + +?> \ No newline at end of file diff --git a/lang/cht/lang_takeflush.php b/lang/cht/lang_takeflush.php new file mode 100644 index 00000000..450e7a63 --- /dev/null +++ b/lang/cht/lang_takeflush.php @@ -0,0 +1,11 @@ + "失敗", + 'std_success' => "成功", + 'std_ghost_torrents_cleaned' => "個冗余種子被成功清除。", + 'std_cannot_flush_others' => "你只能清除自己的冗余種子" +); + +?> \ No newline at end of file diff --git a/lang/cht/lang_takeinvite.php b/lang/cht/lang_takeinvite.php new file mode 100644 index 00000000..e4c2e8f3 --- /dev/null +++ b/lang/cht/lang_takeinvite.php @@ -0,0 +1,28 @@ + "邀請失敗!", + 'std_must_enter_email' => "你必須輸入郵箱位址!", + 'std_invalid_email_address' => "無效的郵箱地址!", + 'std_must_enter_personal_message' => "請添加信件中的私人內容。", + 'std_email_address' => "郵箱地址", + 'std_is_in_use' => "已經在使用。", + 'mail_here' => "這裏", + 'mail_tilte' => "網站邀請函", + 'mail_one' => "你好,

    用戶", + 'mail_two' => "邀請你加入".$SITENAME."社區。".$SITENAME."擁有知識豐富的用戶。
    如果你有意加入,請在閱讀網站規則後確認該邀請。

    請點擊以下鏈接確認邀請:", + 'mail_three' => "請在", + 'mail_four' => "天內確認該邀請,之後邀請將作廢。
    ".$SITENAME."真誠歡迎你加入我們的社區!

    來自邀請者", + 'mail_five' => "的話:", + 'mail_six' => "如果你根本不認識邀請者,請將此郵件轉發至".$REPORTMAIL."

    ------
    ".$SITENAME."網站", + 'std_error' => "錯誤", + 'std_invite_denied' => "你的用戶等級不允許發送邀請。你怎麽到這來的?", + 'std_email_address_banned' => "郵箱地址被禁用!", + 'std_wrong_email_address_domains' => "不允許發送邀請給此郵箱地址!請使用以下郵箱:", + 'std_no_invite' => "你沒有剩餘邀請名額。你怎麽到這來的?", + 'std_invitation_already_sent_to' => "發送失敗!此郵箱", + 'std_await_user_registeration' => "已收到過邀請函,請無重復發送。請等待用戶注冊。", +); + +?> diff --git a/lang/cht/lang_takelogin.php b/lang/cht/lang_takelogin.php new file mode 100644 index 00000000..816c9fd9 --- /dev/null +++ b/lang/cht/lang_takelogin.php @@ -0,0 +1,11 @@ + "錯誤: 用戶名或密碼不正確!

    忘記密碼了?找回你的密碼!", + 'std_login_fail' => "登錄失敗!", + 'std_account_disabled' => "該帳號已被禁用。", + 'std_user_account_unconfirmed' => "該賬戶還未通過驗證。如果你沒有收到驗證郵件,試試重新發送驗證郵件。", +); + +?> diff --git a/lang/cht/lang_takemessage.php b/lang/cht/lang_takemessage.php new file mode 100644 index 00000000..64e9e028 --- /dev/null +++ b/lang/cht/lang_takemessage.php @@ -0,0 +1,29 @@ + "錯誤", + 'std_permission_denied' => "你沒有該許可權!", + 'std_please_enter_something' => "不能為空!", + 'std_message_flooding_denied' => "禁止濫發短訊。請在", + 'std_before_sending_pm' => "秒後再發送。", + 'std_invalid_id' => "該帳號已失效", + 'std_user_not_exist' => "不存在該帳號", + 'std_refused' => "拒絕", + 'std_account_parked' => "該帳號已被封存。", + 'std_user_blocks_your_pms' => "該用戶拒絕接受你的短訊。", + 'std_user_accepts_friends_pms' => "該用戶只接受其好友的短訊。", + 'std_user_blocks_all_pms' => "該用戶拒絕接受一切短訊。", + 'std_succeeded' => "成功", + 'std_messages_out_of' => "條短訊(共", + 'std_were' => "條)已", + 'std_message_was' => "短訊已", + 'std_successfully_sent' => "成功發送!", + 'std_s_were' => "已", + 'std_was' => "已", + 'std_updated' => "更新", + 'std_no_permission_forwarding' => "你沒有轉發該短訊的許可權。", + 'std_must_enter_username' => "你必須填寫要轉發的用戶的用戶名。", +); + +?> diff --git a/lang/cht/lang_takereseed.php b/lang/cht/lang_takereseed.php new file mode 100644 index 00000000..1af0348e --- /dev/null +++ b/lang/cht/lang_takereseed.php @@ -0,0 +1,12 @@ + "續種請求!", + 'std_it_worked' => "成功了!完成下載的用戶將收到請求續種的短訊。", + 'std_error' => "錯誤", + 'std_torrent_not_dead' => "該種子沒有斷種。", + 'std_reseed_sent_recently' => "該種子在過去15分鐘內已收到一次續種請求。請耐心等待好心人續種。", +); + +?> diff --git a/lang/cht/lang_takesignup.php b/lang/cht/lang_takesignup.php new file mode 100644 index 00000000..915946f1 --- /dev/null +++ b/lang/cht/lang_takesignup.php @@ -0,0 +1,43 @@ + "註冊失敗!(參看下面)", + 'std_invalid_email_address' => "郵箱地址無效!", + 'std_email_address_banned' => "郵箱地址被禁用!", + 'std_wrong_email_address_domains' => "不允許使用該郵箱地址註冊!請使用以下郵箱:", + 'std_invalid_gender' => "性別無效!", + 'std_blank_field' => "有項目沒有填寫。", + 'std_hintanswer_too_short' => "對不起,密碼提示問題答案過短(至少6個字元)", + 'std_username_too_long' => "對不起,用戶名過長(至多12個字元)", + 'std_passwords_unmatched' => "兩次輸入的密碼不一致!請重試。", + 'std_password_too_short' => "對不起,密碼過短(至少6個字元)", + 'std_password_too_long' => "對不起,密碼過長(至多40個字元)", + 'std_password_equals_username' => "對不起,用戶名和密碼不能相同。", + 'std_wrong_email_address_format' => "請輸入正確的郵箱地址。", + 'std_invalid_username' => "無效的用戶名。", + 'std_unqualified' => "對不起,你必須同意遵守站點規則才能註冊。", + 'std_email_address' => "這個郵箱地址", + 'std_in_use' => "已經被使用。", + 'std_username_exists' => "用戶名已經存在!", + 'std_database_in_distress' => "數據庫出錯", + 'std_almost_signup' => "即將完成註冊!", + 'std_please_click' => "請點擊", + 'std_here' => "這裡", + 'std_to_finish_signup' => "來完成註冊,謝謝!", + 'msg_subject' => "歡迎來到", + 'msg_congratulations' => "祝賀你,", + 'msg_you_are_a_member' => ",\n\n你已成為".$SITENAME."的一員,\n我們真誠地歡迎你的加入!\n\n請務必先閱讀[url=rules.php][b]規則[/b][/url],提問前請自行參考[url=faq.php][b]常見問題[/b][/url],有空也請到[url=forums.php][b]論壇[/b][/url]看看。 \n\n祝你愉快。\n".$SITENAME."管理組", + 'mail_title' => "網站用戶註冊驗證", + 'mail_this_link' => "這個鏈接", + 'mail_here' => "這裏", + 'mail_title' => " 網站用戶註冊驗證", + 'mail_one' => "你好 ", + 'mail_two' => ",

    你請求在".$SITENAME."網站獲取賬號,並指定此郵箱地址 ", + 'mail_three' => " 為你的聯系地址。

    如果你沒有發過該請求,請忽視本郵件。輸入你郵箱地址者的IP地址為 ", + 'mail_four' => "。請勿回復本郵件。

    如果你的確發過該請求,請點擊以下鏈接來通過驗證: ", + 'mail_four_1' => "

    如果以上鏈接打開出錯、不存在或已經過期, 嘗試在這裏重新發送確認郵件 ", + 'mail_five' => "在通過驗證後,你就可以使用新賬號了。

    如果你在24小時內沒有通過驗證,你的賬號將被刪除。
    新人登錄".$SITENAME."後請務必先閱讀站點規則,提問前請參考常見問題。

    請註意:如果你並沒有在".$SITENAME."網站註冊,請舉報此郵件至".$REPORTMAIL."

    ------

    ".$SITENAME." 網站.", + 'std_invalid_gender' => "性別無效!", +); +?> diff --git a/lang/cht/lang_takeupload.php b/lang/cht/lang_takeupload.php new file mode 100644 index 00000000..aa7f9ce0 --- /dev/null +++ b/lang/cht/lang_takeupload.php @@ -0,0 +1,31 @@ + "上傳失敗!", + 'std_missing_form_data' => "請填寫必填項目", + 'std_empty_filename' => "文件名不能為空!", + 'std_zero_byte_nfo' => "NFO文件為空", + 'std_nfo_too_big' => "NFO文件過大!最大允許65,535 bytes.", + 'std_nfo_upload_failed' => "NFO檔上傳失敗", + 'std_blank_description' => "你必須填寫簡介!", + 'std_category_unselected' => "你必須選擇類型!", + 'std_invalid_filename' => "無效的文件名!", + 'std_filename_not_torrent' => "無效的文件名(不是.torrent文件).", + 'std_empty_file' => "空文件!", + 'std_not_bencoded_file' => "你在搞什麼鬼?你上傳的不是Bencode檔!", + 'std_not_a_dictionary' => "不是目錄", + 'std_dictionary_is_missing_key' => "目錄缺少值", + 'std_invalid_entry_in_dictionary' => "無效的目錄項", + 'std_invalid_dictionary_entry_type' => "無效的目錄項類型", + 'std_invalid_pieces' => "無效的文件塊", + 'std_missing_length_and_files' => "缺少長度和文件", + 'std_filename_errors' => "文件名錯誤", + 'std_uploaded_not_offered' => "你只能上傳通過候選的種子,請返回在你的候選中選擇合適項目後再上傳!", + 'std_unauthorized_upload_freely' => "你沒有自由上傳的權限!", + 'std_torrent_existed' => "該種子已存在!", + 'std_torrent_file_too_big' => "種子文件過大!最大允許", + 'std_remake_torrent_note' => " bytes。請使用更大的區塊大小重新制作種子,或者將內容分為多個種子發布。", +); + +?> diff --git a/lang/cht/lang_topten.php b/lang/cht/lang_topten.php new file mode 100644 index 00000000..2f008d59 --- /dev/null +++ b/lang/cht/lang_topten.php @@ -0,0 +1,116 @@ + "錯誤!", + 'std_sorry' => "對不起...", + 'std_permission_denied_only' => "你沒有該許可權。只有", + 'std_or_above_can_view' => "及以上等級的用戶才能檢視排行榜。

    請檢視"."常見問題了解更多關于用戶等級和許可權的資訊。

    " .$SITENAME."管理組
    ", + 'col_rank' => "排名", + 'col_user' => "用戶", + 'col_donated' => "捐贈", + 'col_ul_speed' => "上傳速度", + 'col_downloaded' => "下載", + 'col_dl_speed' => "下載速度", + 'col_ratio' => "分享率", + 'col_joined' => "註冊日期", + 'col_name' => "名稱", + 'title_sna' => "完成數", + 'col_data' => "資料量", + 'title_se' => "種子數", + 'title_le' => "下載數", + 'col_to' => "總共", + 'col_country' => "國家/地區", + 'col_username' => "用戶名", + 'col_upload_rate' => "上傳速度", + 'col_download_rate' => "下載速度", + 'text_users' => "用戶", + 'text_torrents' => "種子" , + 'text_countries' => "國家/地區", + 'text_peers' => "同伴", + 'text_community' => "社區", + 'text_search' => "搜索", + 'text_other' => "其他", + 'text_this_page_last_updated' => "本頁最新更新于 ", + 'text_started_recording_date' => "統計開始于", + 'text_update_interval' => ", 每60分鐘資料更新一次", + 'text_uploaders' => "上傳者", + 'text_downloaders' => "下載者", + 'text_fastest_uploaders' => "最快上傳者", + 'text_fastest_up_note' => "(平均值,包括非現行時間,至少上傳50GB)", + 'text_fastest_note' => "(平均值,包括非現行時間)", + 'text_fastest_downloaders' => "最快下載者", + 'text_best_sharers' => "最佳分享者", + 'text_sharers_note' => "(至少下載50GB)", + 'text_worst_sharers' => "最差分享者", + 'text_most_active_torrents' => "最活躍種子", + 'text_most_snatched_torrents' => "完成數最多種子" , + 'text_most_data_transferred_torrents' => "流量最大種子", + 'text_best_seeded_torrents' => "供種率(做種/下載)最大種子", + 'text_best_seeded_torrents_note' => "(至少5個做種者)", + 'text_worst_seeded_torrents' => "供種率(做種/下載)最小種子", + 'text_worst_seeded_torrents_note' => "(至少有1個下載者, 不包括完成數為0的種子)", + + 'text_most_donated_USD' => "美元捐贈者", + 'text_most_donated_CNY' => "人民幣捐贈者", + 'col_donated_usd' => "捐贈($)", + 'col_donated_cny' => "捐贈(¥)", + + 'text_most_supplied' => "最大資源提供者(不包括被移除的種子)", + 'text_most_snatched' => " 最大資源完成者(不包括被移除的種子)", + 'col_torrent_uploaded' => "# 上傳", + 'col_torrent_downloaded' => "# 完成", + + 'text_most_topic' => " 論壇主題發起者(不包括被移除的主題)", + 'text_most_post' => " 論壇發帖者(不包括被移除的帖子)", + 'col_topics' => "主題", + 'col_posts' => "帖子", + + + 'text_biggest_topics' => "最熱主題(不計特權論壇內的主題)", + 'col_subject' => "主題", + + 'col_number' => "數量", + 'text_most_browser' => "瀏覽器", + 'text_most_client' => "BT用戶端(按最近存取伺服器的用戶端)", + + 'col_comments' => "評論", + 'text_most_commenter' => "種子評論者(不包括被移除的評論)", + + 'col_reviews' => "點評", + 'text_most_reviewer' => "電影點評者(不包括被移除的點評)", + + 'col_location' => "位置", + 'text_most_locations' => "同伴位置", + + 'col_keyword' => "關鍵字", + 'col_times' => "次數", + 'col_datetime' => "時間", + 'text_latest_search' => "最近搜索", + 'text_current_month_search' => "本月搜索", + 'text_last_month_search' => "上月搜索", + 'text_current_year_search' => "今年搜索", + + 'text_most_bonuses' => "魔力值", + 'col_bonus' => "魔力值", + 'text_countries_users' => "用戶數", + 'col_users' => "用戶數", + 'text_countries_uploaded' => "總上傳量", + 'col_uploaded' => "上傳量", + 'text_countries_per_user' => "用戶平均上傳量 (總上傳量達到1TB且用戶數超過100)", + 'col_average' => "平均", + 'text_countries_ratio' => "分享率 (總上傳量達到1TB且用戶數超過100)", + 'text_ago' => "以前", + 'text_inf' => "無限", + 'head_top_ten' => "排行榜", + 'text_most_stylesheet' => "介面風格", + 'text_most_language' => "用戶語言", + 'text_top' => "Top ", + 'text_one_hundred' => "Top 100", + 'text_top_250' => "Top 250", + 'col_clicks' => "點擊數", + 'text_most_clicks' => "宣傳鏈結", + 'text_charity_giver' => "慈善家" +); + +?> diff --git a/lang/cht/lang_torrents.php b/lang/cht/lang_torrents.php new file mode 100644 index 00000000..d1aa10e3 --- /dev/null +++ b/lang/cht/lang_torrents.php @@ -0,0 +1,63 @@ + "搜索結果 - ", + 'text_search_box' => "搜索箱", + 'text_category' => "類型:", + 'text_source' => "來源:", + 'text_codec' => "編碼:", + 'text_standard' => "解析度:", + 'text_processing' => "處理:", + 'text_show_dead_active' => "顯示斷種/活種?", + 'select_including_dead' => "包括斷種", + 'select_active' => "活種", + 'select_dead' => "斷種", + 'text_show_special_torrents' => "顯示促銷種子?", + 'select_all' => "全部", + 'select_normal' => "普通", + 'select_free' => "免費", + 'select_two_times_up' => "2x上傳", + 'select_free_two_times_up' => "免費&2x上傳", + 'select_half_down' => "50%下載", + 'text_search' => "搜索關鍵字:", + 'submit_go' => "給我搜", + 'std_search_results_for' => "搜索結果 \"", + 'std_try_again' => "沒有種子。請用準確的關鍵字重試。\n", + 'std_nothing_found' => "沒有結果!", + 'std_no_active_torrents' => "沒有種子:(\n", + 'input_check_all' => "全選", + 'input_uncheck_all' => "全不選", + 'text_download_client' => "下載指定客戶端", + 'select_title' => "標題", + 'select_description' => "簡介", + 'select_small_description' => "副標題", + 'select_uploader' => "發布者", + 'select_imdb_url' => "IMDb鏈接", + 'select_and' => "與", + 'select_or' => "或", + 'select_exact' => "准確", + 'select_parsed' => "語法", + 'text_in' => " 範圍:", + 'text_with' => " 匹配模式:", + 'text_mode' => "", + 'text_show_bookmarked' => "顯示收藏?", + 'select_bookmarked' => "僅收藏", + 'select_bookmarked_exclude' => "僅未收藏", + 'text_s_bookmarked_torrent' => "收藏的種子", + 'text_s_not_bookmarked_torrent' => "未收藏的種子", + 'head_torrents' => "種子", + 'head_music' => "音樂", + 'text_movies_and_tvs' => "電影 & 電視:", + 'text_games_and_appz' => "游戲 & 程序:", + 'text_others' => "其它:", + 'text_medium' => "媒介:", + 'text_team' => "製作組:", + 'text_audio_codec' => "音頻編碼:", + 'text_video' => "視頻:", + 'text_tv' => "電視:", + 'text_music' => "音樂:", + 'text_software' => "軟件:", +); + +?> diff --git a/lang/cht/lang_upload.php b/lang/cht/lang_upload.php new file mode 100644 index 00000000..b7926b70 --- /dev/null +++ b/lang/cht/lang_upload.php @@ -0,0 +1,45 @@ + "發布", + 'std_sorry' => "對不起...", + 'std_unauthorized_to_upload' => "你沒有發布種子的許可權。請閱讀(收件箱)", + 'std_please_offer' => "你沒有發布種子的許可權。如果你是普通會員,請到候選區提交你的發布請求(請查看常見問題中的“發布”)部分
    ", + 'text_red_star_required' => "紅星號(*)標記的區域必須填寫", + 'text_tracker_url' => "Tracker伺服器的URL是", + 'row_torrent_file' => "種子文件", + 'row_torrent_name' => "標題", + 'text_torrent_name_note' => "(若不填將使用種子檔案名。要求規範填寫,如銀翼殺手 Blade Runner 1982 Final Cut 720p HDDVD DTS x264-ESiR)\n", + 'row_small_description' => "副標題", + 'text_small_description_note' => "(將在種子頁面種子標題下顯示。如720p @ 4615 kbps - DTS 5.1 @ 1536 kbps)", + 'row_nfo_file' => "NFO文件", + 'text_only_viewed_by' => "(不允許", + 'text_or_above' => "以下用戶查看。請上傳.nfo文件)\n", + 'row_description' => "簡介", + 'select_choose_one' => "請選擇", + 'row_type' => "類型", + 'row_quality' => "品質", + 'text_source' => "來源:", + 'text_codec' => "編碼:", + 'text_standard' => "解析度:", + 'text_processing' => "處理:", + 'row_your_offer' => "你的候選", + 'text_please_select_offer' => "   如果發布的是通過候選的資源,請選擇該候選專案。投票用戶會收到通知。", + 'row_show_uploader' => "匿名發布", + 'checkbox_hide_uploader_note' => "不要在發布者專案中顯示我的用戶名", + 'text_read_rules' => "我已經閱讀過規則", + 'submit_upload' => "發布", + 'text_to_browse_section' => "發布至種子區 ", + 'text_to_special_section' => "或音樂區 ", + 'text_type_note' => "   只選兩者之一", + 'text_medium' => "媒介:", + 'text_team' => "製作組:", + 'text_audio_codec' => "音頻編碼:", + 'row_content' => "內容", + 'text_chinese_title' => "中文名:", + 'text_english_title' => "英文名:", + 'text_titles_note' => "(如果英文名不存在,請使用拼音或不填寫)", +); + +?> diff --git a/lang/cht/lang_uploaders.php b/lang/cht/lang_uploaders.php new file mode 100644 index 00000000..ac409d8b --- /dev/null +++ b/lang/cht/lang_uploaders.php @@ -0,0 +1,22 @@ + "沒有找到發布員!", + 'head_uploaders' => "發布員", + 'text_uploaders' => "發布員", + 'col_username' => "用戶名", + 'col_torrents_size' => "種子大小", + 'col_torrents_num' => "種子數", + 'col_last_upload_time' => "最近發布時間", + 'col_last_upload' => "最近發布種子", + 'text_not_available' => "無", + 'submit_go' => "尋找", + 'text_select_month' => "選取月份:", + 'text_order_by' => "排序", + 'text_username' => "用戶名", + 'text_torrent_size' => "種子大小", + 'text_torrent_num' => "種子數", +); + +?> diff --git a/lang/cht/lang_usercp.php b/lang/cht/lang_usercp.php new file mode 100644 index 00000000..125c02a7 --- /dev/null +++ b/lang/cht/lang_usercp.php @@ -0,0 +1,248 @@ + "對不起...", + 'text_user_cp_home' => "  設  定  首  頁  ", + 'text_personal_settings' => "  個  人  設  定  ", + 'text_tracker_settings' => "  網  站  設  定  ", + 'text_forum_settings' => "  論  壇  設  定  ", + 'text_security_settings' => "  安  全  設  定  ", + 'row_save_settings' => "保存設定", + 'submit_save_settings' => "保存設定! (只需點擊一次)", + 'std_error' => "錯誤", + 'head_control_panel' => "控制面板", + 'head_personal_settings' => " - 個人設定", + 'std_invalid_action' => "無效的行為", + 'text_saved' => "已保存!", + 'row_account_parked' => "封存帳號", + 'checkbox_pack_my_account' => "我將長期不使用帳號。", + 'text_account_pack_note' => "注意:封存帳號可避免因長期(如假期)不活動而被刪除帳號。封存後帳號處於受限狀態,此時不能下載種子或流覽某些頁面。", + 'row_pms' => "短訊", + 'row_recommended_movies' => "推薦資源", + 'checkbox_show_hot' => "在首頁顯示推薦熱門", + 'checkbox_show_classic' => "在首頁顯示推薦經典", + 'text_accept_pms' => "接受以下短訊:", + 'radio_all_except_blocks' => "所有(除了黑名單)", + 'radio_friends_only' => "僅好友", + 'radio_staff_only' => "管理組成員", + 'checkbox_delete_pms' => "回復後刪除短訊", + 'checkbox_save_pms' => "保存短訊至發件箱", + 'checkbox_pm_on_comments' => "我發佈的種子有新評論時通知我", + 'row_gender' => "性別", + 'radio_not_available' => "未知", + 'radio_male' => "男", + 'radio_female' => "女", + 'row_country' => "國家/地區", + 'row_download_speed' => "下載帶寬", + 'row_upload_speed' => "上傳帶寬", + 'row_bt_client' => "BT用戶端", + 'row_avatar_url' => "頭像URL", + 'select_choose_avatar' => "選擇頭像", + 'select_nothing' => "默認頭像", + 'text_avatar_note' => "最大寬度為150圖元(必要的時候會被縮放)。", + 'text_bitbucket_note' => "如果你需要上傳頭像,請使用上傳器。", + 'row_info' => "個人說明", + 'text_info_note' => "顯示在你的個人資訊頁面。允許使用BBCode代碼。", + 'head_tracker_settings' => " - 網站設定", + 'row_email_notification' => "郵件提示", + 'checkbox_notification_received_pm' => "收到短訊的時候提醒我。", + 'checkbox_notification_default_categories' => "當默認分類中有新種子的時候通知我。\n", + 'row_browse_default_categories' => "默認
    分類", + 'row_stylesheet' => "介面風格", + 'row_site_language' => "站點語言", + 'row_torrent_page' => "每頁種子數", + 'text_zero_equals_default' => "(0=使用默認,最大=100)", + 'head_forum_settings' => " - 論壇設定", + 'row_topics_per_page' => "每頁主題數", + 'row_posts_per_page' => "每頁帖子數", + 'row_view_avatars' => "查看頭像", + 'checkbox_low_bandwidth_note' => "(窄帶用戶可能需要關閉此項)", + 'row_view_signatures' => "查看簽名檔", + 'row_forum_signature' => "我的簽名檔", + 'head_security_settings' => " - 安全設定", + 'row_security_check' => "安全確認", + 'text_security_check_note' => "注意:你必須輸入當前密碼才能改變安全設定項目!", + 'std_enter_old_password' => "請先輸入你的密碼!", + 'std_wrong_password_note' => "你輸入的密碼錯誤!", + 'std_password_equals_username' => "對不起,用戶名和密碼不能相同。", + 'std_password_too_long' => "對不起,密碼過長(至多40個字元)", + 'std_password_too_short' => "對不起,密碼過短(至少6個字元)", + 'std_passwords_unmatched' => "兩次輸入的密碼不一致!請重試。", + 'std_email_address_banned' => "該郵箱地址被禁用!", + 'std_wrong_email_address_domains' => "不允許使用該郵箱位址!請使用以下郵箱:", + 'std_wrong_email_address_format' => "你輸入的不像是有效的郵箱地址。", + 'std_email_in_use' => "這個郵箱位址已經被使用。", + 'std_confirmation_email_sent' => "(確認郵件已經發送!)", + 'std_passkey_reset' => " (密鑰已成功更新!)", + 'std_password_changed' => " (你的密碼已成功修改!)", + 'std_privacy_level_updated' => " (你的隱私級別已成功更新!)", + 'row_reset_passkey' => "重置密匙", + 'checkbox_reset_my_passkey' => "我想重置密鑰。", + 'text_reset_passkey_note' => "注意:當密匙被重置後,你必須重新下載相關的種子檔才能繼續下載或做種。", + 'row_email_address' => "郵箱地址", + 'text_email_address_note' => "注意:改變郵箱位址後,你將在新位址收到驗證郵件。你必須重新驗證。", + 'row_change_password' => "修改密碼", + 'row_type_password_again' => "確認新密碼", + 'row_privacy_level' => "隱私等級", + 'radio_normal' => "普通", + 'radio_low' => "低(郵箱地址公開)", + 'radio_strong' => "強(個人資訊全部隱藏)", + 'head_home' => " - 首頁", + 'row_join_date' => "加入日期", + 'row_avatar' => "頭像", + 'row_passkey' => "密匙", + 'row_invitations' => "邀請", + 'link_send_invitation' => "進入邀請系統", + 'row_karma_points' => "魔力值", + 'link_use_karma_points' => "使用魔力值", + 'row_ratings_submitted' => "評分數", + 'row_written_comments' => "評論數", + 'link_view_comments' => "查看評論", + 'row_forum_posts' => "論壇帖子數", + 'link_view_posts' => "查看帖子", + 'text_posts_per_day' => "帖子/天", + 'text_of_total_posts' => "總貼", + 'text_recently_read_topics' => "最近閱讀主題", + 'col_topic_title' => "主題", + 'col_replies' => "回復", + 'col_topic_starter' => "發佈者", + 'col_views' => "查看", + 'col_last_post' => "最後回復", + 'text_by' => "作者:", + 'select_none_selected' => "未選", + 'text_ago' => "以前", + 'mail_here' => "這裏", + 'mail_change_email_one' => "你請求將你在".$SITENAME."站點的帳戶(用戶名", + 'mail_change_email_two' => ")改用此郵箱地址", + 'mail_change_email_three' => "作為聯繫地址。", + 'mail_change_email_four' => "如果你沒有發過該請求,請忽視本郵件。輸入你郵箱地址的用戶的IP位址是", + 'mail_change_email_five' => "。請勿回復本郵件。", + 'mail_change_email_six' => "如果你的確發送過更改帳戶資訊的請求,請點擊", + 'mail_change_email_six_1' => "來確認。", + 'mail_change_email_seven' => "你的新郵箱位址將顯示在你的個人資料頁面。注意:你的個人資料只有在點擊以上地址後才會改變。", + 'mail_change_email_eight' => "", + 'mail_change_email_nine' => $SITENAME."網站", + 'mail_profile_change_confirmation' => "修改個人資料驗證", + 'text_go_back' => "返回", + 'text_category' => "類型", + 'text_source' => "來源", + 'text_codec' => "編碼", + 'text_standard' => "解析度", + 'text_processing' => "處理", + 'text_show_dead_active' => "顯示斷種/活種?", + 'select_including_dead' => "包括斷種", + 'select_active' => "活種", + 'select_dead' => "斷種", + 'text_show_special_torrents' => "顯示促销種子?", + 'select_all' => "全部", + 'select_normal' => "普通", + 'select_free' => "免費", + 'select_two_times_up' => "2x上傳", + 'select_free_two_times_up' => "免費&2x上傳", + 'text_show_bookmarked' => "顯示收藏?", + 'select_bookmarked' => "僅收藏", + 'select_bookmarked_exclude' => "僅未收藏", + 'select_with' => "且", + 'select_without' => "但不", + 'text_review' => "顯示點評", + 'row_pm_boxes' => "短訊箱", + 'text_show' => "每頁顯示", + 'text_pms_per_page' => "條短訊(最大=100)", + 'row_shoutbox' => "群聊區", + 'text_show_last' => "顯示最新", + 'text_messages_at_shoutbox' => "條聊天記錄(0=使用默認, 最小=10, 最大=500)", + 'text_refresh_shoutbox_every' => "每隔", + 'text_seconds' => "秒刷新群聊區(0=使用默認設置, 最小=10, 最大=3600)", + 'text_hide_helpbox_messages' => "不顯示求助區的留言", + 'row_torrent_detail' => "種子詳情頁面", + 'text_show_description' => "顯示簡介", + 'text_show_nfo' => "顯示NFO文件內容", + 'text_show_imdb_info' => "顯示IMDb信息", + 'text_show_douban_info' => "顯示豆瓣信息", + 'text_show_lastfm_info' => "顯示Last.fm信息", + 'text_show_reviews' => "顯示點評", + 'text_show_comments' => "顯示評論", + 'row_browse_page' => "種子頁面", + 'text_browse_setting_warning' => "警告:開啟大量功能可能會降低你的瀏覽速度。", + 'text_torrents_per_page' => "個種子", + 'text_tooltip_type' => "種子標題上懸浮提示類型", + 'text_last_review' => "最新點評", + 'text_minor_imdb_info' => "簡單IMDb信息 (片名 + 年代 + IMDb評分 + 國家 + 類別 + 導演 + 主演 + 標語)", + 'text_median_imdb_info' => "中型IMDb信息 (圖片 + 片名 + 年代 + IMDb評分 + 片長 + 國家 + 對白語言 + 導演 + 類別 + 主演 + 英語劇情概要)", + 'text_douban_info' => "豆瓣信息 (圖片 + 片名 + 年代 + 豆瓣評分 + 對白語言 + 導演 + 地區 + 主演 + 中文劇情概要)", + 'text_off' => "關閉懸浮提示", + 'text_show_lastfm_tooltip' => "懸浮提示Last.fm信息", + 'row_time_type' => "時間顯示類型", + 'text_time_added' => "發生時間", + 'text_time_elapsed' => "已去時間", + 'text_append_words_to_torrents' => "添加特殊種子的尾綴", + 'text_append_sticky' => "給固定于頂部的種子添加置頂圖標 \"sticky\"", + 'text_append_new' => "給新種子添加'新'", + 'text_append_picked' => "給批評家推荐的資源添加標記,如'經典'", + 'text_show_action_icons' => "顯示行為圖標", + 'text_show_nfo_icon' => "查看NFO圖標", + 'text_show_download_icon' => "下載圖標", + 'text_show_edit_icon' => "編輯圖標", + 'text_if_owner' => " (如果是發種者)", + 'text_show_bookmark_icon' => "收藏圖標", + 'text_comments_reviews' => "評論", + 'text_show_comment_number' => "顯示評論數", + 'text_last_comment_on_tooltip' => "懸浮提示最新評論內容", + 'text_show_review_number' => "顯示點評數", + 'row_school' => "學校", + 'row_discuss' => "討論", + 'row_funbox' => "趣味盒", + 'text_show_funbox' => "在首頁顯示趣味盒", + 'text_send' => "發送", + 'text_use' => "使用", + 'text_view' => "查看", + 'row_ip_location' => "IP/地點", + 'text_translation_note' => "你的語言不在列表中?看看你能不能", + 'text_translation_link' => "幫助我們翻譯添加新語言", + 'text_movies_and_tvs' => "電影 & 電視:", + 'text_games_and_appz' => "游戲 & 程序:", + 'text_others' => "其它:", + 'text_at_browse_page' => "種子區", + 'text_at_special_page' => "音樂區", + 'text_additional_selection' => "補充設定", + 'text_stylesheet_note' => "更多界面風格?想自己設計?", + 'text_stylesheet_link' => "點擊這裏", + 'row_font_size' => "字體大小", + 'select_small' => "小", + 'select_large' => "大", + 'text_medium' => "媒介", + 'text_torrents_on_promotion' => "促銷種子:", + 'text_highlight' => "高亮顯示", + 'text_append_words' => "添加標記,如'2X免費'", + 'text_append_icon' => "添加圖標,如\"free\"", + 'text_no_mark' => "無標記", + 'text_signature_note' => "允許使用BBCode代碼。最大圖片尺寸為500*200,只有第一張圖片會顯示。", + 'row_click_on_topic' => "點擊主題時", + 'text_go_to_first_page' => "查看第一頁", + 'text_go_to_last_page' => "查看最後頁", + 'select_half_down' => "50%下載", + 'row_category_icons' => "分類圖標", + 'text_team' => "製作組", + 'text_audio_codec' => "音頻編碼", + 'text_sub_category' => "次分類", + 'select_medium' => "中", + 'row_tooltip_last_post' => "懸浮提示最新帖子", + 'checkbox_last_post_note' => "(如果不喜歡懸浮提示,可關閉此項)", + 'row_network_bandwidth' => "網絡帶寬", + 'text_downstream_rate' => "下行帶寬", + 'text_upstream_rate' => "上行帶寬", + 'text_isp' => "互聯網服務提供商", + 'text_show_title' => "顯示標題", + 'text_show_small_description' => "顯示副標題", + 'row_show_advertisements' => "察看廣告", + 'text_can_turn_off_advertisement' => "及以上等級用戶可選取不察看廣告", + 'text_buy_no_advertisement' => "及以上等級用戶可用魔力值兌換一定期限內不察看廣告的許可權,點擊", + 'text_bonus_center' => "這裡", + 'text_show_advertisement_note' => "我想看到廣告", + 'row_promotion_link' => "宣傳鏈結", + 'text_update_promotion_link' => "更新宣傳鏈結", + 'text_read_more' => "了解更多" +); + +?> diff --git a/lang/cht/lang_userdetails.php b/lang/cht/lang_userdetails.php new file mode 100644 index 00000000..19a87478 --- /dev/null +++ b/lang/cht/lang_userdetails.php @@ -0,0 +1,145 @@ + "錯誤", + 'std_no_such_user' => "不存在該ID的用戶!", + 'head_details_for' => "用戶詳情 - ", + 'text_account_disabled_note' => "該賬號已被禁用!", + 'text_remove_from_friends' => "從好友清單中移除", + 'text_remove_from_blocks' => "從黑名單中移除", + 'text_add_to_friends' => "加入好友清單", + 'text_add_to_blocks' => "加入黑名單", + 'text_flush_ghost_torrents' => "清除多餘種子,點擊", + 'text_here' => "這裡", + 'row_invitation' => "邀請", + 'text_no_invitation' => "沒有邀請資格", + 'link_send_invitation' => "傳送邀請", + 'row_invited_by' => "邀請人", + 'row_join_date' => "加入日期", + 'row_last_seen' => "最近動向", + 'row_last_seen_location' => "最近動向(地點)", + 'row_email' => "郵箱", + 'row_users_ips' => "IP記錄", + 'row_ip_history' => "IP曆史", + 'text_user_earlier_used' => "該用戶在以前使用了", + 'text_different_ips' => "個不同的IP位址", + 'row_ip_address' => "目前IP", + 'row_bt_client' => "BT用戶端", + 'row_uploaded' => "上傳量", + 'row_downloaded' => "下載量", + 'row_share_ratio' => "分享率", + 'row_internet_speed' => "網路頻寬", + 'row_gender' => "性別", + 'row_donated' => "捐贈", + 'row_avatar' => "頭像", + 'row_class' => "等級", + 'row_torrent_comment' => "種子評論", + 'link_view_comments' => "檢視評論", + 'row_forum_posts' => "論壇帖子", + 'link_view_posts' => "檢視帖子", + 'row_karma_points' => "魔力值", + 'row_uploaded_torrents' => "發布種子", + 'text_show_or_hide' => "[察看/隱藏]", + 'row_current_seeding' => "目前做種", + 'row_current_leeching' => "目前下載", + 'row_completed_torrents' => "完成種子", + 'row_incomplete_torrents' => "未完成種子", + 'text_public_access_denied' => "對不起,存取被用戶", + 'text_user_wants_privacy' => "拒絕。用戶想要保護其隱私。", + 'text_edit_user' => "編輯用戶", + 'row_title' => "頭銜", + 'row_privacy_level' => "隱私級別", + 'radio_low' => "低", + 'radio_normal' => "普通", + 'radio_strong' => "高", + 'row_avatar_url' => "頭像URL", + 'row_signature' => "簽名", + 'row_donor_status' => "捐贈狀態", + 'row_donor' => "捐贈", + 'radio_yes' => "是", + 'radio_no' => "否", + 'row_support' => "支援員", + 'row_support_language' => "支援語言", + 'row_support_for' => "支援內容", + 'row_comment' => "備注", + 'row_seeding_karma' => "魔力值", + 'row_warning_system' => "警告系統

    (不良行為)", + 'text_not_warned' => "未警告.", + 'text_arbitrary_duration' => "(Arbitrary duration)", + 'text_until' => "直到 ", + 'text_to_go' => "剩餘時間", + 'text_warn_for' => "警告時間", + 'text_week' => "周", + 'text_weeks' => "周", + 'text_unlimited' => "無限制", + 'text_reason_of_warning' => "警告原因", + 'text_times_warned' => "警告次數", + 'text_last_warning' => "最近一次警告", + 'text_not_warned_note' => "該用戶沒有被警告", + 'row_auto_warning' => "自動警告", + 'text_low_ratio' => "低分享率", + 'text_leech_warned' => "吸血", + 'text_for_unlimited_time' => "無期...", + 'row_movie_picker' => "批評家", + 'row_enabled' => "有效", + 'row_forum_post_possible' => "允許論壇發帖?", + 'row_upload_possible' => "允許上傳?", + 'row_download_possible' => "允許下載?", + 'row_change_username' => "改變用戶名", + 'row_change_email' => "改變郵箱位址", + 'row_change_password' => "改變密碼", + 'row_repeat_password' => "確認密碼", + 'row_amount_uploaded' => "上傳量", + 'row_amount_downloaded' => "下載量", + 'row_passkey' => "秘鑰", + 'checkbox_reset_passkey' => "重置秘鑰", + 'submit_okay' => "確定", + 'text_delete_user' => "移除用戶", + 'submit_delete' => "移除", + 'text_ago' => "以前", + 'title_show_or_hide' => "察看/隱藏", + 'title_download' => "下載:", + 'title_upload' => "上傳:", + 'title_male' => "男生", + 'title_female' => "女生", + 'title_not_available' => "未知", + 'title_send_pm' => "傳送短訊", + 'title_report_user' => "舉報用戶", + 'text_free' => "免費", + 'text_two_times_up' => "2X", + 'text_free_two_times_up' => "2X免費", + 'text_half_down' => "50%", + 'text_by' => "警告者:", + 'text_by_system' => "警告者:系統", + 'text_transaction_memo' => "交易備忘:", + 'row_pick_for' => "選片", + 'row_staff_duties' => "管理員職責/貴賓資格原因", + 'row_transfer' => "傳送", + 'row_sltime' => "BT時間", + 'text_seeding_leeching_time_ratio' => "做種/下載時間比率", + 'text_seeding_time' => "做種時間", + 'text_leeching_time' => "下載時間", + 'text_since' => "自", + 'row_compatibility' => "趣味相投度", + 'text_unknown' => "未知", + 'text_super' => "超級", + 'text_very_high' => "很高", + 'text_high' => "較高", + 'text_medium' => "普通", + 'text_low' => "較低", + 'text_very_low' => "很低", + 'row_invites' => "邀請", + 'js_delete_user_note' => "如果確信的話,你現在可以移除該用戶。", + 'std_sorry' => "對不起", + 'std_user_not_confirmed' => "該用戶還未通過驗證!", + 'text_not_available' => "N/A", + 'row_vip_by_bonus' => "貴賓資格為通過魔力值獲得", + 'text_vip_by_bonus_note' => "該貴賓資格是否為通過魔力值換取。", + 'row_vip_until' => "貴賓資格結束時間", + 'text_vip_until_note' => "時間格式為'年年年年-月月-日日 時時:分分:秒秒'。貴賓資格結束的時間。'貴賓資格為通過魔力值獲得'必須設為'是'此規則才能生效。", + 'row_show_ad' => "察看廣告", + 'row_no_ad_until' => "不顯示廣告直到", + 'text_no_ad_until_note' => "時間格式為'年年年年-月月-日日 時時:分分:秒秒'。無廣告待遇結束的時間。", +); +?> diff --git a/lang/cht/lang_userhistory.php b/lang/cht/lang_userhistory.php new file mode 100644 index 00000000..8f42f3dc --- /dev/null +++ b/lang/cht/lang_userhistory.php @@ -0,0 +1,26 @@ + "錯誤", + 'std_permission_denied' => "你沒有該權限", + 'std_no_posts_found' => "沒有找到該帖子", + 'head_posts_history' => "帖子歷史", + 'text_posts_history_for' => "用戶帖子歷史-", + 'text_forum' => "論壇: ", + 'text_topic' => "主題: ", + 'text_post' => "帖子: ", + 'text_new' => "新!", + 'text_last_edited' => "最後被", + 'text_at' => "編輯于", + 'std_no_comments_found' => "沒有找到評論", + 'head_comments_history' => "評論歷史", + 'text_comments_history_for' => "用戶評論歷史-", + 'text_torrent' => "種子: ", + 'text_comment' => "評論: ", + 'std_history_error' => "錯誤", + 'std_unkown_action' => "未知行為", + 'std_invalid_or_no_query' => "無效或沒有該項。" +); + +?> diff --git a/lang/cht/lang_users.php b/lang/cht/lang_users.php new file mode 100644 index 00000000..1a285d74 --- /dev/null +++ b/lang/cht/lang_users.php @@ -0,0 +1,20 @@ + "用戶", + 'text_users' => "

    用戶

    \n", + 'text_search' => "搜索:", + 'select_any_class' => "(任何等級)", + 'submit_okay' => "給我搜", + 'text_prev' => "上一頁", + 'text_next' => "下一頁", + 'col_user_name' => "用戶名", + 'col_registered' => "註冊", + 'col_last_access' => "最後訪問", + 'col_class' => "等級", + 'col_country' => "國家/地區", + 'select_any_country'=> "(任何國家/地區)", +); + +?> diff --git a/lang/cht/lang_viewfilelist.php b/lang/cht/lang_viewfilelist.php new file mode 100644 index 00000000..1858b30e --- /dev/null +++ b/lang/cht/lang_viewfilelist.php @@ -0,0 +1,8 @@ + "路徑", +); + +?> \ No newline at end of file diff --git a/lang/cht/lang_viewnfo.php b/lang/cht/lang_viewnfo.php new file mode 100644 index 00000000..8dfd4bb0 --- /dev/null +++ b/lang/cht/lang_viewnfo.php @@ -0,0 +1,14 @@ + "奧哦", + 'head_view_nfo' => "查看NFO文件", + 'text_nfo_for' => "NFO文件:", + 'title_dos_vy' => "查看DOS樣式", + 'text_dos_vy' => "DOS樣式", + 'title_windows_vy' => "查看Windows樣式", + 'text_windows_vy' => "Windows樣式" +); + +?> \ No newline at end of file diff --git a/lang/cht/lang_viewpeerlist.php b/lang/cht/lang_viewpeerlist.php new file mode 100644 index 00000000..bec8c0f1 --- /dev/null +++ b/lang/cht/lang_viewpeerlist.php @@ -0,0 +1,28 @@ + "用戶", + 'col_location' => "地點", + 'col_connectable' => "可連接", + 'col_uploaded' => "上傳", + 'col_rate' => "即時速度", + 'col_av_rate' => "平均速度", + 'col_downloaded' => "下載", + 'col_ratio' => "分享率", + 'col_complete' => "完成", + 'col_connected' => "連接時間", + 'col_idle' => "最近匯報", + 'col_client' => "用戶端", + 'text_anonymous' => "匿名", + 'text_unknown' => "(未知)", + 'text_seeders' => "做種者", + 'text_leechers' => "下載者", + 'row_seeders' => "做種者", + 'row_leechers' => "下載者", + 'text_yes' => "是", + 'text_no' => "否", + 'text_inf' => "無限" +); + +?> diff --git a/lang/cht/lang_viewsnatches.php b/lang/cht/lang_viewsnatches.php new file mode 100644 index 00000000..c944f1d4 --- /dev/null +++ b/lang/cht/lang_viewsnatches.php @@ -0,0 +1,33 @@ + "完成詳情", + 'text_snatch_detail_for' => "種子完成詳情 - ", + 'text_users_top_finished_recently' => "頂部的用戶最後完成下載", + 'col_username' => "用戶名", + 'col_uploaded' => "上傳", + 'col_downloaded' => "下載", + 'col_ratio' => "分享率", + 'col_when_completed' => "完成", + 'col_last_action' => "最近動向", + 'col_se_time' => "做種時間", + 'col_le_time' => "下載時間", + 'col_seeding' => "做種", + 'col_pm_user' => "短訊", + 'col_report_user' => "舉報", + 'col_on_or_off' => "線上", + 'text_global' => "全局", + 'text_torrent' => "本種", + 'text_yes' => "是", + 'text_no'=> "否", + 'title_report' => "舉報", + 'col_ip' => "IP", + 'text_per_second' => "/秒", + 'text_anonymous' => "匿名", + 'text_inf' => "無限", + 'std_sorry' => "對不起", + 'text_no_snatched_users' => "還沒有用戶完成該種子。", +); + +?> diff --git a/lang/en/lang_aboutnexus.php b/lang/en/lang_aboutnexus.php new file mode 100644 index 00000000..685dd3d0 --- /dev/null +++ b/lang/en/lang_aboutnexus.php @@ -0,0 +1,38 @@ + "Version", + 'text_version_note' => "This tracker ".$SITENAME." is powered by ".PROJECTNAME.". The following is version detail.", + 'text_main_version' => "Main Version", + 'text_sub_version' => "Sub Version", + 'text_release_date' => "Release Date", + 'text_authorize_to' => "Authorized to", + 'text_authorization_type' => "Authorization Type", + 'text_commercial' => "Commercial", + 'text_free' => "Free", + 'text_nexus' => "About ", + 'text_nexus_note' => " is initiated by a bunch of guys in Zhejiang University, China who call themselves 'Nexus Team'. It is dedicated to be the replacement of TBSource project and present a complete solution to create a resource sharing community with members of credit, order and knowledge.

    +The first stage of ".PROJECTNAME." forks from TBSource. We offer an extensive feature set that does not exist in or far superior to the original TBSource code with greatly improved code efficiency. Besides TBSource, we also borrow some ideas or code from other private trackers, e.g. Bit-HDTV, What.cd, SceneTorrents.", + 'text_authorization' => "About Authorization", + 'text_authorization_note' => "If you like to use ".PROJECTNAME." to power your tracker, feel free to contact us.", + 'text_translation' => "About Translation", + 'text_translation_note' => " supports user-side site language switch. The master language is English.

    If your language is not (yet) available and you are interested in translating it, please read the translation HOWTO and contact us. We always welcome new translations. Also, the available translations can always use a helping hand, especially those marked as outdate, incomplete or in need of new translators.", + 'text_flag' => "Flag", + 'text_language' => "Language", + 'text_state' => "State", + 'text_stylesheet' => "About Stylesheet", + 'text_stylesheet_note' => "The layout of ".PROJECTNAME." is fully CSS-based designed, which allows maximum user interface customization and makes adding new stylesheets easy.

    The following is a list of currently available stylesheets at this tracker ".$SITENAME.". If you want more stylesheets or feel like to design your own one, contact us.", + 'text_name' => "Name", + 'text_designer' => "Designer", + 'text_comment' => "Comment", + 'text_contact' => "Contact ", + 'text_contact_note' => "Wanna join us? Get suggestions or find bugs? Talk about business? Contact us in any of the following ways.", + 'text_web_site' => "Web Site", + 'text_email' => "Email", + 'text_msn' => "MSN", + 'text_qq' => "QQ", + 'text_telephone' => "Tele.", +); + +?> diff --git a/lang/en/lang_admanage.php b/lang/en/lang_admanage.php new file mode 100644 index 00000000..1dfdf6d7 --- /dev/null +++ b/lang/en/lang_admanage.php @@ -0,0 +1,103 @@ + "Ad Management", + 'text_ad_management' => "Ad Management", + 'text_add_ad' => "Add Ad", + 'text_header' => "Header", + 'text_footer' => "Footer", + 'text_below_navigation' => "Below Navigation", + 'text_below_searchbox' => "Below Searchbox", + 'text_torrent_detail' => "Torrent Detail", + 'text_comment_page' => "Comment Page", + 'text_inter_overforums' => "Inter Overforums", + 'text_forum_post_page' => "Forum Post Page", + 'text_popup' => "Popup", + 'text_no_ads_yet' => "No ads yet!", + 'col_enabled' => "Enabled", + 'col_name' => "Name", + 'col_position' => "Position", + 'col_order' => "Order", + 'col_type' => "Method", + 'col_start_time' => "Start Time", + 'col_end_time' => "End Time", + 'col_action' => "Action", + 'text_yes' => "Yes", + 'text_no' => "No", + 'text_bbcodes' => "BB codes", + 'text_xhtml' => "XHTML", + 'text_text' => "Text", + 'text_image' => "Image", + 'text_flash' => "Flash", + 'text_delete' => "Delete", + 'text_edit' => "Edit", + 'js_sure_to_delete_ad' => "Are you sure you want to delete this ad?", + 'std_error' => "Error", + 'std_invalid_id' => "Invalid ID", + 'std_invalid_position' => "Invalid position", + 'head_add_ad' => "Add Ad", + 'head_edit_ad' => "Edit Ad", + 'text_note' => "Note", + 'text_ad_detail' => "Ad Detail", + 'row_name' => "Name", + 'row_start_time' => "Start Time", + 'row_end_time' => "End Time", + 'row_enabled' => "Enabled", + 'row_order' => "Order", + 'row_type' => "Display Method", + 'row_image_url' => "Image URL", + 'row_image_link' => "Ad Link", + 'row_image_width' => "Image Width", + 'row_image_height' => "Image Height", + 'row_image_tooltip' => "Link Tooltip", + 'row_text_content' => "Text Content", + 'row_text_link' => "Ad Link", + 'row_text_size' => "Text Size", + 'row_bbcodes_code' => "BB codes", + 'row_xhtml_code' => "XHTML Code", + 'row_flash_url' => "Flash URL", + 'row_flash_width' => "Flash Width", + 'row_flash_height' => "Flash Height", + 'submit_submit' => "Sumbit", + 'text_ad' => "Advertisement", + 'text_header_note' => "Show at the top-right corner of every page. Recommended to use image or flash of size within 580 * 90. Only one ad will show. ", + 'text_footer_note' => "Show at the bottom of every page. Recommended size is 728 * 160. Only one ad will show. ", + 'text_below_navigation_note' => "Show right below navigation bar on every page. Recommended size is 728 * 90. Only one ad will show. ", + 'text_below_searchbox_note' => "Show right below searchbox on torrents page. Recommended size is 728 * 90. Only one ad will show. ", + 'text_torrent_detail_note' => "Show in torrent description on torrent detail page. Recommended size is 600 * 160. Only one ad will show. ", + 'text_comment_page_note' => "Show between comments on torrent detail page or offer detail page. Recommended size is 600 * 160. Several ads will show together. ", + 'text_inter_overforums_note' => "Show between overforums on forum home page. Recommended size is 728 * 90. Several ads will show together.", + 'text_forum_post_page_note' => "Show between forum posts on forum topic detail page. Recommended size is 600 * 160. Several ads will show together.", + 'text_popup_note' => "Popup on every page. Very disturbing, use with caution. Recommended size is 468 * 90", + 'text_name_note' => "Just a name to call the ad.", + 'text_start_time_note' => "In format of YYYY-MM-DD hh:mm:ss, e.g. '2007-12-24 21:00:00'. The time since when the ad becomes available.
    If blank, the ad becomes available immediately.", + 'text_end_time_note' => "In format of YYYY-MM-DD hh:mm:ss, e.g. '2008-01-24 21:00:00'. The time until when the ad is available.
    If blank, the ad will never become unavailable unless new ads are added. ", + 'text_order_note' => "The priority of ads. Value '0' gets the top priority.
    When several ads are available for a position, the one with the highest priority will show if the position allows only one ad, and those with higher priorities will show on top if the position allows several ads. When several available ads have the same priority value, the most recently added one has the highest priority. ", + 'text_enabled_note' => "Only enabled ads will show. ", + 'text_type_note' => "Choose the display method of ads. ", + 'text_image_url_note' => "The URL of the image file.
    Both relative path (e.g. 'pic/ad.jpg') or absolute path (e.g. 'http://www.nexusphp.com/ad.jpg') are Okay. ", + 'text_image_link_note' => "The link of the ad, e.g. 'http://www.nexusphp.com/ad.html'. ", + 'text_image_width_note' => "In pixels. The width at which the image is shown. ", + 'text_image_height_note' => "In pixels. The height at which the image is shown. ", + 'text_image_tooltip_note' => "The text shown on tooltip of the link. ", + 'text_text_content_note' => "The content of text ad. ", + 'text_text_link_note' => "The link of the ad, e.g. 'http://www.nexusphp.com/ad.html'. ", + 'text_text_size_note' => "The font size of the text ad. Could be in pt, px or em, e.g. '30pt'. If none is defined, '30pt' is assumed.", + 'text_bbcodes_code_note' => "What is BB codes? See ", + 'text_here' => "here", + 'text_xhmtl_code_note' => "You should avoid using XHTML not only because incorrect XHTML code could easily mess up the whole page, but also because it's INSECURE. If you have to, make sure the XHTML code is secure and correct.
    NOTE: Please follow the XHTML 1.0 Transitional specification, not HTML 4.01.", + 'text_flash_url_note' => "The URL of the Flash file.
    Both relative path (e.g. 'pic/flash.demo.swf') or absolute path (e.g. 'http://www.nexusphp.com/flash.demo.swf') are Okay.", + 'text_flash_width_note' => "In pixels. The width at which the Flash is shown. ", + 'text_flash_height_note' => "In pixels. The height at which the Flash is shown. ", + 'std_missing_form_data' => "Missing form data.", + 'std_invalid_type' => "Invalid display method.", + 'std_success' => "Success", + 'std_edit_success' => "The ad is edited. ", + 'std_add_success' => "The ad is added. ", + 'text_unlimited' => "unlimited", + 'std_go_back' => "Go back to ads list", + 'col_clicks' => "Clicks" +); + +?> diff --git a/lang/en/lang_adredir.php b/lang/en/lang_adredir.php new file mode 100644 index 00000000..eaaf6fc4 --- /dev/null +++ b/lang/en/lang_adredir.php @@ -0,0 +1,11 @@ + "Error", + 'std_ad_system_disabled' => "Ad system disabled.", + 'std_invalid_ad_id' => "Invalid ad id", + 'std_no_redirect_url' => "No redirect URL." +); + +?> diff --git a/lang/en/lang_attachment.php b/lang/en/lang_attachment.php new file mode 100644 index 00000000..e679721d --- /dev/null +++ b/lang/en/lang_attachment.php @@ -0,0 +1,20 @@ + "Failure! Nothing received!", + 'text_file_number_limit_reached' => "Failure! You cannot upload more files for the moment. Please wait some time.", + 'text_file_size_too_big' => "Failure! The file size is too big.", + 'text_file_extension_not_allowed' => "Failure! The file extension is not allowed.", + 'text_invalid_image_file' => "Failure! Invalid image file.", + 'text_cannot_move_file' => "Failure! Cannot move uploaded file.", + 'submit_upload' => "Upload", + 'text_left' => "Today Left: ", + 'text_of' => " of ", + 'text_size_limit' => "Size: ", + 'text_file_extensions' => "File Extensions: ", + 'text_mouse_over_here' => "mouse here", + 'text_small_thumbnail' => "small thumbnail", +); + +?> diff --git a/lang/en/lang_bitbucket-upload.php b/lang/en/lang_bitbucket-upload.php new file mode 100644 index 00000000..855f9545 --- /dev/null +++ b/lang/en/lang_bitbucket-upload.php @@ -0,0 +1,36 @@ + "Upload failed", + 'std_nothing_received' => "Nothing received!", + 'std_file_too_large' => "Sorry, that file is too large for the bit-bucket.", + 'std_bad_file_name' => "Bad file name.", + 'std_file_with_the_name' => "Sorry, a file with the name ", + 'std_already_exists' => " already exists in the bit-bucket.", + 'std_error' => "Error", + 'std_invalid_image_format' => "Invalid extension: gif, jpg or png only!", + 'std_image_processing_failed' => "Image processing failed", + 'std_sorry_the_uploaded' => "Sorry, the uploaded ", + 'std_failed_processing' => " failed processing. Try resaving the image in a graphic editor. Thanks.", + 'std_success' => "Success", + 'std_use_following_url' => "Use the following URL to access the file: ", + 'std_upload_another_file' => "Upload another file", + 'std_image' => "Image ", + 'std_need_not_rescaling' => "doesn't require rescaling", + 'std_rescaled_from' => " rescaled from ", + 'std_to' => " to ", + 'std_profile_updated' => "
    Note: Your profile has been updated!", + 'head_avatar_upload' => "AVATAR Upload", + 'text_avatar_upload' => "AVATAR Upload", + 'text_upload_directory_unwritable' => "ATTENTION: Upload directory isn't writable. Please contact the administrator about this problem!", + 'text_disclaimer' => "Disclaimer
    Do not upload unauthorized or illegal pictures.
    Uploaded pictures should be considered \"public domain\". So do not upload pictures you wouldn't want a stranger to have access to.
    Uploaded images will be scaled by keeping aspect ratio if height exceeds ", + 'text_disclaimer_two' => " pixels or width exceeds ", + 'text_disclaimer_three' => " pixels
    Maximum file size is ", + 'text_disclaimer_four' => " bytes.", + 'row_file' => "File", + 'checkbox_avatar_shared' => "Other users can use my avatar (It's choosable in usercp).", + 'submit_upload' => "Upload", +); + +?> diff --git a/lang/en/lang_catmanage.php b/lang/en/lang_catmanage.php new file mode 100644 index 00000000..70165ee3 --- /dev/null +++ b/lang/en/lang_catmanage.php @@ -0,0 +1,81 @@ + "Category Management", + 'text_category_management' => "Category Management", + 'text_manage' => "Manage", + 'text_searchbox' => "Searchbox", + 'text_category_icons' => "Category icon pack", + 'text_second_icons' => "Second icons", + 'text_categories' => "Categories", + 'text_sources' => "Sources", + 'text_media' => "Media", + 'text_codecs' => "Codecs", + 'text_standards' => "Standards", + 'text_processings' => "Processings", + 'text_teams' => "Teams", + 'text_audio_codecs' => "Audio Codecs", + 'std_error' => "Error", + 'std_invalid_type' => "Invalid type.", + 'text_add' => "Add", + 'text_no_record_yet' => "No record yet!", + 'col_id' => "ID", + 'col_name' => "Name", + 'col_order' => "Order", + 'col_action' => "Action", + 'text_delete' => "Delete", + 'text_edit' => "Edit", + 'js_sure_to_delete_this' => "Are you sure you want to delete this?", + 'col_sub_category' => "Subcategory", + 'text_per_row' => "Items/Row", + 'text_padding' => "Padding", + 'text_enabled' => "Enabled", + 'text_disabled' => "Disabled", + 'col_folder' => "Icon Pack Folder", + 'text_multi_language' => "Multi-lang.", + 'text_second_icon' => "Second Icon", + 'text_css_file' => "CSS file", + 'text_none' => "none", + 'text_css_file_note' => "CSS file for this icon pack. Enter the full path, e.g. 'styles/scenetorrents.css'. Leave it blank if none.
    Allowed Characters: [a-z] (in lower case), [0-9], [_./].", + 'text_designer' => "Designer", + 'text_comment' => "Comment", + 'text_yes' => "Yes", + 'text_no' => "No", + 'col_image' => "Image", + 'text_class_name' => "class attribute", + 'col_mode' => "Mode", + 'std_invalid_id' => "Invalid id", + 'submit_submit' => "Submit", + 'text_subcategory_name_note' => "Don't use long name. Recommend less than 10 letters.", + 'text_order_note' => "Ascendantly, i.e. '0' comes first.", + 'row_searchbox_name' => "Searchbox Name", + 'text_searchbox_name_note' => "Allowed Characters: [a-z] (in lower case), [0-9], [_./].", + 'row_show_sub_category' => "Show sub-category", + 'text_show_sub_category_note' => "Check the sub-categories you want to enable.", + 'row_items_per_row' => "Items per row", + 'text_items_per_row_note' => "Set how many items should show in a row in searchbox, e.g. '8'.", + 'row_padding_between_items' => "Padding between items", + 'text_padding_between_items_note' => "In pixels. The horizional padding space between items in searchbox, e.g. '3'.", + 'text_category_icon_name_note' => "Allowed Characters: [a-z] (in lower case), [0-9], [_./].", + 'text_folder_note' => "The folder name of the icon pack. Allowed Characters: [a-z] (in lower case), [0-9], [_./].
    MUST add a trailing slash (/) at the end, e.g. 'mycaticon/'", + 'text_multi_language_note' => "Whether use different category icons for different languages. If set to 'yes', put several packs of icons in several folders named 'en', 'chs', etc.", + 'text_second_icon_note' => "Whether use second icons for additional information. If set to 'yes', put second icons in a folder named 'additional' together with normal icons.", + 'text_designer_note' => "The person who designed the icon pack.", + 'text_comment_note' => "Infomation about the icon pack.", + 'text_icon_directory_note' => "You need to put the icons in the right directory for these settings to work. Put the normal icons in 'pic/category/searchbox_name/icon_pack_folder[language_short_name/]' and the second icons in 'pic/category/searchbox_name/icon_pack_folder[language_short_name/]additional/'.
    Don't get it? See if the following examples could help:
    • When
      • searchbox_name='nhd'
      • icon_pack_folder='scenetorrents/'
      • multi-lang='yes'
      • second_icon='no'
      you should put an English normal icon file for movies (e.g. 'movies.png') in 'pic/category/nhd/scenetorrents/en/' .
    • When
      • searchbox_name='chd'
      • icon_pack_folder='nanosofts/'
      • multi-lang='no'
      • second_icon='yes'
      you should put a normal icon file for movies (e.g. movies.png) in 'pic/category/chd/nanosofts/' and an additional icon file (e.g. 'bdh264.png') in 'pic/category/chd/nanosofts/additional/'.
    ", + 'text_second_icon_name_note' => "Don't use long name. Recommend less than 10 letters.", + 'text_image_note' => "The name of image file. Allowed Characters: [a-z] (in lower case), [0-9], [_./].", + 'row_selections' => "Selections", + 'text_selections_note' => "If a selection is not defined, all options from the selection are allowed for the rule. At least one selection should be defined.", + 'row_category_name' => "Category name", + 'text_category_name_note' => "Don't use long name. Recommend less than 10 letters.", + 'row_mode' => "Mode", + 'text_class_name_note' => "The value of 'class' attribute of the image. Leave it blank if none. Allowed Characters: [a-z] (in lower case), [0-9], [_], and the first letter must be in [a-z].", + 'std_missing_form_data' => "Missing form data.", + 'std_invalid_character_in_filename' => "Invalid character in filename ", + 'std_must_define_one_selection' => "You must define at least one selection!", + 'std_invalid_mode_id' => "Invalid mode id." +); + +?> diff --git a/lang/en/lang_cheaterbox.php b/lang/en/lang_cheaterbox.php new file mode 100644 index 00000000..f344c671 --- /dev/null +++ b/lang/en/lang_cheaterbox.php @@ -0,0 +1,28 @@ + "Oho!", + 'std_no_suspect_detected' => "No suspect detected yet.", + 'head_cheaterbox' => "Cheaterbox", + 'text_cheaterbox' => "Cheaterbox BETA", + 'col_added' => "Added", + 'col_suspect' => "Suspect", + 'col_hit' => "Hit", + 'col_torrent' => "Torrent", + 'col_ul' => "UL", + 'col_dl' => "DL", + 'col_ann_time' => "Ann. Time", + 'col_seeders' => "Seeders", + 'col_leechers' => "Leechers", + 'col_comment' => "Comment", + 'col_dealt_with' => "Dealt With", + 'col_action' => "Act.", + 'text_torrent_does_not_exist' => "Torrent doesn't exist or is deleted", + 'text_yes' => "Yes", + 'text_no' => "No", + 'submit_set_dealt' => "Set Dealt", + 'submit_delete' => "Delete" +); + +?> diff --git a/lang/en/lang_checkuser.php b/lang/en/lang_checkuser.php new file mode 100644 index 00000000..7ef3d67a --- /dev/null +++ b/lang/en/lang_checkuser.php @@ -0,0 +1,17 @@ + "Error", + 'std_no_user_id' => "No user with this ID!", + 'std_no_permission' => "You have no permission", + 'head_detail_for' => "Details for ", + 'text_account_disabled' => "

    This account has been disabled!

    ", + 'row_join_date' => "Join date", + 'row_gender' => "Gender", + 'row_email' => "E-Mail", + 'row_ip' => "IP", + 'submit_confirm_this_user' => "Confirm this user" +); + +?> diff --git a/lang/en/lang_comment.php b/lang/en/lang_comment.php new file mode 100644 index 00000000..8883bacb --- /dev/null +++ b/lang/en/lang_comment.php @@ -0,0 +1,51 @@ + "Error", + 'std_comment_flooding_denied' => "Comment Flooding Not Allowed. Please wait ", + 'std_before_posting_another' => " second(s) before posting another comment.", + 'std_no_torrent_id' => "No torrent with this ID.", + 'std_no_comment_id' => "No comment with this ID", + 'std_comment_body_empty' => "Comment body cannot be empty!", + 'head_add_comment_to' => "Add a comment to ", + 'text_add_comment_to' => "Add a comment to ", + 'submit_okay' => "Okay", + 'text_comments_in_reverse_order' => "Most recent comments, in reverse order\n", + 'std_invalid_id' => "Invalid ID.", + 'std_permission_denied' => "Permission denied.", + 'head_edit_comment_to' => "Edit comment to ", + 'text_edit_comment_to' => "Edit comment to ", + 'std_delete_comment' => "Delete comment", + 'std_delete_comment_note' => "You are about to delete a comment. Click\n", + 'std_here_if_sure' => ">here if you are sure.", + 'head_original_comment' => "Original comment", + 'text_original_content_of_comment' => "Original contents of comment ", + 'std_unknown_action' => "Unknown action.", + 'std_no_review_id' => "No review with this ID", + 'std_review_body_empty' => "Review body cannot be empty!", + 'text_reviews_in_reverse_order' => "

    Most recent reviews, in reverse order

    \n", + 'head_edit_review_to' => "Edit review to ", + 'text_edit_review_to' => "Edit review to ", + 'std_delete_review' => "Delete review", + 'std_delete_review_note' => "You are about to delete a review. Click\n", + 'head_original_review' => "Original review", + 'text_original_content_of_review' => "Original contents of review ", + 'std_unknown_action' => "Unknown action.", + 'row_user_comment' => "User Comment", + 'row_editor_notes' => "Editor's Notes", + 'row_bouns_change' => "Bonus Change", + 'text_bouns_change_notes' => " 0 to 1000, based on the quality of review(over 1000 will be treated as 1000 and others not in the range will be treated as 0)", + 'std_review_no_external_info' => "Could not mark comments with no external info!", + 'std_review_unmark' => "Unmark Review", + 'std_unmark_review_note' => "You are about to unmark a review. Click\n", + 'row_original_torrent' => "Original Torrent", + 'text_no_exists' => "Not Exists Any More!", + 'text_torrent_id' => " Torrent ID: ", + 'text_back' => "back", + 'text_body' => "Body", + 'text_compose' => "Compose", + 'text_edit' => "Edit", +); + +?> diff --git a/lang/en/lang_confirm_resend.php b/lang/en/lang_confirm_resend.php new file mode 100644 index 00000000..e02aa86e --- /dev/null +++ b/lang/en/lang_confirm_resend.php @@ -0,0 +1,37 @@ + "Send confirmation e-mail failed", + 'std_fields_blank' => "Don't leave any fields blank.", + 'std_invalid_email_address' => "Invalid email address!", + 'std_email_not_found' => "The email address was not found in the database.\n", + 'std_user_already_confirm' => "User using this email address is already confirmed.\n", + 'std_passwords_unmatched' => "The passwords didn't match! Must've typoed. Try again.。", + 'std_password_too_short' => "Sorry, password is too short (min is 6 chars)", + 'std_password_too_long' => "Sorry, password is too long (max is 40 chars)", + 'std_password_equals_username' => "Sorry, password cannot be same as user name.", + 'std_error' => "Error", + 'std_database_error' => "Database error. Please contact an administrator about this.", + 'text_resend_confirmation_mail_note' => "

    Send confirmation mail again

    Use the form below to have your confirmation mail send to you again.

    You must be registered within 1 day and haven't confirmed,
    otherwise your pending account might be deleted and you should register again.

    Note: ".$maxloginattempts." failed attempts in a row will result in banning your ip!

    ", + 'row_registered_email' => "Registered email: ", + 'row_new_password' => "New password: ", + 'text_password_note' => "Minimum is 6 characters", + 'row_enter_password_again' => "Enter password again: ", + 'submit_send_it' => "Send It!", + 'text_you_have' => "You have ", + 'text_remaining_tries' => " remaining tries.", + + 'mail_title' => " User Registration Confirmation(Re-Send)", + 'mail_this_link' => "THIS LINK", + 'mail_here' => "HERE", + 'mail_one' => "Hi ", + 'mail_two' => ",

    You have requested a new confirmation email on ".$SITENAME." and you have
    specified this address ", + 'mail_three' => " as user contact.

    If you did not do this, please ignore this email. The person who entered your
    email address had the IP address ", + 'mail_four' => ". Please do not reply.

    To confirm your user registration, you have to follow ", + 'mail_four_1' => "

    If the Link above is broken or expired, try to send a new confirmation email again from ", + 'mail_five' => "

    After you do this, you will be able to use your new account. If you fail to
    do this, your account will be deleted within 24 hours. We urge you to read
    the RULES and FAQ before you start using ".$SITENAME.".

    Please Note: If you did not register for ".$SITENAME.", please report this email to ".$REPORTMAIL."

    ------
    Yours,
    The ".$SITENAME." Team.", + 'text_select_lang' => "Select Site Language: ", + 'std_need_admin_verification' => "Account needs manual verification from administrators." +); +?> diff --git a/lang/en/lang_contactstaff.php b/lang/en/lang_contactstaff.php new file mode 100644 index 00000000..f199661c --- /dev/null +++ b/lang/en/lang_contactstaff.php @@ -0,0 +1,12 @@ + "Contact Staff", + 'text_message_to_staff' => "Send message to Staff", + 'row_subject' => "Subject", + 'row_body' => "Body", + 'submit_send_it' => "Send It!" +); + +?> \ No newline at end of file diff --git a/lang/en/lang_delete.php b/lang/en/lang_delete.php new file mode 100644 index 00000000..2ee611e6 --- /dev/null +++ b/lang/en/lang_delete.php @@ -0,0 +1,17 @@ + "Delete failed!", + 'std_missing_form_date' => "missing form data", + 'std_not_owner' => "You're not the owner! How did that happen?", + 'std_invalid_reason' => "Invalid reason ", + 'std_describe_violated_rule' => "Please describe the violated rule.", + 'std_enter_reason' => "Please enter the reason for deleting this torrent.", + 'head_torrent_deleted' => "Torrent deleted!", + 'text_go_back' => "Go back to whence you came", + 'text_back_to_index' => "Back to index", + 'text_torrent_deleted' => "Torrent deleted!" +); + +?> diff --git a/lang/en/lang_deletedisabled.php b/lang/en/lang_deletedisabled.php new file mode 100644 index 00000000..4f483d0b --- /dev/null +++ b/lang/en/lang_deletedisabled.php @@ -0,0 +1,12 @@ + "Delete Disabled", + 'text_delete_diasabled' => "Delete Disabled", + 'submit_delete_all_disabled_users' => "Delete all disabled users", + 'text_delete_disabled_note' => "If you click the following button, all disabled users at your site will be DELETED. NEVER click the button unless you are VERY SURE.", + 'text_users_are_disabled' => " users are deleted." +); + +?> diff --git a/lang/en/lang_deletemessage.php b/lang/en/lang_deletemessage.php new file mode 100644 index 00000000..396c985b --- /dev/null +++ b/lang/en/lang_deletemessage.php @@ -0,0 +1,12 @@ + "Bad message ID", + 'std_not_suggested' => "I wouldn't do that if i were you...", + 'std_not_in_inbox' => "The message is not in your Inbox.", + 'std_not_in_sentbox' => "The message is not in your Sentbox.", + 'std_unknown_pm_type' => "Unknown PM type." +); + +?> \ No newline at end of file diff --git a/lang/en/lang_details.php b/lang/en/lang_details.php new file mode 100644 index 00000000..610939b0 --- /dev/null +++ b/lang/en/lang_details.php @@ -0,0 +1,223 @@ + "Error", + 'std_no_torrent_id' => "No torrent with this ID", + 'head_details_for_torrent' => "Details for torrent ", + 'text_successfully_uploaded' => "Successfully uploaded!", + 'text_redownload_torrent_note' => "You should re-download the torrent and start seeding now.", + 'text_successfully_edited' => "Successfully edited!", + 'text_go_back' => "Go back to ", + 'text_whence_you_came' => "whence you came", + 'text_rating_added' => "Rating added!", + 'text_thanks_added' => "Your Thanks added!", + 'text_free' => "Free", + 'text_two_times_up' => "2X", + 'text_free_two_times_up' => "2X Free", + 'text_half_down' => "50%", + 'row_download' => "Download", + 'text_downloading_not_allowed' => "You are not allowed to download.", + 'row_small_description' => "Small Description", + 'row_info_hash' => "Info hash", + 'row_description' => "Description", + 'text_nfo' => "NFO", + 'text_view_nfo' => "[All Modes]", + 'row_imdb_url' => "IMDb URL", + 'row_subtitles' => "Subtitles", + 'text_no_subtitles' => "No subtitles available for this torrent", + 'submit_upload_subtitles' => "Upload Subtitle!", + 'row_info' => " Info", + 'text_imdb' => "IMDb", + 'text_lastfm' => "Last.fm", + 'text_douban' => "Douban", + 'text_not_ready' => " info not ready, click ", + 'text_here_to_retrieve' => "here to retrive from ", + 'text_someone_has_requested' => "Someone has requested to retrieve information from ", + 'text_please_be_patient' => " seconds ago, please be patient.", + 'text_information' => "Information:", + 'text_title' => " Title: ", + 'text_title_chinese' => "Chinese title: ", + 'text_also_known_as' => " Also known as: ", + 'text_year' => " Year: ", + 'text_runtime' => " Runtime: ", + 'text_mins' => " mins", + 'text_votes' => " Votes: ", + 'text_rating' => " Rating: ", + 'text_language' => " Language: ", + 'text_country' => " Country: ", + 'text_all_genres' => " All Genres: ", + 'text_tagline' => " Tagline: ", + 'text_director' => " Director: ", + 'text_written_by' => " Written By: ", + 'text_performed_by' => " Performed By: ", + 'text_offcial_site' => " Offcial Site: ", + 'text_imdb_link' => " IMDb Link: ", + 'text_produced_by' => " Produced By: ", + 'text_music' => " Music: ", + 'text_plot_outline' => " Plot Outline:", + 'text_cast' => " Cast:", + 'text_as' => " as ", + 'text_recommended_comment' => " Recommended Comment:", + 'text_information_updated_at' => "

    NOTE: This infomation is updated at ", + 'text_might_be_outdated' => " and might be out of date now, click ", + 'text_here_to_update' => "here to update outdated info", + 'text_network_error' => "Warning! Network condition does not allow retrieving infomation from IMDb on the fly", + 'text_avprogress' => "Average Progress: ", + 'row_type' => "Type", + 'text_none_selected' => "(none selected)", + 'text_source' => "Source:", + 'text_codec' => "Codec:", + 'text_stardard' => "Standard:", + 'text_processing' => "Processing:", + 'row_quality' => "Quality", + 'col_type' => "Type", + 'col_name' => "Name", + 'col_quality' => "Quality", + 'title_size' => "Size", + 'title_time_added' => "Time Added", + 'title_seeders' => "Seeders", + 'title_leechers' => "Leechers", + 'col_special' => "Promotion?", + 'text_normal' => "normal", + 'row_other_copies' => "Other Copies", + 'row_last_seeder' => "Last Action: ", + 'text_ago' => " ago", + 'text_size' => "Size: ", + 'text_none_yet' => "none yet (needs at least ".$minvotes." votes and has got ", + 'text_only' => "only ", + 'text_none' => "none", + 'text_no_votes_yet' => "No votes yet", + 'text_invalid' => "invalid?", + 'text_out_of_five_with' => " out of 5 with ", + 'text_votes_total' => " vote(s) total", + 'text_login_to_vote' => "Log in to rate it", + 'select_add_rating' => "(add rating)", + 'submit_vote' => "Vote!", + 'text_rating' => "Rating: ", + 'row_time' => "Time", + 'row_hot_meter' => "Hot Meter", + 'text_views' => "Views: ", + 'text_hits' => "Hits: ", + 'text_snatched' => "Snatched: ", + 'text_view_snatches' => " x
    time(s)", + 'text_average_speed' => "Average Speed: ", + 'text_total_speed' => "Total Speed: ", + 'text_health_note' => "(These are averages over time so are not that accurate)", + 'text_traffic' => "Traffic: ", + 'text_no_traffic' => "No Traffic for the Moment", + 'text_status' => "Status: ", + 'text_dead' => "dead", + 'row_health' => "Health", + 'text_anonymous' => "Anonymous", + 'text_edit_torrent' => "Edit/Delete", + 'title_edit_torrent' => "Click to Edit or Delete this torrent", + 'row_upped_by' => "Uploaded by", + 'text_click' => "Click ", + 'text_num_files' => "Num files: ", + 'text_see_full_list' => "[View full list]", + 'text_files' => " files", + 'row_file_list' => "File list", + 'text_hide_list' => "[Hide list]", + 'row_action' => "Action", + 'text_download_torrent' => "Download torrent", + 'title_download_torrent' => "Download torrent", + 'text_ask_for_reseed' => "Ask for a reseed", + 'title_ask_for_reseed' => "Ask snatched users for reseeding when there's no seeder", + 'text_report_torrent' => "Report torrent", + 'title_report_torrent' => "Report torrent for violating rules", + 'text_here' => "here", + 'row_peers' => "Peers", + 'text_seeders' => " Seeder", + 'text_leechers' => " Leecher", + 'text_peers_total' => " Peer(s) total", + 'row_seeders' => "Seeders", + 'row_leechers' => "Leechers", + 'submit_say_thanks' => "Say Thanks!", + 'submit_you_said_thanks' => "You Said Thanks!", + 'text_no_thanks_added' => "no thanks added yet", + 'row_thanks_by' => "Thanks by", + 'row_torrent_info' => "Torrent Info", + 'text_torrent_structure' => "Structure: ", + 'text_torrent_info_note' => "[View Structure]", + 'head_comments_for_torrent' => "Comments for torrent ", + 'text_comments_for' => "Comments for ", + 'text_snatch_detail_for' => "Snatch Details for ", + 'text_users_top_finished_recently' => "The users at the top finished the download most recently", + 'col_username' => "Username", + 'col_uploaded' => "Uploaded", + 'col_downloaded' => "Downloaded", + 'col_when_completed' => "When Completed", + 'col_last_action' => "Last Action", + 'col_seeding' => "Seeding", + 'col_pm_user' => "PM User", + 'col_report_user' => "Report User", + 'col_on_or_off' => "On/Off", + 'text_global' => "Global", + 'text_torrent' => "Torrent", + 'text_yes' => "Yes", + 'text_no'=> "No", + 'text_add_a_comment' => "Add Comment", + 'text_no_comments_yet' => "No comments yet", + 'text_quick_comment' => "Quick Comment", + 'submit_add_comment' => "Add Comment", + 'title_pm' => "Send PM", + 'title_report' => "Report", + 'title_online' => "Online", + 'title_offline' => "Offline", + 'select_kewl' => "Kewl!", + 'select_pretty_good' => "Pretty good", + 'select_decent' => "Decent", + 'select_pretty_bad' => "Pretty bad", + 'select_sucks' => "Sucks!", + 'text_lastfm_not_ready' => "Last.fm info not ready, click ", + 'text_biography' => "Biography", + 'text_tags' => "Tags:", + 'text_similiar_artists' => "Similiar Artists:", + 'text_may_also_like' => "May Also Like:", + 'text_top_albums' => "Top Albums:", + 'text_listener' => " Listener", + 'text_scrobbled' => " Plays", + 'text_album' => " Album", + 'text_album_name' => "Name: ", + 'text_track_number_info' => "Tracks: ", + 'text_release_date' => "Release Date: ", + 'text_label' => "Label: ", + 'text_track_list' => "Track List: ", + 'text_track_number' => "#   ", + 'text_track_name' => "Track Name", + 'text_track_duration' => "Duration", + 'text_track_listener' => "Listener", + 'text_ratings_legend' => "Legend: ", + 'text_points' => " points", + 'text_totalvotes' => " votes", + 'text_author' => "Author: ", + 'text_from' => "from", + 'h1_user_reviews' => "Selected Users' Reviews", + 'h1_critic_reviews' => "Film Critics' Reviews", + 'h1_user_comments' => "User Comments", + 'text_local_link' => "Local Link", + 'text_at' => " at ", + 'row_basic_info' => "Basic Info", + 'text_site_rating' => " Rating", + 'text_blank' => " ", + 'text_creator' => "Creator: ", + 'submit_search_at_shooter' => "Search at Shooter", + 'submit_search_at_opensubtitles' => "Search at Opensubtitles", + 'title_show_or_hide' => "Show or Hide", + 'title_bookmark' => "Bookmark", + 'text_album_information' => "Album Information: ", + 'text_about_album' => "About this album: ", + 'text_artist' => " Artist", + 'text_artist_name' => "Artist: ", + 'text_medium' => "Medium:", + 'text_team' => "Team:", + 'text_audio_codec' => "Audio Codec:", + 'text_delete' => "Delete", + 'text_other_copies' => " Other Copies", + 'row_uploader_bandwidth' => "Uploader
    Bandwidth", + 'text_and_more' => " and more (thanks from ", + 'text_users_in_total' => " users in total)", +); + +?> diff --git a/lang/en/lang_donate.php b/lang/en/lang_donate.php new file mode 100644 index 00000000..a8659dea --- /dev/null +++ b/lang/en/lang_donate.php @@ -0,0 +1,31 @@ + "Sorry", + 'std_do_not_accept_donation' => "We don't accept donation at the moment.", + 'std_success' => "Success", + 'std_donation_success_note_one' => "Thank you for your donation! Your transaction has been completed. Please click ", + 'std_here' => "here", + 'std_donation_success_note_two' => " to send us the transaction information so we can credit your account!", + 'head_donation' => "Donation", + 'text_donate' => "Donate", + 'std_error' => "Error", + 'std_no_donation_account_available' => "No donation accounts are defined. Please report this to the staff.", + 'text_donation_note' => "Thanks for your interest in donating. Anything you could donate would be gratefully received no matter how small.", + 'text_donate_with_paypal' => "Donate with PayPal", + 'text_donate_paypal_note' => "1. Select your donation amount.
    2. Click PayPal button.
    3. Finish your payment at PayPal.", + 'text_select_donation_amount' => "Please select a donation amount: ", + 'select_choose_donation_amount' => "---Choose Donation Amount---", + 'select_other_donation_amount' => "Other Donation Amount", + 'text_usd_mark' => "$", + 'text_donation' => " Donation", + 'text_donate_with_alipay' => "Donate with Alipay", + 'text_donate_alipay_note_one' => "1. Click Alipay button.
    2. Choose 'pay to stranger'.
    3. Enter our account at Alipay ", + 'text_donate_alipay_note_two' => " and pay to it.
    4. Go on till you're done.", + 'text_after_donation_note_one' => "After you have donated, make sure to ", + 'text_send_us' => "Send Us", + 'text_after_donation_note_two' => " the transaction information so we can credit your account!", +); + +?> diff --git a/lang/en/lang_downloadnotice.php b/lang/en/lang_downloadnotice.php new file mode 100644 index 00000000..efe7f009 --- /dev/null +++ b/lang/en/lang_downloadnotice.php @@ -0,0 +1,38 @@ + "Download Notice", + 'text_client_banned_notice' => "Client banned notice", + 'text_client_banned_note' => "Hi!
    The tracker has detected that you have been using a banned BitTorrent client in the last connecting. Please read the following notice.", + 'text_low_ratio_notice' => "Low ratio notice", + 'text_low_ratio_note_one' => "WARNING: Your ratio is low! You must improve it within ", + 'text_low_ratio_note_two' => ", or you will lose your membership here. If you have no idea what your ratio is, read the following notice carefully.", + 'text_first_time_download_notice' => "First-time download notice", + 'text_first_time_download_note' => "Hi!
    Chances are it's your first time downloading a torrent from our tracker.
    There are probably a few things you should know before you continue. I will try to make this short :)", + 'text_this_is_private_tracker' => "This is a Private Tracker with ratio requirement", + 'text_private_tracker_note_one' => "This is a private tracker, which means we reserve the tracker for the exclusive usage of our registered members. ", + 'text_learn_more' => "Learn more about private tracker at ", + 'text_nexuswiki' => "NexusWiki", + 'text_private_tracker_note_two' => "You MUST keep a minimum required upload-to-download ratio, or you will lose your membership here. ", + 'text_see_ratio' => "See ratio requirement in ", + 'text_private_tracker_note_three' => "Your current ratio is always shown right below the navigation menu of the site. Please keep an eye on it.", + 'text_private_tracker_note_four' => "How to keep a good ratio?
    Well, the best way is to always leave your BitTorrent client running and keep on seeding the torrents you've downloaded until you delete the files.", + 'text_use_allowed_clients' => "Only use allowed BitTorrent clients", + 'text_allowed_clients_note_one' => "Well, there are quite a few BitTorrent clients out there. However, we ONLY accept some of them. Others (e.g. BitComet, Thunder) are banned here and would fail to connect our tracker. ", + 'text_why_banned' => "See why some clients are banned at ", + 'text_allowed_clients_note_two' => "You may find a complete list of allowed clients in the ", + 'text_allowed_clients_note_three' => ". If you are not sure which one to choose, consider the following two recommended clients: ", + 'title_download' => "Download ", + 'text_for' => "For ", + 'text_for_more_information_read' => "For more information, refer to the ", + 'text_rules' => "Rules", + 'text_and' => " and ", + 'text_faq' => "FAQ", + 'text_let_me_download' => "I will improve my ratio. ", + 'text_notice_not_show_again' => "Don't show this notice again. ", + 'text_notice_always_show' => "This notice will always show until you have improved your ratio. ", + 'submit_download_the_torrent' => "Download The Torrent", +); + +?> diff --git a/lang/en/lang_edit.php b/lang/en/lang_edit.php new file mode 100644 index 00000000..980be843 --- /dev/null +++ b/lang/en/lang_edit.php @@ -0,0 +1,72 @@ + "Edit torrent - ", + 'text_cannot_edit_torrent' => "Can't edit this torrent", + 'text_cannot_edit_torrent_note' => "You're not the rightful owner, or you're not logged in properly.\n", + 'row_torrent_name' => "Torrent name", + 'row_small_description' => "Small description", + 'row_nfo_file' => "NFO file", + 'radio_keep_current' => "Keep Current", + 'radio_update' => "Update", + 'radio_remove' => "Remove", + 'row_description' => "Description", + 'row_type' => "Type", + 'text_source' => "Source:", + 'select_choose_one' => "choose one", + 'text_codec' => "Codec:", + 'text_standard' => "Standard:", + 'text_processing' => "Processing:", + 'row_quality' => "Quality", + 'text_quality_note' => "Choose only for Video", + 'row_visible' => "Visible", + 'checkbox_visible' => "Visible on main page", + 'text_visible_note' => "Note that the torrent will automatically become visible when there's a seeder, and will become automatically invisible (dead) when there has been no seeder for a while. Use this switch to speed the process up manually. Also note that invisible (dead) torrents can still be viewed or searched for, it's just not the default.", + 'row_anonymous_uploader' => "Anonymous", + 'checkbox_anonymous_note' => "Check this box to hide the uploader of the torrent", + 'row_special_torrent' => "Promotion", + 'select_use_global_setting' => "use global setting", + 'select_forever' => "forever", + 'select_until' => "until", + 'text_keep_current' => "keep current", + 'text_ie_for' => "for ", + 'text_promotion_until_note' => "(Time format is YYYY-MM-DD hh:mm:ss)", + 'select_normal' => "normal", + 'select_free' => "free", + 'select_two_times_up' => "2x up", + 'select_free_two_times_up' => "free and 2x up", + 'select_half_down' => "50% down", + 'select_choose_torrent_state' => "Set torrent on promotion", + 'row_torrent_position' => "Torrent Postion", + 'row_recommended_movie' => "Recommended Movie", + 'select_choose_recommended_movie' => "Choose if the poster of a movie torrent will be shown on the main page", + 'select_hot' => "hot", + 'select_classic' => "classic", + 'select_recommended' => "recommended", + 'select_sticky' => "sticky", + 'select_choose_if_sticky' => "Choose if torrent will be sticky on the torrents page", + 'row_banned' => "Banned", + 'checkbox_banned' => "Banned", + 'submit_edit_it' => "Edit it!", + 'submit_revert_changes' => "Revert changes", + 'text_delete_torrent' => "Delete torrent - Reason:", + 'radio_dead' => "Dead", + 'text_dead_note' => " 0 seeders + 0 leechers = 0 peers total", + 'radio_dupe' => "Dupe", + 'radio_nuked' => "Nuked", + 'radio_rules' => "Rules", + 'text_req' => "(req)", + 'radio_other' => "Other", + 'submit_delete_it' => "Delete it!", + 'text_move_to_browse' => "Move to Torrents section as ", + 'text_move_to_special' => "Move to Music section as ", + 'text_medium' => "Medium:", + 'row_pick' => "Pick", + 'row_check' => "Check", + 'text_team' => "Group", + 'text_audio_codec' => "Audio Codec", + 'row_content' => "Content", +); + +?> diff --git a/lang/en/lang_faq.php b/lang/en/lang_faq.php new file mode 100644 index 00000000..7b5b7e79 --- /dev/null +++ b/lang/en/lang_faq.php @@ -0,0 +1,12 @@ + "FAQ", + 'text_welcome_to' => "Welcome to ", + 'text_welcome_content_one' => "The goal is to provide the absolutely high quality stuff. Therefore, only specially authorised users have permission to upload torrents. If you have access to 0-day stuff do not hesitate to contact us!

    This is a private tracker, and you have to register before you can get full access to the site.", + 'text_welcome_content_two' =>" Before you do anything here at ".$SITENAME.", we suggest you read the rules! There are only a few rules to abide by, but we do enforce them!

    Before you go any further you should read the ".$SITENAME." user agreement.", + 'text_contents' => "Contents", +); + +?> diff --git a/lang/en/lang_fastdelete.php b/lang/en/lang_fastdelete.php new file mode 100644 index 00000000..1a445114 --- /dev/null +++ b/lang/en/lang_fastdelete.php @@ -0,0 +1,13 @@ + "Delete failed!", + 'std_missing_form_data' => "missing form data", + 'text_no_permission' => "You're not authorised to delete this torrent, only moderators or above can do that. Please contact one if this is your torrent and you want to delete it.\n", + 'std_delete_torrent' => "Delete torrent", + 'std_delete_torrent_note' => "Sanity check: You are about to delete a torrent. Click", + 'std_here_if_sure' => " here if you are sure." +); + +?> diff --git a/lang/en/lang_forummanage.php b/lang/en/lang_forummanage.php new file mode 100644 index 00000000..643eae26 --- /dev/null +++ b/lang/en/lang_forummanage.php @@ -0,0 +1,38 @@ + "Forum Management", + 'text_forum_management' => "Forum Management", + 'text_edit_forum' => "Edit Forum", + 'row_forum_name' => "Forum name", + 'row_forum_description' => "Forum description", + 'row_overforum' => "Overforum", + 'row_moderator' => "Moderator", + 'text_moderator_note' => "Max 3 moderators. Separate them by ','.", + 'row_minimum_read_permission' => "Minimum read permission", + 'row_minimum_write_permission' => "Minimum write permission", + 'row_minimum_create_topic_permission' => "Minimum create topic permission", + 'row_forum_order' => "Forum order", + 'text_forum_order_note' => "Order by number ascendantly. That is, 0 shows on the topmost", + 'submit_edit_forum' => "Edit forum", + 'text_no_records_found' => "Sorry, no records were found!", + 'text_add_forum' => "Add Forum", + 'text_make_new_forum' => "Make new forum", + 'submit_overforum_management' => "Overforum Management", + 'submit_add_forum' => "Add Forum", + 'col_name' => "Name", + 'col_overforum' => "Overforum", + 'col_read' => "Read", + 'col_write' => "Write", + 'col_create_topic' => "Create Topic", + 'col_moderator' => "Moderator", + 'col_modify' => "Modify", + 'text_not_available' => "N/A", + 'text_edit' => "Edit", + 'text_delete' => "Delete", + 'js_sure_to_delete_forum' => "Are you sure you want to delete this forum?", + 'submit_make_forum' => "Make Forum" +); + +?> diff --git a/lang/en/lang_forums.php b/lang/en/lang_forums.php new file mode 100644 index 00000000..f3948496 --- /dev/null +++ b/lang/en/lang_forums.php @@ -0,0 +1,203 @@ + "There is no active user in forum now.", + 'text_stats' => "Stats", + 'text_our_members_have' => "Our members have made ", + 'text_posts_in_topics' => " posts in ", + 'text_in_topics' => " topics. ", + 'text_there' => "There ", + 'text_online_user' => " online user", + 'text_in_forum_now' => " in forum now. ", + 'std_no_post_found' => "No post found", + 'text_quick_jump' => "Quick jump: ", + 'submit_go' => "Go!", + 'std_bad_forum_id' => "Bad forum id", + 'text_new_topic_in' => "New topic in", + 'text_forum' => "forum", + 'std_forum_error' => "Forum error", + 'std_topic_not_found' => "Topic not found.", + 'text_reply_to_topic' => "Reply to topic: ", + 'text_compose' => "Compose", + 'std_error' => "Error", + 'std_no_post_id' => "No post with this ID", + 'submit_submit' => "Submit", + 'submit_preview' => "Preview", + 'text_tags' => "Tags", + 'text_smilies' => "Smilies", + 'text_ten_last_posts' => "10 last posts, in reverse order", + 'text_by' => "by ", + 'text_at' => "at ", + 'head_edit_forum' => "Edit forum", + 'text_edit_forum' => "Edit Forum", + 'row_forum_name' => "Forum Name", + 'row_description' => "Description", + 'row_permission' => "Permission", + 'text_minimum' => "Minimum ", + 'select_minimum_class_view' => "Class required to View
     Minimum", + 'select_minimum_class_post' => "Class required to Post
     Minimum", + 'select_minimum_class_topic' => "Class required to Create Topics", + 'std_no_forum_id' => "Forum ID not found.", + 'std_must_specify_forum_name' => "You must specify a name for the forum.", + 'std_must_provide_forum_description' => "You must provide a description for the forum.", + 'head_delete_forum' => "Delete forum", + 'text_warning' => "** WARNING! **", + 'text_deleting_forum_id' => "Deleting forum ID ", + 'text_will_also_delete' => " will also delete ", + 'text_posts_in' => "posts in ", + 'text_topics' => " topics. ", + 'text_accept' => "ACCEPT", + 'text_cancel' => "CANCEL", + 'std_unauthorised_performing_action' => "You are not authorised to perform this action!", + 'head_new_topic' => "New topic", + 'std_must_enter_subject' => "You must enter a subject.", + 'std_subject_limited' => "Subject is limited. Please shorten your subject", + 'std_bad_topic_id' => "Bad topic ID", + 'std_sorry' => "Sorry...", + 'std_unauthorized_to_post' => "You are not authorized to Post. Read (Inbox)", + 'std_permission_denied' => "Permission denied.", + 'std_no_body_text' => "No body text.", + 'std_post_flooding' => "Post Flooding Not Allowed. Please wait ", + 'std_seconds_before_making' => " seconds before making another post.", + 'std_no_topic_id_returned' => "No topic ID returned", + 'std_topic_locked' => "This topic is locked.", + 'std_post_id_not_available' => "Post id n/a", + 'std_unpermitted_viewing_topic' => "You are not permitted to view this topic.", + 'text_prev' => "Prev", + 'text_next' => "Next", + 'head_view_topic' => "View topic", + 'text_forums' => " Forums", + 'text_ago' => " ago", + 'text_quote' => "Quote", + 'text_last_edited_by' => "Last edited by ", + 'text_last_edit_at' => " at ", + 'text_posts' => "Posts: ", + 'text_ul' => "UL: ", + 'text_dl' => "DL: ", + 'text_ratio' => "Ratio: ", + 'text_class' => "Class:", + 'text_back_to_top' => "Back to top", + 'title_sticky' => "Sticky", + 'submit_sticky' => "Sticky", + 'submit_unsticky' => "Unsticky", + 'submit_unlock' => "Unlock Topic", + 'submit_lock' => "Lock Topic", + 'submit_delete_topic' => "Delete Topic", + 'text_rename_topic' => "Rename topic:", + 'submit_okay' => "Okay", + 'text_move_thread_to' => "Move this thread to:", + 'submit_move' => "Move", + 'text_topic_locked_new_denied' => "

    This topic is locked; no new posts are allowed.

    ", + 'text_unpermitted_posting_here' => "

    You are not permitted to post in this forum.

    ", + 'head_post_reply' => "Post reply", + 'std_forum_not_found' => "Forum not found.", + 'std_cannot_get_posts_count' => "Couldn't get posts count.", + 'std_delete_topic' => "Delete topic", + 'std_delete_topic_note' => "Sanity check: You are about to delete a topic. Click ", + 'std_here_if_sure' => "here if you are sure.", + 'std_no_topic_for_post' => "No topic associated with this post ID", + 'std_denied' => "Denied!", + 'std_body_empty' => "Body cannot be empty!", + 'std_subject_empty' => "Subject cannot be empty!", + 'std_success' => "Success", + 'std_post_edited_successfully' => "Post was edited successfully.", + 'text_edit_post' => "Edit Post", + 'std_how_could_this_happen' => "how could this happen?!", + 'std_post_not_found' => "Post not found", + 'std_cannot_delete_post' => "Can't delete post; it is the first post of the topic. You should ", + 'std_delete_topic_instead' => "delete the topic instead.", + 'std_delete_post' => "Delete post", + 'std_delete_post_note' => "Sanity check: You are about to delete a post. Click ", + 'std_must_enter_new_title' => "You must enter a new title!", + 'std_not_permitted' => "Not permitted", + 'std_sql_error' => "SQL Error", + 'head_forum' => "Forum", + 'col_topic' => "Topic", + 'col_replies' => "Replies", + 'col_views' => "Views", + 'col_author' => "Author", + 'col_last_post' => "Last post", + 'text_no_topics_found' => "No topics found", + 'text_new_posts' => "New posts", + 'text_locked_topic' => "Locked topic", + 'text_unpermitted_starting_new_topics' => "You are not permitted to start new topics in this forum.", + 'submit_view_unread' => "View unread", + 'submit_new_topic' => "New topic", + 'text_topics_with_unread_posts' => "Topics with unread posts", + 'col_forum' => "Forum", + 'text_more_than' => "More than ", + 'text_items_found_displaying_first' => " items found, displaying first ", + 'text_catch_up' => "Catch up", + 'text_nothing_found' => "Nothing found", + 'head_forum_search' => "Forum Search", + 'col_post' => "Post", + 'col_posted_by' => "Posted by", + 'text_found' => "Found ", + 'text_num_posts' => " posts", + 'text_search_on_forum' => "Search on Forums", + 'text_by_keyword' => "by keyword", + 'head_forums' => "Forums", + 'col_forums' => "Forums", + 'col_topics' => "Topics", + 'col_posts' => "Posts", + 'std_bad_forum_last_post' => "Bad forum last post", + 'text_in' => "in ", + 'text_edit' => "Edit", + 'text_delete' => "Delete", + 'std_unknown_action' => "Unknown action", + 'text_search' => "Search", + 'text_view_unread' => "View unread", + 'text_forum_manager' => "Forum manager", + 'title_reply_with_quote' => "Reply with Quote", + 'title_reply_directly' => "Reply directly to this post", + 'title_delete_post' => "Delete Post", + 'title_edit_post' => "Edit Post", + 'text_quick_reply' => "Quick Reply", + 'submit_add_reply' => "Add Reply", + 'text_add_reply' => "Add Reply", + 'title_online' => "Online", + 'title_offline' => "Offline", + 'title_send_message_to' => "Send message to ", + 'title_report_this_post' => "Report this post", + 'title_new_topic' => "New Topic", + 'col_moderator' => "Moderator", + 'text_apply_now' => "N/A", + 'text_locked' => "Locked", + 'text_number' => "#", + 'text_lou' => "", + 'there_is' => "", + 'hits_on_this_topic' => " views on this thread", + 'title_read' => "Read", + 'title_unread' => "Unread", + 'title_locked' => "Locked", + 'title_locked_new' => "Locked & unread", + 'text_highlight_topic' => "Color topic in ", + 'select_color' => "None", + 'submit_change' => "Go!", + 'head_view_unread' => "View Unread", + 'text_today' => "Today: ", + 'text_new_post' => " post", + 'text_posts_today' => " today.", + 'text_at_time' => " at ", + 'text_blank' => " ", + 'text_last_posted_by' => "Last posted by ", + 'text_fast_search' => "Quick Search: ", + 'text_go' => "Go!", + 'submit_show_more' => "Show More", + 'text_view_all_posts' => "View all posts", + 'text_view_this_author_only' => "View this author only", + 'title_jump_to_unread' => "Jump to unread posts", + 'text_new' => "new", + 'title_order_topic_desc' => "Order by topic time descendant", + 'title_order_topic_asc' => "Order by topic time ascendant", + 'title_order_post_asc' => "Order by last post time ascendant", + 'title_order_post_desc' => "Order by last post time descendant", + 'text_order' => "Order By", + 'text_topic_desc' => "Topic Time Descendant", + 'text_topic_asc' => "Topic Time Ascendant", + 'text_post_asc' => "Last Post Time Ascendant", + 'text_post_desc' => "Last Post Time Descendant", +); + +?> diff --git a/lang/en/lang_friends.php b/lang/en/lang_friends.php new file mode 100644 index 00000000..9bbfcee1 --- /dev/null +++ b/lang/en/lang_friends.php @@ -0,0 +1,38 @@ + "Error", + 'std_invalid_id' => "Invalid ID ", + 'std_access_denied' => "Access denied.", + 'std_no_user_id' => "No user with ID ", + 'std_unknown_type' => "Unknown type ", + 'std_user_id' => "User ID ", + 'std_already_in' => " is already in your ", + 'std_list' => " list.", + 'std_delete' => "Delete ", + 'std_delete_note' => "Do you really want to delete a ", + 'std_click' => "? Click \n", + 'std_here_if_sure' => "here if you are sure.", + 'std_no_friend_found' => "No friend found with ID ", + 'std_no_block_found' => "No block found with ID ", + 'head_personal_lists_for' => "Personal lists for ", + 'text_personallist' => "PERSONALLIST", + 'text_friendlist' => "FRIENDLIST", + 'text_friends_empty' => "No friends yet", + 'text_neighbors_empty' => "No Neighbors yet", + 'text_last_seen_on' => "Last seen on ", + 'text_ago' => " ago", + 'text_remove_from_friends' => "Remove from Friends", + 'text_send_pm' => "Send PM", + 'text_added_you_to_friendslist' => "Added you to friendslist", + 'text_add_to_friends' => "Add to Friends", + 'text_blocklist_empty' => "Your blocked userlist is empty", + 'text_blocked_users' => "Blocked Users", + 'text_find_user' => "Find users/browse user list", + 'text_neighbors' => "Neighbors", + 'text_friend' => "friend", + 'text_block' => "block", +); + +?> diff --git a/lang/en/lang_fun.php b/lang/en/lang_fun.php new file mode 100644 index 00000000..f4e15d33 --- /dev/null +++ b/lang/en/lang_fun.php @@ -0,0 +1,44 @@ + "Delete Fun Item?", + 'text_please_click' => "Do you really want to delete a fun item? Click\n", + 'text_here_if_sure' => "here if you are sure.", + 'std_error' => "Error", + 'std_invalid_id' => "Invalid fun item id", + 'std_permission_denied' => "Permission denied!", + 'text_fun_title' => "Fun Title", + 'text_body' => "Body", + 'submit_okay' => "Okay", + 'head_new_fun' => "New Funny Stuff", + 'text_submit_new_fun' => "Submit new funny stuff", + 'text_new_compose' => "New Compose", + 'head_fun' => "Fun", + 'text_on' => " on ", + 'text_blank' => " ", + 'text_ago' => " ago", + 'text_posted_by' => " Posted by ", + 'text_not_funny' => "Boring", + 'text_funny' => "Funny", + 'text_very_funny' => "Sidesplitting", + 'head_edit_fun' => "Edit Fun", + 'text_edit_fun' => "Edit Fun", + 'std_body_is_empty' => "The body cannot be empty!", + 'std_title_is_empty' => "The title cannot be empty!", + 'std_fun_added_successfully' => "Fun item was added successfully.", + 'std_error_happened' => "Something weird just happened.", + 'std_the_newest_fun_item' => "The latest fun item ", + 'std_posted_on' => " was posted on ", + 'std_need_to_wait' => ". Please wait till it gets 24 hours old.", + 'std_are_you_sure' => "Are you sure?", + 'std_only_against_rule' => "Are you sure to ban this fun item? Note that you should do this only if the fun item is against the rules. BTW, you may also like to give the user a little warning.", + 'std_reason_required' => "Reason (required): ", + 'std_reason_is_empty' => "You must give the reason!", + 'std_success' => "Success", + 'std_fun_item_banned' => "The fun item is successfully banned.", + 'std_already_vote' => "You have already voted!", + 'std_cannot_give_bonus' => "System cannot give bonus to fun item poster. Please report this to administrator.", +); + +?> diff --git a/lang/en/lang_functions.php b/lang/en/lang_functions.php new file mode 100644 index 00000000..a478cf41 --- /dev/null +++ b/lang/en/lang_functions.php @@ -0,0 +1,293 @@ + "Access Denied!", + 'std_fake_account' => "We come to believe you are using a fake account, therefore we've logged this action!", + 'std_permission_denied' => "Permission denied!", + 'std_already_logged_in' => "You have already logged in!", + 'text_page_last_updated' => "This page last updated ", + 'text_browser_cookies_note' => "If you enable cookies and are still unable to log in, perhaps something happened to cause a problem with your login cookie. We suggest delete your cookies and trying again. To delete cookies in Internet Explorer, go to Tools > Internet Options... and click on the Delete Cookies button. Note that this will delete all cookies stored on your system for other sites as well.", + 'std_error' => "Error", + 'text_unable_to_send_mail' => "Unable to send mail. Please contact an administrator about this error.", + 'std_success' => "Success", + 'std_confirmation_email_sent' => "A confirmation email has been mailed to ", + 'std_please_wait' => "Please allow a few minutes for the mail to arrive.", + 'std_account_details_sent' => "The new account details have been mailed to ", + 'std_locked' => " Locked! (the maximum number of failed ", + 'std_attempts_reached' => " attempts is reached during reauthentication)", + 'std_your_ip_banned' => "We come to believe you are trying to cheat our system, therefore we've banned your ip!", + 'std_login_failed' => "Login failed!", + 'std_login_failed_note' => "Error: Username or password incorrect! Or you are not confirmed yet

    Don't remember your password? Recover your password!", + 'std_failed' => "Failed", + 'std_oops' => "Oops!", + 'std_sorry' => "Sorry", + 'std_invite_system_disabled' => "The invite system is currently disabled...", + 'std_open_registration_disabled' => "Open registration is currently disabled. Invites only. If you are lucky you might have a friend who wants to invite you :) We just wanna see how much cheaters will start respecting their accounts after they realize they can't just come back in and get another one :). Keep this in mind, if you are already a member and you invite a known cheater, and you knew about it in the first place, both yours and the person you invited are disabled. You will have to come talk to us to get your account reenstated. If you want an invite and you know someone who have one it's up to them to give you an invite.", + 'std_account_limit_reached' => "The current user account limit has been reached. Inactive accounts are pruned all the time, please check back again later...", + 'std_the_ip' => "The IP ", + 'std_used_many_times' => " is already being used on too many account.... No more accounts allowed at ".$SITENAME.".", + 'std_invalid_image_code' => "Invalid Image Code!
    Do not go back, The image code has been cleared!

    Please click ", + 'std_here_to_request_new' => "here to request a new image code.", + 'row_security_image' => "Security Image:", + 'row_security_code' => "Security Code:", + 'text_slots' => "Slots: ", + 'text_unlimited' => "Unlimited", + 'std_server_load_very_high' => "The server load is very high at the moment. Retrying, please wait...", + 'std_too_many_users' => "Too many users. Please press the Refresh button in your browser to retry.", + 'text_unauthorized_ip' => "

    403 Forbidden

    Unauthorized IP address.", + 'text_home' => "Home", + 'text_forums' => "Forums", + 'text_torrents' => "Torrents", + 'text_offers' => "Offers", + 'text_request' => "Requests", + 'text_upload' => "Upload", + 'text_subtitles' => "Subtitles", + 'text_user_cp' => "User CP", + 'text_top_ten' => "Top 10", + 'text_log' => "LOG", + 'text_rules' => "Rules", + 'text_faq' => "FAQ", + 'text_staff' => "Staff", + 'std_site_down_for_maintenance' => "Site is down for maintenance, please check back again later... thanks", + 'text_click_view_full_image' => "Click this bar to view the full image.", + 'text_image_resized' => "This image has been resized. Click this bar to view the full image.", + 'text_click_view_small_image' => "Click this bar to view the small image.", + 'text_login' => "Login", + 'text_signup' => "Signup", + 'text_inf' => "Inf.", + 'title_donor' => "donor", + 'title_warned' => "warned", + 'title_inbox_new_messages' => "inbox (new messages)", + 'title_inbox_no_new_messages' => "inbox (no new messages)", + 'text_yes' => "Yes", + 'text_no' => "No", + 'text_unknown' => "Unknown", + 'text_welcome_back' => "Welcome", + 'text_staff_panel' => "Staff Panel", + 'text_site_settings' => "Site Settings", + 'text_logout' => "logout", + 'text_bonus' => "Bonus ", + 'text_use' => "Use", + 'text_ratio' => "Ratio:", + 'text_uploaded' => "Uploaded:", + 'text_downloaded' => "Downloaded:", + 'text_active_torrents' => "Active Torrents: ", + 'title_torrents_seeding' => "Torrents Seeding", + 'title_torrents_leeching' => "Torrents Leeching", + 'text_connectable' => "Connectable: ", + 'text_the_time_is_now' => "The time is now: ", + 'text_message_new' => " New", + 'title_sentbox' => "sentbox", + 'title_inbox' => "inbox", + 'title_buddylist' => "Buddylist", + 'text_you_have' => "You have ", + 'text_new_message' => " new message", + 'text_s' => "s", + 'text_click_here_to_read' => "! Click here to read.", + 'text_your_friends' => "Your friend", + 'text_awaiting_confirmation' => " awaiting confirmation from you!", + 'text_website_offline_warning' => "WARNING: The website is currently offline! Click here to change settings.", + 'text_there_is' => "There", + 'text_new_report' => " new report", + 'text_new_staff_message' => " new staff message", + 'text_search' => "Search", + 'text_profile' => "Profile", + 'text_chat' => "Chat", + 'text_dox' => "DOX", + 'text_links' => "Links", + 'text_username' => "Username: ", + 'text_password' => "Password: ", + 'submit_log_in' => "Log in!", + 'text_register' => "Register", + 'text_rules_link' => "Rules", + 'text_faq_link' => "FAQ", + 'text_useragreement' => "Useragreement", + 'text_prev' => "Prev", + 'text_next' => "Next", + 'text_by' => " by ", + 'text_orphaned' => "(orphaned)", + 'text_at' => " at ", + 'text_edit' => "Edit", + 'text_delete' => "Delete", + 'text_view_original' => "View original", + 'text_last_edited_by' => "Last edited by ", + 'text_edited_at' => " at ", + 'col_type' => "Type", + 'col_name' => "Name", + 'col_dl' => "DL", + 'col_wait' => "Wait", + 'col_edit' => "Edit", + 'col_visible' => "Visible", + 'title_number_of_comments' => "Number of Comments", + 'title_time_added' => "Time Added", + 'title_size' => "Size", + 'title_number_of_seeders' => "Number of Seeders", + 'title_number_of_leechers' => "Number of Leechers", + 'title_number_of_snatched' => "Number of Snatched", + 'col_uploader' => "Uploader", + 'col_action' => "Act", + 'text_normal' => "Normal", + 'text_free' => "Free", + 'text_two_times_up' => "2X", + 'text_free_two_times_up' => "2X Free", + 'text_half_down' => "50%", + 'text_half_down_two_up' => "2X 50%", + 'text_new_uppercase' => "NEW", + 'text_sticky' => "Sticky", + 'title_download_torrent' => "Download Torrent", + 'text_h' => " h", + 'text_none' => "None", + 'text_anonymous' => "Anonymous", + 'text_promoted_torrents_note' => "Those highlighted are:   Free | 2x up | 2x up and free | 50% down | 2x up and 50% down | 30% down torrents
    Leeching them is the best way to fix your ratio!", + 'std_file' => "File ", + 'std_does_not_exist' => " doesn't exist", + 'std_access_permission_note' => "!
    Before the setup starts, please ensure that you have properly configured file and directory access permissions. Please see below.

    chmod -R 777 config (config directory).", + 'std_cannot_read_file' => "Cannot read file ", + 'std_cannot_serialize_file' => "Cannot serialize file ", + 'std_cannot_open_file' => "Cannot open file ", + 'std_to_save_info' => " to save info", + 'text_cannot_save_info_in' => "Cannot save info in file (error in serialisation) ", + 'std_your_account_parked' => "Your account is parked.", + 'title_online' => "Online", + 'title_offline' => "Offline", + 'title_send_message_to' => "Send message to ", + 'title_report_this_comment' => "Report this comment", + 'text_bookmarks' => "Bookmarks", + 'title_bookmark_torrent' => "Bookmark", + 'title_delbookmark_torrent' => "Unbookmark", + 'text_mark' => "Mark", + 'text_unmark' => "Unmark", + 'text_award' => "Bonus Award: ", + 'text_additional_notes' => "Additional Notes: ", + 'title_view_reviews' => "Click to view reviews", + 'title_has_new_comment' => "Has new comment", + 'title_no_new_comment' => "No new comment", + 'row_external_info' => "External Info", + 'row_imdb_url' => "IMDb URL", + 'text_imdb_url_note' => "(URL taken from IMDb. e.g. for movie The Dark Knight the URL is http://www.imdb.com/title/tt0468569/)", + 'text_artist' => " Artist: ", + 'text_album' => "Album: ", + 'title_get_rss' => "Get RSS", + 'text_hot' => "Hot", + 'text_classic' => "Classic", + 'text_recommended' => "Good", + 'title_view_nfo' => "View NFO file", + 'title_edit_torrent' => "Edit or delete torrent", + 'title_time_alive' => "Time Alive", + 'title_add_comments' => "Add comment", + 'text_at_time' => " at ", + 'text_blank' => " ", + 'text_ago' => " ago", + 'text_last_commented_by' => "Last commented by ", + 'text_imdb' => "IMDb", + 'text_votes' => " votes", + 'text_country' => "Country", + 'text_genres' => "Genres", + 'text_director' => "Director", + 'text_starring' => "Starring", + 'text_runtime' => "Runtime", + 'text_language' => "Language", + 'text_douban' => "Douban", + 'text_region' => "Region", + 'text_creator' => "Creator", + 'text_awaiting_five_votes' => "awaiting 5 votes", + 'text_invite' => "Invite ", + 'text_send' => "Send", + 'text_tracks' => "Tracks", + 'text_label' => "Label", + 'text_tags' => "Tags", + 'text_user_ip' => "User IP", + 'text_location_main' => "Location Main", + 'text_location_sub' => "Location Sub", + 'text_ip_range' => "IP Range", + 'text_min' => " min", + 'text_music' => "Music", + 'title_reply_with_quote' => "Quote", + 'title_add_reply' => "Add Reply", + 'title_delete' => "Delete", + 'title_edit' => "Edit", + 'title_reportbox' => "reportbox", + 'title_staffbox' => "staffbox", + 'title_sticky' => "Sticky", + 'text_new_news' => " unread important news", + 'std_no_user_named' => "There is no user named ", + 'text_banned' => "Banned", + 'text_are' => " are ", + 'text_is' => " is ", + 'select_choose_one' => "choose one", + 'text_space' => " ", + 'text_day' => "d ", + 'text_new_suspected_cheater' => " new suspected cheater", + 'title_cheaterbox' => "cheaterbox", + 'text_will_end_in' => " will end in ", + 'text_alt_pageup_shortcut' => "Alt+Pageup", + 'text_alt_pagedown_shortcut' => "Alt+Pagedown", + 'text_shift_pageup_shortcut' => "Shift+Pageup", + 'text_shift_pagedown_shortcut' => "Shift+Pagedown", + 'text_quote' => "Quote", + 'text_code' => "CODE", + 'std_invalid_id' => "Invalid ID! For security reason, we have logged this action.", + 'text_smilies' => "Smilies", + 'col_type_something' => "Type...", + 'col_to_make_a' => "To make a...", + 'text_year' => " year", + 'text_month' => " month", + 'text_day' => " day", + 'text_hour' => " hour", + 'text_min' => " min", + 'select_color' => "Color", + 'select_font' => "Font", + 'select_size' => "Size", + 'text_subject' => "Subject:", + 'text_more_smilies' => "More Smilies", + 'js_prompt_enter_url' => "You must enter a URL", + 'js_prompt_enter_title' => "You must enter a title", + 'js_prompt_error' => "Error!", + 'js_prompt_enter_item' =>"Enter item of the list. For end of the list, press 'cancel' or leave the next field empty ", + 'js_prompt_enter_image_url' => "You must enter a full image URL", + 'js_prompt_enter_email' => "You must enter a E-mail", + 'text_new' => "New", + 'text_reply' => "Reply", + 'submit_submit' => "Submit", + 'submit_preview' => "Preview", + 'text_tags' => "Tags", + 'row_subject' => "Subject", + 'row_body' => "Body", + 'text_peasant' => "Peasant", + 'text_user' => "User", + 'text_power_user' => "Power User", + 'text_elite_user' => "Elite User", + 'text_crazy_user' => "Crazy User", + 'text_insane_user' => "Insane User", + 'text_veteran_user' => "Veteran User", + 'text_extreme_user' => "Extreme User", + 'text_ultimate_user' => "Ultimate User", + 'text_nexus_master' => "Nexus Master", + 'text_vip' => "VIP", + 'text_uploader' => "Uploader", + 'text_retiree' => "Retiree", + 'text_forum_moderator' => "Forum Moderator", + 'text_moderators' => "Moderator", + 'text_administrators' => "Administrator", + 'text_sysops' => "SysOp", + 'text_staff_leader' => "Staff Leader", + 'text_short_year'=> "Y", + 'text_short_month' => "MON", + 'text_short_day' => "D", + 'text_short_hour' => "H", + 'text_short_min' => "M", + 'submit_edit' => "Edit", + 'text_banned_client_warning' => "You were using a banned BitTorrent client the last time connecting the tracker! Click here.", + 'text_please_improve_ratio_within' => "Please improve your ratio within ", + 'text_or_you_will_be_banned' =>", or your account will be banned! Click here.", + 'text_size' => "Size", + 'text_downloads' => "Downloads", + 'text_attachment_key' => "Attachment for key ", + 'text_not_found' => " not found", + 'text_thirty_percent_down' => "30%", + 'text_please_download_something_within' => "Please download something within ", + 'text_inactive_account_be_deleted' => ". Inactive accounts (with no transfer amount) will be deleted.", +); + +?> diff --git a/lang/en/lang_getrss.php b/lang/en/lang_getrss.php new file mode 100644 index 00000000..32bb128e --- /dev/null +++ b/lang/en/lang_getrss.php @@ -0,0 +1,45 @@ + "RSS Feeds", + 'head_rss_feeds' => "RSS Feeds", + 'std_error' => "Error", + 'std_no_row' => "You must select rows!", + 'std_done' => "Done!", + 'std_use_following_url' => "Use the following URL in your RSS reader, e.g. Google Reader: ", + 'std_utorrent_feed_url' => "Use the following URL in BitTorrent clients that support RSS Feed, e.g. uTorrent: ", + 'row_categories_to_retrieve' => "Categories to retrieve", + 'row_feed_type' => "Feed type", + 'text_web_link' => "Web Link", + 'text_download_link' => "Download Link", + 'row_rows_per_page' => "Rows Per Page", + 'submit_generatte_rss_link' => "Generate RSS link", + 'text_category' => "Category", + 'text_source' => "Source", + 'text_codec' => "Codec", + 'text_standard' => "Standard", + 'text_processing' => "Processing", + 'text_medium' => "Medium", + 'text_team' => "Team", + 'text_audio_codec' => "Audio Codec", + 'row_item_title_type' => "Title display format", + 'text_item_category' => "[Category] + ", + 'text_item_title' => "Title + ", + 'text_item_small_description' => "[Small Description] + ", + 'text_item_size' => "[Size] + ", + 'text_item_uploader' => "[Uploader]", + 'row_show_bookmarked' => "Show Bookmarked", + 'text_all' => "all", + 'text_only_bookmarked' => "only bookmarked", + 'text_show_bookmarked_note' => "Ony for BitTorrent clients", + 'row_keyword' => "Keyword", + 'text_with' => "with", + 'select_and' => "AND", + 'select_or' => "OR", + 'select_exact' => "Exact", + 'text_mode' => "matching mode ", + 'text_keyword_note' => "Ony subscribe to items with these keywords in titles." +); + +?> diff --git a/lang/en/lang_getusertorrentlistajax.php b/lang/en/lang_getusertorrentlistajax.php new file mode 100644 index 00000000..c0eb3f44 --- /dev/null +++ b/lang/en/lang_getusertorrentlistajax.php @@ -0,0 +1,20 @@ + "Type", + 'col_name' => "Name", + 'title_size' => "Size", + 'title_seeders' => "Seeders", + 'title_leechers' => "Leechers", + 'col_uploaded' => "Ul.", + 'col_downloaded' => "Dl.", + 'col_ratio' => "Ratio", + 'col_anonymous' => "Anonym.", + 'col_time_completed' => "Sna. at", + 'col_se_time' => "Se. Time", + 'col_le_time' => "Le. Time", + 'text_record' => " record", + 'text_no_record' => "No record.", +); +?> diff --git a/lang/en/lang_index.php b/lang/en/lang_index.php new file mode 100644 index 00000000..f6f55b75 --- /dev/null +++ b/lang/en/lang_index.php @@ -0,0 +1,103 @@ + "No poll", + 'std_error' => "Error", + 'std_duplicate_votes_denied' => "No duplicate votes allowed!", + 'std_vote_not_counted' => "An error occured. Your vote has not been counted.", + 'std_option_unselected' => "Please select an option.", + 'text_news_page' => "New", + 'text_recent_news' => "Recent news", + 'text_e' => "Edit", + 'text_d' => "Delete", + 'text_hotmovies' => "Hot", + 'text_classicmovies' => "Classic", + 'text_free' => "Free", + 'text_two_times_up' => "2X", + 'text_free_two_times_up' => "2X Free", + 'text_shoutbox' => "Shoutbox", + 'text_message' => "Message: ", + 'sumbit_shout' => "shout", + 'submit_clear' => "clear", + 'text_last_five_posts' => "Last 5 Forum Posts", + 'col_topic_title' => "Topic Title", + 'col_view' => "Views", + 'col_author' => "Author", + 'col_posted_at' => "Posted At", + 'text_in' => "in ", + 'std_no_torrent_found' => "No torrents found", + 'text_last_five_torrent' => "Last 5 Torrent Uploads", + 'col_name' => "Name", + 'col_seeder' => "Seeder", + 'col_leecher' => "Leecher", + 'text_polls' => "Polls ", + 'text_new' => "New", + 'text_edit' => "Edit", + 'text_delete' => "Delete", + 'text_votes' => "Votes:", + 'radio_blank_vote' => "Blank vote (a.k.a. \"I just want to see the results!\")", + 'submit_vote' => "Vote!", + 'text_previous_polls' => "Previous polls", + 'text_tracker_statistics' => "Tracker Statistics", + 'row_registered_users' => "Registered Users / Limit", + 'row_unconfirmed_users' => "Unconfirmed users", + 'row_vips' => "VIPs", + 'row_donors' => "Donors", + 'row_warned_users' => "Warned Users", + 'row_banned_users' => "Banned Users", + 'row_male_users' => "Male Users", + 'row_female_users' => "Female Users", + 'row_torrents' => "Torrents", + 'row_dead_torrents' => "Dead Torrents", + 'row_seeders' => "Seeding Peers", + 'row_leechers' => "Leeching Peers", + 'row_peers' => "Peers", + 'row_seeder_leecher_ratio' => "Seeding / leeching ratio", + 'row_total_size_of_torrents' => "Total Size of Torrents", + 'row_total_uploaded' => "Total Uploaded", + 'row_total_downloaded' => "Total Downloaded", + 'row_total_data' => "Total Data", + 'text_no_users_day' => "There has been no active user in the last 24 hours.", + 'text_no_active_users_now' => "There is no active user now.", + 'text_no_user_torrenting' => "There is no user seeding or leeching. :(", + 'text_tracker_load' => "Tracker Load", + 'text_our_tracker_load' => "Tracker Peers Load: ", + 'text_global_server_load' => "Global Server Load: ", + 'text_whats_going_on' => "What's going on?", + 'text_members_have_visited' => " members have visited during the last 24 hours, and welcome to our newest member, ", + 'text_users_browsing_now' => " users are browsing the site in last 15 mins. ", + 'text_peers_active_now' => " users are seeding or leeching. ", + 'text_disclaimer' => "Disclaimer", + 'text_disclaimer_content' => "None of the files shown here are actually hosted on this server. The tracker only manages connections, it does not have any knowledge of the contents of the files being distributed. The links are provided solely by this site's users. The administrator of this site ".$SITENAME." cannot be held responsible for what its users post, or any other actions of its users. You may not use this site ".$SITENAME." to distribute or download any material when you do not have the legal rights to do so. It is your own responsibility to adhere to these terms.", + 'text_browser_note' => "This site is best viewed with \"Internet or \"Firefox\" and with resolution above 1024*768. Recommended BitTorrent clients: \"Azureus\" or \"uTorrent\"", + 'title_show_or_hide' => "Show/Hide", + 'text_links' => "Links", + 'text_manage_links' => "Manage Links", + 'text_author' => "Author:", + 'text_datetime' => "Time:", + 'p_critic_reviews' => "Film Critics' Reviews", + 'p_user_reviews' => "Selected Users' Reviews", + 'head_home' => "Home", + 'sumbit_to_guest' => "to guest", + 'text_apply_for_link' => "Apply for Links", + 'text_ago' => " ago", + 'text_auto_refresh_after' => "auto refresh after ", + 'text_seconds' => " seconds", + 'text_funbox' => "Funbox", + 'text_more_fun' => "More", + 'text_new_fun' => "New", + 'text_ban' => "Ban", + 'submit_fun' => "Fun", + 'submit_dull' => "Dull", + 'text_out_of' => " out of ", + 'text_people_found_it' => " people found it fun. ", + 'text_your_opinion' => "What do you think? ", + 'text_vote_accepted' => "Thanks! Your vote is accepted.", + 'row_users_active_today' => "Users Active Today", + 'row_users_active_this_week' => "Users Active This Week", + 'row_active_browsing_users' => "Active Browsing Users", + 'row_tracker_active_users' => "Tracker Active Users", + 'text_detail' => "Detail", +); + +?> diff --git a/lang/en/lang_invite.php b/lang/en/lang_invite.php new file mode 100644 index 00000000..705ad6bc --- /dev/null +++ b/lang/en/lang_invite.php @@ -0,0 +1,54 @@ + "Sorry", + 'std_permission_denied' => "Permission Denied!", + 'head_invites' => "Invites", + 'std_no_invites_left' => "You have no invites left. :(

    Please click ", + 'here_to_go_back' => "here to go back.", + 'text_invite_code_sent' => "The invite code has been sent!
    ", + 'text_invite_someone' => "Invite someone to join ", + 'text_s' => "s", + 'text_invitation' => " invitation", + 'text_left' => " left", + 'text_email_address' => "Email Address", + 'text_email_address_note' => "Email Address must be valid. The invite will receive an email about your invite.", + 'text_message' => "Message", + 'submit_invite' => "Invite", + 'text_invite_status' => "Current status of invites", + 'text_no_invites' => "No invites yet.", + 'text_username' => "Username", + 'text_email' => "Email", + 'text_uploaded' => "Uploaded", + 'text_downloaded' => "Downloaded", + 'text_ratio' => "Ratio", + 'text_status' => "Status", + 'text_confirm' => "Confirm", + 'text_confirmed' => "Confirmed", + 'text_pending' => "Pending", + 'submit_confirm_users' => "Confirm Users", + 'sumbit_invite_someone' => "Invite Someone", + 'text_sent_invites_status' => "Current status of sent out invites", + 'text_no_invitation_sent' => "No invitations sent out at the moment.", + 'text_hash' => "Hash", + 'text_send_date' => "Send Date", + + 'text_invitation_body' => " +Hi Buddy, + +I am inviting you to join $SITENAME which is a private community that have the finest +and most abundant stuff. If you are interested in joining us please read over +the rules and confirm the invite. Finally, please make sure you keep a nice ratio and +only upload content that follows rules of the site. + +Welcome aboard! :) +Best Regards, +", + 'text_invite_system' => "'s Invite System", + 'std_only' => "Only ", + 'std_or_above_can_invite' => " or above can send invitation.", + 'text_email_restriction_note' => "You could only send invitation to email from those domains: ", +); + +?> diff --git a/lang/en/lang_iphistory.php b/lang/en/lang_iphistory.php new file mode 100644 index 00000000..4526ee0b --- /dev/null +++ b/lang/en/lang_iphistory.php @@ -0,0 +1,16 @@ + "Error", + 'std_invalid_id' => "Invalid ID", + 'text_user_not_found' => "User not found", + 'head_ip_history_log_for' => "IP History Log for ", + 'text_historical_ip_by' => "Historical IP addresses used by ", + 'col_last_access' => "Last access", + 'col_ip' => "IP", + 'col_hostname' => "Hostname", + 'text_not_available' => "N/A", + 'text_duplicate' => "Dupe", +); +?> diff --git a/lang/en/lang_ipsearch.php b/lang/en/lang_ipsearch.php new file mode 100644 index 00000000..9ea6ff1f --- /dev/null +++ b/lang/en/lang_ipsearch.php @@ -0,0 +1,24 @@ + "Error", + 'std_invalid_ip' => "Invalid IP.", + 'std_invalid_subnet_mask' => "Invalid subnet mask.", + 'head_search_ip_history' => "Search in IP History", + 'text_search_ip_history' => "Search in IP History", + 'row_ip' => "IP", + 'row_subnet_mask' => "Subnet Mask", + 'submit_search' => "Search", + 'text_no_users_found' => "No users found", + 'text_users_used_the_ip' => " users have used the IP: ", + 'col_username' => "Username", + 'col_last_ip' => "Last IP", + 'col_last_access' => "Last access", + 'col_ip_num' => "IP Nums", + 'col_last_access_on' => "Last access this IP", + 'col_added' => "Added", + 'col_invited_by' => "Invited by", + 'text_not_available' => "N/A", +); +?> diff --git a/lang/en/lang_linksmanage.php b/lang/en/lang_linksmanage.php new file mode 100644 index 00000000..8b0bb50a --- /dev/null +++ b/lang/en/lang_linksmanage.php @@ -0,0 +1,51 @@ + "Apply for Links", + 'text_apply_for_links' => "Apply for Links", + 'text_rules' => "Rules for Link Exchange:", + 'text_rule_one' => "1.Please make our link $SITENAME at your site before asking us to do the same.", + 'text_rule_two' => "2.Your site MUST NOT be involed in any illegal things. The administrators of this site $SITENAME take absolutely no responsibily for anything of your site.", + 'text_rule_three' => "3.All links we make here at our site $SITENAME are text-only.", + 'text_rule_four' => "4.Your site should has at least 200 registered users or 50 daily-visiting people.", + 'text_rule_five' => "5.We reserve the rights to MODIFY OR DELETE ANY LINKS at our site $SITENAME without notification.", + 'text_rule_six' => "6.If conformed to rules above, feel free to apply for links of your site at $SITENAME. However, we give no guarantee to accept all application.", + 'text_red_star_required' => "Fields marked with a red star(*) are required.", + 'text_site_name' => "Site Name", + 'text_url' => "URL", + 'text_title' => "Title", + 'text_title_note' => "Title is used to show tooltip at a link. e.g. NexusPHP", + 'text_administrator' => "Administrator", + 'text_administrator_note' => "We required administrator's TRUE NAME.", + 'text_email' => "Email", + 'text_reason' => "Reason", + 'submit_okay' => "Okay", + 'submit_reset' => "Reset", + 'std_error' => "Error", + 'std_no_sitename' => "Site Name could not be empty.", + 'std_no_url' => "URL could not be empty.", + 'std_no_admin' => "Administrator could not be empty. We need to know administrator's name", + 'std_no_email' => "Email could not be empty.", + 'std_invalid_email' => "The Email address is invalid", + 'std_no_reason' => "Reason could not be empty. Come on, please give us reasons to link your site.", + 'std_reason_too_short' => "Reason is too short. Come on, please say something more.", + 'std_success' => "Success", + 'std_success_note' => "Your application has been successfully sent. Please wait for our reply.", + 'text_sitename_note' => "The name of your site. e.g. NexusPHP", + 'text_url_note' => "e.g. http://www.nexusphp.com", + 'text_email_note' => "The administrator's contact email address", + 'std_missing_form_data' => "Missing form data.", + 'std_unable_creating_new_link' => "Unable to create new link.", + 'std_links_manage' => "Links Manage", + 'text_add_link' => "Add Link", + 'text_manage_links' => "Manage Links", + 'text_modify' => "Modify", + 'text_edit' => "Edit", + 'text_delete' => "Delete", + 'text_no_links_found' => "Sorry, no links were found!", + 'text_edit_link' => "Edit Link", + 'js_sure_to_delete_link' => "Are you sure you want to delete this link?", +); + +?> diff --git a/lang/en/lang_log.php b/lang/en/lang_log.php new file mode 100644 index 00000000..87875962 --- /dev/null +++ b/lang/en/lang_log.php @@ -0,0 +1,66 @@ + "Sorry...", + 'std_permission_denied_only' => "Permission denied. Only ", + 'std_or_above_can_view' => " or above could view LOG.

    Please see the FAQ for more information on different user classes and what they can do.

    The " .$SITENAME." Staff
    ", + 'head_site_log' => "Daily Log", + 'text_search_log' => "Search Daily Log", + 'submit_search' => "Search", + 'text_log_empty' => "Log is empty
    ", + 'title_time_added' => "Time", + 'col_date' => "Date", + 'col_event' => "Event", + 'time_zone_note' => "

    Times are in GMT +8:00.

    ", + 'text_daily_log' => "Daily Log", + 'text_chronicle' => "Chronicle", + 'text_code_update' => "Code Update", + 'text_funbox' => " Funbox ", + 'text_news' => "  News  ", + 'text_poll' => "  Poll  ", + 'std_error' => "Error", + 'std_invalid_action' => "Invalid Action", + 'head_chronicle' => "Chronicle", + 'text_search_chronicle' => "Search Chronicle", + 'text_chronicle_empty'=> "Chronicle is empty
    ", + 'col_modify' => "Modify", + 'text_edit' => "Edit", + 'text_delete' => "Delete", + 'submit_add' => "Add", + 'text_add_chronicle' => "Add Chronicle Event", + 'std_permission_denied' => "Back off! You are not allowed to do this.", + 'submit_okay' => "Okay", + 'text_edit_chronicle' => "Edit Chronicle Event", + 'head_code_update' => "Code Update", + 'text_search_code_update' => "Search Code-Update Event", + 'text_add_code_update' => "Add Code-Update Event", + 'text_edit_codeupdate' => "Edit Code-Update Event", + 'text_codeupdate_empty' => "Code-Update is empty
    ", + 'head_funbox' => "Funbox Log", + 'head_news' => "News", + 'text_search_news' => "Search News", + 'text_news_empty' => "News is empty
    ", + 'col_title' => "Title", + 'col_body' => "Body", + 'std_delete_poll' => "Delete poll", + 'std_delete_poll_confirmation' => "Do you really want to delete a poll? Click ", + 'std_here_if_sure' => "here if you are sure.", + 'std_sorry' => "Sorry...", + 'std_no_polls' => "There are no polls!", + 'head_previous_polls' => "Previous polls", + 'text_previous_polls' => "Previous polls", + 'text_ago' => " ago", + 'text_votes' => "Votes: ", + 'text_in' => "in ", + 'text_funbox_empty' => "Funbox is empty
    ", + 'text_search_funbox' => "Search funbox", + 'text_title' => "title", + 'text_body' => "body", + 'text_both' => "both", + 'text_all' => "all", + 'text_normal' => "normal", + 'text_mod' => "mod", +); + +?> diff --git a/lang/en/lang_login.php b/lang/en/lang_login.php new file mode 100644 index 00000000..35978661 --- /dev/null +++ b/lang/en/lang_login.php @@ -0,0 +1,36 @@ + "Not logged in!", + 'p_error' => "Error:", + 'p_after_logged_in' => "The page you tried to view can only be used when you're logged in.", + 'p_need_cookies_enables' => "Note: You need cookies enabled to log in or switch language.", + 'p_fail_ban' => "failed logins in a row will result in banning your ip!", + 'p_you_have' => "You have", + 'p_remaining_tries' => "remaining tries.", + 'p_no_account_signup' => "Don't have an account? Sign up right now!", + 'p_forget_pass_recover' => "Forget your password? Recover your password via email", + 'p_resend_confirm' => "Did not receive confirmation mail or confirmation link is broken? Send confirmation mail again", + 'rowhead_username' => "Username:", + 'rowhead_password' => "Password:", + 'button_login' => "Login!", + 'button_reset' => "Reset", + 'text_auto_logout' => "Auto Logout:", + 'text_restrict_ip' => "Restrict IP:", + 'text_ssl' => "SSL (HTTPS):", + 'checkbox_auto_logout' => " Log me out after 15 minutes", + 'checkbox_restrict_ip' => " Restrict session to my IP", + 'checkbox_ssl' => " Browse website with SSL Encryption (Web browser)", + 'checkbox_ssl_tracker' => " Connect tracker with SSL Encryption (BitTorrent client)", + 'text_advanced_options' => "Advanced Options:", + 'text_helpbox' => "Helpbox", + 'text_helpbox_note' => "Have trouble in signup or login? Leave a message here", + 'text_message' => "Message: ", + 'sumbit_shout' => "shout", + 'submit_clear' => "clear", + 'text_select_lang' => "Select Site Language: ", + 'head_login' => "Login", +); + +?> diff --git a/lang/en/lang_mailtest.php b/lang/en/lang_mailtest.php new file mode 100644 index 00000000..8cbde2b1 --- /dev/null +++ b/lang/en/lang_mailtest.php @@ -0,0 +1,18 @@ + "Mail Test", + 'text_mail_test' => "Mail Test", + 'row_enter_email' => "Enter email", + 'text_enter_email_note' => "Enter an email address to send a test mail, e.g. yourname@gmail.com", + 'submit_send_it' => "Send it!", + 'text_smtp_testing_mail' => " SMTP Testing Mail", + 'std_error' => "Error", + 'std_invalid_email_address' => "Invalid email address!", + 'mail_test_mail_content' => "Hi, If you see this message, your SMTP function works great. Have a nice day.", + 'std_success' => "Success", + 'std_success_note' => "No error found. However this does not mean the mail arrived 100%. Please check the mail." +); + +?> diff --git a/lang/en/lang_makepoll.php b/lang/en/lang_makepoll.php new file mode 100644 index 00000000..49cc99f9 --- /dev/null +++ b/lang/en/lang_makepoll.php @@ -0,0 +1,24 @@ + "Error", + 'std_no_poll_id' => "No poll found with this ID", + 'std_missing_form_data' => "Missing form data!", + 'head_edit_poll' => "Edit Poll", + 'text_edit_poll' => "Edit Poll", + 'head_new_poll' => "New Poll", + 'text_day' => " day", + 'text_hour' => " hour", + 'text_current_poll' => "Note: The current poll ", + 'text_is_only' => " is only ", + 'text_old' => " old.", + 'text_make_poll' => "Make poll", + 'text_question' => "Question", + 'text_option' => "Option ", + 'submit_edit_poll' => "Edit Poll", + 'submit_create_poll' => "Create Poll", + 'text_required' => " required" +); + +?> diff --git a/lang/en/lang_messages.php b/lang/en/lang_messages.php new file mode 100644 index 00000000..80329079 --- /dev/null +++ b/lang/en/lang_messages.php @@ -0,0 +1,81 @@ + "Error", + 'std_invalid_mailbox' => "Invalid Mailbox", + 'text_inbox' => "Inbox", + 'text_sentbox' => "Sentbox", + 'text_sender' => "Sender", + 'text_receiver' => "Receiver", + 'col_status' => "Status", + 'col_subject' => "Subject", + 'col_date' => "Date", + 'col_act' => "Act.", + 'text_no_messages' => "No Messages.", + 'text_remove_from_friends' => "[remove from friends]", + 'text_add_to_friends' => "[add to friends]", + 'submit_move_to' => "Move to", + 'text_or' => " or ", + 'submit_delete' => "Delete", + 'text_unread_messages' => " Unread Messages.", + 'text_read_messages' => " Read Messages.", + 'text_mailbox_manager' => "Mailbox Manager", + 'std_no_permission' => "You do not have permission to view this message.", + 'text_to' => "To", + 'text_from' => "From", + 'text_new' => "(New)", + 'text_reply' => "Reply", + 'text_delete' => "Delete", + 'text_forward_pm' => "Forward PM", + 'std_cannot_move_messages' => "Messages couldn't be moved! ", + 'std_cannot_delete_messages' => "Messages couldn't be deleted! ", + 'std_no_action' => "No action", + 'std_no_permission_forwarding' => "You do not have permission to forward this message.", + 'row_to' => "To: ", + 'row_original_receiver' => "Orignal Receiver:", + 'row_original_sender' => "Orignal Sender:", + 'row_subject' => "Subject:", + 'row_message' => "Message:", + 'checkbox_save_message' => "Save Message ", + 'submit_forward' => "Forward", + 'std_no_such_user' => "Sorry, there is no user with that username.", + 'std_rufused' => "Refused", + 'std_user_blocks_your_pms' => "This user has blocked PMs from you.", + 'std_user_accepts_friends_pms' => "This user only accepts PMs from users in his friends list.", + 'std_user_blocks_all_pms' => "This user does not accept PMs.", + 'std_success' => "Success", + 'std_pm_forwarded' => "PM forwarded", + 'head_editing_mailboxes' => "Editing Mailboxes", + 'text_editing_mailboxes' => "Editing Mailboxes", + 'text_add_mailboxes' => "Add Mailboxes", + 'text_extra_mailboxes_note' => "You may add extra mailboxes. You do not have to use all the input boxes.", + 'submit_add' => "Add", + 'text_edit_mailboxes' => "Edit Mailboxes", + 'text_edit_mailboxes_note' => "You may edit the names, or delete the name to delete this virtual directory.
    Please note, that all messages in this directory will be lost if you delete this directory. ", + 'text_no_mailboxes_to_edit' => "There are no mailboxes to edit.", + 'submit_edit' => "Edit", + 'std_no_message_id' => "No message with this ID.", + 'std_could_not_delete_message' => "Could not delete message.", + 'text_jump_to' => " at ", + 'select_inbox' => "Inbox", + 'select_sentbox' => "Sentbox", + 'submit_go' => "Go", + 'input_check_all' => "Check All", + 'input_uncheck_all' => "Uncheck All", + 'title_unread' => "Unread", + 'title_read' => "Read", + 'text_system' => "System", + 'text_no_subject' => "No Subject", + 'col_search_message' => "Search Message", + 'text_search' => "Search: ", + 'text_in' => "in", + 'select_title' => "title", + 'select_body' => "body", + 'select_both' => "both", + 'submit_mark_as_read' => "Mark as read", + 'std_cannot_mark_messages' => "Could not mark message as read.", + 'std_no_message_selected' => "No message selected." +); + +?> diff --git a/lang/en/lang_moforums.php b/lang/en/lang_moforums.php new file mode 100644 index 00000000..efc66f41 --- /dev/null +++ b/lang/en/lang_moforums.php @@ -0,0 +1,26 @@ + "Overforum Management", + 'text_forum_management' => "Forum Management", + 'text_overforum_management' => "Overforum Management", + 'col_name' => "Name", + 'col_viewed_by' => "Viewed By", + 'col_modify' => "Modify", + 'text_edit' => "Edit", + 'text_delete' => "Delete", + 'js_sure_to_delete_overforum' => "Are you sure you want to delete this overforum?", + 'text_no_records_found' => "Sorry, no records were found!", + 'text_new_overforum' => "New Overforum", + 'text_overforum_name' => "Overforum name", + 'text_overforum_description' => "Overforum description", + 'text_minimum_view_permission' => "Minimum view permission", + 'text_overforum_order' => "Overforum order", + 'text_overforum_order_note' => "Order by number ascendantly. That is, 0 shows on the topmost", + 'submit_make_overforum' => "Make Overforum", + 'text_edit_overforum' => "Edit Overforum", + 'submit_edit_overforum' => "Edit Overforum" +); + +?> diff --git a/lang/en/lang_moresmilies.php b/lang/en/lang_moresmilies.php new file mode 100644 index 00000000..8b7ec4c8 --- /dev/null +++ b/lang/en/lang_moresmilies.php @@ -0,0 +1,9 @@ + "More Clickable Smilies", + 'text_close' => "Close", +); + +?> diff --git a/lang/en/lang_mybonus.php b/lang/en/lang_mybonus.php new file mode 100644 index 00000000..b96182f7 --- /dev/null +++ b/lang/en/lang_mybonus.php @@ -0,0 +1,128 @@ + "Sorry!", + 'std_karma_system_disabled' => "Karma Bonus Point System is currently disabled. ", + 'std_points_active' => "However your points is still active.", + 'text_success_upload' => "Congratulations! You have just increased your Uploaded Amount!", + 'text_success_invites' => "Congratulations! You have got yourself 1 new invite!", + 'text_success_vip' => "Congratulations! You have got yourself ", + 'text_success_vip_two' => " status for one month!", + 'text_no_permission' => "ERROR! You have no permission.", + 'text_success_custom_title' => "Congradulations! You are now known as ".$CURUSER[title]."!", + 'text_success_gift' => " You have spread the Karma well.", + 'head_karma_page' => "'s Karma Bonus Page", + 'text_karma_system' => " Karma Bonus Point System", + 'text_exchange_your_karma' => "Exchange your Karma Bonus Points (currently ", + 'text_for_goodies' => " ) for goodies!", + 'text_no_buttons_note' => "If button is disabled, you have not earned enough bonus points to trade. ", + 'col_option' => "Option", + 'col_description' => "Description", + 'col_points' => "Points", + 'col_trade' => "Trade", + 'text_username' => "Username: ", + 'text_to_be_given' => "to be given: ", + 'text_karma_points' => " Karma points!", + 'text_enter_titile' => "Enter the Special Title you would like to have ", + 'text_click_exchange' => " click Exchange! ", + 'text_enter_receiver_name' => "Enter the username of the person you would like to send karma to, and select how many points you want to send and click Karma Gift!", + 'text_min' => "min.", + 'text_max' => "max.", + 'submit_karma_gift' => "Karma Gift!", + 'text_plus_only' => "+ only!", + 'submit_exchange' => "Exchange!", + 'text_unavailable' => "Currently not available!", + 'text_more_points_needed' => "more points needed", + 'text_what_is_karma' => "What the hell are these Karma Bonus points, and how do I get them?", + 'text_get_by_seeding' => "You get following karma points per hour by seeding:", + 'text_for_seeding_torrent' => " for each torrent you are seeding (max of ", + 'text_torrent' => " torrent", + 'text_donors_always_get' => "Donors always get ", + 'text_times_of_bonus' => "x bonus points.", + 'text_other_things_get_bonus' => "Other things that will get you karma points:", + 'text_point' => " point", + 'text_upload_torrent' => "uploading a new torrent = ", + 'text_upload_subtitle' => "uploading a subtitle = ", + 'text_start_topic' => "starting a topic = ", + 'text_make_post' => "making a post = ", + 'text_add_comment' => "commenting on torrent or offer = ", + 'text_poll_vote' => "voting on poll = ", + 'text_offer_vote' => "voting on offer = ", + 'text_funbox_vote' => "voting on funbox = ", + 'text_rate_torrent' => "rating a torrent = ", + 'text_say_thanks' => "saying thanks = ", + 'text_receive_thanks' => "receiving thanks = ", + 'text_funbox_reward' => "posting funbox stuff that received high ratings (see rules)", + 'text_howto_get_karma_four' => " +

    Things that you should keep in mind:

    +
      ", + 'text_howto_get_karma_five' => "
    • Everything that can get you karma can also be lost,
      i.e. if you upload a torrent then delete it, you will gain and then lose ", + 'text_howto_get_karma_six' => ".
    • +
    • There are always other hidden bonus karma points over the site. Try to find them :)
    • +
    • Staff can give or take away points for breaking the rules, or doing good for the community.
    • +
    ", + 'std_no_permission' => "No permission", + 'std_class_above_vip' => "Your class above VIP!", + 'text_wasted_karma' => "I just wasted my karma", + 'text_huh' => "Huh?", + 'text_karma_self_giving_warning' => "Not so fast there Mr. fancy pants...
    You can not spread the karma to yourself...
    If you want to spread the love, pick another user!

    click to go back to your Karma Bonus Point page.", + 'text_receiver_not_exists' => "Sorry...
    No User with that username

    click to go back to your Karma Bonus Point page.", + 'text_oups' => "OUPS!", + 'text_not_enough_karma' => "Sorry, you don't have enough Karma points!
    go back to your Karma Bonus Point page.", + 'text_cheat_alert' => "Fuck off! We know you are trying to cheat!", + 'text_not_enough_bonus' => "Sorry, you do not have enough bonus. BTW, how dou you get here?", + 'text_uploaded_one' => "1.0 GB Uploaded", + 'text_uploaded_note' => "With enough bonus points acquired, you are able to exchange them for an Upload Credit. The points are then removed from your Bonus Bank and the credit is added to your total uploaded amount.", + 'text_uploaded_two' => "5.0 GB Uploaded", + 'text_uploaded_three' => "10.0 GB Uploaded", + 'text_buy_invite' => "1 Invite", + 'text_buy_invite_note' => "With enough bonus points acquired, you are able to exchange them for a few invites. The points are then removed from your Bonus Bank and the invitations are added to your invites amount.", + 'text_custom_title' => "Custom Title!", + 'text_custom_title_note' => "With enough bonus points acquired, you can buy yourself a custom title. The only restrictions are no foul or offensive language, or names of user classes. The points are then removed from your Bonus Bank and your special title is changed to the title of your choice.", + 'text_vip_status' => "VIP Status", + 'text_vip_status_note' => "With enough bonus points acquired, you can buy yourself VIP status for one month. The points are then removed from your Bonus Bank and your status is changed.", + 'text_bonus_gift' => "Give A Karma Gift", + 'text_bonus_gift_note' => "Well perhaps you don't need the upload credit, but you know somebody that could use the Karma boost! You are now able to give your Karma credits as a gift! The points are then removed from your Bonus Bank and added to the account of a user of your choice! And they receive a PM with all the info as well as who it came from...", + 'text_error' => "Error", + 'text_ratio_too_high' => "Your ratio is high", + 'text_bonus_formula_one' => "The number of karma points gained per hour is given by the following formula
        \"A
        \"B
    +where
    • A is an intermediate variable
    • Ti is the ith torrent's Time Alive (TA), i.e. time elapsed since the torrent was uploaded, in weeks
    • T0 is a parameter. T0 = ", + 'text_bonus_formula_two' => "
    • Si is the ith torrent's size, in GB
    • Ni is the number of current seeders of the ith torrent
    • N0 is a parameter. N0 = ", + 'text_bonus_formula_three' => "
    • B is the number of karma points gained by seeding in an hour
    • B0 is a parameter, which stands for the maximum bonus points per hour a user can get by seeding. B0 = ", + 'text_bonus_formula_four' => "
    • L is a parameter. L = ", + 'text_bonus_formula_five' => "
    In a nutshell, you can get more bonus by seeding less-seeded and larger torrents.", + 'text_user_with_ratio_above' => "User with ratio above ", + 'text_and_uploaded_amount_above' => " and uploaded amount above ", + 'text_cannot_exchange_uploading' => " GB cannot exchange for more uploading credit.", + 'text_you_are_currently_getting' => "You are currently getting ", + 'text_per_hour' => " per hour", + 'text_custom' => "Custom", + 'bonus_amount_not_allowed' => "Bonus amount not allowed! You can only give away from 25.0 to 1000.0 points every time.", + 'text_system_charges_receiver' => "NOTE: The system charges the gift receiver ", + 'text_tax_bonus_point' => " bonus point", + 'text_tax_plus' => " + ", + 'text_percent_of_transfered_amount' => "% of the transfered amount", + 'text_as_tax' => " as tax. For example, the receiver only gets ", + 'text_tax_example_note' => " points when you send him 100 bonus points as a gift.", + 'text_no_advertisements' => " Days Without Ads", + 'text_no_advertisements_note' => "With enough bonus points acquired, you can buy yourself some time during which you can choose to see no ads at this site. The points are then removed from your Bonus Bank and you see no ads for a period. However, you could always re-enable ads at User CP. ", + 'text_success_no_ad' => "Enjoy your time with no ads!", + 'submit_class_above_no_ad' => "Disable ads at User CP", + 'submit_already_disabled' => "Ads Already Disabled", + 'text_click_on_ad' => "clicking on an ad (each ad only counts once) = ", + 'text_promotion_link_clicked' => "promotion link gets clicked (each IP only counts once) = ", + 'text_charity_giving' => "Charity Giving", + 'text_charity_giving_note' => "Charity goes directly to those in need. And it's absolutely up to you to decide who shall benefit from your generosity.", + 'text_ratio_below' => "Give to those with ratio below ", + 'text_and_downloaded_above' => " and downloaded above ", + 'text_select_receiver_ratio' => "Select the ratio of the people to whom you would like your charity goes to, and select how many points you want to send and click Charity Giving!", + 'submit_charity_giving' => "Charity Giving!", + 'text_message' => "Message: ", + 'bonus_amount_not_allowed_two' => "Bonus amount not allowed! You can only give away from 1000.0 to 50000.0 points every time.", + 'bonus_ratio_not_allowed' => "Bonus ratio not allowed! Only users whose ratio below 0.8 need charity.", + 'std_no_users_need_charity' => "No users need charity at the moment.", + 'text_success_charity' => "Thank you! Your generosity is appreciated." +); + +?> diff --git a/lang/en/lang_news.php b/lang/en/lang_news.php new file mode 100644 index 00000000..b2824279 --- /dev/null +++ b/lang/en/lang_news.php @@ -0,0 +1,21 @@ + "Delete news item", + 'std_are_you_sure' => "Do you really want to delete a news item? Click ", + 'std_here' => "here", + 'std_if_sure' => " if you are sure.", + 'std_error' => "Error", + 'std_news_body_empty' => "The news body cannot be empty!", + 'std_news_title_empty' => "The news title cannot be empty!", + 'std_something_weird_happened' => "Something weird just happened.", + 'std_invalid_news_id' => "No news item with ID ", + 'head_edit_site_news' => "Edit Site News", + 'text_edit_site_news' => "Edit Site News", + 'text_notify_users_of_this' => "Notify users of this.", + 'head_site_news' => "Site News", + 'text_submit_news_item' => "Submit news item" +); + +?> diff --git a/lang/en/lang_offers.php b/lang/en/lang_offers.php new file mode 100644 index 00000000..22ed8a61 --- /dev/null +++ b/lang/en/lang_offers.php @@ -0,0 +1,142 @@ + "Offered by ", + 'text_inf' => "Inf.", + 'text_ratio' => "ratio:", + 'text_orphaned' => "(orphaned)", + 'text_at' => " at ", + 'text_edit' => "Edit", + 'text_delete' => "Delete", + 'text_profile' => "Profile", + 'text_pm' => "PM", + 'text_report' => "Report", + 'text_last_edited_by' => "Last Edited by ", + 'text_edited_at' => " at ", + 'head_offer_error' => "Offer Error", + 'std_error' => "Error!", + 'std_smell_rat' => "I smell a rat!", + 'head_offer' => "Offer", + 'submit_search' => "Go!", + 'text_red_star_required' => "Fields marked with a red star(*) are required.", + 'text_offers_open_to_all' => "Offers are open to all users... a great ratio boost!", + 'select_type_select' => "(Select)", + 'row_type' => "Type", + 'row_title' => "Title", + 'row_post_or_photo' => "Poster or Photo", + 'text_link_to_picture' => "(Direct link to image. NO TAG NEEDED! Will be shown in description)", + 'row_description' => "Description", + 'submit_add_offer' => "Add Offer!", + 'col_type' => "Type", + 'col_title' => "Title", + 'title_time_added' => "Time Added", + 'col_offered_by' => "Added By", + 'submit_show_all' => "Show All", + 'std_must_enter_name' => "You must enter a name!", + 'std_must_select_category' => "You must select a category to put the offer in!", + 'std_must_enter_description' => "You must enter a description!", + 'std_wrong_image_format' => "Image MUST be in jpg, gif or png format.", + 'head_success' => "Success!", + 'head_error' => "Error!", + 'std_offer_exists' => "Offer allready exists!", + 'text_view_all_offers' => "View all offers.", + 'head_offer_detail_for' => "Offer Details for ", + 'text_offer_detail' => "Offer Details", + 'row_time_added' => "Time Added", + 'row_status' => "Status", + 'text_pending' => "Pending", + 'text_allowed' => "Allowed", + 'text_denied' => "Denied", + 'text_edit_offer' => "Edit Offer", + 'text_delete_offer' => "Delete Offer", + 'report_offer' => "Report Offer", + 'row_allow' => "Allow", + 'submit_allow' => "Allow", + 'submit_let_votes_decide' => "Let votes decide", + 'row_vote' => "Vote", + 'text_for' => "For", + 'text_against' => "Against", + 'row_offer_allowed' => "Offer Allowed", + 'text_voter_receives_pm_note' => "If you voted for this offer, you will be PMed when it is upped!", + 'text_urge_upload_offer_note' => "This offer has been allowed! Please upload it as soon as possible.", + 'row_vote_results' => "Vote Results", + 'text_see_vote_detail' => "[See Vote Details]", + 'row_report_offer' => "Report Offer", + 'text_for_breaking_rules' => " for breaking the rules ", + 'submit_report_offer' => "Report Offer", + 'text_add_comment' => "Add Comment", + 'text_no_comments' => "No comments", + 'std_access_denied' => "Access denied!", + 'std_mans_job' => "this is a man's job!", + 'std_have_no_permission' => "You do not have permission", + 'std_sorry' => "Sorry", + 'std_no_votes_yet' => "No votes yet... ", + 'std_back_to_offer_detail' => "Back to Offer details", + 'std_cannot_edit_others_offer' => "This is not your Offer to edit.", + 'head_edit_offer' => "Edit Offer ", + 'text_edit_offer' => "Edit Offer", + 'submit_edit_offer' => "Edit Offer", + 'head_offer_voters' => "Offer Voters", + 'text_vote_results_for' => "Offer Vote Results For", + 'col_user' => "User", + 'col_uploaded' => "Uploaded", + 'col_downloaded' => "Downloaded", + 'col_ratio' => "Ratio", + 'col_vote' => "Vote", + 'std_already_voted' => "You've already voted", + 'std_already_voted_note' => "

    You've already voted, max 1 vote per offer

    Back to the ", + 'std_back_to_offer_detail' => "offer details

    ", + 'head_vote_for_offer' => "Vote For Offer", + 'std_vote_accepted' => "Vote accepted", + 'std_vote_accepted_note' => "

    Your vote have been accepted

    Back to the ", + 'std_cannot_delete_others_offer' => "This is not your Offer to delete!", + 'std_delete_offer' => "Delete Offer", + 'std_delete_offer_note' => "You're about to delete this offer.", + 'head_offers' => "Offers", + 'text_offers_section' => "Offers Section", + 'text_add_offer' => "Add offer", + 'text_view_request' => "View Requests", + 'select_show_all' => "(Show All)", + 'submit_view_only_selected' => "view only selected", + 'text_search_offers' => "Search: ", + 'title_comment' => "Comments", + 'col_vote_results' => "Vote", + 'text_nothing_found' => "Nothing Found!", + 'text_yep' => "yep", + 'text_nah' => "nah", + 'title_show_vote_details' => "Show Vote Details", + 'title_i_want_this' => "I want this!", + 'title_do_not_want_it' => "I don't like this", + 'row_action' => "Action", + 'text_quick_comment' => "Quick Comment", + 'submit_add_comment' => "Add Comment", + 'text_blank' => " ", + 'col_act' => "Act.", + 'title_delete' => "Delete", + 'title_edit' => "Edit", + 'col_timeout' => "Timeout", + 'row_info' => "Info", + 'text_reason_is' => "Reason: ", + 'submit_confirm' => "Confirm", + 'title_add_comments' => "Add comment", + 'text_at_time' => " at ", + 'text_blank_two' => " ", + 'text_last_commented_by' => "Last commented by ", + 'title_has_new_comment' => "Has new comment", + 'title_no_new_comment' => "No new comment", + 'text_new' => "NEW", + 'std_cannot_vote_youself' => "You cannot vote for your own offers.", + 'text_rules' => "Rules: ", + 'text_rule_one_one' => "", + 'text_rule_one_two' => " or above can upload torrents directly without going through offers section. ", + 'text_rule_one_three' => " or above can add offers.", + 'text_rule_two_one' => "An offer becomes approved when supporting votes for it are ", + 'text_rule_two_two' => " more than objecting votes.", + 'text_rule_three_one' => "Offers will be deleted if not approved ", + 'text_rule_three_two' => " hours after added.", + 'text_rule_four_one' => "Offers will be deleted if not uploaded ", + 'text_rule_four_two' => " hours after being approved.", +); + +?> diff --git a/lang/en/lang_ok.php b/lang/en/lang_ok.php new file mode 100644 index 00000000..3e77cee2 --- /dev/null +++ b/lang/en/lang_ok.php @@ -0,0 +1,24 @@ + "User signup", + 'std_account_activated' => "Signup successful but Account not activated!", + 'account_activated_note' => "Your account successfully created however Admin must validate new members before they are classified as registered members and are allowed to access site, thank you for your understanding.", + 'account_activated_note_two' => "Your account successfully created however your inviter must validate new members before they are classified as registered members and are allowed to access site, thank you for your understanding.", + 'std_signup_successful' => "Signup successful!", + 'std_confirmation_email_note' => "A confirmation email has been sent to the address you specified (" , + 'std_confirmation_email_note_end' => "). You need to read and respond to this email before you can use your account. If you don't do this, the new account will be deleted automatically after a short while.", + 'head_sysop_activation' => "Sysop Account activation", + 'std_sysop_activation_note' => "

    Sysop Account successfully activated!

    \n", + 'std_auto_logged_in_note' => "

    Your account has been activated!\n You have been automatically logged in. You can now continue to the main page and start using your account.

    \n", + 'std_cookies_disabled_note' => "

    Your account has been activated! However, it appears that you could not be logged in automatically. Maybe you need to open a new window in your browser.
    Another possible reason is that you disabled cookies in your browser. You have to enable cookies to use your account. Please do that and then log in and try again.

    \n", + 'head_already_confirmed' => "Already confirmed", + 'std_already_confirmed' => "

    Already confirmed

    \n", + 'std_already_confirmed_note' => "

    This user account has already been confirmed. You can proceed to log in with it.

    \n", + 'head_signup_confirmation' => "Signup confirmation", + 'std_account_confirmed' => "

    Account successfully confirmed!

    \n", + 'std_read_rules_faq' => "

    Before you start using ".$SITENAME." we urge you to read the RULES and the FAQ.

    \n" +); + +?> diff --git a/lang/en/lang_polloverview.php b/lang/en/lang_polloverview.php new file mode 100644 index 00000000..cdd77f61 --- /dev/null +++ b/lang/en/lang_polloverview.php @@ -0,0 +1,21 @@ + "Error", + 'head_poll_overview' => "Polls Overview", + 'text_polls_overview' => "Polls Overview", + 'col_id' => "ID", + 'col_added' => "Added", + 'col_question' => "Question", + 'text_no_users_voted' => "Sorry...There are no users that voted!", + 'text_no_poll_id' => "Sorry...There are no polls with that ID!", + 'text_poll_question' => "Poll Questions", + 'col_option_no' => "Option No", + 'col_options' => "Options", + 'text_polls_user_overview' => "Polls User Overview", + 'col_username' => "Username", + 'col_selection' => "Selection", +); + +?> diff --git a/lang/en/lang_polls.php b/lang/en/lang_polls.php new file mode 100644 index 00000000..93e704e8 --- /dev/null +++ b/lang/en/lang_polls.php @@ -0,0 +1,20 @@ + "Error", + 'std_permission_denied' => "Permission denied.", + 'std_delete_poll' => "Delete poll", + 'std_delete_poll_confirmation' => "Do you really want to delete a poll? Click\n", + 'std_here_if_sure' => "here if you are sure.", + 'std_sorry' => "Sorry...", + 'std_no_polls' => "There are no polls!", + 'head_previous_polls' => "Previous polls", + 'text_previous_polls' => "Previous polls", + 'text_ago' => " ago", + 'text_edit' => "Edit", + 'text_delete' => "Delete", + 'text_votes' => "Votes: " +); + +?> \ No newline at end of file diff --git a/lang/en/lang_preview.php b/lang/en/lang_preview.php new file mode 100644 index 00000000..8ba777c6 --- /dev/null +++ b/lang/en/lang_preview.php @@ -0,0 +1,8 @@ + "Preview" +); + +?> \ No newline at end of file diff --git a/lang/en/lang_promotionlink.php b/lang/en/lang_promotionlink.php new file mode 100644 index 00000000..907ce479 --- /dev/null +++ b/lang/en/lang_promotionlink.php @@ -0,0 +1,29 @@ + "Promotion Link", + 'text_promotion_link' => "Promotion Link", + 'text_promotion_link_note_one' => "If you really like this site, why not help let more people know about it? You can do this by spreading out your promotion link. ", + 'text_promotion_link_note_two' => "Every user has an unique promotion link, a random URL generated by the system to identify him. When someone clicks on your promotion link, he will be redirected to this site and the system will reward you for helping spread the URL.", + 'text_you_would_get' => "You would get ", + 'text_bonus_points' => " bonus points each time your promotion link is clicked by an unrecorded IP. Only one click is counted in ", + 'text_seconds' => " seconds.", + 'text_your_promotion_link_is' => "Your promotion link: ", + 'text_promotion_link_note_four' => "You can choose anyway you like to use your promotion link. The following are some examples: ", + 'col_type' => "Type", + 'col_code' => "Code", + 'col_result' => "Result", + 'col_note' => "Note", + 'row_xhtml' => "XHTML 1.0", + 'text_xhtml_note' => "If you have your personal site, you can use XHTML code in your page.", + 'row_html' => "HTML 4.01", + 'text_html_note' => "If you have your personal site, you can use HTML code in your page.", + 'row_bbcode' => "BBCode", + 'text_bbcode_note' => "Most internet forums software (e.g. vBulletin, Discuz!, PHPWind) support BBCode. It's a good idea to put your promotion link in your signature.", + 'row_bbcode_userbar' => "BBCode userbar", + 'text_bbcode_userbar_note' => "Get your personal userbar. For userbar to work, you must NOT set your privacy level to 'strong' (at User CP).", + 'row_bbcode_userbar_alt' => "BBCode userbar alt.", + 'text_bbcode_userbar_alt_note' => "Use this if the above one doesn't work. For userbar to work, you must NOT set your privacy level to 'strong' (at User CP)." +) +?> diff --git a/lang/en/lang_recover.php b/lang/en/lang_recover.php new file mode 100644 index 00000000..15d075e8 --- /dev/null +++ b/lang/en/lang_recover.php @@ -0,0 +1,39 @@ + "Recover Failed! (See Below)", + 'std_missing_email_address' => "You must enter an email address!", + 'std_invalid_email_address' => "Invalid email address!", + 'std_email_not_in_database' => "The email address was not found in the database.\n", + 'std_error' => "Error", + 'std_database_error' => "Database error. Please contact an administrator about this.", + 'std_unable_updating_user_data' => "Unable to update user data. Please contact an administrator about this error.", + 'text_recover_user' => "Recover lost user name or password.", + 'text_use_form_below' => "Use the form below to have your password reset and your account details mailed back to you.", + 'text_reply_to_confirmation_email' => "(You will have to reply to a confirmation email.)", + 'text_note' => "Note: ", + 'text_ban_ip' => " failed attempts in a row will result in banning your ip!", + 'row_registered_email' => "Registered email: ", + 'submit_recover_it' => "Recover It!", + 'text_you_have' => "You have ", + 'text_remaining_tries' => " remaining tries.", + + 'mail_this_link' => "THIS LINK", + 'mail_here' => "HERE", + + 'mail_title' => " password reset confirmation", + 'mail_one' => "Hi,

    Someone, hopefully you, requested that the password for the account
    associated with this email address ", + 'mail_two' => " be reset.

    The request originated from ", + 'mail_three' => ".

    If you did not do this ignore this email. Please do not reply.

    Should you wish to confirm this request, please follow ", + 'mail_four' => "
    After you do this, your password will be reset and emailed back to you.

    ------
    Yours,
    The ".$SITENAME." Team.", + + 'mail_two_title' => " account details", + 'mail_two_one' => "Hi,

    As per your request we have generated a new password for your account.

    Here is the information we now have on file for this account:

    User name: ", + 'mail_two_two' => "
    Password: ", + 'mail_two_three' => "

    You may login from ", + 'mail_two_four' => "

    You may change your password in User CP - Security Settings after logging in.
    ------
    Yours,
    The ".$SITENAME." Team.", + 'text_select_lang' => "Select Site Language: ", + 'std_user_account_unconfirmed' => "The account has not been verified yet. If you didn't receive the confirmation email, try to reseed it.", +); +?> diff --git a/lang/en/lang_report.php b/lang/en/lang_report.php new file mode 100644 index 00000000..b4270dbb --- /dev/null +++ b/lang/en/lang_report.php @@ -0,0 +1,42 @@ + "Error", + 'std_missing_reason' => "Missing Reason!", + 'std_message' => "Message", + 'std_successfully_reported' => "Successfully reported!", + 'std_already_reported_this' => "You have already reported this!", + 'std_sorry' => "Sorry", + 'std_cannot_report_oneself' => "You can not report yourself!", + 'std_invalid_user_id' => "Invalid User Id!", + 'std_cannot_report' => "You can not report ", + 'std_are_you_sure' => "Are you sure?", + 'text_are_you_sure_user' => "Are you sure you would like to report this user ", + 'text_to_staff' => " to the Staff for violation of the rules?", + 'text_not_for_leechers' => "Please note, this is not to be used to report leechers, we have scripts in place to deal with them!", + 'text_reason_is' => "Reason (required): ", + 'submit_confirm' => "Confirm", + 'text_reason_note' => " PLEASE Note!  If no reason is given you will get a warning yourself.", + 'std_invalid_torrent_id' => "Invalid Torrent Id!", + 'text_are_you_sure_torrent' => "Are you sure you would like to report this torrent ", + 'std_invalid_post_id' => "Invalid Post Id!", + 'text_are_you_sure_post' => "Are you sure you would like to report the forum post (ID ", + 'text_of_topic' => " of topic ", + 'text_of_torrent' => " of torrent ", + 'text_of_offer' => " of offer ", + 'text_of_request' => " of request ", + 'text_by' => ") by ", + 'std_invalid_comment_id' => "Invalid Comment Id!", + 'std_orphaned_comment' => "Orphaned comment. Please report this to admin.", + 'text_are_you_sure_comment' => "Are you sure you would like to report the comment (ID ", + 'std_invalid_offer_id' => "Invalid offer Id!", + 'text_are_you_sure_offer' => "Are you sure you would like to report the following offer ", + 'std_invalid_request_id' => "Invalid Request Id!", + 'std_are_you_sure_request' => "Are you sure you would like to report the following request ", + 'std_invalid_action' => "Invalid action.", + 'std_invalid_subtitle_id' => "Invalid Subtitle Id!", + 'text_are_you_sure_subtitle' => "Are you sure you would like to report the subtitle ", +); + +?> diff --git a/lang/en/lang_reports.php b/lang/en/lang_reports.php new file mode 100644 index 00000000..1266abc4 --- /dev/null +++ b/lang/en/lang_reports.php @@ -0,0 +1,41 @@ + "Oho!", + 'std_no_report' => "No report.", + 'head_reports' => "Reports", + 'text_reports' => "Reports", + 'col_added' => "Added", + 'col_reporter' => "Reporter", + 'col_reporting' => "Reporting", + 'col_type' => "Type", + 'col_reason' => "Reason", + 'col_dealt_with' => "Dealt With", + 'col_action' => "Act.", + 'text_yes' => "Yes", + 'text_no' => "No", + 'text_torrent' => "Torrent", + 'text_torrent_does_not_exist' => "Torrent doesn't exist or is deleted.", + 'text_user' => "User", + 'text_user_does_not_exist' => "User doesn't exist or is deleted.", + 'text_offer' => "Offer", + 'text_offer_does_not_exist' => "Offer doesn't exist or is deleted.", + 'text_forum_post' => "Forum Post", + 'text_post_does_not_exist' => "Forum post doesn't exist or is deleted.", + 'text_post_id' => "Post ID ", + 'text_of_topic' => " of Topic ", + 'text_by' => " by ", + 'text_comment' => "Comment", + 'text_comment_does_not_exist' => "Comment doesn't exist or is deleted.", + 'text_of_torrent' => " of torrent ", + 'text_of_offer' => " of offer ", + 'text_comment_id' => "Comment ID ", + 'text_subtitle' => "Subtitle", + 'text_subtitle_does_not_exist' => "Subtitle doesn't exist or is deleted.", + 'text_for_torrent_id' => " for torrent ID ", + 'submit_set_dealt' => "Set Dealt", + 'submit_delete' => "Delete", +); + +?> diff --git a/lang/en/lang_rules.php b/lang/en/lang_rules.php new file mode 100644 index 00000000..0e93b517 --- /dev/null +++ b/lang/en/lang_rules.php @@ -0,0 +1,8 @@ + "Rules" +); + +?> \ No newline at end of file diff --git a/lang/en/lang_sendmessage.php b/lang/en/lang_sendmessage.php new file mode 100644 index 00000000..247e9647 --- /dev/null +++ b/lang/en/lang_sendmessage.php @@ -0,0 +1,24 @@ + "Error", + 'std_permission_denied' => "Permission denied", + 'head_send_message' => "Send message", + 'text_mass_message' => "Mass Message to ", + 'text_users' => "users", + 'text_subject' => "Subject:", + 'text_comment' => "Comment:", + 'text_from' => "From:", + 'text_take_snapshot' => "Take snapshot:", + 'submit_send_it' => "Send it!", + 'submit_preview' => "Preview", + 'text_templates' => "Templates:", + 'submit_use' => "Use", + 'std_no_user_id' => "No user with that ID.", + 'text_message_to' => "Message to ", + 'checkbox_delete_message_replying_to' => "Delete message you are replying to", + 'checkbox_save_message_to_sendbox' => "Save message to Sentbox" +); + +?> \ No newline at end of file diff --git a/lang/en/lang_settings.php b/lang/en/lang_settings.php new file mode 100644 index 00000000..21cc9b07 --- /dev/null +++ b/lang/en/lang_settings.php @@ -0,0 +1,679 @@ + "Yes", + 'text_no' => "No", + 'text_website_settings' => "Website Settings", + 'text_configuration_file_saving_note' => "Before saving the settings, please ensure that you have properly configured file and directory access permissions.", + 'head_save_main_settings' => "Save Main Settings", + 'std_message' => "Message", + 'std_click' => "Click ", + 'std_here' => "here", + 'std_to_go_back' => " to go back.", + 'head_save_basic_settings' => "Save Basic Settings", + 'head_save_code_settings' => "Save Code Settings", + 'head_save_bonus_settings' => "Save Bonus Settings", + 'head_save_account_settings' => "Save Account Settings", + 'head_save_torrent_settings' => "Save Torrent Settings", + 'head_save_smtp_settings' => "Save SMTP Settings", + 'head_save_security_settings' => "Save Security Settings", + 'head_save_authority_settings' => "Save Authority Settings", + 'head_save_tweak_settings' => "Save Tweak Settings", + 'head_save_bot_settings' => "Save Bot Settings", + 'head_bot_settings' => "Bot Settings", + 'head_tweak_settings' => "Tweak Settings", + 'row_save_user_location' => "Save User Location", + 'text_save_user_location_note' => "Default 'no'. Save user's latest browsing location.", + 'row_log_user_ips' => "Log user's IPs", + 'text_store_user_ips_note' => "Default 'yes'. Log IP address when users have a different IP.", + 'row_kps_enabled' => "Enable Karma Bonus Point System", + 'text_enabled' => "Enabled", + 'text_disabled_but_save' => "Disabled but still save points", + 'text_disabled_no_save' => "Totally disabled", + 'text_kps_note' => "Default 'enabled'. Enable KPS or disable. Keep points or not.", + 'row_tracker_founded_date' => "Tracker Founded Date", + 'text_tracker_founded_date_note' => "Time format is YYYY-MM-DD, set it to the date when your tracker was founded", + 'row_save_settings' => "Save settings", + 'submit_save_settings' => "Save Settings [PRESS ONLY ONCE]", + 'head_smtp_settings' => "SMTP Settings", + 'row_mail_function_type' => "Type of PHP Mail function", + 'head_security_settings' => "Security Settings", + 'row_enable_ssl' => "Use SSL (Web)", + 'row_enable_ssl_tracker' => "Use SSL (Tracker)", + 'text_optional' => "Optional (selectable by users)", + 'text_ssl_note' => "Default 'no'. Enabling SSL requires additional configuration for your HTTP server and a certificate (either from by a certificate authority or self-signed).", + 'row_enable_image_verification' => "Enable Image Verification", + 'text_image_verification_note' => "Default 'no'. Require users to enter a Visual Verify Code to register/login/recover.", + 'row_allow_email_change' => "Allow user to change email", + 'text_email_change_note' => "Default 'no'. Set to 'no' to forbid users changing his email address", + 'row_cheater_detection_level' => "Cheater detection level", + 'select_none' => "none", + 'select_conservative' => "conservative", + 'select_normal' => "normal", + 'select_strict' => "strict", + 'select_paranoid' => "paranoid", + 'text_cheater_detection_level_note' => "Default 'normal'. Set it to the level that best fits your tracker. Stricter, slower peers' announcing speed. ", + 'text_never_suspect' => "Never suspect ", + 'text_or_above' => " or above, i.e. no detection is done. Default ", + 'row_max_ips' => "Max. IPs", + 'text_max_ips_note' => "Disable registration with same IP Address.", + 'row_max_login_attemps' => "Max. Login Attempts", + 'text_max_login_attemps_note' => "Ban IP address who exceeds this limit.", + 'head_authority_settings' => "Authority Settings", + 'row_default_class' => "Default Class", + 'text_default_user_class' => "Default User Class: ", + 'text_default' => " Default ", + 'text_default_class_note' => ". Class upon registration", + 'row_staff_member' => "Staff Member", + 'text_minimum_class' => "Minimun Class: ", + 'text_staff_member_note' => ". Classes considered as staff members, e.g. can view staffbox", + 'row_news_management' => "News Management", + 'text_news_management_note' => ". Add new, edit, delete news", + 'row_post_funbox_item' => "Post funbox item", + 'text_post_funbox_item_note' => ". Post new funbox items and edit own's funbox items", + 'row_funbox_management' => "Funbox Management", + 'text_funbox_management_note' => ". Edit, delete, ban anyone's funbox items", + 'row_shoutbox_management' => "Shoutbox Management", + 'text_shoutbox_management_note' => ". Delete messages in shoutbox and helpbox", + 'row_poll_management' => "Poll Management", + 'text_poll_management_note' => ". Add new, edit, delete polls", + 'row_apply_for_links' => "Apply for Links", + 'text_apply_for_links_note' => ". Apply for links on main page", + 'row_link_management' => "Link Management", + 'text_link_management_note' => ". Add new, edit, delete links", + 'row_forum_post_management' => "Forum Post Management", + 'text_forum_post_management_note' => ". Edit, delete, move, stick, lock forum posts", + 'row_comment_management' => "Comment Management", + 'text_comment_management_note' => ". Edit, delete comments of torrents, offers", + 'row_forum_management' => "Forum Management", + 'text_forum_management_note' => ". Add new, edit, delete, move forums", + 'row_view_userlist' => "View User List", + 'text_view_userlist_note' => ". View, search user list", + 'row_torrent_management' => "Torrent Management", + 'text_torrent_management_note' => ". Edit, delete torrents, excluding setting torrent sticky or on promotion", + 'row_torrent_sticky' => "Torrent Sticky", + 'text_torrent_sticky_note' => ". Set torrents sticky", + 'row_torrent_on_promotion' => "Torrent on Promotion", + 'text_torrent_promotion_note' => ". Set torrents on promotion", + 'row_ask_for_reseed' => "Ask for reseed", + 'text_ask_for_reseed_note' => ". Ask for reseed when torrents are dead", + 'row_view_nfo' => "View NFO", + 'text_view_nfo_note' => ". View NFO files", + 'row_view_torrent_structure' => "View Torrent Structure", + 'text_view_torrent_structure_note' => ". View structure of torrent files", + 'row_send_invite' => "Send Invite", + 'text_send_invite_note' => ". Send invitation of membership to others", + 'row_view_history' => "View History", + 'text_view_history_note' => ". View other's comment and post history", + 'row_view_topten' => "View Topten", + 'text_view_topten_note' => ". View Top Ten", + 'row_view_general_log' => "View General Log", + 'text_view_general_log_note' => ". View general log, excluding confidential log", + 'row_view_confidential_log' => "View Confidential Log", + 'text_view_confidential_log_note' => ". View confidential log, e.g. site setting changes", + 'row_view_user_confidential' => "View User's Confidential Profile", + 'text_view_user_confidential_note' => ". View user's confidential profile, e.g. IP address, Email adrress", + 'row_view_user_torrent' => "View User's Torrent History", + 'text_view_user_torrent_note' => ". View user's torrent history, e.g. downloaded torrents.
    Valid only when user's setting for privacy level is not 'strong'", + 'row_general_profile_management' => "User's General Profile Management", + 'text_general_profile_management_note' => ". Change user's profile, excluding crucial ones e.g. email, username, uploaded and downloaded amount, bonus", + 'row_crucial_profile_management' => "User's Crucial Profile Management", + 'text_crucial_profile_management_note' => ". Change user's crucial profile, excluding donation (only ", + 'text_can_manage_donation' => " can manage donation).", + 'row_upload_subtitle' => "Upload subtitle", + 'text_upload_subtitle_note' => ". Upload subtitles for torrents", + 'row_delete_own_subtitle' => "Delete own's subtitle", + 'text_delete_own_subtitle_note' => ". Delete subtitles uploaded by oneself", + 'row_subtitle_management' => "Subtitle Management", + 'text_subtitle_management' => ". Delete any subtitle", + 'row_update_external_info' => "Update External Info", + 'text_update_external_info_note' => ". Update outdated external infomation, e.g. IMDb info", + 'row_view_anonymous' => "View Anonymous", + 'text_view_anonymous_note' => ". View who anonymous one is", + 'row_be_anonymous' => "Be Anonymous", + 'text_be_anonymous_note' => ". Upload torrents, subtitles anonymously", + 'row_add_offer' => "Add Offer", + 'text_add_offer_note' => ". Add offers to upload", + 'row_offer_management' => "Offer Management", + 'text_offer_management_note' => ". Allow, Edit, Delete offer", + 'row_upload_torrent' => "Upload Torrent", + 'text_upload_torrent_note' => ". Upload torrents to Torrents section", + 'row_upload_special_torrent' => "Upload Special Torrent", + 'text_upload_special_torrent_note' => ". Upload torrents to Special section", + 'row_move_torrent' => "Move Torrent", + 'text_move_torrent_note' => ". Move torrents between sections", + 'row_chronicle_management' => "Chronicle Management", + 'text_chronicle_management_note' => ". Add, edit, delete chronicle.", + 'row_view_invite' => "View Invite", + 'text_view_invite_note' => ". View user's invite history.", + 'row_buy_invites' => "Buy Invites", + 'text_buy_invites_note' => ". Buy invites at bonus center.", + 'row_see_banned_torrents' => "See Banned Torrents", + 'text_see_banned_torrents_note' => ". See and download banned torrents.", + 'row_vote_against_offers' => "Vote Against Offers", + 'text_vote_against_offers_note' => ". Vote against offers.", + 'row_allow_userbar' => "Allow Userbar", + 'text_allow_userbar_note' => ". Get his userbar.", + 'head_basic_settings' => "Basic Settings", + 'row_site_name' => "Site Name", + 'text_site_name_note' => "Website Name.", + 'row_base_url' => "Base URL", + 'text_it_should_be' => "It should be: ", + 'text_base_url_note' => ". NO trailing slash (/) at the end!", + 'row_announce_url' => "Announce URL", + 'row_mysql_host' => "MySQL Host", + 'text_mysql_host_note' => "Please enter your MySQL host. If MySQL runs on the same host as the HTTP server, enter 'localhost'. Otherwise enter the IP address of the server on which MySQL runs.", + 'row_mysql_user' => "MySQL user", + 'text_mysql_user_note' => "Please enter your MySQL user name. The default user is 'root'. However, for security reason, you may consider creating some other MySQL user for this site", + 'row_mysql_password' => "MySQL Password", + 'text_mysql_password_note' => "For security reason, current MySQL password is not shown here. You need to enter your MySQL password every time you change the Basic Settings.", + 'row_mysql_database_name' => "MySQL Database Name", + 'text_mysql_database_name_note' => "Please enter database name of your tracker.", + 'head_code_settings' => "Code Settings", + 'row_main_version' => "Main Version", + 'text_main_version_note' => "The code main version.", + 'row_sub_version' => "Sub Version", + 'text_sub_version_note' => "The code sub version", + 'row_release_date' => "Release date", + 'text_release_date_note' => "Time format is YYYY-MM-DD. The date code was released.", + 'row_authorize_to' => "Authorize to", + 'text_authorize_to_note' => "The site or people the code is authorized to.", + 'row_authorization_type' => "Authorization Type", + 'text_free' => "Free", + 'text_commercial' => "Commercial", + 'row_web_site' => "Web Site", + 'text_web_site_note' => "The site URL of ", + 'text_web_site_note_two' => ".", + 'row_email' => "Email", + 'text_email_note_one' => "The contacting Email address of ", + 'text_email_note_two' => ".", + 'row_msn' => "MSN", + 'text_msn_note_one' => "The contacting MSN of ", + 'text_msn_note_two' => ".", + 'row_qq' => "QQ", + 'text_qq_note_one' => "The contacting QQ of ", + 'text_qq_note_two' => ".", + 'row_telephone' => "Telephone", + 'text_telephone_note_one' => "The contacting telephone of ", + 'text_telephone_note_two' => ".", + 'head_bonus_settings' => "Bonus Settings", + 'text_bonus_by_seeding' => "Get bonus by seeding", + 'row_donor_gets_double' => "Donor Gets Double", + 'text_donor_gets' => "Donor always gets ", + 'text_times_as_many' => " times as many of bonus points for seeding. Default '2'. Set it to '0' to treat donors as common users.", + 'row_basic_seeding_bonus' => "Basic Seeding Bonus", + 'text_user_would_get' => "User would get ", + 'text_bonus_points' => " bonus points for each torrent he's seeding, maximumly ", + 'text_torrents_default' => " torrents. Default '1', '7'. Set bonus points to '0' to disable the rule.", + 'row_seeding_formula' => "Seeding Formula", + 'text_bonus_formula_one' => "The number of karma points gained per hour is given by the following formula", + 'text_where' => "where", + 'text_bonus_formula_two' => "A is an intermediate variable
  • Ti is the ith torrent's Time Alive (TA), i.e. time elapsed since the torrent was uploaded, in weeks", + 'text_bonus_formula_three' => "T0 is a parameter. T0 = ", + 'text_bonus_formula_four' => ". Default '4'", + 'text_bonus_formula_five' => "Si is the ith torrent's size, in GB", + 'text_bonus_formula_six' => "Ni is the number of current seeders of the ith torrent
  • N0 is a parameter. N0 = ", + 'text_bonus_formula_seven' => ". Default '7'", + 'text_bonus_formula_eight' => "B is the number of karma points gained by seeding in an hour", + 'text_bonus_formula_nine' => "B0 is a parameter, which standards for the maximum bonus points per hour a user can get by seeding. B0 = ", + 'text_bonus_formula_ten' => ". Default '100'", + 'text_bonus_formula_eleven' => "L is a parameter. L = ", + 'text_bonus_formula_twelve' => ". Default '300'", + 'text_misc_ways_get_bonus' => "Miscellaneous ways to get bonus", + 'row_uploading_torrent' => "Uploading torrent", + 'text_user_would_get' => "User would get ", + 'text_uploading_torrent_note' => " bonus points for uploading a new torrent. Default '15'.", + 'row_uploading_subtitle' => "Uploading subtitle", + 'text_uploading_subtitle_note' => " bonus points for uploading a new subtitle. Default '5'.", + 'row_starting_topic' => "Starting topic", + 'text_starting_topic_note' => " bonus points for starting a new topic at forums. Default '2'.", + 'row_making_post' => "Making post", + 'text_making_post_note' => " bonus points for making a post at forums. Default '1'.", + 'row_adding_comment' => "Adding comment", + 'text_adding_comment_note' => " bonus points for adding a comment for torrents, offers . Default '1'.", + 'row_voting_on_poll' => "Voting on poll", + 'text_voting_on_poll_note' => " bonus points for voting on a poll. Default '1'.", + 'row_voting_on_offer' => "Voting on offer", + 'text_voting_on_offer_note' => " bonus points for voting on an offer. Default '1'.", + 'row_voting_on_funbox' => "Voting on funbox", + 'text_voting_on_funbox_note' => " bonus points for voting on a funbox stuff. Default '1'.", + 'row_saying_thanks' => "Saying thanks", + 'text_giver_and_receiver_get' => "Thanks giver and receiver would respectively get ", + 'text_saying_thanks_and' => " and ", + 'text_saying_thanks_default' => " bonus points. Default '0.5', '0'.", + 'row_funbox_stuff_reward' => "Funbox stuff reward", + 'text_funbox_stuff_reward_note' => " bonus points for posting funbox stuff that is rated 'funny'. Default '5'.", + 'text_things_cost_bonus' => "Things that cost bonus", + 'row_one_gb_credit' => "1.0 GB uploading credit", + 'text_it_costs_user' => "It costs user ", + 'text_one_gb_credit_note' => " bonus points to exchange for 1.0 GB uploading credit. Default '300'.", + 'row_five_gb_credit' => "5.0 GB uploading credit", + 'text_five_gb_credit_note' => " bonus points to exchange for 5.0 GB uploading credit. Default '800'.", + 'row_ten_gb_credit' => "10.0 GB uploading credit", + 'text_ten_gb_credit_note' => " bonus points to exchange for 10.0 GB uploading credit. Default '1200'.", + 'row_ratio_limit' => "Ratio limit", + 'text_user_with_ratio' => "User with ratio above ", + 'text_uploaded_amount_above' => " and uploaded amount above ", + 'text_ratio_limit_default' => " GB cannot exchange for uploading credit. Default '6', '50'. Set ratio to '0' to disable the limit.", + 'row_buy_an_invite' => "Buy an invite", + 'text_buy_an_invite_note' => " bonus points to get a invite. Default '1000'.", + 'row_custom_title' => "Custom title", + 'text_custom_title_note' => " bonus points to custom his title. Default '5000'.", + 'row_vip_status' => "VIP status", + 'text_vip_status_note' => " bonus points to buy VIP status for one month. Default '8000'.", + 'row_allow_giving_bonus_gift' => "Allow giving bonus gift", + 'text_giving_bonus_gift_note' => "Allow users to give bonus gift to each other. Default 'yes'.", + 'head_account_settings' => "Account Settings", + 'row_never_delete' => "Never delete", + 'text_delete_inactive_accounts' => "Delete Inactive User Accounts", + 'text_never_delete' => " or above would never be deleted. Default ", + 'row_never_delete_if_packed' => "Never delete if packed", + 'text_never_delete_if_packed' => " or above would never be deleted if packed. Default ", + 'row_delete_packed' => "Delete packed accounts", + 'text_delete_packed_note_one' => "Packed accounts would be deleted if users have not logged in for more than ", + 'text_delete_packed_note_two' => " days in a row. Default '400', set it to '0' to disable the rule.", + 'row_delete_unpacked' => "Delete unpacked accounts", + 'text_delete_unpacked_note_one' => "Unpacked accounts would be deleted if users have not logged in for more than ", + 'text_delete_unpacked_note_two' => " days in a row. Default '150', set it to '0' to disable the rule.", + 'row_delete_no_transfer' => "Delete accounts with no transfer data", + 'text_delete_transfer_note_one' => "Accounts with both uploaded and downloaded amount being 0 would be deleted if users have not logged in for more than ", + 'text_delete_transfer_note_two' => " days in a row, or users have been registered for more than ", + 'text_delete_transfer_note_three' => " days. Default '60', '0'.
    NOTE: Two rules work seperately. Setting one of them to '0' ONLY disables one rule.", + 'text_user_promotion_demotion' => "User Promotion and Demotion", + 'row_ban_peasant_one' => "Ban ", + 'row_ban_peasant_two' => "", + 'text_ban_peasant_note_one' => " would be banned if not promoted up within ", + 'text_ban_peasant_note_two' => " days. Default '30', set it to '0' to ban them immediately.", + 'row_demoted_to_peasant_one' => "Demote to ", + 'row_demoted_to_peasant_two' => "", + 'text_demoted_peasant_note_one' => "Users would be demoted to ", + 'text_demoted_peasant_note_two' => " under any of following conditions: ", + 'text_downloaded_amount_larger_than' => "Downloaded amount larger than ", + 'text_and_ratio_below' => " GB and ratio below ", + 'text_demote_peasant_default_one' => ". Default '50', '0.4'.", + 'text_demote_peasant_default_two' => ". Default '100', '0.5'.", + 'text_demote_peasant_default_three' => ". Default '200', '0.6'.", + 'text_demote_peasant_default_four' => ". Default '400', '0.7'.", + 'text_demote_peasant_default_five' => ". Default '800', '0.8'.", + 'text_demote_peasant_note' => "NOTE: DO NOT change to the ascendant order of downloaded amounts. Set downloaded amount to '0' to disable relevant rule.", + 'row_promote_to_one' => "Promote to ", + 'row_promote_to_two' => "", + 'text_member_longer_than' => "Users, who have been a member longer than ", + 'text_downloaded_more_than' => " weeks and downloaded more than ", + 'text_with_ratio_above' => " GB with ratio above ", + 'text_be_promoted_to' => ", would be promoted to ", + 'text_promote_to_default_one' => ". Default ", + 'text_promote_to_default_two' => ". Default ", + 'text_demote_with_ratio_below' => "However, users would be demoted if his ratio drops below ", + 'head_torrent_settings' => "Torrent Settings", + 'row_promotion_rules' => "Promotion Rules", + 'text_promotion_rules_note' => "Enable some automatic promotion rules. Ugly code right now. Need change later.", + 'row_random_promotion' => "Random Promotion", + 'text_random_promotion_note_one' => "Torrents promoted randomly by system upon uploading.", + 'text_halfleech_chance_becoming' => "% chance becoming 50% Leech. Default '5'.", + 'text_free_chance_becoming' => "% chance becoming Free Leech. Default '2'.", + 'text_twoup_chance_becoming' => "% chance becoming 2X Up. Default '2'.", + 'text_freetwoup_chance_becoming' => "% chance becoming Free Leech and 2X up. Default '1'.", + 'text_twouphalfleech_chance_becoming' => "% chance becoming 2x up and 50% down. Default '0'.", + 'text_random_promotion_note_two' => "Set values to '0' to disable the rules.", + 'row_large_torrent_promotion' => "Large Torrent Promotion", + 'text_torrent_larger_than' => "Torrents larger than ", + 'text_gb_promoted_to' => " GB will be automatically promoted to ", + 'text_by_system_upon_uploading' => " by system upon uploading. ", + 'text_large_torrent_promotion_note' => "Default '20', 'free'. Set torrent size to '0' to disable the rule.", + 'row_promotion_timeout' => "Promotion Timeout", + 'text_promotion_timeout_note_one' => "Promotion for torrents will expire after some time.", + 'text_halfleech_will_become' => "50% Leech will become ", + 'text_after' => " after ", + 'text_halfleech_timeout_default' => " days. Default 'normal', '150'.", + 'text_free_will_become' => "Free Leech will become ", + 'text_free_timeout_default' => " days. Default 'normal', '60'.", + 'text_twoup_will_become' => "2X Up will become ", + 'text_twoup_timeout_default' => " days. Default 'normal', '60'.", + 'text_freetwoup_will_become' => "Free Leech and 2X up will become ", + 'text_freetwoup_timeout_default' => " days. Default 'normal', '30'.", + 'text_halfleechtwoup_will_become' => "50% Leech and 2X up will become ", + 'text_halfleechtwoup_timeout_default' => " days. Default 'normal', '30'.", + 'text_normal_will_become' => "Normal will become ", + 'text_normal_timeout_default' => " days. Default 'normal', '0'.", + 'text_promotion_timeout_note_two' => "Set days to '0' to keep promotion forever.", + 'row_auto_pick_hot' => "Automatically Pick Hot", + 'text_torrents_uploaded_within' => "Torrents uploaded within ", + 'text_days_with_more_than' => " days with more than ", + 'text_be_picked_as_hot' => " seeders will be automatically picked as Hot.", + 'text_auto_pick_hot_default' => " Default '7', '10'. Set days to '0' to disable it.", + 'row_uploader_get_double' => "Uploader Get Double", + 'text_torrent_uploader_gets' => "Torrent uploader always gets ", + 'text_times_uploading_credit' => " times as much of uploading credit. ", + 'text_uploader_get_double_default' => "Default '1'. Set it to '1' to treat torrent uploader normally.", + 'row_delete_dead_torrents' => "Delete dead torrents", + 'text_torrents_being_dead_for' => "Torrents that have been dead for ", + 'text_days_be_deleted' => " days in a row will be automatically deleted. Default '0'. Set it to '0' disable the rule.", + 'row_delete_dead_torrents_note' => "WARNING: Once deleted, torrents are unrecoverable. Remember to disable this rule when your site is down for a long time.", + 'head_main_settings' => "Main Settings", + 'row_site_online' => "Site online", + 'text_site_online_note' => "Default 'yes'. Want to turn off your site while performing updates or other types of maintenance? Please Note: Administrators will still be able to see the site.", + 'row_enable_invite_system' => "Enable Invite System", + 'text_invite_system_note' => "Default 'yes'. Allow Registrations via Invite System.", + 'row_initial_uploading_amount' => "Initial Uploading Amount", + 'text_initial_uploading_amount_note' => "How many uploading credit (in Byte, i.e. 1073741824 = 1GB) should each user be given upon registration? Default '0'.", + 'row_initial_invites' => "Initial Number of Invites", + 'text_initial_invites_note' => "How many invites should each user be given upon registration? Default '0'.", + 'row_invite_timeout' => "Invite Timeout", + 'text_invite_timeout_note' => "In days. Delete invite code after X days who didn't respond the invite request. Default '7'.", + 'row_enable_registration_system' => "Enable Registration System", + 'row_allow_registrations' => "Allow open registrations. Default 'yes'.", + 'row_verification_type' => "Verification type", + 'text_email' => "Email", + 'text_admin' => "Admin", + 'text_automatically' => "Automatically", + 'text_verification_type_note' => "EMAIL: Sent confirmation email. ADMIN: Manual activate. AUTOMATIC: Activate user after registration.", + 'row_enable_wait_system' => "Enable Wait System", + 'text_wait_system_note' => "Enable or disable wait system (see FAQ).", + 'row_enable_max_slots_system' => "Enable Max SLots System", + 'text_max_slots_system_note' => "Default 'no'. Enable or disable maximum concurrent downloads (AKA Max Slots) (see FAQ).", + 'row_show_polls' => "Show Polls", + 'text_show_polls_note' => "Default 'yes'. Show POLL system on main page.", + 'row_show_stats' => "Show Stats", + 'text_show_stats_note' => "Default 'yes'. Show STATS system on main page.", + 'row_show_last_posts' => "Show Last x Forum Posts", + 'text_show_last_posts_note' => "Default 'no'. Show Last x Forum Posts on main page.", + 'row_show_last_torrents' => "Show Last x Torrents", + 'text_show_last_torrents_note' => "Default 'no'. Show Last x Torrents on main page.", + 'row_show_server_load' => "Show Server Load", + 'text_show_server_load_note' => "Default 'yes'. Show Server Load on main page.", + 'row_show_forum_stats' => "Show forum stats", + 'text_show_forum_stats_note' => "Default 'yes'. Show forum stats on forums page.", + 'row_show_hot' => "Show Hot", + 'text_show_hot_note' => "Default 'yes'. Show hot resources on main page. Hot resources are automatically picked by system or manually by staff members.", + 'row_show_classic' => "Show Classic", + 'text_show_classic_note' => "Default 'no'. Show classic resources on main page. Only designated moderators or above can pick classic resources.", + 'row_enable_imdb_system' => "Enable IMDb system", + 'text_imdb_system_note' => "Default 'yes'. System-wide IMDb info setting.", + 'row_enable_school_system' => "Enable school system", + 'text_school_system_note' => "Default 'no'. DO NOT enable this unless you know what you are doing!", + 'row_restrict_email_domain' => "Restrict Email Domain", + 'text_restrict_email_domain_note' => "Default 'no'. Set it to 'yes' to only allow certain email domains to register. See here.", + 'row_show_shoutbox' => "Show Shoutbox", + 'text_show_shoutbox_note' => "Default 'yes'. Show shoutbox on main page.", + 'row_show_funbox' => "Show Funbox", + 'text_show_funbox_note' => "Default 'no'. Show funbox on main page.", + 'row_enable_offer_section' => "Enable Offer Section", + 'text_offer_section_note' => "Default 'yes'. Enable or disable offer section.", + 'row_show_donation' => "Enable Donation", + 'text_show_donation_note' => "Show donation and donation top ten.", + 'row_show_special_section' => "Enable Special Section", + 'text_show_special_section_note' => "Default 'no'. DO NOT enable this unless you know what you are doing!", + 'row_weekend_free_uploading' => "Free uploading at weekend", + 'text_weekend_free_uploading_note' => "Default 'no'. Set it to 'yes' to allow all users to upload torrents at weekend (from Saturday 12:00 to Sunday 23:59).", + 'row_enable_helpbox' => "Enable Helpbox", + 'text_helpbox_note' => "Default 'no'. Set it to 'no' to forbid guests to shout messages.", + 'row_enable_bitbucket' => "Enable Bitbucket", + 'text_bitbucket_note' => "Default 'yes'. Set it to 'no' to forbid users to upload avatars to tracker.", + 'row_enable_small_description' => "Enable Small Decription", + 'text_small_description_note' => "Default 'yes'. Display below title of torrent on Torrents page.", + 'row_ptshow_naming_style' => "PTShow naming style", + 'text_ptshow_naming_style_note' => "Default 'no'. In format of [MM.DD.YY][Original Name][Chinese Name]. DO NOT enable this unless you know what you are doing!", + 'row_use_external_forum' => "Use external forum", + 'text_use_external_forum_note' => "Default 'no'. Set it to 'yes' to use external forum instead of internal one.", + 'row_external_forum_url' => "External forum URL", + 'text_external_forum_url_note' => "It should be like http://www.cc98.org", + 'row_torrents_category_mode' => "Category mode of Torrents section", + 'text_torrents_category_mode_note' => "This changes the category mode at Torrents page.", + 'row_special_category_mode' => "Category mode of Special section", + 'text_special_category_mode_note' => "This changes the category mode at Special section.", + 'row_default_site_language' => "Default Site Language", + 'text_default_site_language_note' => "This changes the default language on login page.", + 'row_default_stylesheet' => "Default Stylesheet", + 'text_default_stylesheet_note' => "Newly registered users would use this stylesheet.", + 'row_max_torrent_size' => "Max. Torrent Size", + 'text_max_torrent_size_note' => " In bytes. Default 1048576 (i.e. 1 MB)", + 'row_announce_interval' => "Announce Interval", + 'text_announce_interval_note_one' => "In seconds. The announce interval the tracker asks BitTorrent clients to update information. However, in practice the announce interval may be different since BitTorrent clients could ignore this message or users may choose to connect tracker manually.", + 'text_announce_default' => "Default: ", + 'text_announce_default_default' => "Default '1800', i.e. 30 mins", + 'text_for_torrents_older_than' => "For torrents older than ", + 'text_days' => " days: ", + 'text_announce_two_default' => "Default '7', '2700' (i.e. 45 mins). Set days to '0' to disable the rule.", + 'text_announce_three_default' => "Default '30', '3600' (i.e. 60 mins). Set days to '0' to disable the rule.", + 'text_announce_interval_note_two' => "NOTE: Do NOT change the ascendant order of the times!
    Shorter interval means more accurate of peers' information-updating and HEAVIER tracker load.", + 'row_cleanup_interval' => "Auto Cleanup Interval", + 'text_cleanup_interval_note_one' => "Do cleanup (user promotion, demotion, adding seeding bonus, etc.) every XXX seconds.", + 'text_priority_one' => "Priority 1: ", + 'text_priority_one_note' => "Update peer status; Calculate seeding bonus. Default '900', i.e. 15 mins.", + 'text_priority_two' => "Priority 2: ", + 'text_priority_two_note' => "Update torrents' visibility. Default '1800', i.e. 30 mins.", + 'text_priority_three' => "Priority 3: ", + 'text_priority_three_note' => "Update count of seeders, leechers, comments for torrents; Update forum post/topic count; Delete offers that are timeout; Expire torrent promotion; Automatically pick hot torrents. Default '3600', i.e. 60 mins.", + 'text_priority_four' => "Priority 4: ", + 'text_priority_four_note' => "Delete unconfirmed accounts, old login attempts, invite codes and regimage codes; Clean up user accounts (delete inactive ones, do account promotion and demotion, banning, etc.); Post uploaded image; Update total seeding and leeching time of users. Default '43200', i.e. 24 hours.", + 'text_priority_five' => "Priority 5: ", + 'text_priority_five_note' => "Delete torrents that doesn't exist any more; Lock very old forum topics; Delete very old report items. Default '648000', i.e. 15 days.", + 'text_cleanup_interval_note_two' => "NOTE: Do NOT change the ascendant order of the times!", + 'row_signup_timeout' => "Signup Timeout", + 'text_signup_timeout_note' => "In seconds. Delete unconfirmed users after XXX seconds. Default '259200', i.e. 3 days.", + 'row_min_offer_votes' => "Min. Offer Votes", + 'text_min_offer_votes_note' => "Offer becomes approved when supporting votes are XXX more than objecting votes. Default '15'.", + 'row_offer_vote_timeout' => "Offer Vote Timeout", + 'text_offer_vote_timeout_note' => "In seconds. Delete offers if not voted on after XXX seconds. Default '259200', i.e. 72 hours. Set it to '0' to disable timeout.", + 'row_offer_upload_timeout' => "Offer Upload Timeout", + 'text_offer_upload_timeout_note' => "In seconds. Delete offers if not uploaded after being voted on for XXX seconds. Default '86400', i.e. 24 hours. Set it to '0' to disable timeout.", + 'row_max_subtitle_size' => "Max Subtitle Size", + 'text_max_subtitle_size_note' => "In bytes. Max size of subtitles allowed to be uploaded. Default 3145728, i.e. 3 MB. Set it to '0' to disable limit.", + 'row_posts_per_page' => "Default posts per page", + 'text_posts_per_page_note' => "Number of posts per page shown at a forum's topic. Default '10'.
    Note that user's personal setting would override this", + 'row_topics_per_page' => "Default topics per page", + 'text_topics_per_page_note' => "Number of topics per page shown at a forum. Default '20'.
    Note that user's personal setting would override this", + 'row_number_of_news' => "Number of News", + 'text_number_of_news_note' => "Show XXX pieces of recent news on main page. Default '3'.", + 'row_torrent_dead_time' => "Max. Torrent Dead Time", + 'text_torrent_dead_time_note' => "In seconds. Mark torrent as dead after there is no seeder for XXX seconds. Default '21600', i.e. 6 hours.", + 'row_max_users' => "Max. Users", + 'text_max_users' => "Whenever this limit is reached, registration both for free and by invitation is disabled.", + 'row_https_announce_url' => "HTTPS Announce URL", + 'text_https_announce_url_note' => "Leave it blank if you use the same URL for both HTTP and HTTPS. It should be: ", + 'row_site_accountant_userid' => "Site Accountant User ID", + 'text_site_accountant_userid_note' => "In numbers, e.g. '1'. The ID of user to whom donors should send donation message.", + 'row_alipay_account' => "Alipay Account", + 'text_alipal_account_note' => "The Alipay account you use to receive donation, e.g. 'yourname@gmail.com'. Leave it blank if you have no Alipay account.", + 'row_paypal_account' => "PayPal Account", + 'text_paypal_account_note' => "The PayPal account you use to receive donation, e.g. 'yourname@gmail.com'. Leave it blank if you have no PayPal account.", + 'row_site_email' => "Site Email", + 'text_site_email_note' => "Website email address", + 'row_report_email' => "Report Email", + 'text_report_email_note' => "Report email address", + 'row_site_slogan' => "Site Slogan", + 'text_site_slogan_note' => "Website Slogan", + 'row_icp_license' => "ICP License", + 'text_icp_license_note' => "This is a licensing regime for Chinese operated websites. Leave it blank if you have none.", + 'row_torrent_directory' => "Torrent Directory", + 'text_torrent_directory' => "Default 'torrents'. NO trailing slash (/) at the end!", + 'row_bitbucket_directory' => "Bitbucket Directory", + 'text_bitbucket_directory_note' => "Default 'bitbucket'. NO trailing slash (/) at the end!", + 'row_cache_directory' => "Cache Directory", + 'text_cache_directory_note' => "Default 'cache'. NO trailing slash (/) at the end!", + 'row_torrent_name_prefix' => "Torrent Name Prefix", + 'text_torrent_name_prefix_note' => "Add prefix to the name of torrent file downloaded from this site. Default '[Nexus]'. No trailing dot (.) at the end!", + 'row_peering_time_calculation' => "Seeding Leeching Start Calculation Time", + 'text_peering_time_calculation_note' => "Just leave it blank. It's set for legacy reason.", + 'row_new_subtitle_id' => "New Subtitle ID", + 'text_new_subtitle_id_note' => "Just keep it '0'. It's set for legacy reason.", + 'head_website_settings' => "Website Settings", + 'row_basic_settings' => "Basic Settings", + 'submit_basic_settings' => "Basic Settings", + 'text_basic_settings_note' => "Setup the most basic things, e.g. database, site name. DO NOT touch this unless you know what you are doing!
    Misconfiguration of Basic Settings may result in AN UNUSABLE SITE.", + 'row_main_settings' => "Main Settings", + 'submit_main_settings' => "Main Settings", + 'text_main_settings_note' => "Setup miscellaneous things about your site.", + 'row_smtp_settings' => "SMTP Settings", + 'submit_smtp_settings' => "SMTP Settings", + 'text_smtp_settings_note' => "Setup email server for SMTP.", + 'row_security_settings' => "Security Settings", + 'submit_security_settings' => "Security Settings", + 'text_security_settings_note' => "Secure your tracker.", + 'row_authority_settings' => "Authority Settings", + 'submit_authority_settings' => "Authority Settings", + 'text_authority_settings_note' => "Control what users of each class can do.", + 'row_tweak_settings' => "Tweak Settings", + 'submit_tweak_settings' => "Tweak Settings", + 'text_tweak_settings_note' => "TWEAK your tracker.", + 'row_bonus_settings' => "Bonus Settings", + 'submit_bonus_settings' => "Bonus Settings", + 'text_bonus_settings_note' => "Configure how bonus is obtained and used.", + 'row_account_settings' => "Account Settings", + 'submit_account_settings' => "Account Settings", + 'text_account_settings_settings' => "Configure when user accounts are promoted, demoted, or deleted.", + 'row_torrents_settings' => "Torrent Settings", + 'submit_torrents_settings' => "Torrent Settings", + 'text_torrents_settings_note' => "Configure torrent promotion, selection, etc.", + 'row_bots_settings' => "Bots Settings", + 'submit_bots_settings' => "Bots Settings", + 'text_bots_settings_note' => "Configure Bots. DO NOT touch this unless you know what you are doing!", + 'row_code_settings' => "Code Settings", + 'submit_code_settings' => "Code Settings", + 'text_code_settings_note' => "Configure Code Version. DO NOT touch this unless you know what you are doing.", + 'text_smtp_default' => "Default (Use default PHP Mail Function)", + 'text_smtp_advanced' => "Advanced (Use default PHP Mail Function with EXTRA headers. This helps avoid spam-filters)", + 'text_smtp_external' => "External (Use an external SMTP server)", + 'text_setting_for_advanced_type' => "Settings for Advanced type", + 'row_smtp_host' => "SMTP Host", + 'text_smtp_host_note' => "Default: 'localhost'", + 'row_smtp_port' => "SMTP Port", + 'text_smtp_port_note' => "Default: 25", + 'row_smtp_sendmail_from' => "SMTP sendmail from", + 'text_smtp_sendmail_from_note' => "Default: ", + 'row_smtp_sendmail_path' => "Sendmail Path", + 'text_smtp_sendmail_path_note' => "Please setup your sendmail_path by editing php.ini", + 'text_setting_for_external_type' => "Settings for External type", + 'row_outgoing_mail_address' => "Outgoing mail (SMTP) address", + 'row_outgoing_mail_port' => "Outgoing mail (SMTP) port", + 'text_outgoing_mail_address_note' => "hint: smtp.yourisp.com", + 'text_outgoing_mail_port_note' => "hint: 25", + 'row_smtp_account_name' => "Account Name", + 'text_smtp_account_name_note' => "hint: yourname@yourisp.com", + 'row_smtp_account_password' => "Account Password", + 'text_smtp_account_password_note' => "hint: your password goes here", + 'text_mail_test_note' => "How can I test php mail? It's simple easy: Click ", + 'text_here' => "Here", + 'std_error' => "Error", + 'std_mysql_connect_error' => "Cannot connect to MySQL. Please check your setting. ", + 'row_enable_location' => "Enable location", + 'text_enable_location_note' => "Default 'no'. Show user's geographic location based on his IP. You should keep this disabled unless you have imported some IP database.", + 'row_torrents_per_page' => "Torrents per page", + 'text_torrents_per_page_note' => "Number of torrents per page shown on torrents page. Default '50'.
    Note that user's personal setting would override this", + 'row_title_keywords' => "Title Keywords", + 'text_title_keywords_note' => "Show in document title. These keywords help search engines find your site. Separate several keywords with '|', e.g. 'BitTorrent|Download|Movie'. Leave it blank if you want to keep a clean title.", + 'row_meta_keywords' => "Meta Keywords", + 'text_meta_keywords_note' => "Show in document head. Defines keywords to describe your site. Separate several keywords with ',', e.g. 'BitTorrent, Download, Movie'.", + 'row_meta_description' => "Meta Description", + 'text_meta_description_note' => "Show in document head. Defines a description of your site.", + 'row_bonus_gift_tax' => "Bonus gift tax", + 'text_system_charges' => "The system charges bonus receiver ", + 'text_bonus_points_plus' => " bonus points + ", + 'text_bonus_gift_tax_note' => "% of the transfered amount as tax. For example, if the values are set to '5', '10', the receiver only gets 85 bonus points when the giver sends 100 bonus points. Default '5', '10'.
    NOTE: The two rules work separately. You must set both values to '0' to disable tax.", + 'row_see_sql_debug' => "See debug", + 'text_allow' => "Allow ", + 'text_see_sql_list' => " or above to see debug information (SQL query list at the bottom of the page and PHP report information). Default ", + 'text_smtp_none' => "None (Selecting this will completely disable email sending)", + 'row_attachment_settings' => "Attachment Settings", + 'submit_attachment_settings' => "Attachment Settings", + 'text_attachment_settings_note' => "Configure attachments.", + 'head_attachment_settings' => "Attachment Settings", + 'row_enable_attachment' => "Enable attachment", + 'text_enable_attachment_note' => "Global attachment setting. When set to 'no', nobody can upload any attachment.", + 'row_save_directory' => "Saving directory", + 'row_http_directory' => "HTTP path for attachments", + 'text_http_directory_note' => "It could be either relative path or absolute path. NO trailing slash (/) at the end! Default 'attachments'.", + 'row_attachment_authority' => "Attachment authority", + 'text_can_upload_at_most' => " or above can upload at most ", + 'text_file_size_below' => " attachments in 24 hours whose size is not larger than ", + 'text_with_extension_name' => "KB and whose filename extension is among ", + 'text_authority_default_one_one' => ". Default ", + 'text_authority_default_one_two' => ", '5', '256', 'jpeg, jpg, png, gif'.", + 'text_authority_default_two_one' => ". Default ", + 'text_authority_default_two_two' => ", '10', '512', 'torrent, zip, rar, 7z, gzip, gz'.", + 'text_authority_default_three_one' => ". Default ", + 'text_authority_default_three_two' => ", '20', '1024', 'mp3, oga, ogg, flv'.", + 'text_authority_default_four_one' => ". Default ", + 'text_authority_default_four_two' => ", '500', '2048', ''.", + 'text_attachment_authority_note_two' => "NOTE:
    • Do NOT change the ascendant order of user classes, file number limit or file size limit.
    • Set file size limit to '0', file number limit to '0' and allowed file extensions to ''(i.e. empty) to disable relative rule.
    • Higher classes inherit authority of lower classes, so there is no need to add allowed file extensions to every rule.
    • Separate several file extensions with ','.
    • No matter how the settings are, nobody can upload file whose size is larger than 5 MB or whose extension name is among 'exe, com, bat, msi'.
    ", + 'text_attachment_authority_note_one' => "Define user's authority to upload attachments based on his class.", + 'text_save_directory_note' => "The directory where you save attachments. Please ensure that you have properly configured directory access permissions (777). NO trailing slash (/) at the end! Default './attachments'.", + 'row_save_directory_type' => "Save attachments in", + 'text_one_directory' => "One directory for all files", + 'text_directories_by_monthes' => "Directories named after uploading monthes", + 'text_directories_by_days' => "Directories named after uploading days", + 'text_save_directory_type_note' => "Changed setting doesn't affect attachments already uploaded. Default 'Directories named after uploaded monthes'.", + 'row_image_thumbnails' => "Image thumbnail", + 'text_no_thumbnail' => "1. No thumbnail. Only save the original image.", + 'text_create_thumbnail' => "2. Create thumbnail if the image is big, and save both the thumbnail and the original image.", + 'text_resize_big_image' => "3. Resize image if it is big and only save the thumbnail.", + 'text_image_thumbnail_note' => "Default '2'.", + 'row_thumbnail_quality' => "Thumbnail quality", + 'text_thumbnail_quality_note' => "Set the quality of the thumbnail. The value should be an integer between 1 and 100. The larger number, the higher quality and the larger file size. Default '80'.", + 'row_thumbnail_size' => "Thumbnail size", + 'text_thumbnail_size_note' => "Width * height, in pixels. Create thumbnails ONLY for images whose width or height exceeds the limit. Default '500', '500'.", + 'row_watermark' => "Watermark position", + 'text_no_watermark' => "No watermark", + 'text_left_top' => "#1", + 'text_top' => "#2", + 'text_right_top' => "#3", + 'text_left' => "#4", + 'text_center' => "#5", + 'text_right' => "#6", + 'text_left_bottom' => "#7", + 'text_bottom' => "#8", + 'text_right_bottom' => "#9", + 'text_random_position' => "Random position", + 'text_watermark_note' => "Add watermark to uploaded image file (JPEG/PNG/GIF). Replace the watermark PNG file 'pic/watermark.png' with your own one. Set the position where to place the watermark. GIF animation is not supported. Default 'no watermark'.", + 'row_image_size_for_watermark' => "Image size for watermark", + 'text_watermark_size_note' => "Width * height, in pixels. Add watermark ONLY to images whose width and height exceed this. Default '300', '300'.", + 'row_jpeg_quality_with_watermark' => "JPEG quality with watermark", + 'text_jpeg_watermark_quality_note' => "The image quality for JPEG file after adding watermark. The value should be an integer between 1 and 100. The larger number, the higher quality and the larger file size. Default '85'.", + 'head_save_attachment_settings' => "Save attachment settings", + 'row_css_date' => "CSS date", + 'text_css_date' => "Time format is YYYYMMDDhhmm, e.g. '200911030110'. Changing this helps force users' browsers updating CSS cache. Helpful when you do some changes to CSS files. Leave it blank if it doesn't make sense to you. Default empty.", + 'row_alternative_thumbnail_size' => "Alternative Thumbnail Size", + 'text_alternative_thumbnail_size_note' => "Users could choose the alternative size for thumbnails. Default '180', '135'.", + 'row_add_watermark_to_thumbnail' => "Add watermark to thumbnail", + 'text_watermark_to_thumbnail_note' => "Whether also add watermark to thumbnail or not. Default 'no'. Global watermark setting must be enabled for this to work.", + 'row_advertisement_settings' => "Advertisement Settings", + 'submit_advertisement_settings' => "Advertisement Settings", + 'text_advertisement_settings_note' => "Configure advertisements at your site.", + 'head_advertisement_settings' => "Advertisement Settings", + 'row_enable_advertisement' => "Enable Advertisement", + 'text_enable_advertisement_note' => "Global advertisement setting.", + 'row_no_advertisement' => "No Advertisements", + 'text_can_choose_no_advertisement' => " or above can choose to see no advertisements at User CP. Default ", + 'row_bonus_no_advertisement' => "No Advertisement With Bonus", + 'text_no_advertisement_with_bonus' => " or above can buy some time without advertisements at bonus center. Default ", + 'row_no_advertisement_bonus_price' => "No Advertisements Bonus Price", + 'text_bonus_points_to_buy' => " bonus points to buy ", + 'text_days_without_advertisements' => " days without advertisements. Default '10000', '15'.", + 'row_click_advertisement_bonus' => "Click Advertisements Bonus", + 'text_points_clicking_on_advertisements' => " bonus points the first time he clicks on an advertisement. Set it to '0' to disable the rule. Default '0'.
    Note: some ad serving applications (e.g. Google Adsense) forbid sites including incentives to click on advertisements.", + 'head_save_advertisement_settings' => "Save Advertisement Settings", + 'row_enable_tooltip' => "Enable Tooltip", + 'text_enable_tooltip_note' => "Allow users to use tooltip. Default 'yes'.", + 'text_thirtypercentleech_chance_becoming' => "% chance becoming 30% Leech. Default '0'.", + 'text_thirtypercentleech_will_become' => "30% Leech will become ", + 'text_thirtypercentleech_timeout_default' => " days. Default 'normal', '30'.", + 'row_site_logo' => "Site Logo", + 'text_site_logo_note' => "The image file of site logo. Recommended image size is 220 * 70. If blank, show text instead. Default ''.", + 'row_promotion_link_click' => "Promotion Link Click", + 'text_promotion_link_note_one' => " bonus points if his promotion link gets clicked by an unrecorded IP. Only one click is counted in ", + 'text_promotion_link_note_two' => " seconds. Set points to '0' to disable the rule. Default '0', '600'.", + 'row_promotion_link_example_image' => "Promotion link example image", + 'text_promotion_link_example_note' => "The image in the examples of promotion link. MUST use relative path, e.g. 'pic/prolink.png'.", + 'row_enable_nfo' => "Enable NFO", + 'text_enable_nfo_note' => "Default 'yes'. System-wide NFO setting.", + 'row_web_analytics_code' => "Web analytics code", + 'text_web_analytics_code_note' => "Enter web analytics code from a third-party service (e.g. Google Analytics). Leave it blank if none.
    Note: only use code that you are sure is secure and trusty.", + 'row_enable_email_notification' => "Enable Email Notification", + 'text_email_notification_note' => "Allow users to receive email notification when he gets new pm, comment, etc.", + 'text_users_get' => "Users would get ", + 'text_invitations_default' => " invitations the first time he is promoted to this class. Default ", +); + +?> diff --git a/lang/en/lang_shoutbox.php b/lang/en/lang_shoutbox.php new file mode 100644 index 00000000..fadb328d --- /dev/null +++ b/lang/en/lang_shoutbox.php @@ -0,0 +1,15 @@ + "del", + 'std_access_denied' => "Access Denied.", + 'std_access_denied_note' => "Guests are not allowed to see this page.", + 'text_to_guest' => " to Guest", + 'text_guest' => "Guest", + 'text_ago' => " ago", + 'text_helpbox_disabled' => "Helpbox is currently disabled. How the hell do you get here?", + 'text_no_permission_to_shoutbox' => "You have no permission to send messages to shoutbox. How the hell do you get here?", +); + +?> diff --git a/lang/en/lang_signup.php b/lang/en/lang_signup.php new file mode 100644 index 00000000..c6999878 --- /dev/null +++ b/lang/en/lang_signup.php @@ -0,0 +1,35 @@ + "Signup", + 'text_cookies_note' => "Note: You need cookies enabled to sign up or log in.", + 'row_desired_username' => "Desired username", + 'text_allowed_characters' => "Allowed Characters: (a-z), (A-Z), (0-9), Maximum is 12 characters", + 'row_pick_a_password' => "Pick a password", + 'text_minimum_six_characters' => "Minimum is 6 characters", + 'row_enter_password_again' => "Enter password again", + 'row_question' => "Question", + 'row_enter_hint_answer' => "Enter hint answer", + 'text_hint_note' => "This answer will be used to reset your password in case you forget it.
    Minimum is 6 characters.", + 'row_email_address' => "Email address", + 'text_email_note' => "you could only signup with email from those domains: ", + 'row_country' => "Country", + 'row_gender' => "Gender", + 'radio_male' => "Male ", + 'radio_female' => "Female ", + 'row_verification' => "Verification", + 'checkbox_read_rules' => "I have read the site rules page.", + 'checkbox_read_faq' => "I agree to read the FAQ before asking questions.", + 'checkbox_age' => "I am at least 13 years old.", + 'text_all_fields_required' => "All Fields are required! ", + 'submit_sign_up' => "Sign up! (PRESS ONLY ONCE)", + 'select_none_selected' => "None selected", + 'text_select_lang' => "Select Site Language: ", + 'row_school' => "School", + 'head_invite_signup' => "Invite Signup", + 'std_uninvited' => "Incorrect invitation code. ", + 'std_error' => "Error", +); + +?> diff --git a/lang/en/lang_staff.php b/lang/en/lang_staff.php new file mode 100644 index 00000000..466a7d8f --- /dev/null +++ b/lang/en/lang_staff.php @@ -0,0 +1,33 @@ + "Staff", + 'text_staff' => "Staff", + 'text_firstline_support' => "Firstline Support", + 'text_firstline_support_note' => "General support questions should preferably be directed to these users. Note that they are volunteers, giving away their time and effort to help you. Treat them accordingly.", + 'text_movie_critics' => "Critics", + 'text_movie_critics_note' => "Critics are responsible for picking good stuff, writing reviews, reward users' comments on films, music, etc, in general creating a better atmosphere for discussing.", + 'text_general_staff' => "General Staff", + 'text_general_staff_note' => "All software support questions and those already answered in the FAQ will be ignored.

    Send message to Staff, click here", + 'text_username' => "Username", + 'text_online_or_offline' => "Online/Offline", + 'text_country' => "Country", + 'text_contact' => "Contact", + 'text_language' => "Language", + 'text_support_for' => "Support for", + 'text_responsible_for' => "Responsible for", + 'text_duties' => "Staff Duties", + 'title_online' => "Online", + 'title_offline' => "Offline", + 'title_send_pm' => "Send PM", + 'text_vip' => "VIP", + 'text_vip_note' => "VIP status is only granted to those who have made special contribution to ".$SITENAME.", e.g. former staff members.", + 'text_reason' => "Reason", + 'text_apply_for_it' => "Apply to join", + 'text_forum_moderators' => "Forum Moderators", + 'text_forum_moderators_note' => "Forum moderators are responsible for daily management of forums.", + 'text_forums' => "Forums" +); + +?> diff --git a/lang/en/lang_staffbox.php b/lang/en/lang_staffbox.php new file mode 100644 index 00000000..135ec613 --- /dev/null +++ b/lang/en/lang_staffbox.php @@ -0,0 +1,34 @@ + "Staff's PM", + 'text_staff_pm' => "Staff's PM", + 'std_sorry' => "Sorry", + 'std_no_messages_yet' => "No messages yet!", + 'col_subject' => "Subject", + 'col_sender' => "Sender", + 'col_added' => "Added", + 'col_answered' => "Answered", + 'col_action' => "Act.", + 'text_yes' => "Yes", + 'text_no' => "No", + 'submit_set_answered' => "Set Answered", + 'submit_delete' => "Delete", + 'text_system' => "System", + 'head_view_staff_pm' => "View Staff's PM", + 'col_from' => "From", + 'col_date' => "Date", + 'col_answered_by' => "Answered by", + 'text_reply' => "Reply", + 'text_mark_answered' => "Mark Answered", + 'text_delete' => "Delete", + 'std_error' => "Error", + 'std_no_user_id' => "No user with that ID.", + 'head_answer_to_staff_pm' => "Answer to Staff PM", + 'text_answering_to' => "Answering to ", + 'text_sent_by' => " sent by ", + 'std_body_is_empty' => "Please enter something!", +); + +?> diff --git a/lang/en/lang_subtitles.php b/lang/en/lang_subtitles.php new file mode 100644 index 00000000..e8dc252a --- /dev/null +++ b/lang/en/lang_subtitles.php @@ -0,0 +1,64 @@ + "Error!", + 'std_must_login_to_upload' => "Must be logged in to upload subtitle", + 'head_subtitles' => "Subtitles", + 'std_nothing_received' => "Upload failed!

    Nothing received! The selected file may have been too large.", + 'std_subs_too_big' => "Upload failed!

    Subs is too big!", + 'std_wrong_subs_format' => "Upload failed!

    I am not allowed to save the file you send me :|", + 'std_file_already_exists' => "Upload failed!

    A file already exist ", + 'std_missing_torrent_id' => "Upload failed!

    missing torrent ID !", + 'std_invalid_torrent_id' => "Upload failed!

    it seems not a valid torrent ID !", + 'std_no_permission_uploading_others' => "Upload failed!

    It seems not your torrent ID, users of your class cannot upload subs to torrents of others!", + 'std_file_same_name_exists' => "File with that name already exist ", + 'std_must_choose_language' => "Upload failed!

    Please Choose a language for the subtitle !", + 'std_failed_moving_file' => "Failed to move uploaded file. You should contact an administrator about this error.", + 'std_this_file' => "This file: ", + 'std_is_invalid' => " is not valid on the folder.", + 'text_upload_subtitles' => "Upload Subtitles - total uploaded ", + 'text_rules' => "Rules:", + 'text_rule_one' => "1.Please upload only files with English names!", + 'text_rule_two' => "2.The subtitles MUST BE IN SYNC with what you're saying they're for. If they're not it's a waste of space.", + 'text_rule_three' => "3.Language identification isn't really needed in Title as there's the national flag, but if you feel the need: write the language at the end , e.g. CHS.", + 'text_rule_four' => "4.If you're uploading subtitles for a season pack, zip/rar them all together.", + 'text_rule_five' => "5.If you're uploading Vobsub (idx+sub) subtitles, zip/rar them before upload.", + 'text_rule_six' => "6.If you are uploading a proper or re-synced subtitle, append [proper] or [resynced] after the subtitle name.", + 'text_red_star_required' => "

    Fields marked with a red star(*) are required.

    \n", + 'text_uploading_subtitles_for_torrent' => "Uploading subtitle for torrent: ", + 'row_file' => "File", + 'text_maximum_file_size' => "Maximum file size: ", + 'row_torrent_id' => "Torrent ID", + 'text_torrent_id_note' => "(The number in the address bar when you go to the details page of the torrent.
    e.g.  http://".$BASEURL."/details.php?id=16  the number 16 is the torrent ID)", + 'row_title' => "Title", + 'text_title_note' => "(Optional, taken from file name if not specified.)", + 'row_language' => "Language", + 'select_choose_one' => "(choose one)", + 'row_show_uploader' => "Show Uploader", + 'hide_uploader_note' => "Don't show my username in 'Upped By' field.", + 'submit_upload_file' => "Upload file", + 'submit_reset' => "Reset", + 'text_sorry' => "Sorry", + 'text_nothing_here' => "Sorry, nothing here pal :( ", + 'submit_search' => "Search", + 'text_prev' => "Prev", + 'text_next' => "Next", + 'col_lang' => "Lang.", + 'col_title' => "Title", + 'title_date_added' => "Time Added", + 'title_size' => "Size", + 'col_hits' => "Hits", + 'col_upped_by' => "Upped by", + 'text_delete' => "[Delete]", + 'text_anonymous' => "anonymous", + 'std_delete_subtitle' => "Delete subtitle", + 'std_delete_subtitle_note' => "You're about to delete this subtitle.", + 'text_reason_is' => "Reason: ", + 'submit_confirm' => "Confirm", + 'col_report' => "Report", + 'title_report_subtitle' => "Report this subtitle", + 'select_all_languages' => "(all languages)", +); + +?> diff --git a/lang/en/lang_tags.php b/lang/en/lang_tags.php new file mode 100644 index 00000000..11905b90 --- /dev/null +++ b/lang/en/lang_tags.php @@ -0,0 +1,134 @@ + "Description:", + 'text_syntax' => "Syntax:", + 'text_example' => "Example:", + 'text_result' => "Result:", + 'text_remarks' => "Remarks:", + 'head_tags' => "Tags", + 'text_tags' => "Tags", + 'text_bb_tags_note' => "The ".$SITENAME." forums supports a number of BB tags which you can embed to modify how your posts are displayed.", + 'submit_test_this_code' => "Test this code!", + 'text_bold' => "Bold", + 'text_bold_description' => "Makes the enclosed text bold.", + 'text_bold_syntax' => "[b]Text[/b]", + 'text_bold_example' => "[b]This is bold text.[/b]", + 'text_italic' => "Italic", + 'text_italic_description' => "Makes the enclosed text italic.", + 'text_italic_syntax' => "[i]Text[/i]", + 'text_italic_example' => "[i]This is italic text.[/i]", + 'text_underline' => "Underline", + 'text_underline_description' => "Makes the enclosed text underlined.", + 'text_underline_syntax' => "[u]Text[/u]", + 'text_underline_example' => "[u]This is underlined text.[/u]", + 'text_color_one' => "Color (alt. 1)", + 'text_color_one_description' => "Changes the color of the enclosed text.", + 'text_color_one_syntax' => "[color=Color]Text[/color]", + 'text_color_one_example' => "[color=blue]This is blue text.[/color]", + 'text_color_one_remarks' => "What colors are valid depends on the browser. If you use the basic colors (red, green, blue, yellow, pink etc) you should be safe.", + 'text_color_two' => "Color (alt. 2)", + 'text_color_two_description' => "Changes the color of the enclosed text.", + 'text_color_two_syntax' => "[color=#RGB]Text[/color]", + 'text_color_two_example' => "[color=#0000ff]This is blue text.[/color]", + 'text_color_two_remarks' => "RGB must be a six digit hexadecimal number.", + 'text_size' => "Size", + 'text_size_description' => "Sets the size of the enclosed text.", + 'text_size_syntax' => "[size=n]text[/size]", + 'text_size_example' => "[size=4]This is size 4.[/size]", + 'text_size_remarks' => "n must be an integer in the range 1 (smallest) to 7 (biggest). The default size is 2.", + 'text_font' => "Font", + 'text_font_description' => "Sets the type-face (font) for the enclosed text.", + 'text_font_syntax' => "[font=Font]Text[/font]", + 'text_font_example' => "[font=Impact]Hello world![/font]", + 'text_font_remarks' => "You specify alternative fonts by separating them with a comma.", + 'text_hyperlink_one' => "Hyperlink (alt. 1)", + 'text_hyperlink_one_description' => "Inserts a hyperlink.", + 'text_hyperlink_one_syntax' => "[url]URL[/url]", + 'text_hyperlink_one_example' => "[url]http://".$BASEURL."[/url]", + 'text_hyperlink_one_remarks' => "This tag is superfluous; all URLs are automatically hyperlinked.", + 'text_hyperlink_two' => "Hyperlink (alt. 2)", + 'text_hyperlink_two_description' => "Inserts a hyperlink.", + 'text_hyperlink_two_syntax' => "[url=URL]Link text[/url]", + 'text_hyperlink_two_example' => "[url=http://".$BASEURL."]".$SITENAME."[/url]", + 'text_hyperlink_two_remarks' => "You do not have to use this tag unless you want to set the link text; all URLs are automatically hyperlinked.", + 'text_image_one' => "Image (alt. 1)", + 'text_image_one_description' => "Inserts a picture.", + 'text_image_one_syntax' => "[img=URL]", + 'text_image_one_example' => "[img=http://$BASEURL/pic/nexus.png]", + 'text_image_one_remarks' => "The URL must end with .gif, .jpg, .jpeg or .png.", + 'text_image_two' => "Image (alt. 2)", + 'text_image_two_description' => "Inserts a picture.", + 'text_image_two_syntax' => "[img]URL[/img]", + 'text_image_two_example' => "[img]http://$BASEURL/pic/nexus.png[/img]", + 'text_image_two_remarks' => "The URL must end with .gif, .jpg, .jpeg or .png.", + 'text_quote_one' => "Quote (alt. 1)", + 'text_quote_one_description' => "Inserts a quote.", + 'text_quote_one_syntax' => "[quote]Quoted text[/quote]", + 'text_quote_one_example' => "[quote]I love ".$SITENAME.".[/quote]", + 'text_quote_two' => "Quote (alt. 2)", + 'text_quote_two_description' => "Inserts a quote.", + 'text_quote_two_syntax' => "[quote=Author]Quoted text[/quote]", + 'text_quote_two_example' => "[quote=".$CURUSER['username']."]I love ".$SITENAME.".[/quote]", + 'text_list' => "List", + 'text_description' => "Inserts a list item.", + 'text_list_syntax' => "[*]Text", + 'text_list_example' => "[*] This is item 1\n[*] This is item 2", + 'text_preformat' => "Preformat", + 'text_preformat_description' => "Preformatted (monospace) text. Does not wrap automatically.", + 'text_preformat_syntax' => "[pre]Text[/pre]", + 'text_preformat_example' => "[pre]This is preformatted text.[/pre]", + 'text_code' => "Code", + 'text_code_description' => "Display text in decorated format.", + 'text_code_syntax' => "[code]Text[/code]", + 'text_code_example' => "[code]This is code[/code]", + 'text_you' => "[you]", + 'text_you_description' => "Display the username of whoever viewing this", + 'text_you_syntax' => "[you]", + 'text_you_example' => "I know you are reading this, [you]", + 'text_you_remarks' => "Useful for making tricks", + 'text_site' => "[site]", + 'text_site_description' => "Display the site name", + 'text_site_syntax' => "[site]", + 'text_site_example' => "You are visiting [site] now", + 'text_siteurl' => "[siteurl]", + 'text_siteurl_description' => "Display the url of this site", + 'text_siteurl_syntax' => "[siteurl]", + 'text_siteurl_example' => "The url of [site] is [siteurl]", + 'text_flash' => "Flash (alt. 1)", + 'text_flash_description' => "Insert flash in webpages at defined width and height", + 'text_flash_syntax' => "[flash,width,height]Flash URL[/flash]", + 'text_flash_example' => "[flash,500,300]http://$BASEURL/flash.demo.swf[/flash]", + 'text_flash_two' => "Flash (alt. 2)", + 'text_flash_two_description' => "Insert flash in webpages at default width and height (500 * 300)", + 'text_flash_two_syntax' => "[flash]Flash URL[/flash]", + 'text_flash_two_example' => "[flash]http://$BASEURL/flash.demo.swf[/flash]", + 'text_flv_one' => "Flash video (alt.1)", + 'text_flv_one_description' => "Insert flash video in webpages at defined width and height", + 'text_flv_one_syntax' => "[flv,width,height]Flash video URL[/flv]", + 'text_flv_one_example' => "[flv,320,240]http://$BASEURL/flash.video.demo.flv[/flv]", + 'text_flv_two' => "Flash video (alt.2)", + 'text_flv_two_description' => "Insert flash video in webpages at default width and height (320 * 240)", + 'text_flv_two_syntax' => "[flv]Flash video URL[/flv]", + 'text_flv_two_example' => "[flv]http://$BASEURL/flash.video.demo.flv[/flv]", + 'text_youtube' => "YouTube", + 'text_youtube_description' => "Insert YouTube online video in webpages", + 'text_youtube_syntax' => "[youtube]Video URL on YouTube[/youtube]", + 'text_youtube_example' => "[youtube]http://www.youtube.com/watch?v=EsWKVcZ88Jw[/youtube]", + 'text_youku' => "YouKu", + 'text_youku_description' => "Insert YouKu online video in webpages", + 'text_youku_syntax' => "[youku]Video URL on YouKu[/youku]", + 'text_youku_example' => "[youku]http://player.youku.com/player.php/sid/XMzM1MDExODg=/v.swf[/youku]", + 'text_tudou' => "TuDou", + 'text_tudou_description' => "Insert TuDou online video in webpages", + 'text_tudou_syntax' => "[tudou]Video URL on TuDou[/tudou]", + 'text_tudou_example' => "[tudou]http://www.tudou.com/v/1jaI4LNa7sk[/tudou]", + 'text_ninety_eight_image' => "CC98 Image", + 'text_ninety_eight_image_description' => "Display image hosted at CC98 forum", + 'text_ninety_eight_image_syntax' => " [98img=[auto|number]]image file[/98img]", + 'text_ninety_eight_image_example' => "[98img=150]uploadfile/2008/10/30/2362924185.png[/98img]", + 'text_ninety_eight_image_remarks' => "CC98 is a forum at Zhejiang University", +); + +?> diff --git a/lang/en/lang_takeconfirm.php b/lang/en/lang_takeconfirm.php new file mode 100644 index 00000000..d9b62652 --- /dev/null +++ b/lang/en/lang_takeconfirm.php @@ -0,0 +1,14 @@ + "Sorry...", + 'std_no_buddy_to_confirm' => "No buddy to confirm. :(

    Please click ", + 'std_here_to_go_back' => "here to go back.", + 'mail_title' => " Account Confirmed", + 'mail_here' => "HERE", + 'mail_content_1' => "Hello,

    Your account has been confirmed. You can now visit ", + 'mail_content_2' => "

    and use your login information to login in. We hope you'll read the FAQ's and Rules before you start sharing files.

    Good luck and have fun on ".$SITENAME."!

    If you do not know the person who has invited you, please report this email to ".$REPORTMAIL."
    ------
    Yours,The ".$SITENAME." Team." +); + +?> diff --git a/lang/en/lang_takecontact.php b/lang/en/lang_takecontact.php new file mode 100644 index 00000000..54512a1a --- /dev/null +++ b/lang/en/lang_takecontact.php @@ -0,0 +1,17 @@ + "Error", + 'std_method' => "Method", + 'std_please_enter_something' => "Please enter something!", + 'std_please_define_subject' => "You need to define subject!", + 'std_message_flooding' => "Message Flooding Not Allowed. Please wait ", + 'std_second' => " second", + 'std_s' => "s", + 'std_before_sending_pm' => " before sending PM to STAFF.", + 'std_succeeded' => "Succeeded", + 'std_message_succesfully_sent' => "Message was succesfully sent!" +); + +?> \ No newline at end of file diff --git a/lang/en/lang_takeedit.php b/lang/en/lang_takeedit.php new file mode 100644 index 00000000..ee9cd42f --- /dev/null +++ b/lang/en/lang_takeedit.php @@ -0,0 +1,12 @@ + "Edit failed!", + 'std_missing_form_data' => "missing form data", + 'std_not_owner' => "You're not the owner! How did that happen?", + 'std_nfo_too_big' => "NFO is too big! Max 65,535 bytes.", + 'std_cannot_move_torrent' => "You have no permission to move torrents to another section. BTW, how do you get here?" +); + +?> \ No newline at end of file diff --git a/lang/en/lang_takeflush.php b/lang/en/lang_takeflush.php new file mode 100644 index 00000000..8dc3346e --- /dev/null +++ b/lang/en/lang_takeflush.php @@ -0,0 +1,11 @@ + "Failed", + 'std_success' => "Success", + 'std_ghost_torrents_cleaned' => "ghost torrents were sucessfully cleaned.", + 'std_cannot_flush_others' => "You can only clean your own ghost torrents" +); + +?> \ No newline at end of file diff --git a/lang/en/lang_takeinvite.php b/lang/en/lang_takeinvite.php new file mode 100644 index 00000000..ddbbf75c --- /dev/null +++ b/lang/en/lang_takeinvite.php @@ -0,0 +1,28 @@ + "Invitation failed!", + 'std_must_enter_email' => "You must enter an email address!", + 'std_invalid_email_address' => "Invalid email address!", + 'std_must_enter_personal_message' => "Please add a personal message.", + 'std_email_address' => "The email address ", + 'std_is_in_use' => " is already in use.", + 'mail_here' => "HERE", + 'mail_tilte' => " Invitation", + 'mail_one' => "Hi,

    You have been invited to join the ".$SITENAME." community by ", + 'mail_two' => ".
    This is a private community which has very knowledgeable members.
    If you are interested in joining the community please read over
    the rules and confirm the invite.

    If you want to accept this invitation, you'll need to click this link:", + 'mail_three' => "You'll need to accept the invitation within ", + 'mail_four' => " days, or else the link will become inactive.
    We on ".$SITENAME." hope that you'll accept the invitation and join our great community!

    Personal message from ", + 'mail_five' => ":", + 'mail_six' => "If you do not know the person who has invited you, please forward this email to ".$REPORTMAIL."

    ------
    Yours,
    The ".$SITENAME." Team.", + 'std_error' => "Error", + 'std_invite_denied' => "Users of your class are not allowed to send invitation. How do you get here?", + 'std_email_address_banned' => "This email address is banned!", + 'std_wrong_email_address_domains' => "This email address is not allowed! You could only send invitation to those domains: ", + 'std_no_invite' => "You have no invitation. How do you get here?", + 'std_invitation_already_sent_to' => "Invitation failed! The email address ", + 'std_await_user_registeration' => " has already received an invitation. Please wait for the user to register.", +); + +?> diff --git a/lang/en/lang_takelogin.php b/lang/en/lang_takelogin.php new file mode 100644 index 00000000..dfd2d87e --- /dev/null +++ b/lang/en/lang_takelogin.php @@ -0,0 +1,11 @@ + "Error: Username or password incorrect!

    Don't remember your password? Recover your password!", + 'std_login_fail' => "Login failed!", + 'std_account_disabled' => "This account has been disabled.", + 'std_user_account_unconfirmed' => "The account has not been verified yet. If you didn't receive the confirmation email, try to reseed it.", +); + +?> diff --git a/lang/en/lang_takemessage.php b/lang/en/lang_takemessage.php new file mode 100644 index 00000000..5ed9cb2b --- /dev/null +++ b/lang/en/lang_takemessage.php @@ -0,0 +1,29 @@ + "Error", + 'std_permission_denied' => "Permission Denied!", + 'std_please_enter_something' => "Please enter something!", + 'std_message_flooding_denied' => "Message Flooding Not Allowed. Please wait ", + 'std_before_sending_pm' => " second(s) before sending PM.", + 'std_invalid_id' => "Invalid ID", + 'std_user_not_exist' => "No user with this ID", + 'std_refused' => "Refused", + 'std_account_parked' => "This account is parked.", + 'std_user_blocks_your_pms' => "This user has blocked PMs from you.", + 'std_user_accepts_friends_pms' => "This user only accepts PMs from users in his friends list.", + 'std_user_blocks_all_pms' => "This user does not accept PMs.", + 'std_succeeded' => "Succeeded", + 'std_messages_out_of' => " messages out of ", + 'std_were' => " were", + 'std_message_was' => "Message was", + 'std_successfully_sent' => " successfully sent!", + 'std_s_were' => "s were", + 'std_was' => " was", + 'std_updated' => " updated!", + 'std_no_permission_forwarding' => "You do not have permission to forward this message.", + 'std_must_enter_username' => "You must enter the username to whom you want to forward the message." +); + +?> diff --git a/lang/en/lang_takereseed.php b/lang/en/lang_takereseed.php new file mode 100644 index 00000000..56a8d8ff --- /dev/null +++ b/lang/en/lang_takereseed.php @@ -0,0 +1,12 @@ + "Reseed Request!", + 'std_it_worked' => "It worked! A message is sent to users who have snatched this torrent.", + 'std_error' => "Error", + 'std_torrent_not_dead' => "The torrent is not dead.", + 'std_reseed_sent_recently' => "Someone already asked for reseed of this torrent in last 15 minutes. Please wait patiently for users to reseed.", +); + +?> diff --git a/lang/en/lang_takesignup.php b/lang/en/lang_takesignup.php new file mode 100644 index 00000000..3a22cb27 --- /dev/null +++ b/lang/en/lang_takesignup.php @@ -0,0 +1,42 @@ + "Signup Failed! (See Below)", + 'std_invalid_email_address' => "Invalid email address!", + 'std_email_address_banned' => "This email address is banned!", + 'std_wrong_email_address_domains' => "This email address is not allowed! You could only signup with email from those domains: ", + 'std_invalid_gender' => "Invalid Gender!", + 'std_blank_field' => "Don't leave any fields blank.", + 'std_hintanswer_too_short' => "Sorry, Hintanswer is too short (min is 6 chars)", + 'std_username_too_long' => "Sorry, username is too long (max is 12 chars)", + 'std_passwords_unmatched' => "The passwords didn't match! Must've typoed. Try again.", + 'std_password_too_short' => "Sorry, password is too short (min is 6 chars)", + 'std_password_too_long' => "Sorry, password is too long (max is 40 chars)", + 'std_password_equals_username' => "Sorry, password cannot be same as user name.", + 'std_wrong_email_address_format' => "That doesn't look like a valid email address.", + 'std_invalid_username' => "Invalid username.", + 'std_unqualified' => "Sorry, you're not qualified to become a member of this site.", + 'std_email_address' => "The e-mail address ", + 'std_in_use' => " is already in use.", + 'std_username_exists' => "Username already exists!", + 'std_database_in_distress' => "Sorry, mysql error. Please contact the administrator about this error.", + 'std_almost_signup' => "Almost Finish signup!", + 'std_please_click' => "Please click ", + 'std_here' => "here", + 'std_to_finish_signup' => " to finish signup, thanks!", + 'msg_subject' => "Welcome to ", + 'msg_congratulations' => "Congratulations ", + 'msg_you_are_a_member' => ",\n\nYou are now a member of ".$SITENAME.",\nWe would like to take this opportunity to say hello and welcome to ".$SITENAME."!\n\nPlease be sure to read the [url=rules.php][b]Rules[/b][/url] and the [url=faq.php][b]Faq[/b][/url].\n And be sure to stop by the [url=forums.php][b]Forums[/b][/url]: and say Hello!\n\nEnjoy your Stay.\nThe Staff of ".$SITENAME." ", + 'mail_this_link' => "THIS LINK", + 'mail_here' => "HERE", + 'mail_title' => " User Registration Confirmation", + 'mail_one' => "Hi ", + 'mail_two' => ",

    You have requested a new user account on ".$SITENAME." and you have
    specified this address ", + 'mail_three' => " as user contact.

    If you did not do this, please ignore this email. The person who entered your
    email address had the IP address ", + 'mail_four' => ". Please do not reply.

    To confirm your user registration, you have to follow ", + 'mail_four_1' => "

    If the Link above is broken or expired, try to send a new confirmation email again from ", + 'mail_five' => "

    After you do this, you will be able to use your new account. If you fail to
    do this, your account will be deleted within 24 hours. We urge you to read
    the RULES and FAQ before you start using ".$SITENAME.".

    Please Note: If you did not register for ".$SITENAME.", please report this email to ".$REPORTMAIL."

    ------
    Yours,
    The ".$SITENAME." Team.", + 'std_invalid_gender' => "Invalid Gender!", +); +?> diff --git a/lang/en/lang_takeupload.php b/lang/en/lang_takeupload.php new file mode 100644 index 00000000..fec26e67 --- /dev/null +++ b/lang/en/lang_takeupload.php @@ -0,0 +1,31 @@ + "Upload failed!", + 'std_missing_form_data' => "missing form data", + 'std_empty_filename' => "Empty filename!", + 'std_zero_byte_nfo' => "0-byte NFO", + 'std_nfo_too_big' => "NFO is too big! Max 65,535 bytes.", + 'std_nfo_upload_failed' => "NFO upload failed", + 'std_blank_description' => "You must enter a description!", + 'std_category_unselected' => "You must select a category to put the torrent in!", + 'std_invalid_filename' => "Invalid filename!", + 'std_filename_not_torrent' => "Invalid filename (not a .torrent).", + 'std_empty_file' => "Empty file!", + 'std_not_bencoded_file' => "What the hell did you upload? This is not a bencoded file!", + 'std_not_a_dictionary' => "not a dictionary", + 'std_dictionary_is_missing_key' => "dictionary is missing key(s)", + 'std_invalid_entry_in_dictionary' => "invalid entry in dictionary", + 'std_invalid_dictionary_entry_type' => "invalid dictionary entry type", + 'std_invalid_pieces' => "invalid pieces", + 'std_missing_length_and_files' => "missing both length and files", + 'std_filename_errors' => "filename error", + 'std_uploaded_not_offered' => "you are only authorized to upload torrent you offered, please go back and select one from 'Your offer'!", + 'std_unauthorized_upload_freely' => "you are not authorized to upload torrent freely!", + 'std_torrent_existed' => "Torrent already uploaded!", + 'std_torrent_file_too_big' => "Torrent file is too big! Max ", + 'std_remake_torrent_note' => " bytes. Please remake the torrent file with bigger piece size or split the content into several torrents.", +); + +?> diff --git a/lang/en/lang_topten.php b/lang/en/lang_topten.php new file mode 100644 index 00000000..ccd249a9 --- /dev/null +++ b/lang/en/lang_topten.php @@ -0,0 +1,116 @@ + "Error!", + 'std_sorry' => "Sorry...", + 'std_permission_denied_only' => "Permission denied. Only ", + 'std_or_above_can_view' => " or above could view Top 10.

    Please see the "."FAQ for more information on different user classes and what they can do.

    The " .$SITENAME." Staff
    ", + 'col_rank' => "Rank", + 'col_user' => "User", + 'col_donated' => "Donated", + 'col_ul_speed' => "UL speed", + 'col_downloaded' => "Downloaded", + 'col_dl_speed' => "DL speed", + 'col_ratio' => "Ratio", + 'col_joined' => "Joined", + 'col_name' => "Name", + 'title_sna' => "Number of Snatched", + 'col_data' => "Data", + 'title_se' => "Number of Seeders", + 'col_le' => "Number of Leechers", + 'col_to' => "To.", + 'col_country' => "Country", + 'col_username' => "Username", + 'col_upload_rate' => "Upload rate", + 'col_download_rate' => "Download rate", + 'text_users' => "Users", + 'text_torrents' => "Torrents" , + 'text_countries' => "Countries", + 'text_peers' => "Peers", + 'text_community' => "Community", + 'text_search' => "Search", + 'text_other' => "Other", + 'text_this_page_last_updated' => "This page last updated ", + 'text_started_recording_date' => "Started recording account xfer stats on ", + 'text_update_interval' => ", and statistics are updated every 60 minutes", + 'text_uploaders' => "Uploaders", + 'text_downloaders' => "Downloaders", + 'text_fastest_uploaders' => "Fastest Uploaders", + 'text_fastest_up_note' => "(average, includes inactive time, with minimum 50 GB uploaded)", + 'text_fastest_note' => "(average, includes inactive time)", + 'text_fastest_downloaders' => "Fastest Downloaders", + 'text_best_sharers' => "Best Sharers", + 'text_sharers_note' => "(with minimum 50 GB downloaded)", + 'text_worst_sharers' => "Worst Sharers", + 'text_most_active_torrents' => "Most Active Torrents", + 'text_most_snatched_torrents' => "Most Snatched Torrents" , + 'text_most_data_transferred_torrents' => "Most Data Transferred Torrents", + 'text_best_seeded_torrents' => "Best Seeded Torrents ", + 'text_best_seeded_torrents_note' => "(with minimum 5 seeders)", + 'text_worst_seeded_torrents' => "Worst Seeded Torrents", + 'text_worst_seeded_torrents_note' => "(with minimum 1 leecher, excluding unsnatched torrents)", + + 'text_most_donated_USD' => "Donors in US dollar", + 'text_most_donated_CNY' => "Donors in Chinese yuan", + 'col_donated_usd' => "Donated($)", + 'col_donated_cny' => "Donated(¥)", + + 'text_most_supplied' => " Biggest Resource Supplier(Do not include deleted torrents)", + 'text_most_snatched' => " Biggest Resource Snatcher(Do not include deleted torrents)", + 'col_torrent_uploaded' => "# Upped", + 'col_torrent_downloaded' => "# Snatched", + + 'text_most_topic' => " Forum Topic Starters (Do not include deleted topics)", + 'text_most_post' => " Forum Posters (Do not include deleted posts)", + 'col_topics' => "Topics", + 'col_posts' => "Posts", + + + 'text_biggest_topics' => "Biggest Topics (Topics in Privileged Forums are not calculated)", + 'col_subject' => "Subject", + + 'col_number' => "Number", + 'text_most_browser' => "Browsers", + 'text_most_client' => "Torrent Clients (Last one that accessed the tracker)", + + 'col_comments' => "Comments", + 'text_most_commenter' => "Torrent Commenter (Do not include deleted comments)", + + 'col_reviews' => "Reviews", + 'text_most_reviewer' => "Film Reviewer (Do not include deleted reviews)", + + 'col_location' => "Location", + 'text_most_locations' => "Peer Locations", + + 'col_keyword' => "Keywords", + 'col_times' => "Times", + 'col_datetime' => "Time", + 'text_latest_search' => "Latest Searches", + 'text_current_month_search' => "Searches of This Month", + 'text_last_month_search' => "Searches of Last Month", + 'text_current_year_search' => "Searches of This Year", + + 'text_most_bonuses' => "Bonuses", + 'col_bonus' => "Bonus", + 'text_countries_users' => "Users", + 'col_users' => "Users", + 'text_countries_uploaded' => "Total Uploaded", + 'col_uploaded' => "Uploaded", + 'text_countries_per_user' => "Average Total Uploaded Per User (with minimum 1TB uploaded and 100 users)", + 'col_average' => "Average", + 'text_countries_ratio' => "Ratio (with minimum 1TB uploaded, 1TB downloaded and 100 users)", + 'text_ago' => " ago", + 'text_inf' => "Inf.", + 'head_top_ten' => "Top 10", + 'text_most_stylesheet' => "Stylesheets", + 'text_most_language' => "User Languages", + 'text_top' => "Top ", + 'text_one_hundred' => "Top 100", + 'text_top_250' => "Top 250", + 'col_clicks' => "Clicks", + 'text_most_clicks' => "Promotion Link Owners", + 'text_charity_giver' => "Charity Givers" +); + +?> diff --git a/lang/en/lang_torrents.php b/lang/en/lang_torrents.php new file mode 100644 index 00000000..9970afe4 --- /dev/null +++ b/lang/en/lang_torrents.php @@ -0,0 +1,63 @@ + "Search results for ", + 'text_search_box' => "Search Box", + 'text_category' => "Category:", + 'text_source' => "Source:", + 'text_codec' => "Codec:", + 'text_standard' => "Standard:", + 'text_processing' => "Processing:", + 'text_show_dead_active' => "Show Dead/Active?", + 'select_including_dead' => "including dead", + 'select_active' => "active", + 'select_dead' => "dead", + 'text_show_special_torrents' => "Show Promotion?", + 'select_all' => "all", + 'select_normal' => "normal", + 'select_free' => "free", + 'select_two_times_up' => "2x up", + 'select_free_two_times_up' => "free and 2x up", + 'select_half_down' => "50% down", + 'text_search' => "Search keyword:", + 'submit_go' => "Go!", + 'std_search_results_for' => "Search results for \"", + 'std_try_again' => "Nothing found! Try again with a refined search string.\n", + 'std_nothing_found' => "Nothing found!", + 'std_no_active_torrents' => "No Torrents :(\n", + 'input_check_all' => "Check All", + 'input_uncheck_all' => "Uncheck All", + 'text_download_client' => "Download Allowed Client", + 'select_title' => "Title", + 'select_description' => "Description", + 'select_small_description' => "Small Description", + 'select_uploader' => "Uploader", + 'select_imdb_url' => "IMDb URL", + 'select_and' => "AND", + 'select_or' => "OR", + 'select_exact' => "Exact", + 'select_parsed' => "Parsed", + 'text_in' => " in ", + 'text_with' => " with ", + 'text_mode' => " matching mode", + 'text_show_bookmarked' => "Show Bookmarked?", + 'select_bookmarked' => "Bookmarked", + 'select_bookmarked_exclude' => "Not Bookmarked", + 'text_s_bookmarked_torrent' => "'s Bookmarked Torrents", + 'text_s_not_bookmarked_torrent' => "'s NOT Bookmarked Torrents", + 'head_torrents' => "Torrents", + 'head_music' => "Music", + 'text_movies_and_tvs' => "Movies & TVs:", + 'text_games_and_appz' => "Games & Appz:", + 'text_others' => "Others:", + 'text_medium' => "Medium:", + 'text_team' => "Team:", + 'text_audio_codec' => "Audio Codec:", + 'text_video' => "Video:", + 'text_tv' => "TV:", + 'text_music' => "Music:", + 'text_software' => "Software:", +); + +?> diff --git a/lang/en/lang_upload.php b/lang/en/lang_upload.php new file mode 100644 index 00000000..15a2915e --- /dev/null +++ b/lang/en/lang_upload.php @@ -0,0 +1,45 @@ + "Upload", + 'std_sorry' => "Sorry...", + 'std_unauthorized_to_upload' => "You are not authorized to upload torrents. Read (Inbox)", + 'std_please_offer' => "You are not authorized to upload torrents. (See Uploading in the FAQ.)

    If you think that you are qualified for uploading rights, please propose your offer here
    ", + 'text_red_star_required' => "Fields marked with a red star(*) are required.", + 'text_tracker_url' => "The tracker's announce URL is", + 'row_torrent_file' => "Torrent file", + 'row_torrent_name' => "Torrent name", + 'text_torrent_name_note' => "(Taken from filename if not specified. Please use descriptive names. e.g. Blade Runner 1982 Final Cut 720p HDDVD DTS x264-ESiR)\n", + 'row_small_description' => "Small description", + 'text_small_description_note' => "(This is shown in torrents page under the torrent name. e.g. 720p @ 4615 kbps - DTS 5.1 @ 1536 kbps)\n", + 'row_nfo_file' => "NFO file", + 'text_only_viewed_by' => "(Can only be viewed by ", + 'text_or_above' => " or Above.
    insert only file ending with .nfo)\n", + 'row_description' => "Description", + 'select_choose_one' => "choose one", + 'row_type' => "Type", + 'row_quality' => "Quality", + 'text_source' => "Source:", + 'text_codec' => "Codec:", + 'text_standard' => "Standard:", + 'text_processing' => "Processing:", + 'row_your_offer' => "Your offer", + 'text_please_select_offer' => "   If you are uploading one of your offers please select it here so the voters will be notified.", + 'row_show_uploader' => "Show Uploader", + 'checkbox_hide_uploader_note' => "Don't show my username in 'Uploaded By' field.", + 'text_read_rules' => "I read the rules before this uploading.", + 'submit_upload' => "Upload", + 'text_to_browse_section' => "Upload to Torrents section ", + 'text_to_special_section' => "or Music section ", + 'text_type_note' => "   Choose only either of the two", + 'text_medium' => "Medium:", + 'text_team' => "Group:", + 'text_audio_codec' => "Audio Codec:", + 'row_content' => "Content", + 'text_chinese_title' => "Chinese Name:", + 'text_english_title' => "English Name:", + 'text_titles_note' => "(If no English Name exists, use pinyin or leave it blank)", +); + +?> diff --git a/lang/en/lang_uploaders.php b/lang/en/lang_uploaders.php new file mode 100644 index 00000000..5e22a186 --- /dev/null +++ b/lang/en/lang_uploaders.php @@ -0,0 +1,22 @@ + "No uploaders found!", + 'head_uploaders' => "Uploaders", + 'text_uploaders' => "Uploaders", + 'col_username' => "Username", + 'col_torrents_size' => "Torrents Size", + 'col_torrents_num' => "Torrents Num", + 'col_last_upload_time' => "Last Upped Time", + 'col_last_upload' => "Last Upped Torrent", + 'text_not_available' => "N/A", + 'submit_go' => "Go", + 'text_select_month' => "Select month: ", + 'text_order_by' => "Order By", + 'text_username' => "Username", + 'text_torrent_size' => "Torrent Size", + 'text_torrent_num' => "Torrent Num", +); + +?> diff --git a/lang/en/lang_usercp.php b/lang/en/lang_usercp.php new file mode 100644 index 00000000..f3f7fb7b --- /dev/null +++ b/lang/en/lang_usercp.php @@ -0,0 +1,248 @@ + "Sorry...", + 'text_user_cp_home' => "User CP Home", + 'text_personal_settings' => "Personal Settings", + 'text_tracker_settings' => "Tracker Settings", + 'text_forum_settings' => "Forum Settings", + 'text_security_settings' => "Security Settings", + 'row_save_settings' => "Save Settings", + 'submit_save_settings' => "Save Settings! (PRESS ONLY ONCE)", + 'std_error' => "Error", + 'head_control_panel' => "Control Panel ", + 'head_personal_settings' => " - Personal Settings", + 'std_invalid_action' => "Invalid Action", + 'text_saved' => "Saved!", + 'row_account_parked' => "Account parked", + 'checkbox_pack_my_account' => "I will be away for a long time.", + 'text_account_pack_note' => "Note:You can park your account to prevent it from being deleted because of inactivity if you go away on for example a vacation. When the account has been parked limits are put on the account, for example you cannot use the tracker and browse some of the pages.", + 'row_pms' => "PMs", + 'row_recommended_movies' => "Recommended Resources", + 'checkbox_show_hot' => "Show HOT at home page", + 'checkbox_show_classic' => "Show CLASSIC at home page", + 'text_accept_pms' => "Accept PMs from ", + 'radio_all_except_blocks' => "All (except blocks)", + 'radio_friends_only' => "Friends only", + 'radio_staff_only' => "Staff only", + 'checkbox_delete_pms' => "Delete PMs on reply", + 'checkbox_save_pms' => "Save PMs to Sentbox", + 'checkbox_pm_on_comments' => "Notify me when someone comments on my torrents", + 'row_gender' => "Gender", + 'radio_not_available' => "N/A", + 'radio_male' => "Male", + 'radio_female' => "Female", + 'row_country' => "Country", + 'row_download_speed' => "Download Speed", + 'row_upload_speed' => "Upload Speed", + 'row_bt_client' => "BT Client", + 'row_avatar_url' => "Avatar URL", + 'select_choose_avatar' => "Choose an avatar", + 'select_nothing' => "Nothing", + 'text_avatar_note' => "Width should be 150 pixels (will be resized if necessary). ", + 'text_bitbucket_note' => "If you need a host for the picture, try the bitbucket.", + 'row_info' => "Info", + 'text_info_note' => "Displayed on your public page. May contain BB codes.", + 'head_tracker_settings' => " - Tracker Settings", + 'row_email_notification' => "Email notification", + 'checkbox_notification_received_pm' => "Notify me when I have received a PM.", + 'checkbox_notification_default_categories' => "Notify me when a torrent is uploaded in one of my default browsing categories.\n", + 'row_browse_default_categories' => "Default
    categories", + 'row_stylesheet' => "Stylesheet", + 'row_site_language' => "Site Language", + 'row_torrent_page' => "Torrents per page", + 'text_zero_equals_default' => "(0=use default setting, max=100)", + 'head_forum_settings' => " - Forum Settings", + 'row_topics_per_page' => "Topics per page", + 'row_posts_per_page' => "Posts per page", + 'row_view_avatars' => "View avatars", + 'checkbox_low_bandwidth_note' => "(Low bandwidth users might want to turn this off)", + 'row_view_signatures' => "View Signatures", + 'row_forum_signature' => "Forum-Signature", + 'head_security_settings' => " - Security Settings", + 'row_security_check' => "Security Check", + 'text_security_check_note' => "Note: In order to change your security settings, you must enter your current password!", + 'std_enter_old_password' => "Please enter your password first!", + 'std_wrong_password_note' => "You have entered a wrong password!", + 'std_password_equals_username' => "Sorry, password cannot be same as user name", + 'std_password_too_long' => "Sorry, password is too long (max is 40 chars)", + 'std_password_too_short' => "Sorry, password is too short (min is 6 chars)", + 'std_passwords_unmatched' => "The passwords didn't match. Try again.", + 'std_email_address_banned' => "This email address is banned!", + 'std_wrong_email_address_domains' => "This email address is not allowed! You could only use email from those domains: ", + 'std_wrong_email_address_format' => "That doesn't look like a valid email address.", + 'std_email_in_use' => "The e-mail address is already in use", + 'std_confirmation_email_sent' => " (Confirmation email has been sent!)", + 'std_passkey_reset' => " (The passkey has been updated!)", + 'std_password_changed' => " (Your password has been changed!)", + 'std_privacy_level_updated' => " (Your privacy level has been updated!)", + 'row_reset_passkey' => "Reset passkey", + 'checkbox_reset_my_passkey' => "I want to reset my passkey.", + 'text_reset_passkey_note' => "Note: In order to reset your current passkey, any active torrents must be downloaded again to continue leeching/seeding.", + 'row_email_address' => "Email address", + 'text_email_address_note' => "Note: In order to change your email address, you will receive another confirmation email to your new address.", + 'row_change_password' => "Change password", + 'row_type_password_again' => "Type password again", + 'row_privacy_level' => "Privacy level", + 'radio_normal' => "Normal", + 'radio_low' => "Low (email address will be shown)", + 'radio_strong' => "Strong (no info will be made available)", + 'head_home' => " - Home", + 'row_join_date' => "Join date", + 'row_avatar' => "Avatar", + 'row_passkey' => "Passkey", + 'row_invitations' => "Invitations", + 'link_send_invitation' => "Go to Invitation System", + 'row_karma_points' => "Karma Points", + 'link_use_karma_points' => "Use Karma Points", + 'row_ratings_submitted' => "Ratings submitted", + 'row_written_comments' => "Written comments", + 'link_view_comments' => "View Comments", + 'row_forum_posts' => "Forum Posts", + 'link_view_posts' => "View Posts", + 'text_posts_per_day' => " posts per day ", + 'text_of_total_posts' => " of total forum posts", + 'text_recently_read_topics' => "Recently Read Topics", + 'col_topic_title' => "Topic Title", + 'col_replies' => "Replies", + 'col_topic_starter' => "Topic Starter", + 'col_views' => "Views", + 'col_last_post' => "Last Post", + 'text_by' => "by ", + 'select_none_selected' => "None selected", + 'text_ago' => " ago", + 'mail_here' => "HERE", + 'mail_change_email_one' => "You have requested that your user profile (username ", + 'mail_change_email_two' => ") on ".$SITENAME." should be updated with this email address ", + 'mail_change_email_three' => " as user contact.", + 'mail_change_email_four' => "If you did not do this, please ignore this email. The person who entered your email address had the IP address ", + 'mail_change_email_five' => ". Please do not reply.", + 'mail_change_email_six' => "To complete the update of your user profile, please click ", + 'mail_change_email_six_1' => " to confirm", + 'mail_change_email_seven' => "Your new email address will appear in your profile after you do this. Otherwise your profile will remain unchanged.", + 'mail_change_email_eight' => "
    Yours,", + 'mail_change_email_nine' => "The ".$SITENAME." Team.", + 'mail_profile_change_confirmation' => " profile change confirmation", + 'text_go_back' => "go back", + 'text_category' => "Category", + 'text_source' => "Source", + 'text_codec' => "Codec", + 'text_standard' => "Standard", + 'text_processing' => "Processing", + 'text_show_dead_active' => "Show Dead/Active?", + 'select_including_dead' => "including dead", + 'select_active' => "active", + 'select_dead' => "dead", + 'text_show_special_torrents' => "Show Promotion?", + 'select_all' => "all", + 'select_normal' => "normal", + 'select_free' => "free", + 'select_two_times_up' => "2x up", + 'select_free_two_times_up' => "free and 2x up", + 'text_show_bookmarked' => "Show Bookmarked?", + 'select_bookmarked' => "Bookmarked", + 'select_bookmarked_exclude' => "Not Bookmarked", + 'select_with' => "with", + 'select_without' => "without", + 'text_review' => " review", + 'row_pm_boxes' => "PM Boxes", + 'text_show' => "Show ", + 'text_pms_per_page' => " pms per page (max=100)", + 'row_shoutbox' => "Shoutbox", + 'text_show_last' => "Show last ", + 'text_messages_at_shoutbox' => " messages at shoutbox (0=use default setting, min=10, max=500)", + 'text_refresh_shoutbox_every' => "Refresh shoutbox every ", + 'text_seconds' => " seconds (0=use default setting, min=10, max=3600)", + 'text_hide_helpbox_messages' => "Hide messages from helpbox", + 'row_torrent_detail' => "Torrent Detail Page", + 'text_show_description' => "Show Description", + 'text_show_nfo' => "Show NFO", + 'text_show_imdb_info' => "Show IMDb Information", + 'text_show_douban_info' => "Shou Douban Information", + 'text_show_lastfm_info' => "Show Last.fm Information", + 'text_show_reviews' => "Show reviews", + 'text_show_comments' => "Show comments", + 'row_browse_page' => "Torrents Page", + 'text_browse_setting_warning' => "WARNING: Turning on lots of features may slow down your browsing speed.", + 'text_torrents_per_page' => " torrents per page ", + 'text_tooltip_type' => "Tooltip type on torrent name", + 'text_last_review' => "Last review", + 'text_minor_imdb_info' => "Minor IMDb Info (Title + Year + IMDb Rating + Country + Genre + Director + Main Cast + Tagline)", + 'text_median_imdb_info' => "Median IMDb Info (Picture + Title + Year + IMDb Rating + Runtime + Country + Language + Director + Genre + Main Cast + Plot Outline in English)", + 'text_douban_info' => "Douban Info (Picture + Title + Year + Douban Rating + Language + Director + Region + Main Cast + Plot Outline in Chinese)", + 'text_off' => "Off", + 'text_show_lastfm_tooltip' => "Show Last.fm Info on tooltip", + 'row_time_type' => "Time Type", + 'text_time_added' => "Time Added", + 'text_time_elapsed' => "Time Elasped", + 'text_append_words_to_torrents' => "Special torrents", + 'text_append_sticky' => "Add sticky icon \"sticky\" to torrents sticked at top", + 'text_append_new' => "Append 'New' to new torrents", + 'text_append_picked' => "Append words, e.g. 'Classic', to torrents picked by critics", + 'text_show_action_icons' => "Show action icons", + 'text_show_nfo_icon' => "NFO icon", + 'text_show_download_icon' => "Download icon", + 'text_show_edit_icon' => "Edit icon", + 'text_if_owner' => " (if owner of torrents)", + 'text_show_bookmark_icon' => "Bookmark icon", + 'text_comments_reviews' => "Comments", + 'text_show_comment_number' => "Show number of comments ", + 'text_last_comment_on_tooltip' => " last comment on tooltip", + 'text_show_review_number' => "Show number of reviews ", + 'row_school' => "School", + 'row_discuss' => "Discuss", + 'row_funbox' => "Funbox", + 'text_show_funbox' => "Show funbox at home page", + 'text_send' => "Send", + 'text_use' => "Use", + 'text_view' => "View", + 'row_ip_location' => "Location", + 'text_translation_note' => "Your language not in the list? See what you can do to ", + 'text_translation_link' => "HELP THE TRANSLATION", + 'text_movies_and_tvs' => "Movies & TVs:", + 'text_games_and_appz' => "Games & Appz:", + 'text_others' => "Others:", + 'text_at_browse_page' => "Torrents section", + 'text_at_special_page' => "Music section", + 'text_additional_selection' => "Additional selections", + 'text_stylesheet_note' => "More stylesheets? Wanna design your own? ", + 'text_stylesheet_link' => "CLICK HERE", + 'row_font_size' => "Font Size", + 'select_small' => "Small", + 'select_large' => "Large", + 'text_medium' => "Medium", + 'text_torrents_on_promotion' => "Torrents on promotion: ", + 'text_highlight' => "Highlight", + 'text_append_words' => "Append words, e.g. '2X Free'", + 'text_append_icon' => "Append icon, e.g. \"free\"", + 'text_no_mark' => "Off", + 'text_signature_note' => "May contain BB codes. Max image size is 500*200 and only the first image would be displayed.", + 'row_click_on_topic' => "Click on topic", + 'text_go_to_first_page' => "go to first page", + 'text_go_to_last_page' => "go to last page", + 'select_half_down' => "50% down", + 'row_category_icons' => "Category Icons", + 'text_team' => "Group", + 'text_audio_codec' => "Audio Codec", + 'text_sub_category' => "Subcategories", + 'select_medium' => "Medium", + 'row_tooltip_last_post' => "Show tooltip of last post", + 'checkbox_last_post_note' => "(If it disturbs you, turn it off)", + 'row_network_bandwidth' => "Network Bandwidth", + 'text_downstream_rate' => "Downstream Rate", + 'text_upstream_rate' => "Upstream Rate", + 'text_isp' => "ISP", + 'text_show_title' => "Show title", + 'text_show_small_description' => "Small description", + 'row_show_advertisements' => "Show Advertisements", + 'text_can_turn_off_advertisement' => " or above can choose to see no advertisements", + 'text_buy_no_advertisement' => " or above can use bonus to buy some time without advertisements at ", + 'text_bonus_center' => " bonus center", + 'text_show_advertisement_note' => "I'd like to see the advertisements", + 'row_promotion_link' => "Promotion Link", + 'text_update_promotion_link' => "Update Promotion Link", + 'text_read_more' => "Read More" +); + +?> diff --git a/lang/en/lang_userdetails.php b/lang/en/lang_userdetails.php new file mode 100644 index 00000000..b7c4bee0 --- /dev/null +++ b/lang/en/lang_userdetails.php @@ -0,0 +1,145 @@ + "Error", + 'std_no_such_user' => "No user with this ID!", + 'head_details_for' => "Details for ", + 'text_account_disabled_note' => "This account has been disabled!", + 'text_remove_from_friends' => "remove from friends", + 'text_remove_from_blocks' => "remove from blocks", + 'text_add_to_friends' => "add to friends", + 'text_add_to_blocks' => "add to blocks", + 'text_flush_ghost_torrents' => "To flush your ghost torrents click ", + 'text_here' => "here", + 'row_invitation' => "Invitations", + 'text_no_invitation' => "No Invitations Available", + 'link_send_invitation' => "Send Invitation", + 'row_invited_by' => "Invited By", + 'row_join_date' => "Join date", + 'row_last_seen' => "Last seen", + 'row_last_seen_location' => "Last seen(Location)", + 'row_email' => "Email", + 'row_users_ips' => "User's IPs", + 'row_ip_history' => "IP History", + 'text_user_earlier_used' => "This user has earlier used ", + 'text_different_ips' => " different IP address", + 'row_ip_address' => "IP Address", + 'row_bt_client' => "BT Client", + 'row_uploaded' => "Uploaded", + 'row_downloaded' => "Downloaded", + 'row_share_ratio' => "Share Ratio", + 'row_internet_speed' => "Network Bandwidth", + 'row_gender' => "Gender", + 'row_donated' => "Donated", + 'row_avatar' => "Avatar", + 'row_class' => "Class", + 'row_torrent_comment' => "Torrent comments", + 'link_view_comments' => "View Comments", + 'row_forum_posts' => "Forum posts", + 'link_view_posts' => "View Posts", + 'row_karma_points' => "Karma Points", + 'row_uploaded_torrents' => "Uploaded Torrents", + 'text_show_or_hide' => "[Show/Hide]", + 'row_current_seeding' => "Current Seeding", + 'row_current_leeching' => "Current Leeching", + 'row_completed_torrents' => "Completed Torrents", + 'row_incomplete_torrents' => "Incomplete Torrents", + 'text_public_access_denied' => "Sorry, public access denied by ", + 'text_user_wants_privacy' => ". He(She) wants to protect personal details.", + 'text_edit_user' => "Edit User", + 'row_title' => "Title", + 'row_privacy_level' => "Privacy Level", + 'radio_low' => "Low", + 'radio_normal' => "Normal", + 'radio_strong' => "Strong", + 'row_avatar_url' => "Avatar URL", + 'row_signature' => "Signature", + 'row_donor_status' => "Donor Status", + 'row_donor' => "Donor", + 'radio_yes' => "Yes", + 'radio_no' => "No", + 'row_support' => "Support", + 'row_support_language' => "Support Language", + 'row_support_for' => "Support for", + 'row_comment' => "Comment", + 'row_seeding_karma' => "Bonus", + 'row_warning_system' => "Warning System

    (Bad behavior)", + 'text_not_warned' => "Not warned.", + 'text_arbitrary_duration' => "(Arbitrary duration)", + 'text_until' => "Until ", + 'text_to_go' => " to go", + 'text_warn_for' => "Warn for ", + 'text_week' => "Week", + 'text_weeks' => "Weeks", + 'text_unlimited' => "Unlimited", + 'text_reason_of_warning' => "Reason of warning", + 'text_times_warned' => "Times Warned", + 'text_last_warning' => "Last Warning", + 'text_not_warned_note' => "This user hasn't been warned yet", + 'row_auto_warning' => "Auto-Warning", + 'text_low_ratio' => "Low Ratio", + 'text_leech_warned' => "Leech Warned!", + 'text_for_unlimited_time' => "For UNLIMITED time...", + 'row_movie_picker' => "Picker", + 'row_enabled' => "Enabled", + 'row_forum_post_possible' => "Forum Post possible?", + 'row_upload_possible' => "Upload possible?", + 'row_download_possible' => "Download possible?", + 'row_change_username' => "Change Username", + 'row_change_email' => "Change E-mail", + 'row_change_password' => "Change Password", + 'row_repeat_password' => "Repeat Password", + 'row_amount_uploaded' => "Amount Uploaded", + 'row_amount_downloaded' => "Amount Downloaded", + 'row_passkey' => "Passkey", + 'checkbox_reset_passkey' => " Reset passkey", + 'submit_okay' => "Okay", + 'text_delete_user' => "Delete User", + 'submit_delete' => "Delete", + 'text_ago' => " ago", + 'title_show_or_hide' => "Show/Hide", + 'title_download' => "Download: ", + 'title_upload' => "Upload: ", + 'title_male' => "Male", + 'title_female' => "Female", + 'title_not_available' => "N/A", + 'title_send_pm' => "Send PM", + 'title_report_user' => "Report User", + 'text_free' => "Free", + 'text_two_times_up' => "2X", + 'text_free_two_times_up' => "2X Free", + 'text_half_down' => "50%", + 'text_by' => "by ", + 'text_by_system' => "by System", + 'text_transaction_memo' => "Transaction Memo:", + 'row_pick_for' => "Pick..", + 'row_staff_duties' => "Staff Duties/VIP Reason", + 'row_transfer' => "Transfers", + 'row_sltime' => "Torrenting Time", + 'text_seeding_leeching_time_ratio' => "Se./Le. Time Ratio", + 'text_seeding_time' => "Seeding Time", + 'text_leeching_time' => "Leeching Time", + 'text_since' => "Since: ", + 'row_compatibility' => "Taste Compatibility", + 'text_unknown' => "Unknown", + 'text_super' => "Super", + 'text_very_high' => "Very High", + 'text_high' => "High", + 'text_medium' => "Medium", + 'text_low' => "Low", + 'text_very_low' => "Very Low", + 'row_invites' => "Invites", + 'js_delete_user_note' => "You can now delete this users account, be VERY VERY sure.", + 'std_sorry' => "Sorry", + 'std_user_not_confirmed' => "The user has not been confirmed yet!", + 'text_not_available' => "N/A", + 'row_vip_by_bonus' => "VIP by bonus", + 'text_vip_by_bonus_note' => "Whether the VIP status is gained by using bonus", + 'row_vip_until' => "VIP until", + 'text_vip_until_note' => "Time format is YYYY-MM-DD hh:mm:ss. The time until when the VIP status is valid. For this to work, 'VIP by bonus' must be set to 'yes'.", + 'row_show_ad' => "Show Ad", + 'row_no_ad_until' => "No Ad Until", + 'text_no_ad_until_note' => "Time format is YYYY-MM-DD hh:mm:ss. The time until when the user can turn ads off.", +); +?> diff --git a/lang/en/lang_userhistory.php b/lang/en/lang_userhistory.php new file mode 100644 index 00000000..d63fc9b0 --- /dev/null +++ b/lang/en/lang_userhistory.php @@ -0,0 +1,26 @@ + "Error", + 'std_permission_denied' => "Permission denied", + 'std_no_posts_found' => "No posts found", + 'head_posts_history' => "Posts history", + 'text_posts_history_for' => "Post history for ", + 'text_forum' => "Forum: ", + 'text_topic' => "Topic: ", + 'text_post' => "Post: ", + 'text_new' => "NEW!", + 'text_last_edited' => "Last edited by ", + 'text_at' => " at ", + 'std_no_comments_found' => "No comments found", + 'head_comments_history' => "Comments history", + 'text_comments_history_for' => "Comments history for ", + 'text_torrent' => "Torrent: ", + 'text_comment' => "Comment: ", + 'std_history_error' => "History Error", + 'std_unkown_action' => "Unknown action", + 'std_invalid_or_no_query' => "Invalid or no query." +); + +?> diff --git a/lang/en/lang_users.php b/lang/en/lang_users.php new file mode 100644 index 00000000..0c74f55f --- /dev/null +++ b/lang/en/lang_users.php @@ -0,0 +1,20 @@ + "Users", + 'text_users' => "

    Users

    ", + 'text_search' => "Search:", + 'select_any_class' => "(any class)", + 'submit_okay' => "Okay", + 'text_prev' => "Prev", + 'text_next' => "Next", + 'col_user_name' => "User name", + 'col_registered' => "Registered", + 'col_last_access' => "Last access", + 'col_class' => "Class", + 'col_country' => "Country", + 'select_any_country'=> "(any country)", +); + +?> diff --git a/lang/en/lang_viewfilelist.php b/lang/en/lang_viewfilelist.php new file mode 100644 index 00000000..13975947 --- /dev/null +++ b/lang/en/lang_viewfilelist.php @@ -0,0 +1,8 @@ + "Path", +); + +?> \ No newline at end of file diff --git a/lang/en/lang_viewnfo.php b/lang/en/lang_viewnfo.php new file mode 100644 index 00000000..a0c78356 --- /dev/null +++ b/lang/en/lang_viewnfo.php @@ -0,0 +1,13 @@ + "Puke", + 'head_view_nfo' => "View NFO File", + 'text_nfo_for' => "NFO for", + 'title_dos_vy' => "", + 'text_dos_vy' => "DOS-vy", + 'title_windows_vy' => "Latin-1: Inget socker tack!", + 'text_windows_vy' => "Windows-vy" +); +?> \ No newline at end of file diff --git a/lang/en/lang_viewpeerlist.php b/lang/en/lang_viewpeerlist.php new file mode 100644 index 00000000..e5c75120 --- /dev/null +++ b/lang/en/lang_viewpeerlist.php @@ -0,0 +1,28 @@ + "User", + 'col_location' => "Location", + 'col_connectable' => "Connectable", + 'col_uploaded' => "Uploaded", + 'col_rate' => "Rate", + 'col_av_rate' => "Av. Rate", + 'col_downloaded' => "Downloaded", + 'col_ratio' => "Ratio", + 'col_complete' => "Complete", + 'col_connected' => "Connected", + 'col_idle' => "Idle", + 'col_client' => "Client", + 'text_anonymous' => "Anonymous", + 'text_unknown' => "(unknown)", + 'text_seeders' => "Seeders", + 'text_leechers' => "Leechers", + 'row_seeders' => "Seeders", + 'row_leechers' => "Leechers", + 'text_yes' => "Yes", + 'text_no' => "No", + 'text_inf' => "Inf." +); + +?> diff --git a/lang/en/lang_viewsnatches.php b/lang/en/lang_viewsnatches.php new file mode 100644 index 00000000..aefce872 --- /dev/null +++ b/lang/en/lang_viewsnatches.php @@ -0,0 +1,33 @@ + "Snatch Details", + 'text_snatch_detail_for' => "Snatch Details for ", + 'text_users_top_finished_recently' => "The users at the top finished the download most recently", + 'col_username' => "Username", + 'col_uploaded' => "Uploaded", + 'col_downloaded' => "Downloaded", + 'col_se_time' => "Se. Time", + 'col_le_time' => "Le. Time", + 'col_ratio' => "Ratio", + 'col_when_completed' => "Completed At", + 'col_last_action' => "Last Action", + 'col_seeding' => "Seeding", + 'col_pm_user' => "PM User", + 'col_report_user' => "Report User", + 'col_on_or_off' => "On/Off", + 'text_global' => "Global", + 'text_torrent' => "Torrent", + 'text_yes' => "Yes", + 'text_no'=> "No", + 'title_report' => "Report", + 'col_ip' => "IP", + 'text_per_second' => "/s", + 'text_anonymous' => "anonymous", + 'text_inf' => "Inf.", + 'std_sorry' => "Sorry", + 'std_no_snatched_users' => "No user has snatched this torrent yet.", +); + +?> diff --git a/linksmanage.php b/linksmanage.php new file mode 100644 index 00000000..42ae4f2c --- /dev/null +++ b/linksmanage.php @@ -0,0 +1,168 @@ += $applylink_class){ +stdhead($lang_linksmanage['head_apply_for_links']); +begin_main_frame(); +begin_frame($lang_linksmanage['text_apply_for_links'], true,10,"100%","center"); + print("

    ".$lang_linksmanage['text_rules']."

    \n"); + print("

           ".$lang_linksmanage['text_rule_one']."

    \n"); + print("

           ".$lang_linksmanage['text_rule_two']."

    \n"); + print("

           ".$lang_linksmanage['text_rule_three']."

    \n"); + print("

           ".$lang_linksmanage['text_rule_four']."

    \n"); + print("

           ".$lang_linksmanage['text_rule_five']."

    \n"); + print("

           ".$lang_linksmanage['text_rule_six']."

    \n"); + + print("

    ".$lang_linksmanage['text_red_star_required']."

    "); +?> +
    "> + + + + + + + + +
    *  
    *  
      
    *  
    *  
    *
    +
    += $applylink_class){ +$sitename = unesc($_POST["linkname"]); +$url = unesc($_POST["url"]); +$title = unesc($_POST["title"]); +$admin = unesc($_POST["admin"]); +$email = htmlspecialchars(trim($_POST['email'])); +$email = safe_email($email); +$reason = unesc($_POST["reason"]); +if (!$sitename) +stderr($lang_linksmanage['std_error'], $lang_linksmanage['std_no_sitename']); +elseif (!$url) +stderr($lang_linksmanage['std_error'], $lang_linksmanage['std_no_url']); +elseif (!$admin) +stderr($lang_linksmanage['std_error'], $lang_linksmanage['std_no_admin']); +elseif (!$email) +stderr($lang_linksmanage['std_error'], $lang_linksmanage['std_no_email']); +elseif (!check_email($email)) + stderr($lang_linksmanage['std_error'], $lang_linksmanage['std_invalid_email']); +elseif (!$reason) + stderr($lang_linksmanage['std_error'], $lang_linksmanage['std_no_reason']); +elseif (strlen($reason) < 20) + stderr($lang_linksmanage['std_error'], $lang_linksmanage['std_reason_too_short']); +else{ + $message = "[b]Sitename[/b]: ".$sitename."\n[b]URL[/b]: ".$url."\n[b]Title[/b]: ".$title."\n[b]Administrator: [/b]".$admin."\n[b]EMail[/b]: ".$email."\n[b]Reason[/b]: \n".$reason."\n"; + $message = sqlesc($message); + $subject = $sitename." applys for links"; + $subject = sqlesc($subject); + $added = "'" . date("Y-m-d H:i:s") . "'"; + $userid = $CURUSER['id']; + sql_query("INSERT INTO staffmessages (sender, added, msg, subject) VALUES($userid, $added, $message, $subject)") or sqlerr(__FILE__, __LINE__); + stderr($lang_linksmanage['std_success'], $lang_linksmanage['std_success_note']); + } +} +else permissiondenied(); +} + +//start admin work +elseif (get_user_class() < $linkmanage_class) + permissiondenied(); +else{ +if ($_GET['action'] == "del") { +$id = 0 + $_GET['id']; +if (!$id) { header("Location: linksmanage.php"); die();} +$result = sql_query ("SELECT * FROM links where id = '".$id."'"); +if ($row = mysql_fetch_array($result)) +do { +sql_query ("DELETE FROM links where id = '".$row["id"]."'") or sqlerr(__FILE__, __LINE__); +} while($row = mysql_fetch_array($result)); + $Cache->delete_value('links'); +header("Location: linksmanage.php"); +die(); +} + +if ($_POST['action'] == "editlink") { + $name = ($_POST['linkname']); + $url = ($_POST['url']); + $title = ($_POST['title']); +if (!$name && !$url && !$title) { header("Location: linksmanage.php"); die();} + sql_query("UPDATE links SET name = ".sqlesc($_POST['linkname']).", url = ".sqlesc($_POST['url']).", title = ".sqlesc($_POST['title'])." WHERE id = '".$_POST['id']."'") or sqlerr(__FILE__, __LINE__); + $Cache->delete_value('links'); +header("Location: linksmanage.php"); +die(); +} + +if ($_POST['action'] == "add") +{ + if ($_POST["linkname"] == "" || $_POST["url"] == "" || $_POST["title"] == "") + stderr($lang_linksmanage['std_error'], $lang_linksmanage['std_missing_form_data']); + + $linkname = sqlesc($_POST["linkname"]); + $url = sqlesc($_POST["url"]); + $title = sqlesc($_POST["title"]); + + + sql_query("INSERT INTO links (name, url, title) VALUES($linkname, $url, $title)") or sqlerr(__FILE__, __LINE__); + $res = sql_query("SELECT id FROM links WHERE name=$linkname"); + $Cache->delete_value('links'); + $arr = mysql_fetch_row($res); + if (!$arr) + stderr($lang_linksmanage['std_error'], $lang_linksmanage['std_unable_creating_new_link']); + header("Location: linksmanage.php"); + die; +} +stdhead($lang_linksmanage['std_links_manage']); + +?> +

    +
    "> + + + + + +
    +
    +'.$lang_linksmanage['text_manage_links'].''; +echo ''; +echo ""; +$result = sql_query ("SELECT * FROM links ORDER BY id ASC"); +if ($row = mysql_fetch_array($result)) { +do { +echo ""; +} while($row = mysql_fetch_array($result)); +} else {print "";} +echo "
    ".$lang_linksmanage['text_site_name']."".$lang_linksmanage['text_url']."".$lang_linksmanage['text_title']."".$lang_linksmanage['text_modify']."
    ".$row["name"]."".$row["url"]."".$row["title"]. "".$lang_linksmanage['text_edit']." | ".$lang_linksmanage['text_delete']."
    ".$lang_linksmanage['text_no_links_found']."
    "; +?> + +

    +
    + + + + + +
    ">
    ">
    ">
    +
    +here to go back."); + end_frame(); + stdfoot(); + die(); +} +$delid = $_GET['delid']; +if($delid > 0) { + echo("Are you sure you would like to delete this Location?( Yes! / No )"); + end_frame(); + stdfoot(); + die(); +} + +$edited = $_GET['edited']; +if($edited == 1) { + $id = 0 + $_GET['id']; + $name = $_GET['name']; + $flagpic = $_GET['flagpic']; + $location_main = $_GET['location_main']; + $location_sub = $_GET['location_sub']; + $start_ip = $_GET['start_ip']; + $end_ip = $_GET['end_ip']; + $theory_upspeed = $_GET['theory_upspeed']; + $practical_upspeed = $_GET['practical_upspeed']; + $theory_downspeed = $_GET['theory_downspeed']; + $practical_downspeed = $_GET['practical_downspeed']; + + if(validip_format($start_ip) && validip_format($end_ip)) + { + if(ip2long($end_ip) > ip2long($start_ip)) + { + $query = "UPDATE locations SET name = " . sqlesc($name) .",flagpic = " . sqlesc($flagpic) . ",location_main = " . sqlesc($location_main). ",location_sub= " . sqlesc($location_sub) . ",start_ip = " . sqlesc($start_ip) . ",end_ip = " . sqlesc($end_ip) . ",theory_upspeed = " . sqlesc($theory_upspeed) . ",practical_upspeed = " . sqlesc($practical_upspeed) . ",theory_downspeed = " . sqlesc($theory_downspeed) . ",practical_downspeed = " . sqlesc($practical_downspeed). " WHERE id=".sqlesc($id); + $sql = sql_query($query) or sqlerr(__FILE__, __LINE__); + if($sql) + { + stdmsg("Success!","Location has been edited, click here to go back"); + stdfoot(); + die(); + } + } + else + echo("

    The end IP address should be larger than the start one, or equal for single IP check!

    "); + } + else + echo("

    Invalid IP Address Format !!!

    "); + +} + +$editid = 0 + $_GET['editid']; +if($editid > 0) { + + $query = "SELECT * FROM locations WHERE id=" . sqlesc($editid); + $sql = sql_query($query); + $row = mysql_fetch_array($sql); + + $name = $row['name']; + $flagpic = $row['flagpic']; + $location_main = $row['location_main']; + $location_sub = $row['location_sub']; + $start_ip = $row['start_ip']; + $end_ip = $row['end_ip']; + $theory_upspeed = $row['theory_upspeed']; + $practical_upspeed = $row['practical_upspeed']; + $theory_downspeed = $row['theory_downspeed']; + $practical_downspeed = $row['practical_downspeed']; + + echo("
    "); + echo(""); + echo(""); + echo(""); + echo(""); + echo(""); + echo(""); + echo(""); + echo(""); + echo(""); + echo(""); + echo(""); + echo(""); + echo(""); + echo("
    Editing Locations
    Name:
    Main Location:
    Sub Location:
    Start IP:
    End IP:
    Theory Up:
    Theory Down:
    Practical Up:
    Practical Down:
    Picture:
    "); + end_frame(); + stdfoot(); + die(); +} + +$add = $_GET['add']; +$success = false; +if($add == 'true') { + $name = $_GET['name']; + $flagpic = $_GET['flagpic']; + $location_main = $_GET['location_main']; + $location_sub = $_GET['location_sub']; + $start_ip = $_GET['start_ip']; + $end_ip = $_GET['end_ip']; + $theory_upspeed = $_GET['theory_upspeed']; + $practical_upspeed = $_GET['practical_upspeed']; + $theory_downspeed = $_GET['theory_downspeed']; + $practical_downspeed = $_GET['practical_downspeed']; + + if(validip_format($start_ip) && validip_format($end_ip)) + { + if(ip2long($end_ip) > ip2long($start_ip)) + { + $query = "INSERT INTO locations (name, flagpic, location_main, location_sub, start_ip, end_ip, theory_upspeed, practical_upspeed, theory_downspeed, practical_downspeed) VALUES (" . sqlesc($name) ."," . sqlesc($flagpic) . "," . sqlesc($location_main). "," . sqlesc($location_sub) . "," . sqlesc($start_ip) . "," . sqlesc($end_ip) . "," . sqlesc($theory_upspeed) . "," . sqlesc($practical_upspeed) . "," . sqlesc($theory_downspeed) . "," . sqlesc($practical_downspeed) . ")"; + $sql = sql_query($query) or sqlerr(__FILE__, __LINE__); + if($sql) { + $success = true; + } else { + $success = false; + } + } + else + echo("

    The end IP address should be larger than the start one, or equal for single IP check!

    "); + } + else + echo("

    Invalid IP Address Format !!!

    "); + +} + +echo("
    "); +echo(""); +echo(""); +echo(""); +echo(""); +echo(""); +echo(""); +echo(""); +echo(""); +echo(""); +echo(""); +echo(""); +echo(""); +echo(""); +echo("
    Add New Locations
    Name:
    Main Location:
    Sub Location:
    Start IP:
    End IP:
    Theory Up:
    Theory Down:
    Practical Up:
    Practical Down:
    Picture:
    "); +echo("
    "); + +$range_start_ip = $_GET['range_start_ip']; +$range_end_ip = $_GET['range_end_ip']; + +echo("
    "); +echo(""); +echo(""); +echo(""); +echo(""); +echo(""); +echo("
    Check IP Range
    Start IP:
    End IP:
    "); +echo("
    "); +///////////////////// E X I S T I N G C A T E G O R I E S \\\\\\\\\\\\\\\\\\\\\\\\\\\\ + +print("





























    "); + + +unset($wherea); + +$check_range = $_GET['check_range']; +if($check_range == 'true') { + + //stderr("",$range_start_ip . $range_end_ip . validip_format($range_start_ip) . validip_format($range_end_ip)); + if(validip_format($range_start_ip) && validip_format($range_end_ip)) + { + if(ip2long($range_end_ip) > ip2long($range_start_ip)) + { + $wherea = "WHERE INET_ATON(start_ip) <=" . ip2long($range_start_ip) . " AND INET_ATON(end_ip) >=" . ip2long($range_end_ip); + echo("

    Conforming Locations:

    "); + } + else + echo("

    The end IP address should be larger than the start one, or equal for single IP check!

    "); + } + else + echo("

    Invalid IP Address Format !!!

    "); +} +else +{ + echo("

    " . ($success == true ? "(Updated!)" : "") . "Existing Locations:

    "); +} +echo(""); +echo(""); + +$res = sql_query("SELECT COUNT(*) FROM locations ".$wherea); +$row = mysql_fetch_array($res); +$count = $row[0]; +$perpage = 50; +list($pagertop, $pagerbottom, $limit) = pager($perpage, $count, "location.php?"); + +$query = "SELECT * FROM locations " . $wherea ." ORDER BY name ASC, start_ip ASC ".$limit; +$sql = sql_query($query); +$maxlen_sub_location = 40; +while ($row = mysql_fetch_array($sql)) { + $id = $row['id']; + $name = $row['name']; + $flagpic = $row['flagpic']; + $location_main = $row['location_main']; + $location_sub = $row['location_sub']; + $start_ip = $row['start_ip']; + $end_ip = $row['end_ip']; + $theory_upspeed = $row['theory_upspeed']; + $practical_upspeed = $row['practical_upspeed']; + $theory_downspeed = $row['theory_downspeed']; + $practical_downspeed = $row['practical_downspeed']; + + $count_location_sub=strlen($location_sub); + if($count_location_sub > $maxlen_sub_location) + $location_sub=substr($location_sub, 0, $maxlen_sub_location) . ".."; + + echo("" . + "" . + "" . + "" . + "" . + "" . + "" . + "" . + "" . + "" . + "" . + "". + "" . + ""); +} +print("
    ID Name Pic Main Location Sub Location Start IP End IP T.U P.U T.D P.D EditDelete
    $id$name" . ($flagpic != "" ? "" : "-") . "$location_main$location_sub" . $start_ip . "" . $end_ip . "$theory_upspeed$practical_upspeed$theory_downspeed$practical_downspeedEditRemove
    "); +echo $pagerbottom; + +end_frame(); +end_frame(); +stdfoot(); + +?> diff --git a/log.php b/log.php new file mode 100644 index 00000000..ab12964b --- /dev/null +++ b/log.php @@ -0,0 +1,427 @@ +"); + end_main_frame(); +} + +function searchtable($title, $action, $opts = array()){ + global $lang_log; + print("\n"); + print("\n"); + print("
    ".$title."
    \n"); + print("\n"); + if ($opts) { + print($lang_log['text_in'].""); + } + print("  "); + print("
    \n"); + print("

    \n"); +} + +function additem($title, $action){ + global $lang_log; + print("\n"); + print("\n"); + print("
    ".$title."
    \n"); + print("\n"); + print(""); + print(""); + print("
    \n"); + print("

    \n"); +} + +function edititem($title, $action, $id){ + global $lang_log; + $result = sql_query ("SELECT * FROM ".$action." where id = ".sqlesc($id)) or sqlerr(__FILE__, __LINE__); + if ($row = mysql_fetch_array($result)) { + print("\n"); + print("\n"); + print("
    ".$title."
    \n"); + print("\n"); + print(""); + print(""); + print(""); + print("
    \n"); + print("

    \n"); + } +} + +$action = isset($_POST['action']) ? htmlspecialchars($_POST['action']) : (isset($_GET['action']) ? htmlspecialchars($_GET['action']) : ''); +$allowed_actions = array("dailylog","chronicle","funbox","news","poll"); +if (!$action) + $action='dailylog'; +if (!in_array($action, $allowed_actions)) +stderr($lang_log['std_error'], $lang_log['std_invalid_action']); +else { + switch ($action){ + case "dailylog": + stdhead($lang_log['head_site_log']); + + $query = mysql_real_escape_string(trim($_GET["query"])); + $search = $_GET["search"]; + + $addparam = ""; + $wherea = ""; + if (get_user_class() >= $confilog_class){ + switch ($search) + { + case "mod": $wherea=" WHERE security_level = 'mod'"; break; + case "normal": $wherea=" WHERE security_level = 'normal'"; break; + case "all": break; + } + $addparam = ($wherea ? "search=".rawurlencode($search)."&" : ""); + } + else{ + $wherea=" WHERE security_level = 'normal'"; + } + + if($query){ + $wherea .= ($wherea ? " AND " : " WHERE ")." txt LIKE '%$query%' "; + $addparam .= "query=".rawurlencode($query)."&"; + } + + logmenu('dailylog'); + $opt = array (all => $lang_log['text_all'], normal => $lang_log['text_normal'], mod => $lang_log['text_mod']); + searchtable($lang_log['text_search_log'], 'dailylog',$opt); + + $res = sql_query("SELECT COUNT(*) FROM sitelog".$wherea); + $row = mysql_fetch_array($res); + $count = $row[0]; + + $perpage = 50; + + list($pagertop, $pagerbottom, $limit) = pager($perpage, $count, "log.php?action=dailylog&".$addparam); + + $res = sql_query("SELECT added, txt FROM sitelog $wherea ORDER BY added DESC $limit") or sqlerr(__FILE__, __LINE__); + if (mysql_num_rows($res) == 0) + print($lang_log['text_log_empty']); + else + { + + //echo $pagertop; + + print("\n"); + print("\n"); + while ($arr = mysql_fetch_assoc($res)) + { + $color = ""; + if (strpos($arr['txt'],'was uploaded by')) $color = "green"; + if (strpos($arr['txt'],'was deleted by')) $color = "red"; + if (strpos($arr['txt'],'was added to the Request section')) $color = "purple"; + if (strpos($arr['txt'],'was edited by')) $color = "blue"; + if (strpos($arr['txt'],'settings updated by')) $color = "darkred"; + print("\n"); + } + print("
    \"time\"".$lang_log['col_event']."
    ".gettime($arr['added'],true,false)."".htmlspecialchars($arr['txt'])."
    "); + + echo $pagerbottom; + } + + print($lang_log['time_zone_note']); + + stdfoot(); + die; + break; + case "chronicle": + stdhead($lang_log['head_chronicle']); + $query = mysql_real_escape_string(trim($_GET["query"])); + if($query){ + $wherea=" WHERE txt LIKE '%$query%' "; + $addparam = "query=".rawurlencode($query)."&"; + } + else{ + $wherea=""; + $addparam = ""; + } + logmenu("chronicle"); + searchtable($lang_log['text_search_chronicle'], 'chronicle'); + if (get_user_class() >= $chrmanage_class) + additem($lang_log['text_add_chronicle'], 'chronicle'); + if ($_GET['do'] == "del" || $_GET['do'] == 'edit' || $_POST['do'] == "add" || $_POST['do'] == "update") { + $txt = $_POST['txt']; + if (get_user_class() < $chrmanage_class) + permissiondeny(); + elseif ($_POST['do'] == "add") + sql_query ("INSERT INTO chronicle (userid,added, txt) VALUES ('".$CURUSER["id"]."', now(), ".sqlesc($txt).")") or sqlerr(__FILE__, __LINE__); + elseif ($_POST['do'] == "update"){ + $id = 0 + $_POST['id']; + if (!$id) { header("Location: log.php?action=chronicle"); die();} + else sql_query ("UPDATE chronicle SET txt=".sqlesc($txt)." WHERE id=".$id) or sqlerr(__FILE__, __LINE__);} + else {$id = 0 + $_GET['id']; + if (!$id) { header("Location: log.php?action=chronicle"); die();} + elseif ($_GET['do'] == "del") + sql_query ("DELETE FROM chronicle where id = '".$id."'") or sqlerr(__FILE__, __LINE__); + elseif ($_GET['do'] == "edit") + edititem($lang_log['text_edit_chronicle'],'chronicle', $id); + } + } + + $res = sql_query("SELECT COUNT(*) FROM chronicle".$wherea); + $row = mysql_fetch_array($res); + $count = $row[0]; + + $perpage = 50; + + list($pagertop, $pagerbottom, $limit) = pager($perpage, $count, "log.php?action=chronicle&".$addparam); + $res = sql_query("SELECT id, added, txt FROM chronicle $wherea ORDER BY added DESC $limit") or sqlerr(__FILE__, __LINE__); + if (mysql_num_rows($res) == 0) + print($lang_log['text_chronicle_empty']); + else + { + + //echo $pagertop; + + print("\n"); + print("".(get_user_class() >= $chrmanage_class ? "" : "")."\n"); + while ($arr = mysql_fetch_assoc($res)) + { + $date = gettime($arr['added'],true,false); + print("".(get_user_class() >= $chrmanage_class ? "" : "")."\n"); + } + print("
    ".$lang_log['col_date']."".$lang_log['col_event']."".$lang_log['col_modify']."
    $date".format_comment($arr["txt"],true,false,true)."".$lang_log['text_edit']." | ".$lang_log['text_delete']."
    "); + echo $pagerbottom; + } + + print($lang_log['time_zone_note']); + + stdfoot(); + die; + break; + case "funbox": + stdhead($lang_log['head_funbox']); + $query = mysql_real_escape_string(trim($_GET["query"])); + $search = $_GET["search"]; + if($query){ + switch ($search){ + case "title": $wherea=" WHERE title LIKE '%$query%' AND status != 'banned'"; break; + case "body": $wherea=" WHERE body LIKE '%$query%' AND status != 'banned'"; break; + case "both": $wherea=" WHERE (body LIKE '%$query%' or title LIKE '%$query%') AND status != 'banned'" ; break; + } + $addparam = "search=".rawurlencode($search)."&query=".rawurlencode($query)."&"; + } + else{ + $wherea=" WHERE status != 'banned'"; + $addparam = ""; + } + logmenu("funbox"); + $opt = array (title => $lang_log['text_title'], body => $lang_log['text_body'], both => $lang_log['text_both']); + searchtable($lang_log['text_search_funbox'], 'funbox', $opt); + $res = sql_query("SELECT COUNT(*) FROM fun ".$wherea); + $row = mysql_fetch_array($res); + $count = $row[0]; + + $perpage = 10; + list($pagertop, $pagerbottom, $limit) = pager($perpage, $count, "log.php?action=funbox&".$addparam); + $res = sql_query("SELECT added, body, title, status FROM fun $wherea ORDER BY added DESC $limit") or sqlerr(__FILE__, __LINE__); + if (mysql_num_rows($res) == 0) + print($lang_log['text_funbox_empty']); + else + { + + //echo $pagertop; + while ($arr = mysql_fetch_assoc($res)){ + $date = gettime($arr['added'],true,false); + print("\n"); + print("\n"); + print("
    ".$lang_log['col_title']."".$arr["title"]." - ".$arr["status"]."
    ".$lang_log['col_date']."".$date."
    ".$lang_log['col_body']."".format_comment($arr["body"],false,false,true)."

    "); + } + echo $pagerbottom; + } + + print($lang_log['time_zone_note']); + stdfoot(); + die; + break; + case "news": + stdhead($lang_log['head_news']); + $query = mysql_real_escape_string(trim($_GET["query"])); + $search = $_GET["search"]; + if($query){ + switch ($search){ + case "title": $wherea=" WHERE title LIKE '%$query%' "; break; + case "body": $wherea=" WHERE body LIKE '%$query%' "; break; + case "both": $wherea=" WHERE body LIKE '%$query%' or title LIKE '%$query%'" ; break; + } + $addparam = "search=".rawurlencode($search)."&query=".rawurlencode($query)."&"; + } + else{ + $wherea= ""; + $addparam = ""; + } + logmenu("news"); + $opt = array (title => $lang_log['text_title'], body => $lang_log['text_body'], both => $lang_log['text_both']); + searchtable($lang_log['text_search_news'], 'news', $opt); + + $res = sql_query("SELECT COUNT(*) FROM news".$wherea); + $row = mysql_fetch_array($res); + $count = $row[0]; + + $perpage = 20; + + list($pagertop, $pagerbottom, $limit) = pager($perpage, $count, "log.php?action=news&".$addparam); + $res = sql_query("SELECT id, added, body, title FROM news $wherea ORDER BY added DESC $limit") or sqlerr(__FILE__, __LINE__); + if (mysql_num_rows($res) == 0) + print($lang_log['text_news_empty']); + else + { + + //echo $pagertop; + while ($arr = mysql_fetch_assoc($res)){ + $date = gettime($arr['added'],true,false); + print("\n"); + print("\n"); + print("
    ".$lang_log['col_title']."".$arr["title"]."
    ".$lang_log['col_date']."".$date."
    ".$lang_log['col_body']."".format_comment($arr["body"],false,false,true)."

    "); + } + echo $pagerbottom; + } + + print($lang_log['time_zone_note']); + + stdfoot(); + die; + break; + case "poll": + $do = $_GET["do"]; + $pollid = $_GET["pollid"]; + $returnto = htmlspecialchars($_GET["returnto"]); + if ($do == "delete") + { + if (get_user_class() < $chrmanage_class) + stderr($lang_log['std_error'], $lang_log['std_permission_denied']); + + int_check($pollid,true); + + $sure = $_GET["sure"]; + if (!$sure) + stderr($lang_log['std_delete_poll'],$lang_log['std_delete_poll_confirmation'] . + "".$lang_log['std_here_if_sure'],false); + + sql_query("DELETE FROM pollanswers WHERE pollid = $pollid") or sqlerr(); + sql_query("DELETE FROM polls WHERE id = $pollid") or sqlerr(); + $Cache->delete_value('current_poll_content'); + $Cache->delete_value('current_poll_result', true); + if ($returnto == "main") + header("Location: " . get_protocol_prefix() . "$BASEURL"); + else + header("Location: " . get_protocol_prefix() . "$BASEURL/log.php?action=poll&deleted=1"); + die; + } + + $rows = sql_query("SELECT COUNT(*) FROM polls") or sqlerr(); + $row = mysql_fetch_row($rows); + $pollcount = $row[0]; + if ($pollcount == 0) + stderr($lang_log['std_sorry'], $lang_log['std_no_polls']); + $polls = sql_query("SELECT * FROM polls ORDER BY id DESC LIMIT 1," . ($pollcount - 1 )) or sqlerr(); + stdhead($lang_log['head_previous_polls']); + logmenu("poll"); + print("\n"); + //print("\n"); + + function srt($a,$b) + { + if ($a[0] > $b[0]) return -1; + if ($a[0] < $b[0]) return 1; + return 0; + } + + while ($poll = mysql_fetch_assoc($polls)) + { + $o = array($poll["option0"], $poll["option1"], $poll["option2"], $poll["option3"], $poll["option4"], + $poll["option5"], $poll["option6"], $poll["option7"], $poll["option8"], $poll["option9"], + $poll["option10"], $poll["option11"], $poll["option12"], $poll["option13"], $poll["option14"], + $poll["option15"], $poll["option16"], $poll["option17"], $poll["option18"], $poll["option19"]); + + print("\n"); +} + print("
    ".$lang_log['text_previous_polls']."
    \n"); + + print("

    "); + $added = gettime($poll['added'], true, false); + + print($added); + + if (get_user_class() >= $pollmanage_class) + { + print(" - [".$lang_log['text_edit']."]\n"); + print(" - [".$lang_log['text_delete']."]\n"); + } + + print(""); + + print("

    \n"); + + print("
    \n"); + + print("

    " . $poll["question"] . "

    "); + + $pollanswers = sql_query("SELECT selection FROM pollanswers WHERE pollid=" . $poll["id"] . " AND selection < 20") or sqlerr(); + + $tvotes = mysql_num_rows($pollanswers); + + $vs = array(); // count for each option ([0]..[19]) + $os = array(); // votes and options: array(array(123, "Option 1"), array(45, "Option 2")) + + // Count votes + while ($pollanswer = mysql_fetch_row($pollanswers)) + $vs[$pollanswer[0]] += 1; + + reset($o); + for ($i = 0; $i < count($o); ++$i) + if ($o[$i]) + $os[$i] = array($vs[$i], $o[$i]); + + print("\n"); + $i = 0; + while ($a = $os[$i]) + { + if ($tvotes > 0) + $p = round($a[0] / $tvotes * 100); + else + $p = 0; + print("\n"); + ++$i; + } + print("
    " . $a[1] . "  " . + "\"\"\"\" $p%
    \n"); + $tvotes = number_format($tvotes); + print("

    ".$lang_log['text_votes']."$tvotes

    \n"); + + print("


    \n"); + + print("

    "); + print($lang_log['time_zone_note']); + stdfoot(); + die; + break; + } +} + +?> diff --git a/login.php b/login.php new file mode 100644 index 00000000..fe950a3a --- /dev/null +++ b/login.php @@ -0,0 +1,103 @@ +\n"; + +$langs = langlist("site_lang"); + +foreach ($langs as $row) +{ + if ($row["site_lang_folder"] == get_langfolder_cookie()) $se = "selected=\"selected\""; else $se = ""; + $s .= "\n"; +} +$s .= "\n"; +?> +
    +".$lang_login['text_select_lang']. $s . ""); +?> +
    +" . $lang_login['h1_not_logged_in']. "\n"); + print("

    " . $lang_login['p_error']. " " . $lang_login['p_after_logged_in']. "

    \n"); + } +} +?> +
    +


    []

    +

    + + + + + + + + + +
    />
    />
    +\n"); + +?> +
    +

    + +

    +

    + +
    +

    -

    +
    \n"); +print("

    \n"); +print("
    \n"); +print($lang_login['text_message']." \n"); +print("
    ".$lang_login['sumbit_shout']."
    "); +print(smile_row("shbox","shbox_text")); +print("
    "); +} +stdfoot(); diff --git a/logout.php b/logout.php new file mode 100644 index 00000000..7c4da4a2 --- /dev/null +++ b/logout.php @@ -0,0 +1,8 @@ + \ No newline at end of file diff --git a/mailtest.php b/mailtest.php new file mode 100644 index 00000000..2f7c4779 --- /dev/null +++ b/mailtest.php @@ -0,0 +1,38 @@ +".$lang_mailtest['text_mail_test'].""); + print("\n"); + print(""); + print(""); + tr($lang_mailtest['row_enter_email'], "
    ".$lang_mailtest['text_enter_email_note'], 1); + print(""); + print("
    "); + stdfoot(); +} +?> diff --git a/makepoll.php b/makepoll.php new file mode 100644 index 00000000..6a5a3389 --- /dev/null +++ b/makepoll.php @@ -0,0 +1,177 @@ +delete_value('current_poll_content'); + $Cache->delete_value('current_poll_result', true); + if ($returnto == "main") + header("Location: " . get_protocol_prefix() . "$BASEURL"); + elseif ($pollid) + header("Location: " . get_protocol_prefix() . "$BASEURL/log.php?action=poll#$pollid"); + else + header("Location: " . get_protocol_prefix() . "$BASEURL"); + die; +} + +if ($pollid){ + stdhead($lang_makepoll['head_edit_poll']); + print("

    ".$lang_makepoll['text_edit_poll']."

    "); +} +else +{ + stdhead($lang_makepoll['head_new_poll']); + // Warn if current poll is less than 3 days old + $res = sql_query("SELECT question, added FROM polls ORDER BY added DESC LIMIT 1") or sqlerr(); + $arr = mysql_fetch_assoc($res); + if ($arr) + { + $hours = floor((strtotime(date("Y-m-d H:i:s")) - strtotime($arr["added"])) / 3600); + $days = floor($hours / 24); + if ($days < 3) + { + if ($days >= 1) + $t = $days.$lang_makepoll['text_day'] . add_s($days); + else + $t = $hours.$lang_makepoll['text_hour'] . add_s($hours); + print("

    ".$lang_makepoll['text_current_poll']."(" . $arr["question"] . ")".$lang_makepoll['text_is_only'].$t.$lang_makepoll['text_old']."

    "); + } + } + print("

    ".$lang_makepoll['text_make_poll']."

    "); +} +?> + + + + + + + + + + + + + + + + + + + + + + + + + + +
    *
    1 *
    2 *
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    +

    *

    +"); +?> +"> + + + diff --git a/massmail.php b/massmail.php new file mode 100644 index 00000000..d495b5bb --- /dev/null +++ b/massmail.php @@ -0,0 +1,77 @@ + + +

    + +
    Send mass e-mail to all members

    + + + + UC_POWER_USER) +printf("\n"); +} +?> + + + + + + +
    Classe
    Subject
    Body
    + + +
    +
    + +

    Search IP

    +
    +Failed Login Attempts"); +print("\n"); +if ($update) + $msg = "\n"; +$res = sql_query("SELECT * FROM loginattempts ORDER BY $orderby DESC $limit") or sqlerr(__FILE__,__LINE__); +if (mysql_num_rows($res) == 0) + print("\n"); +else +{ + print("". + "\n"); + + while ($arr = mysql_fetch_assoc($res)) + { + $r2 = sql_query("SELECT id,username FROM users WHERE ip=".sqlesc($arr[ip])) or sqlerr(__FILE__,__LINE__); + $a2 = mysql_fetch_assoc($r2); + print("\n"); + } + +} +print($msg); +print("
    ".htmlspecialchars($update)." Successful!
    Nothing found
    IDIp AddressAction TimeAttemptsAttempt TypeStatus
    $arr[id]$arr[ip] " . ($a2[id] ? get_username($a2['id']) : "" ) . "$arr[added]$arr[attempts]".($arr[type] == "recover" ? "Recover Password Attempt!" : "Login Attempt!")."".($arr[banned] == "yes" ? "banned [unban]" : "not banned [ban]")." [delete] [edit]
    \n"); +if ($countrows > $perpage) + echo ''.$pagerbottom.''; +searchform(); +stdfoot(); +}elseif ($action == 'ban') { + check($id); + stdhead ("Max. Login Attemps - BAN"); + safe_query("UPDATE loginattempts SET banned = 'yes'",$id,"Ban"); + header("Location: maxlogin.php?update=Ban"); +}elseif ($action == 'unban') { + check($id); + stdhead ("Max. Login Attemps - UNBAN"); + safe_query("UPDATE loginattempts SET banned = 'no'",$id,"Unban"); + +}elseif ($action == 'delete') { + check($id); + stdhead ("Max. Login Attemps - DELETE"); + safe_query("DELETE FROM loginattempts",$id,"Delete"); +}elseif ($action == 'edit') { + check($id); + stdhead ("Max. Login Attemps - EDIT (".htmlspecialchars($id).")"); + $query = sprintf("SELECT * FROM loginattempts WHERE id ='%s'", + mysql_real_escape_string($id)); + $result = sql_query($query) or sqlerr(__FILE__,__LINE__); + $a = mysql_fetch_array($result); + print("\n"); + print(""); + print(""); + print(""); + print(""); + print(""); + if ($_GET['return'] == 'yes') + print(""); + print(""); + print(""); + print(""); + print("

    IP Address: ".htmlspecialchars($a[ip])."

    "); + print("

    Action Time: ".htmlspecialchars($a[added])."

    Attempts "); + print("
    Attempt Type
    Current Status
    "); + stdfoot(); + +}elseif ($action == 'save') { + $id = sqlesc(0+$_POST['id']); + $ip = sqlesc($_POST['ip']); + $attempts = sqlesc($_POST['attempts']); + $type = sqlesc($_POST['type']); + $banned = sqlesc($_POST['banned']); + check($id); + check($attempts); + sql_query("UPDATE loginattempts SET attempts = $attempts, type = $type, banned = $banned WHERE id = $id LIMIT 1") or sqlerr(__FILE__,__LINE__); + if ($_POST['returnto']){ + $returnto = $_POST['returnto']; + header("Location: $returnto"); + } + else + header("Location: maxlogin.php?update=Edit"); +}elseif ($action == 'searchip') { + $ip = mysql_real_escape_string($_POST['ip']); + $search = sql_query("SELECT * FROM loginattempts WHERE ip LIKE '%$ip%'") or sqlerr(__FILE__,__LINE__); + stdhead ("Max. Login Attemps - Search"); + print("

    Failed Login Attempts

    "); + print("\n"); + if (mysql_num_rows($search) == 0) + print("\n"); + else + { + print("". + "\n"); + + while ($arr = mysql_fetch_assoc($search)) + { + $r2 = sql_query("SELECT id,username FROM users WHERE ip=".sqlesc($arr[ip])) or sqlerr(__FILE__,__LINE__); + $a2 = mysql_fetch_assoc($r2); + print("\n"); + } + } + print("
    Sorry, nothing found!
    IDIp AddressAction TimeAttemptsAttempt TypeStatus
    $arr[id]$arr[ip] " . ($a2[id] ? get_username($a2[id]) : "" ) . "$arr[added]$arr[attempts]".($arr[type] == "recover" ? "Recover Password Attempt!" : "Login Attempt!")."".($arr[banned] == "yes" ? "banned [unban]" : "not banned [ban]")." [delete] [edit]
    \n"); + searchform(); + stdfoot(); +} +else + stderr("Error","Invalid Action"); +?> diff --git a/messages.php b/messages.php new file mode 100644 index 00000000..6f6f74c0 --- /dev/null +++ b/messages.php @@ -0,0 +1,722 @@ + + + + + +
    + +".$lang_messages['text_no_messages']."

    \n"); +} +else +{ +echo $pagertop; +?> + + + + + + +$sender_receiver"); +?> + + + +\n\n"); +} +else +{ +echo("\n\n"); +} +echo("\n"); +echo("\n"); +echo("\n"); +echo("\n\n"); +} +?> + + + + +
    time
    \"Unread\"
    \"Read\"" . +$subject . "$username" . gettime($row['added'],true,false) . "
    +") ?> +> +

    "); +print(""); + */ ?> + +
    +
    Unread +Read        +
    +".$lang_messages['text_reply']."
    ]"; +} +} +$body = format_comment($message['msg']); +$added = $message['added']; +if ($message['sender'] == $CURUSER['id']) +{ +$unread = ($message['unread'] == 'yes' ? "".$lang_messages['text_new']."" : ""); +} +else +{ +$unread = ""; +} +$subject = htmlspecialchars($message['subject']); +if (strlen($subject) <= 0) +{ +$subject = $lang_messages['text_no_subject']; +} + +// Mark message unread +sql_query("UPDATE messages SET unread='no' WHERE id=" . sqlesc($pm_id) . " AND receiver=" . sqlesc($CURUSER['id']) . " LIMIT 1"); +$Cache->delete_value('user_'.$CURUSER['id'].'_unread_message_count'); +// Display message +stdhead("PM ($subject)"); ?> +

    + + + + + + + + + + + + + + + + +
      
    + +"); +} +?> +[ ] [ ]
    +delete_value('user_'.$CURUSER['id'].'_unread_message_count'); +// Check if messages were moved + if (@mysql_affected_rows() == 0) + { + stderr($lang_messages['std_error'],$lang_messages['std_cannot_mark_messages']); + } + + header("Location: messages.php?action=viewmailbox&box=" . $pm_box); + exit(); +} +elseif ($_POST['move']) +{ +if ($pm_id) +{ +// Move a single message +@sql_query("UPDATE messages SET location=" . sqlesc($pm_box) . " WHERE id=" . sqlesc($pm_id) . " AND receiver=" . $CURUSER['id'] . " LIMIT 1"); + +} +else +{ +// Move multiple messages +@sql_query("UPDATE messages SET location=" . sqlesc($pm_box) . " WHERE id IN (" . implode(", ", array_map("sqlesc",$pm_messages)) . ') AND receiver=' .$CURUSER['id']); +} +// Check if messages were moved +if (@mysql_affected_rows() == 0) +{ +stderr($lang_messages['std_error'],$lang_messages['std_cannot_move_messages']); +} + $Cache->delete_value('user_'.$CURUSER['id'].'_unread_message_count'); + $Cache->delete_value('user_'.$CURUSER['id'].'_inbox_count'); + $Cache->delete_value('user_'.$CURUSER["id"].'_outbox_count'); +header("Location: messages.php?action=viewmailbox&box=" . $pm_box); +exit(); +} +elseif ($_POST['delete']) +{ +if ($pm_id) +{ +// Delete a single message +$res = sql_query("SELECT * FROM messages WHERE id=" . sqlesc($pm_id)) or sqlerr(__FILE__,__LINE__); +$message = mysql_fetch_assoc($res); +if ($message['receiver'] == $CURUSER['id'] && $message['saved'] == 'no') +{ + sql_query("DELETE FROM messages WHERE id=" . sqlesc($pm_id)) or sqlerr(__FILE__,__LINE__); + $Cache->delete_value('user_'.$CURUSER['id'].'_unread_message_count'); + $Cache->delete_value('user_'.$CURUSER['id'].'_inbox_count'); +} +elseif ($message['sender'] == $CURUSER['id'] && $message['location'] == PM_DELETED) +{ + sql_query("DELETE FROM messages WHERE id=" . sqlesc($pm_id)) or sqlerr(__FILE__,__LINE__); + $Cache->delete_value('user_'.$CURUSER["id"].'_outbox_count'); +} +elseif ($message['receiver'] == $CURUSER['id'] && $message['saved'] == 'yes') +{ + sql_query("UPDATE messages SET location=0, unread = 'no' WHERE id=" . sqlesc($pm_id)) or sqlerr(__FILE__,__LINE__); + $Cache->delete_value('user_'.$CURUSER['id'].'_unread_message_count'); + $Cache->delete_value('user_'.$CURUSER['id'].'_inbox_count'); +} +elseif ($message['sender'] == $CURUSER['id'] && $message['location'] != PM_DELETED) +{ + sql_query("UPDATE messages SET saved='no' WHERE id=" . sqlesc($pm_id)) or sqlerr(__FILE__,__LINE__); + $Cache->delete_value('user_'.$CURUSER["id"].'_outbox_count'); +} +} +else +{ +if (!$pm_messages) +stderr($lang_messages['std_error'], $lang_messages['std_no_message_selected']); +// Delete multiple messages +foreach ($pm_messages as $id) +{ +$res = sql_query("SELECT * FROM messages WHERE id=" . sqlesc((int) $id)); +$message = mysql_fetch_assoc($res); +if ($message['receiver'] == $CURUSER['id'] && $message['saved'] == 'no') +{ +sql_query("DELETE FROM messages WHERE id=" . sqlesc((int) $id)) or sqlerr(__FILE__,__LINE__); +} +elseif ($message['sender'] == $CURUSER['id'] && $message['location'] == PM_DELETED) +{ +sql_query("DELETE FROM messages WHERE id=" . sqlesc((int) $id)) or sqlerr(__FILE__,__LINE__); +} +elseif ($message['receiver'] == $CURUSER['id'] && $message['saved'] == 'yes') +{ +sql_query("UPDATE messages SET location=0, unread = 'no' WHERE id=" . sqlesc((int) $id)) or sqlerr(__FILE__,__LINE__); +} +elseif ($message['sender'] == $CURUSER['id'] && $message['location'] != PM_DELETED) +{ +sql_query("UPDATE messages SET saved='no' WHERE id=" . sqlesc((int) $id)) or sqlerr(__FILE__,__LINE__); +} +} + $Cache->delete_value('user_'.$CURUSER['id'].'_unread_message_count'); + $Cache->delete_value('user_'.$CURUSER['id'].'_inbox_count'); + $Cache->delete_value('user_'.$CURUSER["id"].'_outbox_count'); +} +// Check if messages were moved +if (@mysql_affected_rows() == 0) +{ +stderr($lang_messages['std_error'],$lang_messages['std_cannot_delete_messages']); +} +else +{ +header("Location: messages.php?action=viewmailbox"); +exit(); +} +} +stderr($lang_messages['std_error'],$lang_messages['std_no_action']); +} + + +if ($action == "forward") +{ +// Display form +$pm_id = (int) $_GET['id']; + +// Get the message +$res = sql_query('SELECT * FROM messages WHERE id=' . sqlesc($pm_id) . ' AND (receiver=' . sqlesc($CURUSER['id']) . ' OR sender=' . sqlesc($CURUSER['id']) .') LIMIT 1') or sqlerr(__FILE__,__LINE__); +if (!$res) +{ +stderr($lang_messages['std_error'],$lang_messages['std_no_permission_forwarding']); +} +if (mysql_num_rows($res) == 0) +{ +stderr($lang_messages['std_error'],$lang_messages['std_no_permission_forwarding']); +} +$message = mysql_fetch_assoc($res); + +// Prepare variables +$subject = "Fwd: " . htmlspecialchars($message['subject']); +$from = $message['receiver']; +$orig = $message['sender']; + +$from_name = get_username($from); +if ($orig == 0) +{ +$orig_name = $orig_name2 = $lang_messages['text_system']; +} +else +{ +$orig_name = get_username($orig); +$res = sql_query("SELECT username FROM users WHERE id=" . sqlesc($orig)) or sqlerr(__FILE__,__LINE__); +$orig_nameres = mysql_fetch_array($res); +$orig_name2 = $orig_nameres['username']; +} + +$body = "-------- Original Message from " . $orig_name2 . " --------
    " . format_comment($message['msg']); + +stdhead($subject);?> +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    >  +>
    + + +

    + + + + + + + + + + + + + +

    +
    + + + +
    +
    +
    + +
    +
    + + +".$lang_messages['text_no_mailboxes_to_edit'].""); +} +if (mysql_num_rows($res) == 0) +{ +echo ("".$lang_messages['text_no_mailboxes_to_edit'].""); +} +else +{ +while ($row = mysql_fetch_assoc($res)) +{ +$id = $row['id']; +$name = htmlspecialchars($row['name']); +echo("
    \n"); +} +echo(""); +} +?>
    + 0) +{ +++$box; +sql_query("INSERT INTO pmboxes (userid, name, boxnumber) VALUES (" . sqlesc($CURUSER['id']) . ", " . sqlesc($nameone) . ", $box)") or sqlerr(__FILE__,__LINE__); +} +if (strlen($nametwo) > 0) +{ +++$box; +sql_query("INSERT INTO pmboxes (userid, name, boxnumber) VALUES (" . sqlesc($CURUSER['id']) . ", " . sqlesc($nametwo) . ", $box)") or sqlerr(__FILE__,__LINE__); +} +if (strlen($namethree) > 0) +{ +++$box; +sql_query("INSERT INTO pmboxes (userid, name, boxnumber) VALUES (" . sqlesc($CURUSER['id']) . ", " . sqlesc($namethree) . ", $box)") or sqlerr(__FILE__,__LINE__); +} +header("Location: messages.php?action=editmailboxes"); +exit(); +} +if ($action2 == "edit"); +{ +$res = sql_query("SELECT * FROM pmboxes WHERE userid=" . sqlesc($CURUSER['id'])); +if (!$res) +{ +stderr($lang_messages['std_error'],$lang_messages['text_no_mailboxes_to_edit']); +} +if (mysql_num_rows($res) == 0) +{ +stderr($lang_messages['std_error'],$lang_messages['text_no_mailboxes_to_edit']); +} +else +{ +while ($row = mysql_fetch_assoc($res)) +{ +if (isset($_GET['edit' . $row['id']])) +{ +if ($_GET['edit' . $row['id']] != $row['name']) +{ +// Do something +if (strlen($_GET['edit' . $row['id']]) > 0) +{ +// Edit name +sql_query("UPDATE pmboxes SET name=" . sqlesc($_GET['edit' . $row['id']]) . " WHERE id=" . sqlesc($row['id']) . " LIMIT 1"); +} +else +{ +// Delete +sql_query("DELETE FROM pmboxes WHERE id=" . sqlesc($row['id']) . " LIMIT 1"); +// Delete all messages from this folder (uses multiple queries because we can only perform security checks in WHERE clauses) +sql_query("UPDATE messages SET location=0 WHERE saved='yes' AND location=" . sqlesc($row['boxnumber']) . " AND receiver=" . sqlesc($CURUSER['id'])); +sql_query("UPDATE messages SET saved='no' WHERE saved='yes' AND sender=" . sqlesc($CURUSER['id'])); +sql_query("DELETE FROM messages WHERE saved='no' AND location=" . sqlesc($row['boxnumber']) . " AND receiver=" . sqlesc($CURUSER['id'])); +sql_query("DELETE FROM messages WHERE location=0 AND saved='yes' AND sender=" . sqlesc($CURUSER['id'])); +} +} +} +} +header("Location: messages.php?action=editmailboxes"); +exit(); +} +} +} +if ($action == "deletemessage") +{ +$pm_id = (int) $_GET['id']; + +// Delete message +$res = sql_query("SELECT * FROM messages WHERE id=" . sqlesc($pm_id)) or sqlerr(__FILE__,__LINE__); +if (!$res) +{ +stderr($lang_messages['std_error'],$lang_messages['std_no_message_id']); +} +if (mysql_num_rows($res) == 0) +{ +stderr($lang_messages['std_error'],$lang_messages['std_no_message_id']); +} +$message = mysql_fetch_assoc($res); +if ($message['receiver'] == $CURUSER['id'] && $message['saved'] == 'no') +{ +$res2 = sql_query("DELETE FROM messages WHERE id=" . sqlesc($pm_id)) or sqlerr(__FILE__,__LINE__); +} +elseif ($message['sender'] == $CURUSER['id'] && $message['location'] == PM_DELETED) +{ +$res2 = sql_query("DELETE FROM messages WHERE id=" . sqlesc($pm_id)) or sqlerr(__FILE__,__LINE__); +} +elseif ($message['receiver'] == $CURUSER['id'] && $message['saved'] == 'yes') +{ +$res2 = sql_query("UPDATE messages SET location=0 WHERE id=" . sqlesc($pm_id)) or sqlerr(__FILE__,__LINE__); +} +elseif ($message['sender'] == $CURUSER['id'] && $message['location'] != PM_DELETED) +{ +$res2 = sql_query("UPDATE messages SET saved='no' WHERE id=" . sqlesc($pm_id)) or sqlerr(__FILE__,__LINE__); +} +if (!$res2) +{ +stderr($lang_messages['std_error'],$lang_messages['std_could_not_delete_message']); +} +if (mysql_affected_rows() == 0) +{ +stderr($lang_messages['std_error'],$lang_messages['std_could_not_delete_message']); +} +else +{ +header("Location: messages.php?action=viewmailbox&id=" . $message['location']); +exit(); +} +} + +//----- FUNCTIONS ------ +function insertJumpTo($selected = 0) +{ +global $lang_messages; +global $CURUSER; +$res = sql_query('SELECT * FROM pmboxes WHERE userid=' . sqlesc($CURUSER['id']) . ' ORDER BY boxnumber'); +$place = $_GET['place']; +?> +
    +   +  + >
    +"); + end_main_frame(); +} +?> diff --git a/modrules.php b/modrules.php new file mode 100644 index 00000000..f3861915 --- /dev/null +++ b/modrules.php @@ -0,0 +1,100 @@ +"); + //begin_main_frame(); + print("

    Add Rules

    "); + print("
    "); + print("\n"); + print("\n"); + print("\n"); + $s = ""; + print("\n"); + print("\n"); + print("
    Title:
    Rules:
    Language:".$s."
    "); + print(""); + stdfoot(); +} +elseif ($_GET["act"]=="addsect"){ + $title = $_POST["title"]; + $text = $_POST["text"]; + $language = $_POST["language"]; + sql_query("insert into rules (title, text, lang_id) values(".sqlesc($title).", ".sqlesc($text).", ".sqlesc($language).")") or sqlerr(__FILE__,__LINE__); + header("Refresh: 0; url=modrules.php"); +} +elseif ($_GET["act"] == "edit"){ + $id = $_GET["id"]; + $res = @mysql_fetch_array(@sql_query("select * from rules where id='$id'")); + stdhead("Edit rules"); + //print(""); + //begin_main_frame(); + print("

    Edit Rules

    "); + print("
    "); + print("\n"); + print("\n"); + print("\n"); + $s = ""; + print("\n"); + print("\n"); + print("
    Title:
    Rules:
    Language:".$s."
    "); + print(""); + stdfoot(); +} +elseif ($_GET["act"]=="edited"){ + $id = 0+$_POST["id"]; + $title = $_POST["title"]; + $text = $_POST["text"]; + $language = $_POST["language"]; + sql_query("update rules set title=".sqlesc($title).", text=".sqlesc($text).", lang_id = ".sqlesc($language)." where id=".sqlesc($id)) or sqlerr(__FILE__,__LINE__); + header("Refresh: 0; url=modrules.php"); +} +elseif ($_GET["act"]=="del"){ + $id = 0+$_GET["id"]; + $sure = 0+$_GET["sure"]; + if (!$sure) + { + stderr("Delete Rule","You are about to delete a rule. Click here if you are sure.",false); + } + sql_query("DELETE FROM rules WHERE id=".sqlesc($id)) or sqlerr(__FILE__, __LINE__); + header("Refresh: 0; url=modrules.php"); +} +else{ + $res = sql_query("select rules.*, lang_name from rules left join language on rules.lang_id = language.id order by lang_name, id"); + stdhead("Rules Manangement"); + //print(""); + print("

    Rules Manangement

    "); + print("
    "); + print("
    Add Section
    \n"); + while ($arr=mysql_fetch_assoc($res)){ + print("
    "); + print("\n"); + print(""); + print("
    $arr[title] - $arr[lang_name]
    " . format_comment($arr["text"])."
    Edit  Delete
    "); + //end_main_frame(); + } + //print(""); + print(""); + stdfoot(); +} diff --git a/modtask.php b/modtask.php new file mode 100644 index 00000000..23e8ba42 --- /dev/null +++ b/modtask.php @@ -0,0 +1,342 @@ += $cruprfmanage_class) + { + $email = $_POST["email"]; + $username = $_POST["username"]; + $modcomment = $_POST["modcomment"]; + $downloaded = $_POST["downloaded"]; + $ori_downloaded = $_POST["ori_downloaded"]; + $uploaded = $_POST["uploaded"]; + $ori_uploaded = $_POST["ori_uploaded"]; + $bonus = $_POST["bonus"]; + $ori_bonus = $_POST["ori_bonus"]; + $invites = $_POST["invites"]; + $added = sqlesc(date("Y-m-d H:i:s")); + if ($arr['email'] != $email){ + $updateset[] = "email = " . sqlesc($email); + $modcomment = date("Y-m-d") . " - Email changed from $arr[email] to $email by $CURUSER[username].\n". $modcomment; + $subject = sqlesc($lang_modtask_target[get_user_lang($userid)]['msg_email_change']); + $msg = sqlesc($lang_modtask_target[get_user_lang($userid)]['msg_your_email_changed_from'].$arr['email'].$lang_modtask_target[get_user_lang($userid)]['msg_to_new'] . $email .$lang_modtask_target[get_user_lang($userid)]['msg_by'].$CURUSER[username]); + sql_query("INSERT INTO messages (sender, receiver, subject, msg, added) VALUES(0, $userid, $subject, $msg, $added)") or sqlerr(__FILE__, __LINE__); + } + if ($arr['username'] != $username){ + $updateset[] = "username = " . sqlesc($username); + $modcomment = date("Y-m-d") . " - Usernmae changed from $arr[username] to $username by $CURUSER[username].\n". $modcomment; + $subject = sqlesc($lang_modtask_target[get_user_lang($userid)]['msg_username_change']); + $msg = sqlesc($lang_modtask_target[get_user_lang($userid)]['msg_your_username_changed_from'].$arr['username'].$lang_modtask_target[get_user_lang($userid)]['msg_to_new'] . $username .$lang_modtask_target[get_user_lang($userid)]['msg_by'].$CURUSER[username]); + sql_query("INSERT INTO messages (sender, receiver, subject, msg, added) VALUES(0, $userid, $subject, $msg, $added)") or sqlerr(__FILE__, __LINE__); + } + if ($ori_downloaded != $downloaded){ + $updateset[] = "downloaded = " . sqlesc($downloaded); + $modcomment = date("Y-m-d") . " - Downloaded amount changed from $arr[downloaded] to $downloaded by $CURUSER[username].\n". $modcomment; + $subject = sqlesc($lang_modtask_target[get_user_lang($userid)]['msg_downloaded_change']); + $msg = sqlesc($lang_modtask_target[get_user_lang($userid)]['msg_your_downloaded_changed_from'].mksize($arr['downloaded']).$lang_modtask_target[get_user_lang($userid)]['msg_to_new'] . mksize($downloaded) .$lang_modtask_target[get_user_lang($userid)]['msg_by'].$CURUSER[username]); + sql_query("INSERT INTO messages (sender, receiver, subject, msg, added) VALUES(0, $userid, $subject, $msg, $added)") or sqlerr(__FILE__, __LINE__); + } + if ($ori_uploaded != $uploaded){ + $updateset[] = "uploaded = " . sqlesc($uploaded); + $modcomment = date("Y-m-d") . " - Uploaded amount changed from $arr[uploaded] to $uploaded by $CURUSER[username].\n". $modcomment; + $subject = sqlesc($lang_modtask_target[get_user_lang($userid)]['msg_uploaded_change']); + $msg = sqlesc($lang_modtask_target[get_user_lang($userid)]['msg_your_uploaded_changed_from'].mksize($arr['uploaded']).$lang_modtask_target[get_user_lang($userid)]['msg_to_new'] . mksize($uploaded) .$lang_modtask_target[get_user_lang($userid)]['msg_by'].$CURUSER[username]); + sql_query("INSERT INTO messages (sender, receiver, subject, msg, added) VALUES(0, $userid, $subject, $msg, $added)") or sqlerr(__FILE__, __LINE__); + } + if ($ori_bonus != $bonus){ + $updateset[] = "seedbonus = " . sqlesc($bonus); + $modcomment = date("Y-m-d") . " - Bonus amount changed from $arr[seedbonus] to $bonus by $CURUSER[username].\n". $modcomment; + $subject = sqlesc($lang_modtask_target[get_user_lang($userid)]['msg_bonus_change']); + $msg = sqlesc($lang_modtask_target[get_user_lang($userid)]['msg_your_bonus_changed_from'].$arr['seedbonus'].$lang_modtask_target[get_user_lang($userid)]['msg_to_new'] . $bonus .$lang_modtask_target[get_user_lang($userid)]['msg_by'].$CURUSER[username]); + sql_query("INSERT INTO messages (sender, receiver, subject, msg, added) VALUES(0, $userid, $subject, $msg, $added)") or sqlerr(__FILE__, __LINE__); + } + if ($arr['invites'] != $invites){ + $updateset[] = "invites = " . sqlesc($invites); + $modcomment = date("Y-m-d") . " - Invite amount changed from $arr[invites] to $invites by $CURUSER[username].\n". $modcomment; + $subject = sqlesc($lang_modtask_target[get_user_lang($userid)]['msg_invite_change']); + $msg = sqlesc($lang_modtask_target[get_user_lang($userid)]['msg_your_invite_changed_from'].$arr['invites'].$lang_modtask_target[get_user_lang($userid)]['msg_to_new'] . $invites .$lang_modtask_target[get_user_lang($userid)]['msg_by'].$CURUSER[username]); + sql_query("INSERT INTO messages (sender, receiver, subject, msg, added) VALUES(0, $userid, $subject, $msg, $added)") or sqlerr(__FILE__, __LINE__); + } + } + if(get_user_class() == UC_STAFFLEADER) + { + $donor = $_POST["donor"]; + $donated = $_POST["donated"]; + $donated_cny = $_POST["donated_cny"]; + $this_donated_usd = $donated - $arr["donated"]; + $this_donated_cny = $donated_cny - $arr["donated_cny"]; + $memo = sqlesc(htmlspecialchars($_POST["donation_memo"])); + + if ($donated != $arr[donated] || $donated_cny != $arr[donated_cny]) { + $added = sqlesc(date("Y-m-d H:i:s")); + sql_query("INSERT INTO funds (usd, cny, user, added, memo) VALUES ($this_donated_usd, $this_donated_cny, $userid, $added, $memo)") or sqlerr(__FILE__, __LINE__); + $updateset[] = "donated = " . sqlesc($donated); + $updateset[] = "donated_cny = " . sqlesc($donated_cny); + } + + $updateset[] = "donor = " . sqlesc($donor); + } + + if ($chpassword != "" AND $passagain != "") { + unset($passupdate); + $passupdate=false; + + if ($chpassword == $username OR strlen($chpassword) > 40 OR strlen($chpassword) < 6 OR $chpassword != $passagain) + $passupdate=false; + else + $passupdate=true; + } + + if ($passupdate) { + $sec = mksecret(); + $passhash = md5($sec . $chpassword . $sec); + $updateset[] = "secret = " . sqlesc($sec); + $updateset[] = "passhash = " . sqlesc($passhash); + } + + if ($curclass >= get_user_class()) + puke(); + + if ($curclass != $class) + { + $what = ($class > $curclass ? $lang_modtask_target[get_user_lang($userid)]['msg_promoted'] : $lang_modtask_target[get_user_lang($userid)]['msg_demoted']); + $subject = sqlesc($lang_modtask_target[get_user_lang($userid)]['msg_class_change']); + $msg = sqlesc($lang_modtask_target[get_user_lang($userid)]['msg_you_have_been'].$what.$lang_modtask_target[get_user_lang($userid)]['msg_to'] . get_user_class_name($class) .$lang_modtask_target[get_user_lang($userid)]['msg_by'].$CURUSER[username]); + $added = sqlesc(date("Y-m-d H:i:s")); + sql_query("INSERT INTO messages (sender, receiver, subject, msg, added) VALUES(0, $userid, $subject, $msg, $added)") or sqlerr(__FILE__, __LINE__); + $updateset[] = "class = $class"; + $what = ($class > $curclass ? "Promoted" : "Demoted"); + $modcomment = date("Y-m-d") . " - $what to '" . get_user_class_name($class) . "' by $CURUSER[username].\n". $modcomment; + } + if ($class == UC_VIP) + { + $updateset[] = "vip_added = ".sqlesc($vip_added); + if ($vip_added == 'yes') + $updateset[] = "vip_until = ".sqlesc($vip_until); + $subject = sqlesc($lang_modtask_target[get_user_lang($userid)]['msg_your_vip_status_changed']); + $msg = sqlesc($lang_modtask_target[get_user_lang($userid)]['msg_vip_status_changed_by'].$CURUSER[username]); + $added = sqlesc(date("Y-m-d H:i:s")); + sql_query("INSERT INTO messages (sender, receiver, subject, msg, added) VALUES (0, $userid, $subject, $msg, $added)") or sqlerr(__FILE__, __LINE__); + $modcomment = date("Y-m-d") . " - VIP status changed by $CURUSER[username]. VIP added: ".$vip_added.($vip_added == 'yes' ? "; VIP until: ".$vip_until : "").".\n". $modcomment; + } + + if ($warned && $curwarned != $warned) + { + $updateset[] = "warned = " . sqlesc($warned); + $updateset[] = "warneduntil = '0000-00-00 00:00:00'"; + + if ($warned == 'no') + { + $modcomment = date("Y-m-d") . " - Warning removed by $CURUSER[username].\n". $modcomment; + $subject = sqlesc($lang_modtask_target[get_user_lang($userid)]['msg_warn_removed']); + $msg = sqlesc($lang_modtask_target[get_user_lang($userid)]['msg_your_warning_removed_by'] . $CURUSER['username'] . "."); + } + + $added = sqlesc(date("Y-m-d H:i:s")); + sql_query("INSERT INTO messages (sender, receiver, subject, msg, added) VALUES (0, $userid, $subject, $msg, $added)") or sqlerr(__FILE__, __LINE__); + } + elseif ($warnlength) + { + if ($warnlength == 255) + { + $modcomment = date("Y-m-d") . " - Warned by " . $CURUSER['username'] . ".\nReason: $warnpm.\n". $modcomment; + $msg = sqlesc($lang_modtask_target[get_user_lang($userid)]['msg_you_are_warned_by'].$CURUSER[username]."." . ($warnpm ? $lang_modtask_target[get_user_lang($userid)]['msg_reason'].$warnpm : "")); + $updateset[] = "warneduntil = '0000-00-00 00:00:00'"; + }else{ + $warneduntil = date("Y-m-d H:i:s",(strtotime(date("Y-m-d H:i:s")) + $warnlength * 604800)); + $dur = $warnlength . $lang_modtask_target[get_user_lang($userid)]['msg_week'] . ($warnlength > 1 ? $lang_modtask_target[get_user_lang($userid)]['msg_s'] : ""); + $msg = sqlesc($lang_modtask_target[get_user_lang($userid)]['msg_you_are_warned_for'].$dur.$lang_modtask_target[get_user_lang($userid)]['msg_by'] . $CURUSER['username'] . "." . ($warnpm ? $lang_modtask_target[get_user_lang($userid)]['msg_reason'].$warnpm : "")); + $modcomment = date("Y-m-d") . " - Warned for $dur by " . $CURUSER['username'] . ".\nReason: $warnpm.\n". $modcomment; + $updateset[] = "warneduntil = '$warneduntil'"; + } + $subject = sqlesc($lang_modtask_target[get_user_lang($userid)]['msg_you_are_warned']); + $added = sqlesc(date("Y-m-d H:i:s")); + sql_query("INSERT INTO messages (sender, receiver, subject, msg, added) VALUES (0, $userid, $subject, $msg, $added)") or sqlerr(__FILE__, __LINE__); + $updateset[] = "warned = 'yes', timeswarned = timeswarned+1, lastwarned=$added, warnedby=$CURUSER[id]"; + } + if ($enabled != $curenabled) + { + if ($enabled == 'yes') { + $modcomment = date("Y-m-d") . " - Enabled by " . $CURUSER['username']. ".\n". $modcomment; + if (get_single_value("users","class","WHERE id = ".sqlesc($userid)) == UC_PEASANT){ + $length = 30*86400; // warn users until 30 days + $until = sqlesc(date("Y-m-d H:i:s",(strtotime(date("Y-m-d H:i:s")) + $length))); + sql_query("UPDATE users SET enabled='yes', leechwarn='yes', leechwarnuntil=$until WHERE id = ".sqlesc($userid)); + } + else{ + sql_query("UPDATE users SET enabled='yes', leechwarn='no' WHERE id = ".sqlesc($userid)) or sqlerr(__FILE__, __LINE__); + } + } else { + $modcomment = date("Y-m-d") . " - Disabled by " . $CURUSER['username']. ".\n". $modcomment; + } + } + if ($arr['noad'] != $noad){ + $updateset[]='noad = '.sqlesc($noad); + $modcomment = date("Y-m-d") . " - No Ad set to ".$noad." by ". $CURUSER['username']. ".\n". $modcomment; + } + if ($arr['noaduntil'] != $noaduntil){ + $updateset[]='noaduntil = '.sqlesc($noaduntil); + $modcomment = date("Y-m-d") . " - No Ad Until set to ".$noaduntil." by ". $CURUSER['username']. ".\n". $modcomment; + } + if ($privacy == "low" OR $privacy == "normal" OR $privacy == "strong") + $updateset[] = "privacy = " . sqlesc($privacy); + + if ($_POST["resetkey"] == "yes") + { + $newpasskey = md5($arr['username'].date("Y-m-d H:i:s").$arr['passhash']); + $updateset[] = "passkey = ".sqlesc($newpasskey); + } + if ($forumpost != $curforumpost) + { + if ($forumpost == 'yes') + { + $modcomment = date("Y-m-d") . " - Posting enabled by " . $CURUSER['username'] . ".\n" . $modcomment; + $subject = sqlesc($lang_modtask_target[get_user_lang($userid)]['msg_posting_rights_restored']); + $msg = sqlesc($lang_modtask_target[get_user_lang($userid)]['msg_your_posting_rights_restored']. $CURUSER['username'] . $lang_modtask_target[get_user_lang($userid)]['msg_you_can_post']); + $added = sqlesc(date("Y-m-d H:i:s")); + sql_query("INSERT INTO messages (sender, receiver, subject, msg, added) VALUES (0, $userid, $subject, $msg, $added)") or sqlerr(__FILE__, __LINE__); + } + else + { + $modcomment = date("Y-m-d") . " - Posting disabled by " . $CURUSER['username'] . ".\n" . $modcomment; + $subject = sqlesc($lang_modtask_target[get_user_lang($userid)]['msg_posting_rights_removed']); + $msg = sqlesc($lang_modtask_target[get_user_lang($userid)]['msg_your_posting_rights_removed'] . $CURUSER['username'] . $lang_modtask_target[get_user_lang($userid)]['msg_probable_reason']); + $added = sqlesc(date("Y-m-d H:i:s")); + sql_query("INSERT INTO messages (sender, receiver, subject, msg, added) VALUES (0, $userid, $subject, $msg, $added)") or sqlerr(__FILE__, __LINE__); + } + } + if ($uploadpos != $curuploadpos) + { + if ($uploadpos == 'yes') + { + $modcomment = date("Y-m-d") . " - Upload enabled by " . $CURUSER['username'] . ".\n" . $modcomment; + $subject = sqlesc($lang_modtask_target[get_user_lang($userid)]['msg_upload_rights_restored']); + $msg = sqlesc($lang_modtask_target[get_user_lang($userid)]['msg_your_upload_rights_restored'] . $CURUSER['username'] . $lang_modtask_target[get_user_lang($userid)]['msg_you_upload_can_upload']); + $added = sqlesc(date("Y-m-d H:i:s")); + sql_query("INSERT INTO messages (sender, receiver, subject, msg, added) VALUES (0, $userid, $subject, $msg, $added)") or sqlerr(__FILE__, __LINE__); + } + else + { + $modcomment = date("Y-m-d") . " - Upload disabled by " . $CURUSER['username'] . ".\n" . $modcomment; + $subject = sqlesc($lang_modtask_target[get_user_lang($userid)]['msg_upload_rights_removed']); + $msg = sqlesc($lang_modtask_target[get_user_lang($userid)]['msg_your_upload_rights_removed'] . $CURUSER['username'] . $lang_modtask_target[get_user_lang($userid)]['msg_probably_reason_two']); + $added = sqlesc(date("Y-m-d H:i:s")); + sql_query("INSERT INTO messages (sender, receiver, subject, msg, added) VALUES (0, $userid, $subject, $msg, $added)") or sqlerr(__FILE__, __LINE__); + } + } + if ($downloadpos != $curdownloadpos) + { + if ($downloadpos == 'yes') + { + $modcomment = date("Y-m-d") . " - Download enabled by " . $CURUSER['username'] . ".\n" . $modcomment; + $subject = sqlesc($lang_modtask_target[get_user_lang($userid)]['msg_download_rights_restored']); + $msg = sqlesc($lang_modtask_target[get_user_lang($userid)]['msg_your_download_rights_restored']. $CURUSER['username'] . $lang_modtask_target[get_user_lang($userid)]['msg_you_can_download']); + $added = sqlesc(date("Y-m-d H:i:s")); + sql_query("INSERT INTO messages (sender, receiver, subject, msg, added) VALUES (0, $userid, $subject, $msg, $added)") or sqlerr(__FILE__, __LINE__); + } + else + { + $modcomment = date("Y-m-d") . " - Download disabled by " . $CURUSER['username'] . ".\n" . $modcomment; + $subject = sqlesc($lang_modtask_target[get_user_lang($userid)]['msg_download_rights_removed']); + $msg = sqlesc($lang_modtask_target[get_user_lang($userid)]['msg_your_download_rights_removed'] . $CURUSER['username'] . $lang_modtask_target[get_user_lang($userid)]['msg_probably_reason_three']); + $added = sqlesc(date("Y-m-d H:i:s")); + sql_query("INSERT INTO messages (sender, receiver, subject, msg, added) VALUES (0, $userid, $subject, $msg, $added)") or sqlerr(__FILE__, __LINE__); + } + } + + $updateset[] = "modcomment = " . sqlesc($modcomment); + + sql_query("UPDATE users SET " . implode(", ", $updateset) . " WHERE id=$userid") or sqlerr(__FILE__, __LINE__); + + $returnto = htmlspecialchars($_POST["returnto"]); + header("Location: " . get_protocol_prefix() . "$BASEURL/$returnto"); + die; +} +puke(); +?> diff --git a/moforums.php b/moforums.php new file mode 100644 index 00000000..2b4f93cf --- /dev/null +++ b/moforums.php @@ -0,0 +1,216 @@ +delete_value('overforums_list'); +header("Location: $PHP_SELF?action=forum"); +die(); +} + +//EDIT FORUM ACTION +if ($_POST['action'] == "editforum") { +if (get_user_class() < $forummanage_class) + permissiondenied(); + +$name = $_POST['name']; +$desc = $_POST['desc']; + +if (!$name && !$desc && !$id) { header("Location: $PHP_SELF?action=forum"); die();} + +sql_query("UPDATE overforums SET sort = " . sqlesc($_POST['sort']) . ", name = " . sqlesc($_POST['name']). ", description = " . sqlesc($_POST['desc']). ", minclassview = " . sqlesc($_POST['viewclass']) . " WHERE id = ".sqlesc($_POST['id'])) or sqlerr(__FILE__, __LINE__); +$Cache->delete_value('overforums_list'); +header("Location: $PHP_SELF?action=forum"); +die(); +} + +//ADD FORUM ACTION +if ($_POST['action'] == "addforum") { +if (get_user_class() < $forummanage_class) + permissiondenied(); + +$name = trim($_POST['name']); +$desc = trim($_POST['desc']); + +if (!$name && !$desc) +{ + header("Location: $PHP_SELF?action=forum"); + die(); +} + +sql_query("INSERT INTO overforums (sort, name, description, minclassview) VALUES(" . sqlesc($_POST['sort']) . ", " . sqlesc($_POST['name']). ", " . sqlesc($_POST['desc']). ", " . sqlesc($_POST['viewclass']) . ")") or sqlerr(__FILE__, __LINE__); +$Cache->delete_value('overforums_list'); + +header("Location: $PHP_SELF?action=forum"); +die(); +} + + + +stdhead($lang_moforums['head_overforum_management']); +begin_main_frame(); + +if ($act == "forum") +{ + +// SHOW FORUMS WITH FORUM MANAGMENT TOOLS + +?> +

    -->

    +
    +'; +echo "".$lang_moforums['col_name']."".$lang_moforums['col_viewed_by']."".$lang_moforums['col_modify'].""; +$result = sql_query ("SELECT * FROM overforums ORDER BY sort ASC"); +if ($row = mysql_fetch_array($result)) { +do { + + +echo "".htmlspecialchars($row["name"])."
    ".$row["description"].""; +echo "" . get_user_class_name($row["minclassview"],false,true,true) . "".$lang_moforums['text_edit']." | ".$lang_moforums['text_delete'].""; + + +} while($row = mysql_fetch_array($result)); +} else {print "".$lang_moforums['text_no_records_found']."";} +echo ""; +?> +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    + + + + +

    -->-->


    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    --
    ">
    ">
    + +
    + + +
    + + + + +<?php echo $lang_moresmilies['head_more_smilies']?> + + + + + + +"); + + print("\n\t"); + $count++; + + if ($count % 3==0) + print("\n"); +} + +?> +
    \"\"
    +
    + +
    + + diff --git a/mybar.php b/mybar.php new file mode 100644 index 00000000..6da051c5 --- /dev/null +++ b/mybar.php @@ -0,0 +1,105 @@ +get_value('userbar_'.$_SERVER['REQUEST_URI'])){ +$res = sql_query("SELECT username, uploaded, downloaded, class, privacy FROM users WHERE id=".sqlesc($userid)." LIMIT 1"); +$row = mysql_fetch_array($res); +if (!$row) + die; +elseif($row['privacy'] == 'strong') + die; +elseif($row['class'] < $userbar_class) + die; +else{ + $username = $row['username']; + $uploaded = mksize($row['uploaded']); + $downloaded = mksize($row['downloaded']); +} +$my_img=imagecreatefrompng("pic/userbar/".$bgpic.".png"); +imagealphablending($my_img, false); + +if (!$_GET['noname']) +{ + if (isset($_GET['namered']) && $_GET['namered']>=0 && $_GET['namered']<=255) + $namered = 0 + $_GET['namered']; + else $namered=255; + if (isset($_GET['namegreen']) && $_GET['namegreen']>=0 && $_GET['namegreen']<=255) + $namegreen = 0 + $_GET['namegreen']; + else $namegreen=255; + if (isset($_GET['nameblue']) && $_GET['nameblue']>=0 && $_GET['nameblue']<=255) + $nameblue = 0 + $_GET['nameblue']; + else $nameblue=255; + if (isset($_GET['namesize']) && $_GET['namesize']>=1 && $_GET['namesize']<=5) + $namesize = 0 + $_GET['namesize']; + else $namesize=3; + if (isset($_GET['namex']) && $_GET['namex']>=0 && $_GET['namex']<=350) + $namex = 0 + $_GET['namex']; + else $namex=10; + if (isset($_GET['namey']) && $_GET['namey']>=0 && $_GET['namey']<=19) + $namey = 0 + $_GET['namey']; + else $namey=3; + $name_colour = imagecolorallocate($my_img, $namered, $namegreen, $nameblue); + imagestring($my_img, $namesize, $namex, $namey, $username, $name_colour); +} + +if (!$_GET['noup']) +{ + if (isset($_GET['upred']) && $_GET['upred']>=0 && $_GET['upred']<=255) + $upred = 0 + $_GET['upred']; + else $upred=0; + if (isset($_GET['upgreen']) && $_GET['upgreen']>=0 && $_GET['upgreen']<=255) + $upgreen = 0 + $_GET['upgreen']; + else $upgreen=255; + if (isset($_GET['upblue']) && $_GET['upblue']>=0 && $_GET['upblue']<=255) + $upblue = 0 + $_GET['upblue']; + else $upblue=0; + if (isset($_GET['upsize']) && $_GET['upsize']>=1 && $_GET['upsize']<=5) + $upsize = 0 + $_GET['upsize']; + else $upsize=3; + if (isset($_GET['upx']) && $_GET['upx']>=0 && $_GET['upx']<=350) + $upx = 0 + $_GET['upx']; + else $upx=100; + if (isset($_GET['upy']) && $_GET['upy']>=0 && $_GET['upy']<=19) + $upy = 0 + $_GET['upy']; + else $upy=3; + $up_colour = imagecolorallocate($my_img, $upred, $upgreen, $upblue); + imagestring($my_img, $upsize, $upx, $upy, $uploaded, $up_colour); +} + +if (!$_GET['nodown']) +{ + if (isset($_GET['downred']) && $_GET['downred']>=0 && $_GET['downred']<=255) + $downred = 0 + $_GET['downred']; + else $downred=255; + if (isset($_GET['downgreen']) && $_GET['downgreen']>=0 && $_GET['downgreen']<=255) + $downgreen = 0 + $_GET['downgreen']; + else $downgreen=0; + if (isset($_GET['downblue']) && $_GET['downblue']>=0 && $_GET['downblue']<=255) + $downblue = 0 + $_GET['downblue']; + else $downblue=0; + if (isset($_GET['downsize']) && $_GET['downsize']>=1 && $_GET['downsize']<=5) + $downsize = 0 + $_GET['downsize']; + else $downsize=3; + if (isset($_GET['downx']) && $_GET['downx']>=0 && $_GET['downx']<=350) + $downx = 0 + $_GET['downx']; + else $downx=180; + if (isset($_GET['downy']) && $_GET['downy']>=0 && $_GET['downy']<=19) + $downy = 0 + $_GET['downy']; + else $downy=3; + $down_colour = imagecolorallocate($my_img, $downred, $downgreen, $downblue); + imagestring($my_img, $downsize, $downx, $downy, $downloaded, $down_colour); +} +imagesavealpha($my_img, true); +$Cache->cache_value('userbar_'.$_SERVER['REQUEST_URI'], $my_img, 300); +} +header("Content-type: image/png"); +imagepng($my_img); +imagedestroy($my_img); +?> + diff --git a/mybonus.php b/mybonus.php new file mode 100644 index 00000000..5dcd58b3 --- /dev/null +++ b/mybonus.php @@ -0,0 +1,479 @@ +
    ".$lang_mybonus['text_system_charges_receiver']."".($basictax_bonus ? $basictax_bonus.$lang_mybonus['text_tax_bonus_point'].add_s($basictax_bonus).($taxpercentage_bonus ? $lang_mybonus['text_tax_plus'] : "") : "").($taxpercentage_bonus ? $taxpercentage_bonus.$lang_mybonus['text_percent_of_transfered_amount'] : "")."".$lang_mybonus['text_as_tax'].$onehundredaftertax.$lang_mybonus['text_tax_example_note']; + } + break; + } + case 8: { + $bonus['points'] = $bonusnoadpoint_advertisement; + $bonus['art'] = 'noad'; + $bonus['menge'] = $bonusnoadtime_advertisement * 86400; + $bonus['name'] = $bonusnoadtime_advertisement.$lang_mybonus['text_no_advertisements']; + $bonus['description'] = $lang_mybonus['text_no_advertisements_note']; + break; + } + case 9: { + $bonus['points'] = 1000; + $bonus['art'] = 'gift_2'; + $bonus['menge'] = 0; + $bonus['name'] = $lang_mybonus['text_charity_giving']; + $bonus['description'] = $lang_mybonus['text_charity_giving_note']; + break; + } + default: break; + } + return $bonus; +} + +if ($bonus_tweak == "disable" || $bonus_tweak == "disablesave") + stderr($lang_mybonus['std_sorry'],$lang_mybonus['std_karma_system_disabled'].($bonus_tweak == "disablesave" ? "".$lang_mybonus['std_points_active']."" : ""),false); + +$action = htmlspecialchars($_GET['action']); +$do = htmlspecialchars($_GET['do']); +unset($msg); +if (isset($do)) { + if ($do == "upload") + $msg = $lang_mybonus['text_success_upload']; + elseif ($do == "invite") + $msg = $lang_mybonus['text_success_invites']; + elseif ($do == "vip") + $msg = $lang_mybonus['text_success_vip']."".get_user_class_name(UC_VIP,false,false,true)."".$lang_mybonus['text_success_vip_two']; + elseif ($do == "vipfalse") + $msg = $lang_mybonus['text_no_permission']; + elseif ($do == "title") + $msg = $lang_mybonus['text_success_custom_title']; + elseif ($do == "transfer") + $msg = $lang_mybonus['text_success_gift']; + elseif ($do == "noad") + $msg = $lang_mybonus['text_success_no_ad']; + elseif ($do == "charity") + $msg = $lang_mybonus['text_success_charity']; + else + $msg = ''; +} + stdhead($CURUSER['username'] . $lang_mybonus['head_karma_page']); + + $bonus = number_format($CURUSER['seedbonus'], 1); +if (!$action) { + print("\n"); + print("\n"); + if ($msg) + print(""); +?> + +". +"". +"". +"". +""); +for ($i=1; $i <=9; $i++) +{ + $bonusarray = bonusarray($i); + if (($i == 7 && $bonusgift_bonus == 'no') || ($i == 8 && ($enablead_advertisement == 'no' || $bonusnoad_advertisement == 'no'))) + continue; + print(""); + print(""); + print(""); + if ($i==5){ //for Custom Title! + $otheroption_title = ""; + print(""); + } + elseif ($i==7){ //for Give A Karma Gift + $otheroption = "
    ".$SITENAME.$lang_mybonus['text_karma_system']."
    ". $msg ."
    +
    ".$lang_mybonus['col_option']."".$lang_mybonus['col_description']."".$lang_mybonus['col_points']."".$lang_mybonus['col_trade']."
    ".$i."

    ".$bonusarray['name']."

    ".$bonusarray['description']."

    ".$lang_mybonus['text_enter_titile'].$otheroption_title.$lang_mybonus['text_click_exchange']."
    ".number_format($bonusarray['points'])."
    ".$lang_mybonus['text_username']."".$lang_mybonus['text_to_be_given']."".$lang_mybonus['text_karma_points']."
    ".$lang_mybonus['text_message']."
    "; + print("

    ".$bonusarray['name']."

    ".$bonusarray['description']."

    ".$lang_mybonus['text_enter_receiver_name']."
    $otheroption".$lang_mybonus['text_min']."25
    ".$lang_mybonus['text_max']."10,000"); + } + elseif ($i==9){ //charity giving + $otheroption = "
    ".$lang_mybonus['text_ratio_below']."".$lang_mybonus['text_and_downloaded_above']." 10 GB".$lang_mybonus['text_to_be_given']."".$lang_mybonus['text_karma_points']."
    "; + print("

    ".$bonusarray['name']."

    ".$bonusarray['description']."

    ".$lang_mybonus['text_select_receiver_ratio']."
    $otheroption".$lang_mybonus['text_min']."1,000
    ".$lang_mybonus['text_max']."50,000"); + } + else{ //for VIP or Upload + print("

    ".$bonusarray['name']."

    ".$bonusarray['description']."".number_format($bonusarray['points']).""); + } + + if($CURUSER['seedbonus'] >= $bonusarray['points']) + { + if ($i==7){ + print(""); + } + elseif ($i==8){ + if ($enablenoad_advertisement == 'yes' && get_user_class() >= $noad_advertisement) + print(""); + elseif (strtotime($CURUSER['noaduntil']) >= TIMENOW) + print(""); + elseif (get_user_class() < $bonusnoad_advertisement) + print(""); + else + print(""); + } + elseif ($i==9){ + print(""); + } + elseif($i==4) + { + if(get_user_class() < $buyinvite_class) + print(""); + else + print(""); + } + elseif ($i==6) + { + if (get_user_class() >= UC_VIP) + print(""); + else + print(""); + } + elseif ($i==5) + print(""); + else + { + if ($CURUSER['downloaded'] > 0){ + if ($CURUSER['uploaded'] > $dlamountlimit_bonus * 1073741824)//Uploaded amount reach limit + $ratio = $CURUSER['uploaded']/$CURUSER['downloaded']; + else $ratio = 0; + } + else $ratio = $ratiolimit_bonus + 1; //Ratio always above limit + if ($ratiolimit_bonus > 0 && $ratio > $ratiolimit_bonus){ + print(""); + } + else print(""); + } + } + else + { + print(""); + } + print("
    "); + print(""); + +} +print("
    "); +?> + + + +
    +".$lang_mybonus['text_get_by_seeding'].""); +print("
      "); +if ($perseeding_bonus > 0) + print("
    • ".$perseeding_bonus.$lang_mybonus['text_point'].add_s($perseeding_bonus).$lang_mybonus['text_for_seeding_torrent'].$maxseeding_bonus.$lang_mybonus['text_torrent'].add_s($maxseeding_bonus).")
    • "); +print("
    • ".$lang_mybonus['text_bonus_formula_one'].$tzero_bonus.$lang_mybonus['text_bonus_formula_two'].$nzero_bonus.$lang_mybonus['text_bonus_formula_three'].$bzero_bonus.$lang_mybonus['text_bonus_formula_four'].$l_bonus.$lang_mybonus['text_bonus_formula_five']."
    • "); +if ($donortimes_bonus) + print("
    • ".$lang_mybonus['text_donors_always_get'].$donortimes_bonus.$lang_mybonus['text_times_of_bonus']."
    • "); +print("
    "); + + $sqrtof2 = sqrt(2); + $logofpointone = log(0.1); + $valueone = $logofpointone / $tzero_bonus; + $pi = 3.141592653589793; + $valuetwo = $bzero_bonus * ( 2 / $pi); + $valuethree = $logofpointone / ($nzero_bonus - 1); + $timenow = strtotime(date("Y-m-d H:i:s")); + $sectoweek = 7*24*60*60; + $A = 0; + $count = 0; + $torrentres = sql_query("select torrents.id, torrents.added, torrents.size, torrents.seeders from torrents LEFT JOIN peers ON peers.torrent = torrents.id WHERE peers.userid = $CURUSER[id] AND peers.seeder ='yes' GROUP BY torrents.id") or sqlerr(__FILE__, __LINE__); + while ($torrent = mysql_fetch_array($torrentres)) + { + $weeks_alive = ($timenow - strtotime($torrent[added])) / $sectoweek; + $gb_size = $torrent[size] / 1073741824; + $temp = (1 - exp($valueone * $weeks_alive)) * $gb_size * (1 + $sqrtof2 * exp($valuethree * ($torrent[seeders] - 1))); + $A += $temp; + $count++; + } + if ($count > $maxseeding_bonus) + $count = $maxseeding_bonus; + $all_bonus = $valuetwo * atan($A / $l_bonus) + ($perseeding_bonus * $count); + $percent = $all_bonus * 100 / ($bzero_bonus + $perseeding_bonus * $maxseeding_bonus); + print("
    ".$lang_mybonus['text_you_are_currently_getting'].round($all_bonus,3).$lang_mybonus['text_point'].add_s($all_bonus).$lang_mybonus['text_per_hour']." (A = ".round($A,1).")
    "); + + if ($percent <= 30) $loadpic = "loadbarred"; + elseif ($percent <= 60) $loadpic = "loadbaryellow"; + else $loadpic = "loadbargreen"; + $width = $percent * 4; + print("\"".$percent."%\"
    "); + +print("

    ".$lang_mybonus['text_other_things_get_bonus']."

    "); +print("
      "); +if ($uploadtorrent_bonus > 0) + print("
    • ".$lang_mybonus['text_upload_torrent'].$uploadtorrent_bonus.$lang_mybonus['text_point'].add_s($uploadtorrent_bonus)."
    • "); +if ($uploadsubtitle_bonus > 0) + print("
    • ".$lang_mybonus['text_upload_subtitle'].$uploadsubtitle_bonus.$lang_mybonus['text_point'].add_s($uploadsubtitle_bonus)."
    • "); +if ($starttopic_bonus > 0) + print("
    • ".$lang_mybonus['text_start_topic'].$starttopic_bonus.$lang_mybonus['text_point'].add_s($starttopic_bonus)."
    • "); +if ($makepost_bonus > 0) + print("
    • ".$lang_mybonus['text_make_post'].$makepost_bonus.$lang_mybonus['text_point'].add_s($makepost_bonus)."
    • "); +if ($addcomment_bonus > 0) + print("
    • ".$lang_mybonus['text_add_comment'].$addcomment_bonus.$lang_mybonus['text_point'].add_s($addcomment_bonus)."
    • "); +if ($pollvote_bonus > 0) + print("
    • ".$lang_mybonus['text_poll_vote'].$pollvote_bonus.$lang_mybonus['text_point'].add_s($pollvote_bonus)."
    • "); +if ($offervote_bonus > 0) + print("
    • ".$lang_mybonus['text_offer_vote'].$offervote_bonus.$lang_mybonus['text_point'].add_s($offervote_bonus)."
    • "); +if ($funboxvote_bonus > 0) + print("
    • ".$lang_mybonus['text_funbox_vote'].$funboxvote_bonus.$lang_mybonus['text_point'].add_s($funboxvote_bonus)."
    • "); +if ($ratetorrent_bonus > 0) + print("
    • ".$lang_mybonus['text_rate_torrent'].$ratetorrent_bonus.$lang_mybonus['text_point'].add_s($ratetorrent_bonus)."
    • "); +if ($saythanks_bonus > 0) + print("
    • ".$lang_mybonus['text_say_thanks'].$saythanks_bonus.$lang_mybonus['text_point'].add_s($saythanks_bonus)."
    • "); +if ($receivethanks_bonus > 0) + print("
    • ".$lang_mybonus['text_receive_thanks'].$receivethanks_bonus.$lang_mybonus['text_point'].add_s($receivethanks_bonus)."
    • "); +if ($adclickbonus_advertisement > 0) + print("
    • ".$lang_mybonus['text_click_on_ad'].$adclickbonus_advertisement.$lang_mybonus['text_point'].add_s($adclickbonus_advertisement)."
    • "); +if ($prolinkpoint_bonus > 0) + print("
    • ".$lang_mybonus['text_promotion_link_clicked'].$prolinkpoint_bonus.$lang_mybonus['text_point'].add_s($prolinkpoint_bonus)."
    • "); +if ($funboxreward_bonus > 0) + print("
    • ".$lang_mybonus['text_funbox_reward']."
    • "); +print($lang_mybonus['text_howto_get_karma_four']); +if ($ratiolimit_bonus > 0) + print("
    • ".$lang_mybonus['text_user_with_ratio_above'].$ratiolimit_bonus.$lang_mybonus['text_and_uploaded_amount_above'].$dlamountlimit_bonus.$lang_mybonus['text_cannot_exchange_uploading']."
    • "); +print($lang_mybonus['text_howto_get_karma_five'].$uploadtorrent_bonus.$lang_mybonus['text_point'].add_s($uploadtorrent_bonus).$lang_mybonus['text_howto_get_karma_six']); +?> +
    += $points) { + //=== trade for upload + if($art == "traffic") { + if ($CURUSER['uploaded'] > $dlamountlimit_bonus * 1073741824)//uploaded amount reach limit + $ratio = $CURUSER['uploaded']/$CURUSER['downloaded']; + else $ratio = 0; + if ($ratiolimit_bonus > 0 && $ratio > $ratiolimit_bonus) + die($lang_mybonus['text_cheat_alert']); + else { + $upload = $CURUSER['uploaded']; + $up = $upload + $bonusarray['menge']; + $bonuscomment = date("Y-m-d") . " - " .$points. " Points for upload bonus.\n " .$bonuscomment; + sql_query("UPDATE users SET uploaded = ".sqlesc($up).", seedbonus = seedbonus - $points, bonuscomment = ".sqlesc($bonuscomment)." WHERE id = ".sqlesc($userid)) or sqlerr(__FILE__, __LINE__); + redirect("" . get_protocol_prefix() . "$BASEURL/mybonus.php?do=upload"); + } + } + //=== trade for one month VIP status ***note "SET class = '10'" change "10" to whatever your VIP class number is + elseif($art == "class") { + if (get_user_class() >= UC_VIP) { + stdmsg($lang_mybonus['std_no_permission'],$lang_mybonus['std_class_above_vip'], 0); + stdfoot(); + die; + } + $vip_until = date("Y-m-d H:i:s",(strtotime(date("Y-m-d H:i:s")) + 28*86400)); + $bonuscomment = date("Y-m-d") . " - " .$points. " Points for 1 month VIP Status.\n " .htmlspecialchars($bonuscomment); + sql_query("UPDATE users SET class = '".UC_VIP."', vip_added = 'yes', vip_until = ".sqlesc($vip_until).", seedbonus = seedbonus - $points WHERE id = ".sqlesc($userid)) or sqlerr(__FILE__, __LINE__); + redirect("" . get_protocol_prefix() . "$BASEURL/mybonus.php?do=vip"); + } + //=== trade for invites + elseif($art == "invite") { + if(get_user_class() < $buyinvite_class) + die(get_user_class_name($buyinvite_class,false,false,true).$lang_mybonus['text_plus_only']); + $invites = $CURUSER['invites']; + $inv = $invites+$bonusarray['menge']; + $bonuscomment = date("Y-m-d") . " - " .$points. " Points for invites.\n " .htmlspecialchars($bonuscomment); + sql_query("UPDATE users SET invites = ".sqlesc($inv).", seedbonus = seedbonus - $points WHERE id = ".sqlesc($userid)) or sqlerr(__FILE__, __LINE__); + redirect("" . get_protocol_prefix() . "$BASEURL/mybonus.php?do=invite"); + } + //=== trade for special title + /**** the $words array are words that you DO NOT want the user to have... use to filter "bad words" & user class... + the user class is just for show, but what the hell tongue.gif Add more or edit to your liking. + *note if they try to use a restricted word, they will recieve the special title "I just wasted my karma" *****/ + elseif($art == "title") { + //===custom title + $title = $_POST["title"]; + $title = sqlesc($title); + $words = array("fuck", "shit", "pussy", "cunt", "nigger", "Staff Leader","SysOp", "Administrator","Moderator","Uploader","Retiree","VIP","Nexus Master","Ultimate User","Extreme User","Veteran User","Insane User","Crazy User","Elite User","Power User","User","Peasant","Champion"); + $title = str_replace($words, $lang_mybonus['text_wasted_karma'], $title); + $bonuscomment = date("Y-m-d") . " - " .$points. " Points for custom title. Old title is ".htmlspecialchars(trim($CURUSER["title"]))." and new title is $title\n " .htmlspecialchars($bonuscomment); + sql_query("UPDATE users SET title = $title, seedbonus = seedbonus - $points, bonuscomment = ".sqlesc($bonuscomment)." WHERE id = ".sqlesc($userid)) or sqlerr(__FILE__, __LINE__); + redirect("" . get_protocol_prefix() . "$BASEURL/mybonus.php?do=title"); + } + elseif($art == "noad" && $enablead_advertisement == 'yes' && $enablebonusnoad_advertisement == 'yes') { + if (($enablenoad_advertisement == 'yes' && get_user_class() >= $noad_advertisement) || strtotime($CURUSER['noaduntil']) >= TIMENOW || get_user_class() < $bonusnoad_advertisement) + die($lang_mybonus['text_cheat_alert']); + else{ + $noaduntil = date("Y-m-d H:i:s",(TIMENOW + $bonusarray['menge'])); + $bonuscomment = date("Y-m-d") . " - " .$points. " Points for ".$bonusnoadtime_advertisement." days without ads.\n " .htmlspecialchars($bonuscomment); + sql_query("UPDATE users SET noad='yes', noaduntil='".$noaduntil."', seedbonus = seedbonus - $points, bonuscomment = ".sqlesc($bonuscomment)." WHERE id=".sqlesc($userid)); + redirect("" . get_protocol_prefix() . "$BASEURL/mybonus.php?do=noad"); + } + } + elseif($art == 'gift_2') // charity giving + { + $points = 0+$_POST["bonuscharity"]; + if ($points < 1000 || $points > 50000){ + stdmsg($lang_mybonus['text_error'], $lang_mybonus['bonus_amount_not_allowed_two'], 0); + stdfoot(); + die(); + } + $ratiocharity = 0.0+$_POST["ratiocharity"]; + if ($ratiocharity < 0.1 || $ratiocharity > 0.8){ + stdmsg($lang_mybonus['text_error'], $lang_mybonus['bonus_ratio_not_allowed']); + stdfoot(); + die(); + } + if($CURUSER['seedbonus'] >= $points) { + $points2= number_format($points,1); + $bonuscomment = date("Y-m-d") . " - " .$points2. " Points as charity to users with ratio below ".htmlspecialchars(trim($ratiocharity)).".\n " .htmlspecialchars($bonuscomment); + $charityReceiverCount = get_row_count("users", "WHERE enabled='yes' AND 10737418240 < downloaded AND $ratiocharity > uploaded/downloaded"); + if ($charityReceiverCount) { + sql_query("UPDATE users SET seedbonus = seedbonus - $points, charity = charity + $points, bonuscomment = ".sqlesc($bonuscomment)." WHERE id = ".sqlesc($userid)) or sqlerr(__FILE__, __LINE__); + $charityPerUser = $points/$charityReceiverCount; + sql_query("UPDATE users SET seedbonus = seedbonus + $charityPerUser WHERE enabled='yes' AND 10737418240 < downloaded AND $ratiocharity > uploaded/downloaded") or sqlerr(__FILE__, __LINE__); + redirect("" . get_protocol_prefix() . "$BASEURL/mybonus.php?do=charity"); + } + else + { + stdmsg($lang_mybonus['std_sorry'], $lang_mybonus['std_no_users_need_charity']); + stdfoot(); + die; + } + } + } + elseif($art == "gift_1" && $bonusgift_bonus == 'yes') { + //=== trade for giving the gift of karma + $points = 0+$_POST["bonusgift"]; + $message = $_POST["message"]; + //==gift for peeps with no more options + $usernamegift = sqlesc(trim($_POST["username"])); + $res = sql_query("SELECT id, bonuscomment FROM users WHERE username=" . $usernamegift); + $arr = mysql_fetch_assoc($res); + $useridgift = $arr['id']; + $userseedbonus = $arr['seedbonus']; + $receiverbonuscomment = $arr['bonuscomment']; + if ($points < 25 || $points > 10000) { + //write_log("User " . $CURUSER["username"] . "," . $CURUSER["ip"] . " is hacking bonus system",'mod'); + stdmsg($lang_mybonus['text_error'], $lang_mybonus['bonus_amount_not_allowed']); + stdfoot(); + die(); + } + if($CURUSER['seedbonus'] >= $points) { + $points2= number_format($points,1); + $bonuscomment = date("Y-m-d") . " - " .$points2. " Points as gift to ".htmlspecialchars(trim($_POST["username"])).".\n " .htmlspecialchars($bonuscomment); + + $aftertaxpoint = $points; + if ($taxpercentage_bonus) + $aftertaxpoint -= $aftertaxpoint * $taxpercentage_bonus * 0.01; + if ($basictax_bonus) + $aftertaxpoint -= $basictax_bonus; + + $points2receiver = number_format($aftertaxpoint,1); + $newreceiverbonuscomment = date("Y-m-d") . " + " .$points2receiver. " Points (after tax) as a gift from ".($CURUSER["username"]).".\n " .htmlspecialchars($receiverbonuscomment); + if ($userid==$useridgift){ + stdmsg($lang_mybonus['text_huh'], $lang_mybonus['text_karma_self_giving_warning'], 0); + stdfoot(); + die; + } + if (!$useridgift){ + stdmsg($lang_mybonus['text_error'], $lang_mybonus['text_receiver_not_exists'], 0); + stdfoot(); + die; + } + + sql_query("UPDATE users SET seedbonus = seedbonus - $points, bonuscomment = ".sqlesc($bonuscomment)." WHERE id = ".sqlesc($userid)) or sqlerr(__FILE__, __LINE__); + sql_query("UPDATE users SET seedbonus = seedbonus + $aftertaxpoint, bonuscomment = ".sqlesc($newreceiverbonuscomment)." WHERE id = ".sqlesc($useridgift)); + + //===send message + $subject = sqlesc($lang_mybonus_target[get_user_lang($useridgift)]['msg_someone_loves_you']); + $added = sqlesc(date("Y-m-d H:i:s")); + $msg = $lang_mybonus_target[get_user_lang($useridgift)]['msg_you_have_been_given'].$points2.$lang_mybonus_target[get_user_lang($useridgift)]['msg_after_tax'].$points2receiver.$lang_mybonus_target[get_user_lang($useridgift)]['msg_karma_points_by'].$CURUSER['username']; + if ($message) + $msg .= "\n".$lang_mybonus_target[get_user_lang($useridgift)]['msg_personal_message_from'].$CURUSER['username'].$lang_mybonus_target[get_user_lang($useridgift)]['msg_colon'].$message; + $msg = sqlesc($msg); + sql_query("INSERT INTO messages (sender, subject, receiver, msg, added) VALUES(0, $subject, $useridgift, $msg, $added)") or sqlerr(__FILE__, __LINE__); + $usernamegift = unesc($_POST["username"]); + redirect("" . get_protocol_prefix() . "$BASEURL/mybonus.php?do=transfer"); + } + else{ + print(""); + print("

    ".$lang_mybonus['text_oups']."

    ".$lang_mybonus['text_not_enough_karma']."

    "); + } + } + } +} +stdfoot(); +?> diff --git a/mysql_stats.php b/mysql_stats.php new file mode 100644 index 00000000..43e2b6a2 --- /dev/null +++ b/mysql_stats.php @@ -0,0 +1,370 @@ += 1; $d--, $ex-=3 ) { + if (isset($GLOBALS['byteUnits'][$d]) && $value >= $li * pow(10, $ex)) { + $value = round($value / ( pow(1024, $d) / $dh) ) /$dh; + $unit = $GLOBALS['byteUnits'][$d]; + break 1; + } // end if + } // end for + + if ($unit != $GLOBALS['byteUnits'][0]) { + $return_value = number_format($value, $comma, '.', ','); + } else { + $return_value = number_format($value, 0, '.', ','); + } + + return array($return_value, $unit); + } // end of the 'formatByteDown' function + + /** + * Returns a given timespan value in a readable format. + * + * @param int the timespan + * + * @return string the formatted value + */ + function timespanFormat($seconds) + { + $return_string = ''; + $days = floor($seconds / 86400); + if ($days > 0) { + $seconds -= $days * 86400; + } + $hours = floor($seconds / 3600); + if ($days > 0 || $hours > 0) { + $seconds -= $hours * 3600; + } + $minutes = floor($seconds / 60); + if ($days > 0 || $hours > 0 || $minutes > 0) { + $seconds -= $minutes * 60; + } + return (string)$days." Days ". (string)$hours." Hours ". (string)$minutes." Minutes ". (string)$seconds." Seconds "; + } + + + /** + * Writes localised date + * + * @param string the current timestamp + * + * @return string the formatted date + * + * @access public + */ + function localisedDate($timestamp = -1, $format = '') + { + global $datefmt, $month, $day_of_week; + + if ($format == '') { + $format = $datefmt; + } + + if ($timestamp == -1) { + $timestamp = time(); + } + + $date = preg_replace('@%[aA]@', $day_of_week[(int)strftime('%w', $timestamp)], $format); + $date = preg_replace('@%[bB]@', $month[(int)strftime('%m', $timestamp)-1], $date); + + return strftime($date, $timestamp); + } // end of the 'localisedDate()' function + +////////////////////// END FUNCTION LIST ///////////////////////////////////// + + +stdhead("Stats"); + +/** + * Displays the sub-page heading + */ +echo '

    ' . "\n" + . ' Mysql Server Status' . "\n" + . '

    ' . "\n"; + + + + + +/** + * Sends the query and buffers the result + */ +$res = @sql_query('SHOW STATUS') or Die(mysql_error()); + while ($row = mysql_fetch_row($res)) { + $serverStatus[$row[0]] = $row[1]; + } +@mysql_free_result($res); +unset($res); +unset($row); + + +/** + * Displays the page + */ +//Uptime calculation +$res = @sql_query('SELECT UNIX_TIMESTAMP() - ' . $serverStatus['Uptime']); +$row = mysql_fetch_row($res); +//echo sprintf("Server Status Uptime", timespanFormat($serverStatus['Uptime']), localisedDate($row[0])) . "\n"; +?> + +
    + + + +
    + + $value) { + if (substr($name, 0, 4) == 'Com_') { + $queryStats[str_replace('_', ' ', substr($name, 4))] = $value; + unset($serverStatus[$name]); + } + } +unset($tmp_array); +?> + +
      +
    • + Server traffic: These tables show the network traffic statistics of this MySQL server since its startup +
      + + + + + +
      + + + + + + + + + + + + + + + + + + + + +
       Traffic   Per Hour 
       Received     
       Sent     
       Total     
      +
      + + + + + + + + + + + + + + + + + + + + + + + + +
       Connections  ø Per Hour  % 
       Failed Attempts       0 ) ? number_format(($serverStatus['Aborted_connects'] * 100 / $serverStatus['Connections']), 2, '.', ',') . ' %' : '---'; ?> 
       Aborted Clients       0 ) ? number_format(($serverStatus['Aborted_clients'] * 100 / $serverStatus['Connections']), 2 , '.', ',') . ' %' : '---'; ?> 
       Total       % 
      +
      +
    • +
      +
    • + Query Statistics: Since it's start up, ". number_format($serverStatus['Questions'], 0, '.', ',')." queries have been sent to the server.\n"); ?> + + + + + + + + +
      +
      + + + + + + + + + + + + + +
       Total  ø Per Hour  ø Per Minute  ø Per Second 
              
      +
      + + + + + + + $value) { + +// For the percentage column, use Questions - Connections, because +// the number of connections is not an item of the Query types +// but is included in Questions. Then the total of the percentages is 100. +?> + + + + + + + +
       Query Type  ø Per Hour  % 
              % 
      +
      + + + + + + + +
       Query Type  ø Per Hour  % 
      +
      +
    • + +
      +
    • + More status variables
      + + + + + +
      + + + + + + $value) { +?> + + + + + +
       Variable  Value 
          
      +
      + + + + + + +
       Variable  Value 
      +
      +
    • + +
    + + +".$lang_news['std_here']."".$lang_news['std_if_sure'],false); + + sql_query("DELETE FROM news WHERE id=".sqlesc($newsid)) or sqlerr(__FILE__, __LINE__); + $Cache->delete_value('recent_news','true'); + if ($returnto != "") + header("Location: $returnto"); + else + header("Location: " . get_protocol_prefix() . "$BASEURL/index.php"); +} + +// Add News Item ///////////////////////////////////////////////////////// + +if ($action == 'add') +{ + $body = htmlspecialchars($_POST['body'],ENT_QUOTES); + if (!$body) + stderr($lang_news['std_error'], $lang_news['std_news_body_empty']); + + $title = htmlspecialchars($_POST['subject']); + if (!$title) + stderr($lang_news['std_error'], $lang_news['std_news_title_empty']); + + $added = $_POST["added"]; + if (!$added) + $added = sqlesc(date("Y-m-d H:i:s")); + $notify = $_POST['notify']; + if ($notify != 'yes') + $notify = 'no'; + sql_query("INSERT INTO news (userid, added, body, title, notify) VALUES (".sqlesc($CURUSER['id']) . ", $added, " . sqlesc($body) . ", " . sqlesc($title) . ", " . sqlesc($notify).")") or sqlerr(__FILE__, __LINE__); + $Cache->delete_value('recent_news',true); + if (mysql_affected_rows() != 1) + stderr($lang_news['std_error'], $lang_news['std_something_weird_happened']); + header("Location: " . get_protocol_prefix() . "$BASEURL/index.php"); +} + +// Edit News Item //////////////////////////////////////////////////////// + +if ($action == 'edit') +{ + + $newsid = 0+$_GET["newsid"]; + int_check($newsid,true); + + $res = sql_query("SELECT * FROM news WHERE id=".sqlesc($newsid)) or sqlerr(__FILE__, __LINE__); + + if (mysql_num_rows($res) != 1) + stderr($lang_news['std_error'], $lang_news['std_invalid_news_id'].$newsid); + + $arr = mysql_fetch_array($res); + + if ($_SERVER['REQUEST_METHOD'] == 'POST') + { + $body = htmlspecialchars($_POST['body'],ENT_QUOTES); + + if ($body == "") + stderr($lang_news['std_error'], $lang_news['std_news_body_empty']); + + $title = htmlspecialchars($_POST['subject']); + + if ($title == "") + stderr($lang_news['std_error'], $lang_news['std_news_title_empty']); + + $body = sqlesc($body); + + $editdate = sqlesc(date("Y-m-d H:i:s")); + $notify = $_POST['notify']; + if ($notify != 'yes') + $notify = 'no'; + $notify = sqlesc($notify); + $title = sqlesc($title); + sql_query("UPDATE news SET body=$body, title=$title, notify=$notify WHERE id=".sqlesc($newsid)) or sqlerr(__FILE__, __LINE__); + $Cache->delete_value('recent_news',true); + header("Location: " . get_protocol_prefix() . "$BASEURL/index.php"); + } + else + { + stdhead($lang_news['head_edit_site_news']); + begin_main_frame(); + $body = $arr["body"]; + $subject = htmlspecialchars($arr['title']); + $title = $lang_news['text_edit_site_news']; + print("
    "); + print(""); + begin_compose($title, "edit", $body, true, $subject); + print("".$lang_news['text_notify_users_of_this']."\n"); + end_compose(); + end_main_frame(); + stdfoot(); + die; + } + +} + +// Other Actions and followup //////////////////////////////////////////// + +stdhead($lang_news['head_site_news']); +begin_main_frame(); +$title = $lang_news['text_submit_news_item']; +print("\n"); +begin_compose($title, 'new'); +print("".$lang_news['text_notify_users_of_this']."\n"); +end_compose(); +print("
    "); +end_main_frame(); +stdfoot(); +die; + +?> diff --git a/nowarn.php b/nowarn.php new file mode 100644 index 00000000..8689c7e2 --- /dev/null +++ b/nowarn.php @@ -0,0 +1,42 @@ += UC_SYSOP) { +if (get_user_class() < UC_MODERATOR) +stderr("Sorry", "Access denied."); +{ +if (empty($_POST["usernw"]) && empty($_POST["desact"]) && empty($_POST["delete"])) + bark("You Must Select A User To Edit."); + +if (!empty($_POST["usernw"])) +{ +$msg = sqlesc("Your Warning Has Been Removed By: " . $CURUSER['username'] . "."); +$added = sqlesc(date("Y-m-d H:i:s")); +$userid = implode(", ", $_POST[usernw]); +//sql_query("INSERT INTO messages (sender, receiver, msg, added) VALUES (0, $userid, $msg, $added)") or sqlerr(__FILE__, __LINE__); + +$r = sql_query("SELECT modcomment FROM users WHERE id IN (" . implode(", ", $_POST[usernw]) . ")")or sqlerr(__FILE__, __LINE__); +$user = mysql_fetch_array($r); +$exmodcomment = $user["modcomment"]; +$modcomment = date("Y-m-d") . " - Warning Removed By " . $CURUSER['username'] . ".\n". $modcomment . $exmodcomment; +sql_query("UPDATE users SET modcomment=" . sqlesc($modcomment) . " WHERE id IN (" . implode(", ", $_POST[usernw]) . ")") or sqlerr(__FILE__, __LINE__); + +$do="UPDATE users SET warned='no', warneduntil='0000-00-00 00:00:00' WHERE id IN (" . implode(", ", $_POST[usernw]) . ")"; +$res=sql_query($do);} + +if (!empty($_POST["desact"])){ +$do="UPDATE users SET enabled='no' WHERE id IN (" . implode(", ", $_POST['desact']) . ")"; +$res=sql_query($do);} +} +} +header("Refresh: 0; url=warned.php"); +?> diff --git a/offers.php b/offers.php new file mode 100644 index 00000000..dbd890d3 --- /dev/null +++ b/offers.php @@ -0,0 +1,840 @@ +".$lang_offers['text_red_star_required']."

    "); + + print("
    ". + "\n"); + + $s = "\n"; + print("". + "". + "
    ".$lang_offers['text_offers_open_to_all']."
    ".$lang_offers['row_type']."* $s
    ".$lang_offers['row_title']."*". + "
    ".$lang_offers['row_post_or_photo']."". + "
    ".$lang_offers['text_link_to_picture']."
    ".$lang_offers['row_description']."*\n"); + textbbcode("compose","body",$body,false); + print("

    \n"); + stdfoot(); + die; +} +//=== end add offer + +//=== take new offer +if ($_GET["new_offer"]){ + if (get_user_class() < $addoffer_class) + permissiondenied(); + $new_offer = 0 + $_GET["new_offer"]; + if($new_offer != '1') + stderr($lang_offers['std_error'], $lang_offers['std_smell_rat']); + + $userid = 0 + $CURUSER["id"]; + if (preg_match("/^[0-9]+$/", !$userid)) + stderr($lang_offers['std_error'], $lang_offers['std_smell_rat']); + + $name = $_POST["name"]; + if ($name == "") + bark($lang_offers['std_must_enter_name']); + + $cat = (0 + $_POST["type"]); + if (!is_valid_id($cat)) + bark($lang_offers['std_must_select_category']); + + $descrmain = unesc($_POST["body"]); + if (!$descrmain) + bark($lang_offers['std_must_enter_description']); + + if (!empty($_POST['picture'])){ + $picture = unesc($_POST["picture"]); + if(!preg_match("/^http:\/\/[^\s'\"<>]+\.(jpg|gif|png)$/i", $picture)) + stderr($lang_offers['std_error'], $lang_offers['std_wrong_image_format']); + $pic = "[img]".$picture."[/img]\n"; + } + + $descr = $pic; + $descr .= $descrmain; + + $res = sql_query("SELECT name FROM offers WHERE name =".sqlesc($_POST[name])) or sqlerr(__FILE__,__LINE__); + $arr = mysql_fetch_assoc($res); + if (!$arr['name']){ + //===add karma //=== uncomment if you use the mod + //sql_query("UPDATE users SET seedbonus = seedbonus+10.0 WHERE id = $CURUSER[id]") or sqlerr(__FILE__, __LINE__); + //===end + + $ret = sql_query("INSERT INTO offers (userid, name, descr, category, added) VALUES (" . + implode(",", array_map("sqlesc", array($CURUSER["id"], $name, $descr, 0 + $_POST["type"]))) . + ", '" . date("Y-m-d H:i:s") . "')"); + if (!$ret) { + if (mysql_errno() == 1062) + bark("!!!"); + bark("mysql puked: ".mysql_error()); + } + $id = mysql_insert_id(); + + write_log("offer $name was added by ".$CURUSER[username],'normal'); + + header("Refresh: 0; url=offers.php?id=$id&off_details=1"); + + stdhead($lang_offers['head_success']); + } + else{ + stderr ($lang_offers['std_error'], $lang_offers['std_offer_exists']."".$lang_offers['text_view_all_offers']."",false); + } + stdfoot(); + die; +} +//==end take new offer + +//=== offer details +if ($_GET["off_details"]){ + + $off_details = 0 + $_GET["off_details"]; + if($off_details != '1') + stderr($lang_offers['std_error'], $lang_offers['std_smell_rat']); + + $id = 0+$_GET["id"]; + if(!$id) + die(); + //stderr("Error", "I smell a rat!"); + + $res = sql_query("SELECT * FROM offers WHERE id = $id") or sqlerr(__FILE__,__LINE__); + $num = mysql_fetch_array($res); + + $s = $num["name"]; + + stdhead($lang_offers['head_offer_detail_for']." \"".$s."\""); + print("

    ".htmlspecialchars($s)."

    "); + + print(""); + $offertime = gettime($num['added'],true,false); + if ($CURUSER['timetype'] != 'timealive') + $offertime = $lang_offers['text_at'].$offertime; + else $offertime = $lang_offers['text_blank'].$offertime; + tr($lang_offers['row_info'], $lang_offers['text_offered_by'].get_username($num['userid']).$offertime, 1); + if ($num["allowed"] == "pending") + $status="".$lang_offers['text_pending'].""; + elseif ($num["allowed"] == "allowed") + $status="".$lang_offers['text_allowed'].""; + else + $status="".$lang_offers['text_denied'].""; + tr($lang_offers['row_status'], $status, 1); +//=== if you want to have a pending thing for uploaders use this next bit + if (get_user_class() >= $offermanage_class && $num["allowed"] == "pending") + tr($lang_offers['row_allow'], "
    ". + "  
    ". + "
    ", 1); + + $zres = sql_query("SELECT COUNT(*) from offervotes where vote='yeah' and offerid=$id"); + $arr = mysql_fetch_row($zres); + $za = $arr[0]; + $pres = sql_query("SELECT COUNT(*) from offervotes where vote='against' and offerid=$id"); + $arr2 = mysql_fetch_row($pres); + $protiv = $arr2[0]; + //=== in the following section, there is a line to report comment... either remove the link or change it to work with your report script :) + + //if pending + if ($num["allowed"] == "pending"){ + tr($lang_offers['row_vote'], "". + "".$lang_offers['text_for']."".(get_user_class() >= $againstoffer_class ? " - ". + "".$lang_offers['text_against']."" : ""), 1); + tr($lang_offers['row_vote_results'], + "".$lang_offers['text_for'].": $za ".$lang_offers['text_against']." $protiv     ".$lang_offers['text_see_vote_detail']."", 1); + } + //===upload torrent message + if ($num["allowed"] == "allowed" && $CURUSER["id"] != $num["userid"]) + tr($lang_offers['row_offer_allowed'], $lang_offers['text_voter_receives_pm_note'], 1); + if ($num["allowed"] == "allowed" && $CURUSER["id"] == $num["userid"]){ + tr($lang_offers['row_offer_allowed'], + $lang_offers['text_urge_upload_offer_note'], 1); + } + if ($CURUSER[id] == $num[userid] || get_user_class() >= $offermanage_class){ + $edit = "\"edit\" ".$lang_offers['text_edit_offer'] . " | "; + $delete = "\"delete\" ".$lang_offers['text_delete_offer']." | "; + } + $report = "\"report\" ".$lang_offers['report_offer'].""; + tr($lang_offers['row_action'], $edit . $delete .$report, 1); + if ($num["descr"]){ + $off_bb = format_comment($num["descr"]); + tr($lang_offers['row_description'], $off_bb, 1); + } + print(""); + // -----------------COMMENT SECTION ---------------------// + $commentbar = "

    ".$lang_offers['text_add_comment']."

    \n"; + $subres = sql_query("SELECT COUNT(*) FROM comments WHERE offer = $id"); + $subrow = mysql_fetch_array($subres); + $count = $subrow[0]; + if (!$count) { + print("

    ".$lang_offers['text_no_comments']."

    \n"); + } + + else { + list($pagertop, $pagerbottom, $limit) = pager(10, $count, "offers.php?id=$id&off_details=1&", array(lastpagedefault => 1)); + + $subres = sql_query("SELECT id, text, user, added, editedby, editdate FROM comments WHERE offer = " . sqlesc($id) . " ORDER BY id $limit") or sqlerr(__FILE__, __LINE__); + $allrows = array(); + while ($subrow = mysql_fetch_array($subres)) + $allrows[] = $subrow; + + //end_frame(); + //print($commentbar); + print($pagertop); + + commenttable($allrows,"offer",$id); + print($pagerbottom); + } + print("". +"
    ".$lang_offers['text_quick_comment']."

    ". +"
    ". +"
    "); + quickreply('comment', 'body',$lang_offers['submit_add_comment']); + print("
    "); + print($commentbar); + stdfoot(); + die; +} +//=== end offer details +//=== allow offer by staff +if ($_GET["allow_offer"]) { + + if (get_user_class() < $offermanage_class) + stderr($lang_offers['std_access_denied'], $lang_offers['std_mans_job']); + + $allow_offer = 0 + $_GET["allow_offer"]; + if($allow_offer != '1') + stderr($lang_offers['std_error'], $lang_offers['std_smell_rat']); + + //=== to allow the offer credit to S4NE for this next bit :) + //if ($_POST["offerid"]){ + $offid = 0 + $_POST["offerid"]; + if(!is_valid_id($offid)) + stderr($lang_offers['std_error'], $lang_offers['std_smell_rat']); + + $res = sql_query("SELECT users.username, offers.userid, offers.name FROM offers inner join users on offers.userid = users.id where offers.id = $offid") or sqlerr(__FILE__,__LINE__); + $arr = mysql_fetch_assoc($res); + if ($offeruptimeout_main){ + $timeouthour = floor($offeruptimeout_main/3600); + $timeoutnote = $lang_offers_target[get_user_lang($arr["userid"])]['msg_you_must_upload_in'].$timeouthour.$lang_offers_target[get_user_lang($arr["userid"])]['msg_hours_otherwise']; + } + else $timeoutnote = ""; + $msg = "$CURUSER[username]".$lang_offers_target[get_user_lang($arr["userid"])]['msg_has_allowed']."[b][url=". get_protocol_prefix() . $BASEURL ."/offers.php?id=$offid&off_details=1]" . $arr[name] . "[/url][/b]. ".$lang_offers_target[get_user_lang($arr["userid"])]['msg_find_offer_option'].$timeoutnote; + + $subject = $lang_offers_target[get_user_lang($arr["userid"])]['msg_your_offer_allowed']; + $allowedtime = date("Y-m-d H:i:s"); + sql_query("INSERT INTO messages (sender, receiver, added, msg, subject) VALUES(0, $arr[userid], '" . $allowedtime . "', " . sqlesc($msg) . ", ".sqlesc($subject).")") or sqlerr(__FILE__, __LINE__); + sql_query ("UPDATE offers SET allowed = 'allowed', allowedtime = '".$allowedtime."' WHERE id = $offid") or sqlerr(__FILE__,__LINE__); + + write_log("$CURUSER[username] allowed offer $arr[name]",'normal'); + header("Refresh: 0; url=" . get_protocol_prefix() . "$BASEURL/offers.php?id=$offid&off_details=1"); +} +//=== end allow the offer + +//=== allow offer by vote +if ($_GET["finish_offer"]) { + + if (get_user_class() < $offermanage_class) + stderr($lang_offers['std_access_denied'], $lang_offers['std_have_no_permission']); + + $finish_offer = 0 + $_GET["finish_offer"]; + if($finish_offer != '1') + stderr($lang_offers['std_error'], $lang_offers['std_smell_rat']); + + $offid = 0 + $_POST["finish"]; + if(!is_valid_id($offid)) + stderr($lang_offers['std_error'], $lang_offers['std_smell_rat']); + + $res = sql_query("SELECT users.username, offers.userid, offers.name FROM offers inner join users on offers.userid = users.id where offers.id = $offid") or sqlerr(__FILE__,__LINE__); + $arr = mysql_fetch_assoc($res); + + $voteresyes = sql_query("SELECT COUNT(*) from offervotes where vote='yeah' and offerid=$offid"); + $arryes = mysql_fetch_row($voteresyes); + $yes = $arryes[0]; + $voteresno = sql_query("SELECT COUNT(*) from offervotes where vote='against' and offerid=$offid"); + $arrno = mysql_fetch_row($voteresno); + $no = $arrno[0]; + + if($yes == '0' && $no == '0') + stderr($lang_offers['std_sorry'], $lang_offers['std_no_votes_yet']."".$lang_offers['std_back_to_offer_detail']."",false); + $finishvotetime = date("Y-m-d H:i:s"); + if (($yes - $no)>=$minoffervotes){ + if ($offeruptimeout_main){ + $timeouthour = floor($offeruptimeout_main/3600); + $timeoutnote = $lang_offers_target[get_user_lang($arr["userid"])]['msg_you_must_upload_in'].$timeouthour.$lang_offers_target[get_user_lang($arr["userid"])]['msg_hours_otherwise']; + } + else $timeoutnote = ""; + $msg = $lang_offers_target[get_user_lang($arr["userid"])]['msg_offer_voted_on']."[b][url=" . get_protocol_prefix() . $BASEURL."/offers.php?id=$offid&off_details=1]" . $arr[name] . "[/url][/b].". $lang_offers_target[get_user_lang($arr["userid"])]['msg_find_offer_option'].$timeoutnote; + sql_query ("UPDATE offers SET allowed = 'allowed',allowedtime ='".$finishvotetime."' WHERE id = $offid") or sqlerr(__FILE__,__LINE__); + } + else if(($no - $yes)>=$minoffervotes){ + $msg = $lang_offers_target[get_user_lang($arr["userid"])]['msg_offer_voted_off']."[b][url=". get_protocol_prefix() . $BASEURL."/offers.php?id=$offid&off_details=1]" . $arr[name] . "[/url][/b].".$lang_offers_target[get_user_lang($arr["userid"])]['msg_offer_deleted'] ; + sql_query ("UPDATE offers SET allowed = 'denied' WHERE id = $offid") or sqlerr(__FILE__,__LINE__); + } + //===use this line if you DO HAVE subject in your PM system + $subject = $lang_offers_target[get_user_lang($arr[userid])]['msg_your_offer'].$arr[name].$lang_offers_target[get_user_lang($arr[userid])]['msg_voted_on']; + sql_query("INSERT INTO messages (sender, subject, receiver, added, msg) VALUES(0, ".sqlesc($subject).", $arr[userid], '" . $finishvotetime . "', " . sqlesc($msg) . ")") or sqlerr(__FILE__, __LINE__); + //===use this line if you DO NOT subject in your PM system + //sql_query("INSERT INTO messages (sender, receiver, added, msg) VALUES(0, $arr[userid], '" . date("Y-m-d H:i:s") . "', " . sqlesc($msg) . ")") or sqlerr(__FILE__, __LINE__); + write_log("$CURUSER[username] closed poll $arr[name]",'normal'); + + header("Refresh: 0; url=" . get_protocol_prefix() . "$BASEURL/offers.php?id=$offid&off_details=1"); + die; +} +//===end allow offer by vote + +//=== edit offer + +if ($_GET["edit_offer"]) { + + $edit_offer = 0 + $_GET["edit_offer"]; + if($edit_offer != '1') + stderr($lang_offers['std_error'], $lang_offers['std_smell_rat']); + + $id = 0 + $_GET["id"]; + + $res = sql_query("SELECT * FROM offers WHERE id = $id") or sqlerr(__FILE__, __LINE__); + $num = mysql_fetch_array($res); + + $timezone = $num["added"]; + + $s = $num["name"]; + $id2 = $num["category"]; + + if ($CURUSER["id"] != $num["userid"] && get_user_class() < $offermanage_class) + stderr($lang_offers['std_error'], $lang_offers['std_cannot_edit_others_offer']); + + $body = htmlspecialchars(unesc($num["descr"])); + $s2 = "\n"; + + stdhead($lang_offers['head_edit_offer'].": $s"); + $title = htmlspecialchars(trim($s)); + + print("
    ". + ""); + tr($lang_offers['row_type']."*", $s2, 1); + tr($lang_offers['row_title']."*", "", 1); + tr($lang_offers['row_post_or_photo'], "
    ".$lang_offers['text_link_to_picture'], 1); + print(""); + print("
    ".$lang_offers['text_edit_offer']."
    ".$lang_offers['row_description']."*"); + textbbcode("compose","body",$body,false); + print("

    \n"); + stdfoot(); + die; +} +//=== end edit offer + +//==== take offer edit +if ($_GET["take_off_edit"]){ + + $take_off_edit = 0 + $_GET["take_off_edit"]; + if($take_off_edit != '1') + stderr($lang_offers['std_error'], $lang_offers['std_smell_rat']); + + $id = 0 + $_GET["id"]; + + $res = sql_query("SELECT userid FROM offers WHERE id = $id") or sqlerr(__FILE__, __LINE__); + $num = mysql_fetch_array($res); + + if ($CURUSER[id] != $num[userid] && get_user_class() < $offermanage_class) + stderr($lang_offers['std_error'], $lang_offers['std_access_denied']); + + $name = $_POST["name"]; + + if (!empty($_POST['picture'])){ + $picture = unesc($_POST["picture"]); + if(!preg_match("/^http:\/\/[^\s'\"<>]+\.(jpg|gif|png)$/i", $picture)) + stderr($lang_offers['std_error'], $lang_offers['std_wrong_image_format']); + $pic = "[img]".$picture."[/img]\n"; + } + $descr = "$pic"; + $descr .= unesc($_POST["body"]); + if (!$name) + bark($lang_offers['std_must_enter_name']); + if (!$descr) + bark($lang_offers['std_must_enter_description']); + $cat = (0 + $_POST["category"]); + if (!is_valid_id($cat)) + bark($lang_offers['std_must_select_category']); + + $name = sqlesc($name); + $descr = sqlesc($descr); + $cat = sqlesc($cat); + + sql_query("UPDATE offers SET category=$cat, name=$name, descr=$descr where id=".sqlesc($id)); + + //header("Refresh: 0; url=offers.php?id=$id&off_details=1"); +} +//======end take offer edit + +//=== offer votes list +if ($_GET["offer_vote"]){ + + $offer_vote = 0 + $_GET["offer_vote"]; + if($offer_vote != '1') + stderr($lang_offers['std_error'], $lang_offers['std_smell_rat']); + + $offerid = 0 + htmlspecialchars($_GET[id]); + + $res2 = sql_query("SELECT COUNT(*) FROM offervotes WHERE offerid = ".sqlesc($offerid)) or sqlerr(__FILE__, __LINE__); + $row = mysql_fetch_array($res2); + $count = $row[0]; + + $offername = get_single_value("offers","name","WHERE id=".sqlesc($offerid)); + stdhead($lang_offers['head_offer_voters']." - \"".$offername."\""); + + print("

    ".$lang_offers['text_vote_results_for']." ".htmlspecialchars($offername)."

    "); + + $perpage = 25; + list($pagertop, $pagerbottom, $limit) = pager($perpage, $count, $_SERVER["PHP_SELF"] ."?id=".$offerid."&offer_vote=1&"); + $res = sql_query("SELECT * FROM offervotes WHERE offerid=".sqlesc($offerid)." ".$limit) or sqlerr(__FILE__, __LINE__); + + if (mysql_num_rows($res) == 0) + print("

    ".$lang_offers['std_no_votes_yet']."

    \n"); + else + { + echo $pagertop; + print("\n"); + + while ($arr = mysql_fetch_assoc($res)) + { + if ($arr[vote] == 'yeah') + $vote = "".$lang_offers['text_for'].""; + elseif ($arr[vote] == 'against') + $vote = "".$lang_offers['text_against'].""; + else $vote = "unknown"; + + print("\n"); + } + print("
    ".$lang_offers['col_user']."".$lang_offers['col_vote']."
    " . get_username($arr['userid']) . "".$vote."
    \n"); + echo $pagerbottom; + } + + stdfoot(); + die; +} +//=== end offer votes list + +//=== offer votes +if ($_GET["vote"]){ + $offerid = 0 + htmlspecialchars($_GET["id"]); + $vote = htmlspecialchars($_GET["vote"]); + if ($vote == 'against' && get_user_class() < $againstoffer_class) + stderr($lang_offers['std_error'], $lang_offers['std_smell_rat']); + if ($vote =='yeah' || $vote =='against') + { + $userid = 0+$CURUSER["id"]; + $res = sql_query("SELECT * FROM offervotes WHERE offerid=".sqlesc($offerid)." AND userid=".sqlesc($userid)) or sqlerr(__FILE__,__LINE__); + $arr = mysql_fetch_assoc($res); + $voted = $arr; + $offer_userid = get_single_value("offers", "userid", "WHERE id=".sqlesc($offerid)); + if ($offer_userid == $CURUSER['id']) + { + stderr($lang_offers['std_error'], $lang_offers['std_cannot_vote_youself']); + } + elseif ($voted) + { + stderr($lang_offers['std_already_voted'],$lang_offers['std_already_voted_note']."".$lang_offers['std_back_to_offer_detail'] ,false); + } + else + { + sql_query("UPDATE offers SET $vote = $vote + 1 WHERE id=".sqlesc($offerid)) or sqlerr(__FILE__,__LINE__); + + $res = sql_query("SELECT users.username, offers.userid, offers.name FROM offers LEFT JOIN users ON offers.userid = users.id WHERE offers.id = ".sqlesc($offerid)) or sqlerr(__FILE__,__LINE__); + $arr = mysql_fetch_assoc($res); + + $rs = sql_query("SELECT yeah, against, allowed FROM offers WHERE id=".sqlesc($offerid)) or sqlerr(__FILE__,__LINE__); + $ya_arr = mysql_fetch_assoc($rs); + $yeah = $ya_arr["yeah"]; + $against = $ya_arr["against"]; + $finishtime = date("Y-m-d H:i:s"); + //allowed and send offer voted on message + if(($yeah-$against)>=$minoffervotes && $ya_arr['allowed'] != "allowed") + { + if ($offeruptimeout_main){ + $timeouthour = floor($offeruptimeout_main/3600); + $timeoutnote = $lang_offers_target[get_user_lang($arr["userid"])]['msg_you_must_upload_in'].$timeouthour.$lang_offers_target[get_user_lang($arr["userid"])]['msg_hours_otherwise']; + } + else $timeoutnote = ""; + sql_query("UPDATE offers SET allowed='allowed', allowedtime=".sqlesc($finishtime)." WHERE id=".sqlesc($offerid)) or sqlerr(__FILE__,__LINE__); + $msg = $lang_offers_target[get_user_lang($arr['userid'])]['msg_offer_voted_on']."[b][url=". get_protocol_prefix() . $BASEURL."/offers.php?id=$offerid&off_details=1]" . $arr[name] . "[/url][/b].". $lang_offers_target[get_user_lang($arr['userid'])]['msg_find_offer_option'].$timeoutnote; + $subject = $lang_offers_target[get_user_lang($arr['userid'])]['msg_your_offer_allowed']; + sql_query("INSERT INTO messages (sender, receiver, added, msg, subject) VALUES(0, $arr[userid], " . sqlesc(date("Y-m-d H:i:s")) . ", " . sqlesc($msg) . ", ".sqlesc($subject).")") or sqlerr(__FILE__, __LINE__); + write_log("System allowed offer $arr[name]",'normal'); + } + //denied and send offer voted off message + if(($against-$yeah)>=$minoffervotes && $ya_arr['allowed'] != "denied") + { + sql_query("UPDATE offers SET allowed='denied' WHERE id=".sqlesc($offerid)) or sqlerr(__FILE__,__LINE__); + $msg = $lang_offers_target[get_user_lang($arr['userid'])]['msg_offer_voted_off']."[b][url=" . get_protocol_prefix() . $BASEURL."/offers.php?id=$offid&off_details=1]" . $arr[name] . "[/url][/b].".$lang_offers_target[get_user_lang($arr['userid'])]['msg_offer_deleted'] ; + $subject = $lang_offers_target[get_user_lang($arr['userid'])]['msg_offer_deleted']; + sql_query("INSERT INTO messages (sender, receiver, added, msg, subject) VALUES(0, $arr[userid], " . sqlesc(date("Y-m-d H:i:s")) . ", " . sqlesc($msg) . ", ".sqlesc($subject).")") or sqlerr(__FILE__, __LINE__); + write_log("System denied offer $arr[name]",'normal'); + } + + + sql_query("INSERT INTO offervotes (offerid, userid, vote) VALUES($offerid, $userid, ".sqlesc($vote).")") or sqlerr(__FILE__,__LINE__); + KPS("+",$offervote_bonus,$CURUSER["id"]); + stdhead($lang_offers['head_vote_for_offer']); + print("

    ".$lang_offers['std_vote_accepted']."

    "); + print($lang_offers['std_vote_accepted_note']."
    ".$lang_offers['std_back_to_offer_detail']); + stdfoot(); + die; + } + } + else + stderr($lang_offers['std_error'], $lang_offers['std_smell_rat']); +} +//=== end offer votes + +//=== delete offer +if ($_GET["del_offer"]){ + + $del_offer = 0 + $_GET["del_offer"]; + if($del_offer != '1') + stderr($lang_offers['std_error'], $lang_offers['std_smell_rat']); + + $offer = 0 + $_GET["id"]; + + $userid = 0 + $CURUSER["id"]; + if (!is_valid_id($userid)) + stderr($lang_offers['std_error'], $lang_offers['std_smell_rat']); + + $res = sql_query("SELECT * FROM offers WHERE id = $offer") or sqlerr(__FILE__, __LINE__); + $num = mysql_fetch_array($res); + + $name = $num["name"]; + + if ($userid != $num["userid"] && get_user_class() < $offermanage_class) + stderr($lang_offers['std_error'], $lang_offers['std_cannot_delete_others_offer']); + + if ($_GET["sure"]) + { + $sure = $_GET["sure"]; + if($sure == '0' || $sure == '1') + $sure = 0 + $_GET["sure"]; + else + stderr($lang_offers['std_error'], $lang_offers['std_smell_rat']); + } + + + if ($sure == 0) + stderr($lang_offers['std_delete_offer'], $lang_offers['std_delete_offer_note']."
    ".$lang_offers['text_reason_is']."
    ",false); + elseif ($sure == 1) + { + $reason = $_POST["reason"]; + sql_query("DELETE FROM offers WHERE id=$offer"); + sql_query("DELETE FROM offervotes WHERE offerid=$offer"); + sql_query("DELETE FROM comments WHERE offer=$offer"); + + //===add karma //=== use this if you use the karma mod + //sql_query("UPDATE users SET seedbonus = seedbonus-10.0 WHERE id = $num[userid]") or sqlerr(__FILE__, __LINE__); + //===end + + if ($CURUSER["id"] != $num["userid"]) + { + $added = sqlesc(date("Y-m-d H:i:s")); + $subject = sqlesc($lang_offers_target[get_user_lang($num["userid"])]['msg_offer_deleted']); + $msg = sqlesc($lang_offers_target[get_user_lang($num["userid"])]['msg_your_offer'].$num[name].$lang_offers_target[get_user_lang($num["userid"])]['msg_was_deleted_by']. "[url=userdetails.php?id=".$CURUSER['id']."]".$CURUSER['username']."[/url]".$lang_offers_target[get_user_lang($num["userid"])]['msg_blank'].($reason != "" ? $lang_offers_target[get_user_lang($num["userid"])]['msg_reason_is'].$reason : "")); + sql_query("INSERT INTO messages (sender, receiver, msg, added, subject) VALUES(0, $num[userid], $msg, $added, $subject)") or sqlerr(__FILE__, __LINE__); + } + write_log("Offer: $offer ($num[name]) was deleted by $CURUSER[username]".($reason != "" ? " (".$reason.")" : ""),'normal'); + header("Refresh: 0; url=offers.php"); + die; + } + else + stderr($lang_offers['std_error'], $lang_offers['std_smell_rat']); +} +//== end delete offer + +//=== prolly not needed, but what the hell... basically stopping the page getting screwed up +if ($_GET["sort"]) +{ + $sort = $_GET["sort"]; + if($sort == 'cat' || $sort == 'name' || $sort == 'added' || $sort == 'comments' || $sort == 'yeah' || $sort == 'against' || $sort == 'v_res') + $sort = $_GET["sort"]; + else + stderr($lang_offers['std_error'], $lang_offers['std_smell_rat']); +} +//=== end of prolly not needed, but what the hell :P + +$categ = 0 + $_GET["category"]; + +if ($_GET["offerorid"]){ + $offerorid = 0 + htmlspecialchars($_GET["offerorid"]); + if (preg_match("/^[0-9]+$/", !$offerorid)) + stderr($lang_offers['std_error'], $lang_offers['std_smell_rat']); +} + +$search = ($_GET["search"]); + +if ($search) { + $search = " AND offers.name like ".sqlesc("%$search%"); +} else { + $search = ""; +} + + +$cat_order_type = "desc"; +$name_order_type = "desc"; +$added_order_type = "desc"; +$comments_order_type = "desc"; +$v_res_order_type = "desc"; + +/* +if ($cat_order_type == "") { $sort = " ORDER BY added " . $added_order_type; $cat_order_type = "asc"; } // for torrent name +if ($name_order_type == "") { $sort = " ORDER BY added " . $added_order_type; $name_order_type = "desc"; } +if ($added_order_type == "") { $sort = " ORDER BY added " . $added_order_type; $added_order_type = "desc"; } +if ($comments_order_type == "") { $sort = " ORDER BY added " . $added_order_type; $comments_order_type = "desc"; } +if ($v_res_order_type == "") { $sort = " ORDER BY added " . $added_order_type; $v_res_order_type = "desc"; } +*/ + +if ($sort == "cat") +{ + if ($_GET['type'] == "desc") + $cat_order_type = "asc"; + $sort = " ORDER BY category ". $cat_order_type; +} +else if ($sort == "name") +{ + if ($_GET['type'] == "desc") + $name_order_type = "asc"; + $sort = " ORDER BY name ". $name_order_type; +} +else if ($sort == "added") +{ + if ($_GET['type'] == "desc") + $added_order_type = "asc"; + $sort = " ORDER BY added " . $added_order_type; +} +else if ($sort == "comments") +{ + if ($_GET['type'] == "desc") + $comments_order_type = "asc"; + $sort = " ORDER BY comments " . $comments_order_type; +} +else if ($sort == "v_res") +{ + if ($_GET['type'] == "desc") + $v_res_order_type = "asc"; + $sort = " ORDER BY (yeah - against) " . $v_res_order_type; +} + + + + +if ($offerorid <> NULL) +{ + if (($categ <> NULL) && ($categ <> 0)) + $categ = "WHERE offers.category = " . $categ . " AND offers.userid = " . $offerorid; + else + $categ = "WHERE offers.userid = " . $offerorid; +} + +else if ($categ == 0) +$categ = ''; +else +$categ = "WHERE offers.category = " . $categ; + +$res = sql_query("SELECT count(offers.id) FROM offers inner join categories on offers.category = categories.id inner join users on offers.userid = users.id $categ $search") or sqlerr(__FILE__, __LINE__); +$row = mysql_fetch_array($res); +$count = $row[0]; + +$perpage = 25; + +list($pagertop, $pagerbottom, $limit) = pager($perpage, $count, $_SERVER["PHP_SELF"] ."?" . "category=" . $_GET["category"] . "&sort=" . $_GET["sort"] . "&" ); + +//stderr("", $sort); +if($sort == "") +$sort = "ORDER BY added desc "; + +$res = sql_query("SELECT offers.id, offers.userid, offers.name, offers.added, offers.allowedtime, offers.comments, offers.yeah, offers.against, offers.category as cat_id, offers.allowed, categories.image, categories.name as cat FROM offers inner join categories on offers.category = categories.id $categ $search $sort $limit") or sqlerr(__FILE__,__LINE__); +$num = mysql_num_rows($res); + +stdhead($lang_offers['head_offers']); +begin_main_frame(); +begin_frame($lang_offers['text_offers_section'], true,10,"100%","center"); + +print("

    ".$lang_offers['text_rules']."

    \n"); +print("
      "); +print("
    • ".$lang_offers['text_rule_one_one'].get_user_class_name($upload_class, false, true, true).$lang_offers['text_rule_one_two'].get_user_class_name($addoffer_class, false, true, true).$lang_offers['text_rule_one_three']."
    • \n"); +print("
    • ".$lang_offers['text_rule_two_one']."".$minoffervotes."".$lang_offers['text_rule_two_two']."
    • \n"); +if ($offervotetimeout_main) + print("
    • ".$lang_offers['text_rule_three_one']."".($offervotetimeout_main / 3600)."".$lang_offers['text_rule_three_two']."
    • \n"); +if ($offeruptimeout_main) + print("
    • ".$lang_offers['text_rule_four_one']."".($offeruptimeout_main / 3600)."".$lang_offers['text_rule_four_two']."
    • \n"); +print("
    "); +if (get_user_class() >= $addoffer_class) +print("
    "); +print("
    ".$lang_offers['text_search_offers']."    "); +$cats = genrelist($browsecatmode); +$catdropdown = ""; +foreach ($cats as $cat) { + $catdropdown .= "
    "); +end_frame(); +print("

    "); + +$last_offer = strtotime($CURUSER['last_offer']); +if (!$num) + stdmsg($lang_offers['text_nothing_found'],$lang_offers['text_nothing_found']); +else +{ + $catid = $_GET[category]; + print(""); + print("". +"". +"". +"". +""); +if ($offervotetimeout_main > 0 && $offeruptimeout_main > 0) + print(""); +print("". +(get_user_class() >= $offermanage_class ? "" : "")."\n"); + for ($i = 0; $i < $num; ++$i) + { + $arr = mysql_fetch_assoc($res); + + + $addedby = get_username($arr['userid']); + $comms = $arr['comments']; + if ($comms == 0) + $comment = "0"; + else + { + if (!$lastcom = $Cache->get_value('offer_'.$arr[id].'_last_comment_content')){ + $res2 = sql_query("SELECT user, added, text FROM comments WHERE offer = $arr[id] ORDER BY added DESC LIMIT 1"); + $lastcom = mysql_fetch_array($res2); + $Cache->cache_value('offer_'.$arr[id].'_last_comment_content', $lastcom, 1855); + } + $timestamp = strtotime($lastcom["added"]); + $hasnewcom = ($lastcom['user'] != $CURUSER['id'] && $timestamp >= $last_offer); + if ($CURUSER['showlastcom'] != 'no') + { + if ($lastcom) + { + $title = ""; + if ($CURUSER['timetype'] != 'timealive') + $lastcomtime = $lang_offers['text_at_time'].$lastcom['added']; + else + $lastcomtime = $lang_offers['text_blank'].gettime($lastcom["added"],true,false,true); + $counter = $i; + $lastcom_tooltip[$counter]['id'] = "lastcom_" . $counter; + $lastcom_tooltip[$counter]['content'] = ($hasnewcom ? "(".$lang_offers['text_new'].") " : "").$lang_offers['text_last_commented_by'].get_username($lastcom['user']) . $lastcomtime."
    ". format_comment(mb_substr($lastcom['text'],0,100,"UTF-8") . (mb_strlen($lastcom['text'],"UTF-8") > 100 ? " ......" : "" ),true,false,false,true,600,false,false); + $onmouseover = "onmouseover=\"domTT_activate(this, event, 'content', document.getElementById('" . $lastcom_tooltip[$counter]['id'] . "'), 'trail', false, 'delay', 500,'lifetime',3000,'fade','both','styleClass','niceTitle','fadeMax', 87,'maxWidth', 400);\""; + } + } + else + { + $title = " title=\"".($hasnewcom ? $lang_offers['title_has_new_comment'] : $lang_offers['title_no_new_comment'])."\""; + $onmouseover = ""; + } + $comment = "".($hasnewcom ? "" : ""). $comms .($hasnewcom ? "" : "").""; + } + + //==== if you want allow deny for offers use this next bit + if ($arr["allowed"] == 'allowed') + $allowed = " [".$lang_offers['text_allowed']."]"; + elseif ($arr["allowed"] == 'denied') + $allowed = " [".$lang_offers['text_denied']."]"; + else + $allowed = " [".$lang_offers['text_pending']."]"; + //===end + + if ($arr["yeah"] == 0) + $zvote = $arr[yeah]; + else + $zvote = "".$arr[yeah].""; + if ($arr["against"] == 0) + $pvote = "$arr[against]"; + else + $pvote = "".$arr[against].""; + + if ($arr["yeah"] == 0 && $arr["against"] == 0) + { + $v_res = "0"; + } + else + { + + $v_res = "" .$arr[yeah]." - ".$arr[against]." = ".($arr[yeah] - $arr[against]). ""; + } + $addtime = gettime($arr['added'],false,true); + $dispname = $arr[name]; + $count_dispname=mb_strlen($arr[name],"UTF-8"); + $max_length_of_offer_name = 70; + if($count_dispname > $max_length_of_offer_name) + $dispname=mb_substr($dispname, 0, $max_length_of_offer_name-2,"UTF-8") . ".."; + print("".(get_user_class() >= $againstoffer_class ? "" : "")); + + print(""); + if ($offervotetimeout_main > 0 && $offeruptimeout_main > 0){ + if ($arr["allowed"] == 'allowed'){ + $futuretime = strtotime($arr['allowedtime']) + $offeruptimeout_main; + $timeout = gettime(date("Y-m-d H:i:s", $futuretime), false, true, true, false, true); + } + elseif ($arr["allowed"] == 'pending') + { + $futuretime = strtotime($arr['added']) + $offervotetimeout_main; + $timeout = gettime(date("Y-m-d H:i:s",$futuretime), false, true, true, false, true); + } + if (!$timeout) + $timeout = "N/A"; + print(""); + } + print("".(get_user_class() >= $offermanage_class ? "" : "").""); + } + print("
    ".$lang_offers['col_type']."".$lang_offers['col_title']."".$lang_offers['col_vote_results']."\"comments\"".$lang_offers['col_comment']."\"time\"".$lang_offers['col_timeout']."".$lang_offers['col_offered_by']."".$lang_offers['col_act']."
    ".return_category_image($arr['cat_id'], "")."".htmlspecialchars($dispname)."".($CURUSER['appendnew'] != 'no' && strtotime($arr["added"]) >= $last_offer ? " (".$lang_offers['text_new'].")" : "").$allowed."".$v_res."".$lang_offers['text_yep']."".$lang_offers['text_nah']."".$comment."" . $addtime. "".$timeout."".$addedby."\"D\"
    \"E\"
    \n"); + echo $pagerbottom; +if(!isset($CURUSER) || $CURUSER['showlastcom'] == 'yes') +create_tooltip_container($lastcom_tooltip, 400); +} +end_main_frame(); +$USERUPDATESET[] = "last_offer = ".sqlesc(date("Y-m-d H:i:s")); +stdfoot(); +?> diff --git a/ok.php b/ok.php new file mode 100644 index 00000000..512bb914 --- /dev/null +++ b/ok.php @@ -0,0 +1,60 @@ + diff --git a/opensearch.php b/opensearch.php new file mode 100644 index 00000000..9470c64c --- /dev/null +++ b/opensearch.php @@ -0,0 +1,57 @@ +new_page('opensearch_description', 86400); +if (!$Cache->get_page()){ + $Cache->add_whole_row(); + print("\n"); +?> + + Torrents + Search Torrents at - . + + + + + + Torrents + Torrents Search + + /favicon.ico + /torrents.php + + Staff + + limited + * + UTF-8 + UTF-8 + +end_whole_row(); + $Cache->cache_page(); +} +echo $Cache->next_row(); +?> diff --git a/pic/.htaccess b/pic/.htaccess new file mode 100644 index 00000000..9e2e17c4 --- /dev/null +++ b/pic/.htaccess @@ -0,0 +1,3 @@ +Options -Indexes +Order allow,deny +Allow from all diff --git a/pic/administrator.gif b/pic/administrator.gif new file mode 100644 index 00000000..b819e8bb Binary files /dev/null and b/pic/administrator.gif differ diff --git a/pic/alipaybutton.gif b/pic/alipaybutton.gif new file mode 100644 index 00000000..eaa60efe Binary files /dev/null and b/pic/alipaybutton.gif differ diff --git a/pic/attachicons/archive.gif b/pic/attachicons/archive.gif new file mode 100644 index 00000000..9e6fa549 Binary files /dev/null and b/pic/attachicons/archive.gif differ diff --git a/pic/attachicons/audio.gif b/pic/attachicons/audio.gif new file mode 100644 index 00000000..04c2ce88 Binary files /dev/null and b/pic/attachicons/audio.gif differ diff --git a/pic/attachicons/common.gif b/pic/attachicons/common.gif new file mode 100644 index 00000000..98328eb8 Binary files /dev/null and b/pic/attachicons/common.gif differ diff --git a/pic/attachicons/flv.gif b/pic/attachicons/flv.gif new file mode 100644 index 00000000..d605a1f8 Binary files /dev/null and b/pic/attachicons/flv.gif differ diff --git a/pic/attachicons/image.gif b/pic/attachicons/image.gif new file mode 100644 index 00000000..16e6f213 Binary files /dev/null and b/pic/attachicons/image.gif differ diff --git a/pic/attachicons/torrent.gif b/pic/attachicons/torrent.gif new file mode 100644 index 00000000..da3e5e2f Binary files /dev/null and b/pic/attachicons/torrent.gif differ diff --git a/pic/banned.gif b/pic/banned.gif new file mode 100644 index 00000000..4d6a542f Binary files /dev/null and b/pic/banned.gif differ diff --git a/pic/bonusformulaa.png b/pic/bonusformulaa.png new file mode 100644 index 00000000..38c22be0 Binary files /dev/null and b/pic/bonusformulaa.png differ diff --git a/pic/bonusformulab.png b/pic/bonusformulab.png new file mode 100644 index 00000000..18986624 Binary files /dev/null and b/pic/bonusformulab.png differ diff --git a/pic/category/chd/scenetorrents/catsprites.css b/pic/category/chd/scenetorrents/catsprites.css new file mode 100644 index 00000000..480fa53b --- /dev/null +++ b/pic/category/chd/scenetorrents/catsprites.css @@ -0,0 +1,54 @@ +img.c_movies +{ +width:45px; +height:46px; +background-position: 0 0; +} +img.c_doc +{ +width:45px; +height:46px; +background-position: -45px 0; +} +img.c_anime +{ +width:45px; +height:46px; +background-position: 0 -46px; +} +img.c_tvseries +{ +width:45px; +height:46px; +background-position: -45px -46px; +} +img.c_tvshows +{ +width:45px; +height:46px; +background-position: 0 -92px; +} +img.c_mv +{ +width:45px; +height:46px; +background-position: -45px -92px; +} +img.c_sports +{ +width:45px; +height:46px; +background-position: 0 -138px; +} +img.c_misc +{ +width:45px; +height:46px; +background-position: -45px -138px; +} +img.c_hqaudio +{ +width:45px; +height:46px; +background-position: 0 -184px; +} diff --git a/pic/category/chd/scenetorrents/chs/catsprites.png b/pic/category/chd/scenetorrents/chs/catsprites.png new file mode 100644 index 00000000..9774e764 Binary files /dev/null and b/pic/category/chd/scenetorrents/chs/catsprites.png differ diff --git a/pic/category/chd/scenetorrents/cht/catsprites.png b/pic/category/chd/scenetorrents/cht/catsprites.png new file mode 100644 index 00000000..7d6b5053 Binary files /dev/null and b/pic/category/chd/scenetorrents/cht/catsprites.png differ diff --git a/pic/category/chd/scenetorrents/en/catsprites.png b/pic/category/chd/scenetorrents/en/catsprites.png new file mode 100644 index 00000000..69103871 Binary files /dev/null and b/pic/category/chd/scenetorrents/en/catsprites.png differ diff --git a/pic/cattrans.gif b/pic/cattrans.gif new file mode 100644 index 00000000..558e8d16 Binary files /dev/null and b/pic/cattrans.gif differ diff --git a/pic/crazy.gif b/pic/crazy.gif new file mode 100644 index 00000000..759628ae Binary files /dev/null and b/pic/crazy.gif differ diff --git a/pic/default_avatar.png b/pic/default_avatar.png new file mode 100644 index 00000000..70c55102 Binary files /dev/null and b/pic/default_avatar.png differ diff --git a/pic/elite.gif b/pic/elite.gif new file mode 100644 index 00000000..468fb8bd Binary files /dev/null and b/pic/elite.gif differ diff --git a/pic/extreme.gif b/pic/extreme.gif new file mode 100644 index 00000000..b4989bc4 Binary files /dev/null and b/pic/extreme.gif differ diff --git a/pic/flag/afghanistan.gif b/pic/flag/afghanistan.gif new file mode 100644 index 00000000..d87883f1 Binary files /dev/null and b/pic/flag/afghanistan.gif differ diff --git a/pic/flag/albania.gif b/pic/flag/albania.gif new file mode 100644 index 00000000..a83f73a6 Binary files /dev/null and b/pic/flag/albania.gif differ diff --git a/pic/flag/algeria.gif b/pic/flag/algeria.gif new file mode 100644 index 00000000..47df3995 Binary files /dev/null and b/pic/flag/algeria.gif differ diff --git a/pic/flag/andorra.gif b/pic/flag/andorra.gif new file mode 100644 index 00000000..d0a126c4 Binary files /dev/null and b/pic/flag/andorra.gif differ diff --git a/pic/flag/angola.gif b/pic/flag/angola.gif new file mode 100644 index 00000000..1da06afe Binary files /dev/null and b/pic/flag/angola.gif differ diff --git a/pic/flag/antiguabarbuda.gif b/pic/flag/antiguabarbuda.gif new file mode 100644 index 00000000..c5fc516e Binary files /dev/null and b/pic/flag/antiguabarbuda.gif differ diff --git a/pic/flag/argentina.gif b/pic/flag/argentina.gif new file mode 100644 index 00000000..a0f7bf0a Binary files /dev/null and b/pic/flag/argentina.gif differ diff --git a/pic/flag/armenia.gif b/pic/flag/armenia.gif new file mode 100644 index 00000000..c007dd57 Binary files /dev/null and b/pic/flag/armenia.gif differ diff --git a/pic/flag/australia.gif b/pic/flag/australia.gif new file mode 100644 index 00000000..e8f098f8 Binary files /dev/null and b/pic/flag/australia.gif differ diff --git a/pic/flag/austria.gif b/pic/flag/austria.gif new file mode 100644 index 00000000..879ed36b Binary files /dev/null and b/pic/flag/austria.gif differ diff --git a/pic/flag/azerbaijan.gif b/pic/flag/azerbaijan.gif new file mode 100644 index 00000000..80b68f8e Binary files /dev/null and b/pic/flag/azerbaijan.gif differ diff --git a/pic/flag/bahamas.gif b/pic/flag/bahamas.gif new file mode 100644 index 00000000..2e2ca3bc Binary files /dev/null and b/pic/flag/bahamas.gif differ diff --git a/pic/flag/bahrain.gif b/pic/flag/bahrain.gif new file mode 100644 index 00000000..4de7c768 Binary files /dev/null and b/pic/flag/bahrain.gif differ diff --git a/pic/flag/bangladesh.gif b/pic/flag/bangladesh.gif new file mode 100644 index 00000000..d60de675 Binary files /dev/null and b/pic/flag/bangladesh.gif differ diff --git a/pic/flag/barbados.gif b/pic/flag/barbados.gif new file mode 100644 index 00000000..0e7790da Binary files /dev/null and b/pic/flag/barbados.gif differ diff --git a/pic/flag/belarus.gif b/pic/flag/belarus.gif new file mode 100644 index 00000000..d322be0c Binary files /dev/null and b/pic/flag/belarus.gif differ diff --git a/pic/flag/belgium.gif b/pic/flag/belgium.gif new file mode 100644 index 00000000..4725a916 Binary files /dev/null and b/pic/flag/belgium.gif differ diff --git a/pic/flag/belize.gif b/pic/flag/belize.gif new file mode 100644 index 00000000..9f71cdf2 Binary files /dev/null and b/pic/flag/belize.gif differ diff --git a/pic/flag/benin.gif b/pic/flag/benin.gif new file mode 100644 index 00000000..abaf14b2 Binary files /dev/null and b/pic/flag/benin.gif differ diff --git a/pic/flag/bhutan.gif b/pic/flag/bhutan.gif new file mode 100644 index 00000000..a5a3d379 Binary files /dev/null and b/pic/flag/bhutan.gif differ diff --git a/pic/flag/bolivia.gif b/pic/flag/bolivia.gif new file mode 100644 index 00000000..6ffff80d Binary files /dev/null and b/pic/flag/bolivia.gif differ diff --git a/pic/flag/bosniaherzegovina.gif b/pic/flag/bosniaherzegovina.gif new file mode 100644 index 00000000..7fa8eb86 Binary files /dev/null and b/pic/flag/bosniaherzegovina.gif differ diff --git a/pic/flag/botswana.gif b/pic/flag/botswana.gif new file mode 100644 index 00000000..1f9d5c2d Binary files /dev/null and b/pic/flag/botswana.gif differ diff --git a/pic/flag/brazil.gif b/pic/flag/brazil.gif new file mode 100644 index 00000000..64d10472 Binary files /dev/null and b/pic/flag/brazil.gif differ diff --git a/pic/flag/brunei.gif b/pic/flag/brunei.gif new file mode 100644 index 00000000..66770b87 Binary files /dev/null and b/pic/flag/brunei.gif differ diff --git a/pic/flag/bulgaria.gif b/pic/flag/bulgaria.gif new file mode 100644 index 00000000..335083e4 Binary files /dev/null and b/pic/flag/bulgaria.gif differ diff --git a/pic/flag/burkinafaso.gif b/pic/flag/burkinafaso.gif new file mode 100644 index 00000000..4114b6b9 Binary files /dev/null and b/pic/flag/burkinafaso.gif differ diff --git a/pic/flag/burma.gif b/pic/flag/burma.gif new file mode 100644 index 00000000..8c64bd0c Binary files /dev/null and b/pic/flag/burma.gif differ diff --git a/pic/flag/burund.gif b/pic/flag/burund.gif new file mode 100644 index 00000000..da31dd2d Binary files /dev/null and b/pic/flag/burund.gif differ diff --git a/pic/flag/cambodia.gif b/pic/flag/cambodia.gif new file mode 100644 index 00000000..fe89b742 Binary files /dev/null and b/pic/flag/cambodia.gif differ diff --git a/pic/flag/cameroon.gif b/pic/flag/cameroon.gif new file mode 100644 index 00000000..102fcab9 Binary files /dev/null and b/pic/flag/cameroon.gif differ diff --git a/pic/flag/canada.gif b/pic/flag/canada.gif new file mode 100644 index 00000000..9d0aa0a9 Binary files /dev/null and b/pic/flag/canada.gif differ diff --git a/pic/flag/centralafricanrep.gif b/pic/flag/centralafricanrep.gif new file mode 100644 index 00000000..cef5b9cc Binary files /dev/null and b/pic/flag/centralafricanrep.gif differ diff --git a/pic/flag/chad.gif b/pic/flag/chad.gif new file mode 100644 index 00000000..949fab8a Binary files /dev/null and b/pic/flag/chad.gif differ diff --git a/pic/flag/chile.gif b/pic/flag/chile.gif new file mode 100644 index 00000000..8c3a4c6a Binary files /dev/null and b/pic/flag/chile.gif differ diff --git a/pic/flag/china.gif b/pic/flag/china.gif new file mode 100644 index 00000000..4eca9f05 Binary files /dev/null and b/pic/flag/china.gif differ diff --git a/pic/flag/colombia.gif b/pic/flag/colombia.gif new file mode 100644 index 00000000..124d203d Binary files /dev/null and b/pic/flag/colombia.gif differ diff --git a/pic/flag/columbia.gif b/pic/flag/columbia.gif new file mode 100644 index 00000000..124d203d Binary files /dev/null and b/pic/flag/columbia.gif differ diff --git a/pic/flag/comoros.gif b/pic/flag/comoros.gif new file mode 100644 index 00000000..d0fa438b Binary files /dev/null and b/pic/flag/comoros.gif differ diff --git a/pic/flag/congo.gif b/pic/flag/congo.gif new file mode 100644 index 00000000..2f187095 Binary files /dev/null and b/pic/flag/congo.gif differ diff --git a/pic/flag/costarica.gif b/pic/flag/costarica.gif new file mode 100644 index 00000000..a949d10f Binary files /dev/null and b/pic/flag/costarica.gif differ diff --git a/pic/flag/croatia.gif b/pic/flag/croatia.gif new file mode 100644 index 00000000..b05cdbd4 Binary files /dev/null and b/pic/flag/croatia.gif differ diff --git a/pic/flag/cuba.gif b/pic/flag/cuba.gif new file mode 100644 index 00000000..7bc7f4a3 Binary files /dev/null and b/pic/flag/cuba.gif differ diff --git a/pic/flag/cyprus.gif b/pic/flag/cyprus.gif new file mode 100644 index 00000000..feff9da5 Binary files /dev/null and b/pic/flag/cyprus.gif differ diff --git a/pic/flag/czechrep.gif b/pic/flag/czechrep.gif new file mode 100644 index 00000000..61bd889e Binary files /dev/null and b/pic/flag/czechrep.gif differ diff --git a/pic/flag/demrepcongo.gif b/pic/flag/demrepcongo.gif new file mode 100644 index 00000000..a0f63663 Binary files /dev/null and b/pic/flag/demrepcongo.gif differ diff --git a/pic/flag/denmark.gif b/pic/flag/denmark.gif new file mode 100644 index 00000000..45b796ee Binary files /dev/null and b/pic/flag/denmark.gif differ diff --git a/pic/flag/djiboutil.gif b/pic/flag/djiboutil.gif new file mode 100644 index 00000000..af683f36 Binary files /dev/null and b/pic/flag/djiboutil.gif differ diff --git a/pic/flag/dominica.gif b/pic/flag/dominica.gif new file mode 100644 index 00000000..a607e303 Binary files /dev/null and b/pic/flag/dominica.gif differ diff --git a/pic/flag/dominicanrep.gif b/pic/flag/dominicanrep.gif new file mode 100644 index 00000000..b3af5424 Binary files /dev/null and b/pic/flag/dominicanrep.gif differ diff --git a/pic/flag/ecuador.gif b/pic/flag/ecuador.gif new file mode 100644 index 00000000..22db389a Binary files /dev/null and b/pic/flag/ecuador.gif differ diff --git a/pic/flag/egypt.gif b/pic/flag/egypt.gif new file mode 100644 index 00000000..2dd475a8 Binary files /dev/null and b/pic/flag/egypt.gif differ diff --git a/pic/flag/elsalvado.gif b/pic/flag/elsalvado.gif new file mode 100644 index 00000000..decf31eb Binary files /dev/null and b/pic/flag/elsalvado.gif differ diff --git a/pic/flag/eq_guinea.gif b/pic/flag/eq_guinea.gif new file mode 100644 index 00000000..aa2a7ee9 Binary files /dev/null and b/pic/flag/eq_guinea.gif differ diff --git a/pic/flag/eritrea.gif b/pic/flag/eritrea.gif new file mode 100644 index 00000000..d8ab3e95 Binary files /dev/null and b/pic/flag/eritrea.gif differ diff --git a/pic/flag/estonia.gif b/pic/flag/estonia.gif new file mode 100644 index 00000000..bc81319b Binary files /dev/null and b/pic/flag/estonia.gif differ diff --git a/pic/flag/ethiopia.gif b/pic/flag/ethiopia.gif new file mode 100644 index 00000000..e53a1eee Binary files /dev/null and b/pic/flag/ethiopia.gif differ diff --git a/pic/flag/fiji.gif b/pic/flag/fiji.gif new file mode 100644 index 00000000..3428f27f Binary files /dev/null and b/pic/flag/fiji.gif differ diff --git a/pic/flag/finland.gif b/pic/flag/finland.gif new file mode 100644 index 00000000..a3d8e3ea Binary files /dev/null and b/pic/flag/finland.gif differ diff --git a/pic/flag/france.gif b/pic/flag/france.gif new file mode 100644 index 00000000..ae18711f Binary files /dev/null and b/pic/flag/france.gif differ diff --git a/pic/flag/gabon.gif b/pic/flag/gabon.gif new file mode 100644 index 00000000..e1a519bf Binary files /dev/null and b/pic/flag/gabon.gif differ diff --git a/pic/flag/gambia.gif b/pic/flag/gambia.gif new file mode 100644 index 00000000..12e41389 Binary files /dev/null and b/pic/flag/gambia.gif differ diff --git a/pic/flag/georgia.gif b/pic/flag/georgia.gif new file mode 100644 index 00000000..3c9defd4 Binary files /dev/null and b/pic/flag/georgia.gif differ diff --git a/pic/flag/germany.gif b/pic/flag/germany.gif new file mode 100644 index 00000000..dfdc9391 Binary files /dev/null and b/pic/flag/germany.gif differ diff --git a/pic/flag/ghana.gif b/pic/flag/ghana.gif new file mode 100644 index 00000000..e98f2373 Binary files /dev/null and b/pic/flag/ghana.gif differ diff --git a/pic/flag/greece.gif b/pic/flag/greece.gif new file mode 100644 index 00000000..8e02abcc Binary files /dev/null and b/pic/flag/greece.gif differ diff --git a/pic/flag/grenada.gif b/pic/flag/grenada.gif new file mode 100644 index 00000000..1b88effb Binary files /dev/null and b/pic/flag/grenada.gif differ diff --git a/pic/flag/grenadines.gif b/pic/flag/grenadines.gif new file mode 100644 index 00000000..f6077ff6 Binary files /dev/null and b/pic/flag/grenadines.gif differ diff --git a/pic/flag/guatemala.gif b/pic/flag/guatemala.gif new file mode 100644 index 00000000..dd29d038 Binary files /dev/null and b/pic/flag/guatemala.gif differ diff --git a/pic/flag/guineabissau.gif b/pic/flag/guineabissau.gif new file mode 100644 index 00000000..735cdb84 Binary files /dev/null and b/pic/flag/guineabissau.gif differ diff --git a/pic/flag/guineal.gif b/pic/flag/guineal.gif new file mode 100644 index 00000000..37f97aa2 Binary files /dev/null and b/pic/flag/guineal.gif differ diff --git a/pic/flag/guyana.gif b/pic/flag/guyana.gif new file mode 100644 index 00000000..8fdb7824 Binary files /dev/null and b/pic/flag/guyana.gif differ diff --git a/pic/flag/haiti.gif b/pic/flag/haiti.gif new file mode 100644 index 00000000..42d6afe6 Binary files /dev/null and b/pic/flag/haiti.gif differ diff --git a/pic/flag/honduras.gif b/pic/flag/honduras.gif new file mode 100644 index 00000000..9f6be06d Binary files /dev/null and b/pic/flag/honduras.gif differ diff --git a/pic/flag/hong_kong.gif b/pic/flag/hong_kong.gif new file mode 100644 index 00000000..7ca38a1c Binary files /dev/null and b/pic/flag/hong_kong.gif differ diff --git a/pic/flag/hongkong.gif b/pic/flag/hongkong.gif new file mode 100644 index 00000000..7ca38a1c Binary files /dev/null and b/pic/flag/hongkong.gif differ diff --git a/pic/flag/hungary.gif b/pic/flag/hungary.gif new file mode 100644 index 00000000..f110af7f Binary files /dev/null and b/pic/flag/hungary.gif differ diff --git a/pic/flag/iceland.gif b/pic/flag/iceland.gif new file mode 100644 index 00000000..063f139b Binary files /dev/null and b/pic/flag/iceland.gif differ diff --git a/pic/flag/india.gif b/pic/flag/india.gif new file mode 100644 index 00000000..bb2a3188 Binary files /dev/null and b/pic/flag/india.gif differ diff --git a/pic/flag/indonesia.gif b/pic/flag/indonesia.gif new file mode 100644 index 00000000..31b5f2b5 Binary files /dev/null and b/pic/flag/indonesia.gif differ diff --git a/pic/flag/iran.gif b/pic/flag/iran.gif new file mode 100644 index 00000000..222d5be3 Binary files /dev/null and b/pic/flag/iran.gif differ diff --git a/pic/flag/iraq.gif b/pic/flag/iraq.gif new file mode 100644 index 00000000..e6bc3d0e Binary files /dev/null and b/pic/flag/iraq.gif differ diff --git a/pic/flag/ireland.gif b/pic/flag/ireland.gif new file mode 100644 index 00000000..9c49e0fa Binary files /dev/null and b/pic/flag/ireland.gif differ diff --git a/pic/flag/israel.gif b/pic/flag/israel.gif new file mode 100644 index 00000000..e6fcacb1 Binary files /dev/null and b/pic/flag/israel.gif differ diff --git a/pic/flag/italy.gif b/pic/flag/italy.gif new file mode 100644 index 00000000..e336976b Binary files /dev/null and b/pic/flag/italy.gif differ diff --git a/pic/flag/ivorycoast.gif b/pic/flag/ivorycoast.gif new file mode 100644 index 00000000..bc3a5bab Binary files /dev/null and b/pic/flag/ivorycoast.gif differ diff --git a/pic/flag/jamaica.gif b/pic/flag/jamaica.gif new file mode 100644 index 00000000..ba147622 Binary files /dev/null and b/pic/flag/jamaica.gif differ diff --git a/pic/flag/japan.gif b/pic/flag/japan.gif new file mode 100644 index 00000000..d3928a9d Binary files /dev/null and b/pic/flag/japan.gif differ diff --git a/pic/flag/jollyroger.gif b/pic/flag/jollyroger.gif new file mode 100644 index 00000000..00333974 Binary files /dev/null and b/pic/flag/jollyroger.gif differ diff --git a/pic/flag/jordan.gif b/pic/flag/jordan.gif new file mode 100644 index 00000000..cc1fcd6f Binary files /dev/null and b/pic/flag/jordan.gif differ diff --git a/pic/flag/kazakhstan.gif b/pic/flag/kazakhstan.gif new file mode 100644 index 00000000..56930f39 Binary files /dev/null and b/pic/flag/kazakhstan.gif differ diff --git a/pic/flag/kenya.gif b/pic/flag/kenya.gif new file mode 100644 index 00000000..fe77c7b2 Binary files /dev/null and b/pic/flag/kenya.gif differ diff --git a/pic/flag/kiribati.gif b/pic/flag/kiribati.gif new file mode 100644 index 00000000..9aad0665 Binary files /dev/null and b/pic/flag/kiribati.gif differ diff --git a/pic/flag/kuwait.gif b/pic/flag/kuwait.gif new file mode 100644 index 00000000..3eef8bd1 Binary files /dev/null and b/pic/flag/kuwait.gif differ diff --git a/pic/flag/kyrgyzstan.gif b/pic/flag/kyrgyzstan.gif new file mode 100644 index 00000000..b234f129 Binary files /dev/null and b/pic/flag/kyrgyzstan.gif differ diff --git a/pic/flag/laos.gif b/pic/flag/laos.gif new file mode 100644 index 00000000..936bbcdf Binary files /dev/null and b/pic/flag/laos.gif differ diff --git a/pic/flag/latvia.gif b/pic/flag/latvia.gif new file mode 100644 index 00000000..cb0f6a5c Binary files /dev/null and b/pic/flag/latvia.gif differ diff --git a/pic/flag/lebanon.gif b/pic/flag/lebanon.gif new file mode 100644 index 00000000..d35a338c Binary files /dev/null and b/pic/flag/lebanon.gif differ diff --git a/pic/flag/liberia.gif b/pic/flag/liberia.gif new file mode 100644 index 00000000..0e5dd713 Binary files /dev/null and b/pic/flag/liberia.gif differ diff --git a/pic/flag/libya.gif b/pic/flag/libya.gif new file mode 100644 index 00000000..6f556d22 Binary files /dev/null and b/pic/flag/libya.gif differ diff --git a/pic/flag/liechtenstein.gif b/pic/flag/liechtenstein.gif new file mode 100644 index 00000000..a92acf8a Binary files /dev/null and b/pic/flag/liechtenstein.gif differ diff --git a/pic/flag/lithuania.gif b/pic/flag/lithuania.gif new file mode 100644 index 00000000..cceeddbd Binary files /dev/null and b/pic/flag/lithuania.gif differ diff --git a/pic/flag/luxembourg.gif b/pic/flag/luxembourg.gif new file mode 100644 index 00000000..5823abcc Binary files /dev/null and b/pic/flag/luxembourg.gif differ diff --git a/pic/flag/macadonia.gif b/pic/flag/macadonia.gif new file mode 100644 index 00000000..a3976523 Binary files /dev/null and b/pic/flag/macadonia.gif differ diff --git a/pic/flag/macau.gif b/pic/flag/macau.gif new file mode 100644 index 00000000..cecd6794 Binary files /dev/null and b/pic/flag/macau.gif differ diff --git a/pic/flag/madagascar.gif b/pic/flag/madagascar.gif new file mode 100644 index 00000000..d7b3918c Binary files /dev/null and b/pic/flag/madagascar.gif differ diff --git a/pic/flag/malawi.gif b/pic/flag/malawi.gif new file mode 100644 index 00000000..e3c0de3b Binary files /dev/null and b/pic/flag/malawi.gif differ diff --git a/pic/flag/malaysia.gif b/pic/flag/malaysia.gif new file mode 100644 index 00000000..95e123e7 Binary files /dev/null and b/pic/flag/malaysia.gif differ diff --git a/pic/flag/maldives.gif b/pic/flag/maldives.gif new file mode 100644 index 00000000..046cc89e Binary files /dev/null and b/pic/flag/maldives.gif differ diff --git a/pic/flag/mali.gif b/pic/flag/mali.gif new file mode 100644 index 00000000..eee0eaa9 Binary files /dev/null and b/pic/flag/mali.gif differ diff --git a/pic/flag/malta.gif b/pic/flag/malta.gif new file mode 100644 index 00000000..d3a8e277 Binary files /dev/null and b/pic/flag/malta.gif differ diff --git a/pic/flag/mauritania.gif b/pic/flag/mauritania.gif new file mode 100644 index 00000000..53d058e4 Binary files /dev/null and b/pic/flag/mauritania.gif differ diff --git a/pic/flag/mauritius.gif b/pic/flag/mauritius.gif new file mode 100644 index 00000000..c8ab0e49 Binary files /dev/null and b/pic/flag/mauritius.gif differ diff --git a/pic/flag/mexico.gif b/pic/flag/mexico.gif new file mode 100644 index 00000000..c1c91906 Binary files /dev/null and b/pic/flag/mexico.gif differ diff --git a/pic/flag/micronesia.gif b/pic/flag/micronesia.gif new file mode 100644 index 00000000..d641bd9e Binary files /dev/null and b/pic/flag/micronesia.gif differ diff --git a/pic/flag/moldova.gif b/pic/flag/moldova.gif new file mode 100644 index 00000000..e73013e0 Binary files /dev/null and b/pic/flag/moldova.gif differ diff --git a/pic/flag/monaco.gif b/pic/flag/monaco.gif new file mode 100644 index 00000000..31b5f2b5 Binary files /dev/null and b/pic/flag/monaco.gif differ diff --git a/pic/flag/mongolia.gif b/pic/flag/mongolia.gif new file mode 100644 index 00000000..d3d2d023 Binary files /dev/null and b/pic/flag/mongolia.gif differ diff --git a/pic/flag/morocco.gif b/pic/flag/morocco.gif new file mode 100644 index 00000000..c601e891 Binary files /dev/null and b/pic/flag/morocco.gif differ diff --git a/pic/flag/mozambique.gif b/pic/flag/mozambique.gif new file mode 100644 index 00000000..5edc6008 Binary files /dev/null and b/pic/flag/mozambique.gif differ diff --git a/pic/flag/namibia.gif b/pic/flag/namibia.gif new file mode 100644 index 00000000..a551090e Binary files /dev/null and b/pic/flag/namibia.gif differ diff --git a/pic/flag/nauru.gif b/pic/flag/nauru.gif new file mode 100644 index 00000000..d32292e4 Binary files /dev/null and b/pic/flag/nauru.gif differ diff --git a/pic/flag/nepal.gif b/pic/flag/nepal.gif new file mode 100644 index 00000000..3031f5bf Binary files /dev/null and b/pic/flag/nepal.gif differ diff --git a/pic/flag/nethantilles.gif b/pic/flag/nethantilles.gif new file mode 100644 index 00000000..bc2bbe32 Binary files /dev/null and b/pic/flag/nethantilles.gif differ diff --git a/pic/flag/netherlands.gif b/pic/flag/netherlands.gif new file mode 100644 index 00000000..4337dceb Binary files /dev/null and b/pic/flag/netherlands.gif differ diff --git a/pic/flag/newzealand.gif b/pic/flag/newzealand.gif new file mode 100644 index 00000000..58c5b060 Binary files /dev/null and b/pic/flag/newzealand.gif differ diff --git a/pic/flag/nicaragua.gif b/pic/flag/nicaragua.gif new file mode 100644 index 00000000..c7468f5b Binary files /dev/null and b/pic/flag/nicaragua.gif differ diff --git a/pic/flag/niger.gif b/pic/flag/niger.gif new file mode 100644 index 00000000..5e5ce0ef Binary files /dev/null and b/pic/flag/niger.gif differ diff --git a/pic/flag/nigeria.gif b/pic/flag/nigeria.gif new file mode 100644 index 00000000..bfc92209 Binary files /dev/null and b/pic/flag/nigeria.gif differ diff --git a/pic/flag/north_korea.gif b/pic/flag/north_korea.gif new file mode 100644 index 00000000..ae5227b0 Binary files /dev/null and b/pic/flag/north_korea.gif differ diff --git a/pic/flag/northkorea.gif b/pic/flag/northkorea.gif new file mode 100644 index 00000000..ae5227b0 Binary files /dev/null and b/pic/flag/northkorea.gif differ diff --git a/pic/flag/norway.gif b/pic/flag/norway.gif new file mode 100644 index 00000000..39213cd5 Binary files /dev/null and b/pic/flag/norway.gif differ diff --git a/pic/flag/oman.gif b/pic/flag/oman.gif new file mode 100644 index 00000000..2ed6d0aa Binary files /dev/null and b/pic/flag/oman.gif differ diff --git a/pic/flag/pakistan.gif b/pic/flag/pakistan.gif new file mode 100644 index 00000000..cf6fe820 Binary files /dev/null and b/pic/flag/pakistan.gif differ diff --git a/pic/flag/panama.gif b/pic/flag/panama.gif new file mode 100644 index 00000000..b0609c30 Binary files /dev/null and b/pic/flag/panama.gif differ diff --git a/pic/flag/papuanewguinea.gif b/pic/flag/papuanewguinea.gif new file mode 100644 index 00000000..f18bfde6 Binary files /dev/null and b/pic/flag/papuanewguinea.gif differ diff --git a/pic/flag/paraguay.gif b/pic/flag/paraguay.gif new file mode 100644 index 00000000..e3b55d1a Binary files /dev/null and b/pic/flag/paraguay.gif differ diff --git a/pic/flag/peru.gif b/pic/flag/peru.gif new file mode 100644 index 00000000..30ea6c9a Binary files /dev/null and b/pic/flag/peru.gif differ diff --git a/pic/flag/philippines.gif b/pic/flag/philippines.gif new file mode 100644 index 00000000..8bebe61f Binary files /dev/null and b/pic/flag/philippines.gif differ diff --git a/pic/flag/poland.gif b/pic/flag/poland.gif new file mode 100644 index 00000000..53df4bf2 Binary files /dev/null and b/pic/flag/poland.gif differ diff --git a/pic/flag/portugal.gif b/pic/flag/portugal.gif new file mode 100644 index 00000000..bc366303 Binary files /dev/null and b/pic/flag/portugal.gif differ diff --git a/pic/flag/puertorico.gif b/pic/flag/puertorico.gif new file mode 100644 index 00000000..e71150b6 Binary files /dev/null and b/pic/flag/puertorico.gif differ diff --git a/pic/flag/qatar.gif b/pic/flag/qatar.gif new file mode 100644 index 00000000..584cfdff Binary files /dev/null and b/pic/flag/qatar.gif differ diff --git a/pic/flag/rawanda.gif b/pic/flag/rawanda.gif new file mode 100644 index 00000000..c58ef215 Binary files /dev/null and b/pic/flag/rawanda.gif differ diff --git a/pic/flag/romania.gif b/pic/flag/romania.gif new file mode 100644 index 00000000..48704a90 Binary files /dev/null and b/pic/flag/romania.gif differ diff --git a/pic/flag/russia.gif b/pic/flag/russia.gif new file mode 100644 index 00000000..44c992b5 Binary files /dev/null and b/pic/flag/russia.gif differ diff --git a/pic/flag/sao_tome.gif b/pic/flag/sao_tome.gif new file mode 100644 index 00000000..64ad6d8d Binary files /dev/null and b/pic/flag/sao_tome.gif differ diff --git a/pic/flag/saudiarabia.gif b/pic/flag/saudiarabia.gif new file mode 100644 index 00000000..1ea838c7 Binary files /dev/null and b/pic/flag/saudiarabia.gif differ diff --git a/pic/flag/senegal.gif b/pic/flag/senegal.gif new file mode 100644 index 00000000..77ba5a9b Binary files /dev/null and b/pic/flag/senegal.gif differ diff --git a/pic/flag/serbia.gif b/pic/flag/serbia.gif new file mode 100644 index 00000000..49afe898 Binary files /dev/null and b/pic/flag/serbia.gif differ diff --git a/pic/flag/seychelles.gif b/pic/flag/seychelles.gif new file mode 100644 index 00000000..5046f258 Binary files /dev/null and b/pic/flag/seychelles.gif differ diff --git a/pic/flag/sierraleone.gif b/pic/flag/sierraleone.gif new file mode 100644 index 00000000..71048ad5 Binary files /dev/null and b/pic/flag/sierraleone.gif differ diff --git a/pic/flag/singapore.gif b/pic/flag/singapore.gif new file mode 100644 index 00000000..cf520fff Binary files /dev/null and b/pic/flag/singapore.gif differ diff --git a/pic/flag/slovakia.gif b/pic/flag/slovakia.gif new file mode 100644 index 00000000..d1298d01 Binary files /dev/null and b/pic/flag/slovakia.gif differ diff --git a/pic/flag/slovenia.gif b/pic/flag/slovenia.gif new file mode 100644 index 00000000..064278c5 Binary files /dev/null and b/pic/flag/slovenia.gif differ diff --git a/pic/flag/solomon_islands.gif b/pic/flag/solomon_islands.gif new file mode 100644 index 00000000..0ad17c81 Binary files /dev/null and b/pic/flag/solomon_islands.gif differ diff --git a/pic/flag/somalia.gif b/pic/flag/somalia.gif new file mode 100644 index 00000000..27eda756 Binary files /dev/null and b/pic/flag/somalia.gif differ diff --git a/pic/flag/south_korea.gif b/pic/flag/south_korea.gif new file mode 100644 index 00000000..38c833b6 Binary files /dev/null and b/pic/flag/south_korea.gif differ diff --git a/pic/flag/southafrica.gif b/pic/flag/southafrica.gif new file mode 100644 index 00000000..398370b7 Binary files /dev/null and b/pic/flag/southafrica.gif differ diff --git a/pic/flag/southkorea.gif b/pic/flag/southkorea.gif new file mode 100644 index 00000000..38c833b6 Binary files /dev/null and b/pic/flag/southkorea.gif differ diff --git a/pic/flag/spain.gif b/pic/flag/spain.gif new file mode 100644 index 00000000..28a93fe0 Binary files /dev/null and b/pic/flag/spain.gif differ diff --git a/pic/flag/srilanka.gif b/pic/flag/srilanka.gif new file mode 100644 index 00000000..047cdb9c Binary files /dev/null and b/pic/flag/srilanka.gif differ diff --git a/pic/flag/stkitts_nevis.gif b/pic/flag/stkitts_nevis.gif new file mode 100644 index 00000000..1eec7f62 Binary files /dev/null and b/pic/flag/stkitts_nevis.gif differ diff --git a/pic/flag/stlucia.gif b/pic/flag/stlucia.gif new file mode 100644 index 00000000..c04e4d28 Binary files /dev/null and b/pic/flag/stlucia.gif differ diff --git a/pic/flag/sudan.gif b/pic/flag/sudan.gif new file mode 100644 index 00000000..c485d0f8 Binary files /dev/null and b/pic/flag/sudan.gif differ diff --git a/pic/flag/suriname.gif b/pic/flag/suriname.gif new file mode 100644 index 00000000..38984c47 Binary files /dev/null and b/pic/flag/suriname.gif differ diff --git a/pic/flag/sweden.gif b/pic/flag/sweden.gif new file mode 100644 index 00000000..a82090e7 Binary files /dev/null and b/pic/flag/sweden.gif differ diff --git a/pic/flag/switzerland.gif b/pic/flag/switzerland.gif new file mode 100644 index 00000000..2e2144c6 Binary files /dev/null and b/pic/flag/switzerland.gif differ diff --git a/pic/flag/syria.gif b/pic/flag/syria.gif new file mode 100644 index 00000000..a2667b08 Binary files /dev/null and b/pic/flag/syria.gif differ diff --git a/pic/flag/taiwan.gif b/pic/flag/taiwan.gif new file mode 100644 index 00000000..ac071934 Binary files /dev/null and b/pic/flag/taiwan.gif differ diff --git a/pic/flag/tajikistan.gif b/pic/flag/tajikistan.gif new file mode 100644 index 00000000..89ebfa44 Binary files /dev/null and b/pic/flag/tajikistan.gif differ diff --git a/pic/flag/tanzania.gif b/pic/flag/tanzania.gif new file mode 100644 index 00000000..c6e3b1ce Binary files /dev/null and b/pic/flag/tanzania.gif differ diff --git a/pic/flag/thailand.gif b/pic/flag/thailand.gif new file mode 100644 index 00000000..a8aacb77 Binary files /dev/null and b/pic/flag/thailand.gif differ diff --git a/pic/flag/togo.gif b/pic/flag/togo.gif new file mode 100644 index 00000000..f99f882b Binary files /dev/null and b/pic/flag/togo.gif differ diff --git a/pic/flag/tonga.gif b/pic/flag/tonga.gif new file mode 100644 index 00000000..c10b2ca8 Binary files /dev/null and b/pic/flag/tonga.gif differ diff --git a/pic/flag/trinidadandtobago.gif b/pic/flag/trinidadandtobago.gif new file mode 100644 index 00000000..50a69475 Binary files /dev/null and b/pic/flag/trinidadandtobago.gif differ diff --git a/pic/flag/tunisia.gif b/pic/flag/tunisia.gif new file mode 100644 index 00000000..cedb96c8 Binary files /dev/null and b/pic/flag/tunisia.gif differ diff --git a/pic/flag/turkey.gif b/pic/flag/turkey.gif new file mode 100644 index 00000000..e56d1095 Binary files /dev/null and b/pic/flag/turkey.gif differ diff --git a/pic/flag/turkmenistan.gif b/pic/flag/turkmenistan.gif new file mode 100644 index 00000000..d381bd95 Binary files /dev/null and b/pic/flag/turkmenistan.gif differ diff --git a/pic/flag/tuvala.gif b/pic/flag/tuvala.gif new file mode 100644 index 00000000..6cbb5b40 Binary files /dev/null and b/pic/flag/tuvala.gif differ diff --git a/pic/flag/uae.gif b/pic/flag/uae.gif new file mode 100644 index 00000000..961e9118 Binary files /dev/null and b/pic/flag/uae.gif differ diff --git a/pic/flag/uganda.gif b/pic/flag/uganda.gif new file mode 100644 index 00000000..8b903d9a Binary files /dev/null and b/pic/flag/uganda.gif differ diff --git a/pic/flag/uk.gif b/pic/flag/uk.gif new file mode 100644 index 00000000..455263de Binary files /dev/null and b/pic/flag/uk.gif differ diff --git a/pic/flag/ukraine.gif b/pic/flag/ukraine.gif new file mode 100644 index 00000000..0d0f931d Binary files /dev/null and b/pic/flag/ukraine.gif differ diff --git a/pic/flag/uruguay.gif b/pic/flag/uruguay.gif new file mode 100644 index 00000000..14c4d696 Binary files /dev/null and b/pic/flag/uruguay.gif differ diff --git a/pic/flag/usa.gif b/pic/flag/usa.gif new file mode 100644 index 00000000..00c46739 Binary files /dev/null and b/pic/flag/usa.gif differ diff --git a/pic/flag/ussr.gif b/pic/flag/ussr.gif new file mode 100644 index 00000000..0896476c Binary files /dev/null and b/pic/flag/ussr.gif differ diff --git a/pic/flag/uzbekistan.gif b/pic/flag/uzbekistan.gif new file mode 100644 index 00000000..eb613427 Binary files /dev/null and b/pic/flag/uzbekistan.gif differ diff --git a/pic/flag/vanuatu.gif b/pic/flag/vanuatu.gif new file mode 100644 index 00000000..8d4caea5 Binary files /dev/null and b/pic/flag/vanuatu.gif differ diff --git a/pic/flag/venezuela.gif b/pic/flag/venezuela.gif new file mode 100644 index 00000000..00bb2006 Binary files /dev/null and b/pic/flag/venezuela.gif differ diff --git a/pic/flag/vietnam.gif b/pic/flag/vietnam.gif new file mode 100644 index 00000000..1c795a58 Binary files /dev/null and b/pic/flag/vietnam.gif differ diff --git a/pic/flag/westernsamoa.gif b/pic/flag/westernsamoa.gif new file mode 100644 index 00000000..d7397a43 Binary files /dev/null and b/pic/flag/westernsamoa.gif differ diff --git a/pic/flag/yemen.gif b/pic/flag/yemen.gif new file mode 100644 index 00000000..5313a191 Binary files /dev/null and b/pic/flag/yemen.gif differ diff --git a/pic/flag/yugoslavia.gif b/pic/flag/yugoslavia.gif new file mode 100644 index 00000000..936aa6c3 Binary files /dev/null and b/pic/flag/yugoslavia.gif differ diff --git a/pic/flag/zaire.gif b/pic/flag/zaire.gif new file mode 100644 index 00000000..63fdf47d Binary files /dev/null and b/pic/flag/zaire.gif differ diff --git a/pic/flag/zambia.gif b/pic/flag/zambia.gif new file mode 100644 index 00000000..95264376 Binary files /dev/null and b/pic/flag/zambia.gif differ diff --git a/pic/flag/zimbabwe.gif b/pic/flag/zimbabwe.gif new file mode 100644 index 00000000..c8d5825d Binary files /dev/null and b/pic/flag/zimbabwe.gif differ diff --git a/pic/forum_pic/chs/avatartoobig.png b/pic/forum_pic/chs/avatartoobig.png new file mode 100644 index 00000000..88d44241 Binary files /dev/null and b/pic/forum_pic/chs/avatartoobig.png differ diff --git a/pic/forum_pic/chs/donate.gif b/pic/forum_pic/chs/donate.gif new file mode 100644 index 00000000..120d12b4 Binary files /dev/null and b/pic/forum_pic/chs/donate.gif differ diff --git a/pic/forum_pic/chs/forum.gif b/pic/forum_pic/chs/forum.gif new file mode 100644 index 00000000..b7d92610 Binary files /dev/null and b/pic/forum_pic/chs/forum.gif differ diff --git a/pic/forum_pic/chs/forumsprites.css b/pic/forum_pic/chs/forumsprites.css new file mode 100644 index 00000000..fc229687 --- /dev/null +++ b/pic/forum_pic/chs/forumsprites.css @@ -0,0 +1,54 @@ +img.f_reply +{ +width:87px; +height:25px; +background:url(forum.gif) 0 0; +} +img.f_new +{ +width:87px; +height:25px; +background:url(forum.gif) -87px 0; +} +img.f_delete +{ +width:69px; +height:25px; +background:url(forum.gif) 0 -25px; +} +img.f_edit +{ +width:62px; +height:25px; +background:url(forum.gif) -69px -25px; +} +img.f_pm +{ +width:30px; +height:25px; +background:url(forum.gif) -131px -25px; +} +img.f_offline +{ +width:35px; +height:25px; +background:url(forum.gif) -161px -25px; +} +img.f_quote +{ +width:69px; +height:25px; +background:url(forum.gif) 0 -50px; +} +img.f_report +{ +width:69px; +height:25px; +background:url(forum.gif) -69px -50px; +} +img.f_online +{ +width:30px; +height:25px; +background:url(forum.gif) -138px -50px; +} diff --git a/pic/forum_pic/chs/search_button.gif b/pic/forum_pic/chs/search_button.gif new file mode 100644 index 00000000..2b522d5c Binary files /dev/null and b/pic/forum_pic/chs/search_button.gif differ diff --git a/pic/forum_pic/cht/avatartoobig.png b/pic/forum_pic/cht/avatartoobig.png new file mode 100644 index 00000000..bef7b9a7 Binary files /dev/null and b/pic/forum_pic/cht/avatartoobig.png differ diff --git a/pic/forum_pic/cht/donate.gif b/pic/forum_pic/cht/donate.gif new file mode 100644 index 00000000..1eddb223 Binary files /dev/null and b/pic/forum_pic/cht/donate.gif differ diff --git a/pic/forum_pic/cht/forum.gif b/pic/forum_pic/cht/forum.gif new file mode 100644 index 00000000..b61cf43e Binary files /dev/null and b/pic/forum_pic/cht/forum.gif differ diff --git a/pic/forum_pic/cht/forumsprites.css b/pic/forum_pic/cht/forumsprites.css new file mode 100644 index 00000000..fc229687 --- /dev/null +++ b/pic/forum_pic/cht/forumsprites.css @@ -0,0 +1,54 @@ +img.f_reply +{ +width:87px; +height:25px; +background:url(forum.gif) 0 0; +} +img.f_new +{ +width:87px; +height:25px; +background:url(forum.gif) -87px 0; +} +img.f_delete +{ +width:69px; +height:25px; +background:url(forum.gif) 0 -25px; +} +img.f_edit +{ +width:62px; +height:25px; +background:url(forum.gif) -69px -25px; +} +img.f_pm +{ +width:30px; +height:25px; +background:url(forum.gif) -131px -25px; +} +img.f_offline +{ +width:35px; +height:25px; +background:url(forum.gif) -161px -25px; +} +img.f_quote +{ +width:69px; +height:25px; +background:url(forum.gif) 0 -50px; +} +img.f_report +{ +width:69px; +height:25px; +background:url(forum.gif) -69px -50px; +} +img.f_online +{ +width:30px; +height:25px; +background:url(forum.gif) -138px -50px; +} diff --git a/pic/forum_pic/cht/search_button.gif b/pic/forum_pic/cht/search_button.gif new file mode 100644 index 00000000..2b522d5c Binary files /dev/null and b/pic/forum_pic/cht/search_button.gif differ diff --git a/pic/forum_pic/en/avatartoobig.png b/pic/forum_pic/en/avatartoobig.png new file mode 100644 index 00000000..a0caab31 Binary files /dev/null and b/pic/forum_pic/en/avatartoobig.png differ diff --git a/pic/forum_pic/en/donate.gif b/pic/forum_pic/en/donate.gif new file mode 100644 index 00000000..43cef691 Binary files /dev/null and b/pic/forum_pic/en/donate.gif differ diff --git a/pic/forum_pic/en/forum.gif b/pic/forum_pic/en/forum.gif new file mode 100644 index 00000000..6735365d Binary files /dev/null and b/pic/forum_pic/en/forum.gif differ diff --git a/pic/forum_pic/en/forumsprites.css b/pic/forum_pic/en/forumsprites.css new file mode 100644 index 00000000..fc229687 --- /dev/null +++ b/pic/forum_pic/en/forumsprites.css @@ -0,0 +1,54 @@ +img.f_reply +{ +width:87px; +height:25px; +background:url(forum.gif) 0 0; +} +img.f_new +{ +width:87px; +height:25px; +background:url(forum.gif) -87px 0; +} +img.f_delete +{ +width:69px; +height:25px; +background:url(forum.gif) 0 -25px; +} +img.f_edit +{ +width:62px; +height:25px; +background:url(forum.gif) -69px -25px; +} +img.f_pm +{ +width:30px; +height:25px; +background:url(forum.gif) -131px -25px; +} +img.f_offline +{ +width:35px; +height:25px; +background:url(forum.gif) -161px -25px; +} +img.f_quote +{ +width:69px; +height:25px; +background:url(forum.gif) 0 -50px; +} +img.f_report +{ +width:69px; +height:25px; +background:url(forum.gif) -69px -50px; +} +img.f_online +{ +width:30px; +height:25px; +background:url(forum.gif) -138px -50px; +} diff --git a/pic/forum_pic/en/search_button.gif b/pic/forum_pic/en/search_button.gif new file mode 100644 index 00000000..4b16c67b Binary files /dev/null and b/pic/forum_pic/en/search_button.gif differ diff --git a/pic/forummoderator.gif b/pic/forummoderator.gif new file mode 100644 index 00000000..0a4fb624 Binary files /dev/null and b/pic/forummoderator.gif differ diff --git a/pic/imdb_pic/10.gif b/pic/imdb_pic/10.gif new file mode 100644 index 00000000..87e34768 Binary files /dev/null and b/pic/imdb_pic/10.gif differ diff --git a/pic/imdb_pic/100.gif b/pic/imdb_pic/100.gif new file mode 100644 index 00000000..1c332e89 Binary files /dev/null and b/pic/imdb_pic/100.gif differ diff --git a/pic/imdb_pic/20.gif b/pic/imdb_pic/20.gif new file mode 100644 index 00000000..9bd9e2ef Binary files /dev/null and b/pic/imdb_pic/20.gif differ diff --git a/pic/imdb_pic/30.gif b/pic/imdb_pic/30.gif new file mode 100644 index 00000000..391c6f32 Binary files /dev/null and b/pic/imdb_pic/30.gif differ diff --git a/pic/imdb_pic/40.gif b/pic/imdb_pic/40.gif new file mode 100644 index 00000000..26dac048 Binary files /dev/null and b/pic/imdb_pic/40.gif differ diff --git a/pic/imdb_pic/50.gif b/pic/imdb_pic/50.gif new file mode 100644 index 00000000..9724b57e Binary files /dev/null and b/pic/imdb_pic/50.gif differ diff --git a/pic/imdb_pic/60.gif b/pic/imdb_pic/60.gif new file mode 100644 index 00000000..20e4578b Binary files /dev/null and b/pic/imdb_pic/60.gif differ diff --git a/pic/imdb_pic/70.gif b/pic/imdb_pic/70.gif new file mode 100644 index 00000000..3669ba7e Binary files /dev/null and b/pic/imdb_pic/70.gif differ diff --git a/pic/imdb_pic/80.gif b/pic/imdb_pic/80.gif new file mode 100644 index 00000000..7f9ccd71 Binary files /dev/null and b/pic/imdb_pic/80.gif differ diff --git a/pic/imdb_pic/90.gif b/pic/imdb_pic/90.gif new file mode 100644 index 00000000..ee9ed70c Binary files /dev/null and b/pic/imdb_pic/90.gif differ diff --git a/pic/imdb_pic/nophoto.gif b/pic/imdb_pic/nophoto.gif new file mode 100644 index 00000000..4a62e635 Binary files /dev/null and b/pic/imdb_pic/nophoto.gif differ diff --git a/pic/insane.gif b/pic/insane.gif new file mode 100644 index 00000000..cd37051f Binary files /dev/null and b/pic/insane.gif differ diff --git a/pic/langfilechs.png b/pic/langfilechs.png new file mode 100644 index 00000000..8ba19bcf Binary files /dev/null and b/pic/langfilechs.png differ diff --git a/pic/langfileeng.png b/pic/langfileeng.png new file mode 100644 index 00000000..6bfa1f65 Binary files /dev/null and b/pic/langfileeng.png differ diff --git a/pic/moderator.gif b/pic/moderator.gif new file mode 100644 index 00000000..de19b356 Binary files /dev/null and b/pic/moderator.gif differ diff --git a/pic/nexus.gif b/pic/nexus.gif new file mode 100644 index 00000000..44df6767 Binary files /dev/null and b/pic/nexus.gif differ diff --git a/pic/nexus.png b/pic/nexus.png new file mode 100644 index 00000000..38d53a7f Binary files /dev/null and b/pic/nexus.png differ diff --git a/pic/paypalbutton.gif b/pic/paypalbutton.gif new file mode 100644 index 00000000..5da5a520 Binary files /dev/null and b/pic/paypalbutton.gif differ diff --git a/pic/peasant.gif b/pic/peasant.gif new file mode 100644 index 00000000..f7448c82 Binary files /dev/null and b/pic/peasant.gif differ diff --git a/pic/power.gif b/pic/power.gif new file mode 100644 index 00000000..24ac1010 Binary files /dev/null and b/pic/power.gif differ diff --git a/pic/progressbar.gif b/pic/progressbar.gif new file mode 100644 index 00000000..a5e31b0b Binary files /dev/null and b/pic/progressbar.gif differ diff --git a/pic/prolink.png b/pic/prolink.png new file mode 100644 index 00000000..33b27b8e Binary files /dev/null and b/pic/prolink.png differ diff --git a/pic/ratio.png b/pic/ratio.png new file mode 100644 index 00000000..278df1dd Binary files /dev/null and b/pic/ratio.png differ diff --git a/pic/regimages/reg1.png b/pic/regimages/reg1.png new file mode 100644 index 00000000..034b0629 Binary files /dev/null and b/pic/regimages/reg1.png differ diff --git a/pic/regimages/reg2.png b/pic/regimages/reg2.png new file mode 100644 index 00000000..8e66236b Binary files /dev/null and b/pic/regimages/reg2.png differ diff --git a/pic/regimages/reg3.png b/pic/regimages/reg3.png new file mode 100644 index 00000000..4258434e Binary files /dev/null and b/pic/regimages/reg3.png differ diff --git a/pic/regimages/reg4.png b/pic/regimages/reg4.png new file mode 100644 index 00000000..377c0663 Binary files /dev/null and b/pic/regimages/reg4.png differ diff --git a/pic/regimages/reg5.png b/pic/regimages/reg5.png new file mode 100644 index 00000000..b0e56ba8 Binary files /dev/null and b/pic/regimages/reg5.png differ diff --git a/pic/retiree.gif b/pic/retiree.gif new file mode 100644 index 00000000..2fc43247 Binary files /dev/null and b/pic/retiree.gif differ diff --git a/pic/rss_logo.jpg b/pic/rss_logo.jpg new file mode 100644 index 00000000..ac2de61c Binary files /dev/null and b/pic/rss_logo.jpg differ diff --git a/pic/search.gif b/pic/search.gif new file mode 100644 index 00000000..2db4a7db Binary files /dev/null and b/pic/search.gif differ diff --git a/pic/smilies/1.gif b/pic/smilies/1.gif new file mode 100644 index 00000000..6e67de29 Binary files /dev/null and b/pic/smilies/1.gif differ diff --git a/pic/smilies/10.gif b/pic/smilies/10.gif new file mode 100644 index 00000000..0cce4101 Binary files /dev/null and b/pic/smilies/10.gif differ diff --git a/pic/smilies/100.gif b/pic/smilies/100.gif new file mode 100644 index 00000000..375b0301 Binary files /dev/null and b/pic/smilies/100.gif differ diff --git a/pic/smilies/101.gif b/pic/smilies/101.gif new file mode 100644 index 00000000..b52640d5 Binary files /dev/null and b/pic/smilies/101.gif differ diff --git a/pic/smilies/102.gif b/pic/smilies/102.gif new file mode 100644 index 00000000..db70771b Binary files /dev/null and b/pic/smilies/102.gif differ diff --git a/pic/smilies/103.gif b/pic/smilies/103.gif new file mode 100644 index 00000000..d5de57d8 Binary files /dev/null and b/pic/smilies/103.gif differ diff --git a/pic/smilies/104.gif b/pic/smilies/104.gif new file mode 100644 index 00000000..f44ab0fa Binary files /dev/null and b/pic/smilies/104.gif differ diff --git a/pic/smilies/105.gif b/pic/smilies/105.gif new file mode 100644 index 00000000..8c76b77c Binary files /dev/null and b/pic/smilies/105.gif differ diff --git a/pic/smilies/106.gif b/pic/smilies/106.gif new file mode 100644 index 00000000..43203700 Binary files /dev/null and b/pic/smilies/106.gif differ diff --git a/pic/smilies/107.gif b/pic/smilies/107.gif new file mode 100644 index 00000000..8b8c0e13 Binary files /dev/null and b/pic/smilies/107.gif differ diff --git a/pic/smilies/108.gif b/pic/smilies/108.gif new file mode 100644 index 00000000..961edd8a Binary files /dev/null and b/pic/smilies/108.gif differ diff --git a/pic/smilies/109.gif b/pic/smilies/109.gif new file mode 100644 index 00000000..e6a74569 Binary files /dev/null and b/pic/smilies/109.gif differ diff --git a/pic/smilies/11.gif b/pic/smilies/11.gif new file mode 100644 index 00000000..fd9837bb Binary files /dev/null and b/pic/smilies/11.gif differ diff --git a/pic/smilies/110.gif b/pic/smilies/110.gif new file mode 100644 index 00000000..754fa21c Binary files /dev/null and b/pic/smilies/110.gif differ diff --git a/pic/smilies/111.gif b/pic/smilies/111.gif new file mode 100644 index 00000000..40074b17 Binary files /dev/null and b/pic/smilies/111.gif differ diff --git a/pic/smilies/112.gif b/pic/smilies/112.gif new file mode 100644 index 00000000..abb3b8bc Binary files /dev/null and b/pic/smilies/112.gif differ diff --git a/pic/smilies/113.gif b/pic/smilies/113.gif new file mode 100644 index 00000000..edf652b6 Binary files /dev/null and b/pic/smilies/113.gif differ diff --git a/pic/smilies/114.gif b/pic/smilies/114.gif new file mode 100644 index 00000000..02e3907d Binary files /dev/null and b/pic/smilies/114.gif differ diff --git a/pic/smilies/115.gif b/pic/smilies/115.gif new file mode 100644 index 00000000..64bd6a37 Binary files /dev/null and b/pic/smilies/115.gif differ diff --git a/pic/smilies/116.gif b/pic/smilies/116.gif new file mode 100644 index 00000000..b7b2a29f Binary files /dev/null and b/pic/smilies/116.gif differ diff --git a/pic/smilies/117.gif b/pic/smilies/117.gif new file mode 100644 index 00000000..5cfc81e5 Binary files /dev/null and b/pic/smilies/117.gif differ diff --git a/pic/smilies/118.gif b/pic/smilies/118.gif new file mode 100644 index 00000000..1039b07c Binary files /dev/null and b/pic/smilies/118.gif differ diff --git a/pic/smilies/119.gif b/pic/smilies/119.gif new file mode 100644 index 00000000..5eac82f5 Binary files /dev/null and b/pic/smilies/119.gif differ diff --git a/pic/smilies/12.gif b/pic/smilies/12.gif new file mode 100644 index 00000000..20b6eab0 Binary files /dev/null and b/pic/smilies/12.gif differ diff --git a/pic/smilies/120.gif b/pic/smilies/120.gif new file mode 100644 index 00000000..a14f6622 Binary files /dev/null and b/pic/smilies/120.gif differ diff --git a/pic/smilies/121.gif b/pic/smilies/121.gif new file mode 100644 index 00000000..c09c3e28 Binary files /dev/null and b/pic/smilies/121.gif differ diff --git a/pic/smilies/122.gif b/pic/smilies/122.gif new file mode 100644 index 00000000..a523c8c5 Binary files /dev/null and b/pic/smilies/122.gif differ diff --git a/pic/smilies/123.gif b/pic/smilies/123.gif new file mode 100644 index 00000000..78b4dcfa Binary files /dev/null and b/pic/smilies/123.gif differ diff --git a/pic/smilies/124.gif b/pic/smilies/124.gif new file mode 100644 index 00000000..27e81e33 Binary files /dev/null and b/pic/smilies/124.gif differ diff --git a/pic/smilies/125.gif b/pic/smilies/125.gif new file mode 100644 index 00000000..f4cbddda Binary files /dev/null and b/pic/smilies/125.gif differ diff --git a/pic/smilies/126.gif b/pic/smilies/126.gif new file mode 100644 index 00000000..75c4ea55 Binary files /dev/null and b/pic/smilies/126.gif differ diff --git a/pic/smilies/127.gif b/pic/smilies/127.gif new file mode 100644 index 00000000..11647f5e Binary files /dev/null and b/pic/smilies/127.gif differ diff --git a/pic/smilies/128.gif b/pic/smilies/128.gif new file mode 100644 index 00000000..6a40a0a6 Binary files /dev/null and b/pic/smilies/128.gif differ diff --git a/pic/smilies/129.gif b/pic/smilies/129.gif new file mode 100644 index 00000000..d57d2129 Binary files /dev/null and b/pic/smilies/129.gif differ diff --git a/pic/smilies/13.gif b/pic/smilies/13.gif new file mode 100644 index 00000000..bff1b67d Binary files /dev/null and b/pic/smilies/13.gif differ diff --git a/pic/smilies/130.gif b/pic/smilies/130.gif new file mode 100644 index 00000000..d8fba525 Binary files /dev/null and b/pic/smilies/130.gif differ diff --git a/pic/smilies/131.gif b/pic/smilies/131.gif new file mode 100644 index 00000000..d38c7311 Binary files /dev/null and b/pic/smilies/131.gif differ diff --git a/pic/smilies/132.gif b/pic/smilies/132.gif new file mode 100644 index 00000000..d422a255 Binary files /dev/null and b/pic/smilies/132.gif differ diff --git a/pic/smilies/133.gif b/pic/smilies/133.gif new file mode 100644 index 00000000..a573acdf Binary files /dev/null and b/pic/smilies/133.gif differ diff --git a/pic/smilies/134.gif b/pic/smilies/134.gif new file mode 100644 index 00000000..32ee4c32 Binary files /dev/null and b/pic/smilies/134.gif differ diff --git a/pic/smilies/135.gif b/pic/smilies/135.gif new file mode 100644 index 00000000..94877267 Binary files /dev/null and b/pic/smilies/135.gif differ diff --git a/pic/smilies/136.gif b/pic/smilies/136.gif new file mode 100644 index 00000000..b799d32a Binary files /dev/null and b/pic/smilies/136.gif differ diff --git a/pic/smilies/137.gif b/pic/smilies/137.gif new file mode 100644 index 00000000..de68f71c Binary files /dev/null and b/pic/smilies/137.gif differ diff --git a/pic/smilies/138.gif b/pic/smilies/138.gif new file mode 100644 index 00000000..67e40f81 Binary files /dev/null and b/pic/smilies/138.gif differ diff --git a/pic/smilies/139.gif b/pic/smilies/139.gif new file mode 100644 index 00000000..64b54f68 Binary files /dev/null and b/pic/smilies/139.gif differ diff --git a/pic/smilies/14.gif b/pic/smilies/14.gif new file mode 100644 index 00000000..ea6c1f7f Binary files /dev/null and b/pic/smilies/14.gif differ diff --git a/pic/smilies/140.gif b/pic/smilies/140.gif new file mode 100644 index 00000000..f7a1f52c Binary files /dev/null and b/pic/smilies/140.gif differ diff --git a/pic/smilies/141.gif b/pic/smilies/141.gif new file mode 100644 index 00000000..65ca55a2 Binary files /dev/null and b/pic/smilies/141.gif differ diff --git a/pic/smilies/142.gif b/pic/smilies/142.gif new file mode 100644 index 00000000..2eb6aef0 Binary files /dev/null and b/pic/smilies/142.gif differ diff --git a/pic/smilies/143.gif b/pic/smilies/143.gif new file mode 100644 index 00000000..c77d6c8f Binary files /dev/null and b/pic/smilies/143.gif differ diff --git a/pic/smilies/144.gif b/pic/smilies/144.gif new file mode 100644 index 00000000..1c6fecb6 Binary files /dev/null and b/pic/smilies/144.gif differ diff --git a/pic/smilies/145.gif b/pic/smilies/145.gif new file mode 100644 index 00000000..123102c5 Binary files /dev/null and b/pic/smilies/145.gif differ diff --git a/pic/smilies/146.gif b/pic/smilies/146.gif new file mode 100644 index 00000000..08278a0a Binary files /dev/null and b/pic/smilies/146.gif differ diff --git a/pic/smilies/147.gif b/pic/smilies/147.gif new file mode 100644 index 00000000..70c39739 Binary files /dev/null and b/pic/smilies/147.gif differ diff --git a/pic/smilies/148.gif b/pic/smilies/148.gif new file mode 100644 index 00000000..f9ae23da Binary files /dev/null and b/pic/smilies/148.gif differ diff --git a/pic/smilies/149.gif b/pic/smilies/149.gif new file mode 100644 index 00000000..3633544d Binary files /dev/null and b/pic/smilies/149.gif differ diff --git a/pic/smilies/15.gif b/pic/smilies/15.gif new file mode 100644 index 00000000..6334f6c0 Binary files /dev/null and b/pic/smilies/15.gif differ diff --git a/pic/smilies/150.gif b/pic/smilies/150.gif new file mode 100644 index 00000000..73deb887 Binary files /dev/null and b/pic/smilies/150.gif differ diff --git a/pic/smilies/151.gif b/pic/smilies/151.gif new file mode 100644 index 00000000..f187d7f0 Binary files /dev/null and b/pic/smilies/151.gif differ diff --git a/pic/smilies/152.gif b/pic/smilies/152.gif new file mode 100644 index 00000000..7f04e1e1 Binary files /dev/null and b/pic/smilies/152.gif differ diff --git a/pic/smilies/153.gif b/pic/smilies/153.gif new file mode 100644 index 00000000..362e45d4 Binary files /dev/null and b/pic/smilies/153.gif differ diff --git a/pic/smilies/154.gif b/pic/smilies/154.gif new file mode 100644 index 00000000..a5615c8a Binary files /dev/null and b/pic/smilies/154.gif differ diff --git a/pic/smilies/155.gif b/pic/smilies/155.gif new file mode 100644 index 00000000..20f76531 Binary files /dev/null and b/pic/smilies/155.gif differ diff --git a/pic/smilies/156.gif b/pic/smilies/156.gif new file mode 100644 index 00000000..e8a441b9 Binary files /dev/null and b/pic/smilies/156.gif differ diff --git a/pic/smilies/157.gif b/pic/smilies/157.gif new file mode 100644 index 00000000..e20e97b3 Binary files /dev/null and b/pic/smilies/157.gif differ diff --git a/pic/smilies/158.gif b/pic/smilies/158.gif new file mode 100644 index 00000000..bbc8a929 Binary files /dev/null and b/pic/smilies/158.gif differ diff --git a/pic/smilies/159.gif b/pic/smilies/159.gif new file mode 100644 index 00000000..a3208b7a Binary files /dev/null and b/pic/smilies/159.gif differ diff --git a/pic/smilies/16.gif b/pic/smilies/16.gif new file mode 100644 index 00000000..8faf5ef6 Binary files /dev/null and b/pic/smilies/16.gif differ diff --git a/pic/smilies/160.gif b/pic/smilies/160.gif new file mode 100644 index 00000000..55163f0b Binary files /dev/null and b/pic/smilies/160.gif differ diff --git a/pic/smilies/161.gif b/pic/smilies/161.gif new file mode 100644 index 00000000..7f505b2b Binary files /dev/null and b/pic/smilies/161.gif differ diff --git a/pic/smilies/162.gif b/pic/smilies/162.gif new file mode 100644 index 00000000..97cbd1c6 Binary files /dev/null and b/pic/smilies/162.gif differ diff --git a/pic/smilies/163.gif b/pic/smilies/163.gif new file mode 100644 index 00000000..241c0018 Binary files /dev/null and b/pic/smilies/163.gif differ diff --git a/pic/smilies/164.gif b/pic/smilies/164.gif new file mode 100644 index 00000000..86e32079 Binary files /dev/null and b/pic/smilies/164.gif differ diff --git a/pic/smilies/165.gif b/pic/smilies/165.gif new file mode 100644 index 00000000..3a2deb20 Binary files /dev/null and b/pic/smilies/165.gif differ diff --git a/pic/smilies/166.gif b/pic/smilies/166.gif new file mode 100644 index 00000000..aa953030 Binary files /dev/null and b/pic/smilies/166.gif differ diff --git a/pic/smilies/167.gif b/pic/smilies/167.gif new file mode 100644 index 00000000..cb30293d Binary files /dev/null and b/pic/smilies/167.gif differ diff --git a/pic/smilies/168.gif b/pic/smilies/168.gif new file mode 100644 index 00000000..fe1a61f5 Binary files /dev/null and b/pic/smilies/168.gif differ diff --git a/pic/smilies/169.gif b/pic/smilies/169.gif new file mode 100644 index 00000000..f0acd834 Binary files /dev/null and b/pic/smilies/169.gif differ diff --git a/pic/smilies/17.gif b/pic/smilies/17.gif new file mode 100644 index 00000000..803e1a77 Binary files /dev/null and b/pic/smilies/17.gif differ diff --git a/pic/smilies/170.gif b/pic/smilies/170.gif new file mode 100644 index 00000000..d68c67e1 Binary files /dev/null and b/pic/smilies/170.gif differ diff --git a/pic/smilies/171.gif b/pic/smilies/171.gif new file mode 100644 index 00000000..57720847 Binary files /dev/null and b/pic/smilies/171.gif differ diff --git a/pic/smilies/172.gif b/pic/smilies/172.gif new file mode 100644 index 00000000..7bea33e4 Binary files /dev/null and b/pic/smilies/172.gif differ diff --git a/pic/smilies/173.gif b/pic/smilies/173.gif new file mode 100644 index 00000000..93f73445 Binary files /dev/null and b/pic/smilies/173.gif differ diff --git a/pic/smilies/174.gif b/pic/smilies/174.gif new file mode 100644 index 00000000..456b5e4e Binary files /dev/null and b/pic/smilies/174.gif differ diff --git a/pic/smilies/175.gif b/pic/smilies/175.gif new file mode 100644 index 00000000..1a520e46 Binary files /dev/null and b/pic/smilies/175.gif differ diff --git a/pic/smilies/176.gif b/pic/smilies/176.gif new file mode 100644 index 00000000..e78db709 Binary files /dev/null and b/pic/smilies/176.gif differ diff --git a/pic/smilies/177.gif b/pic/smilies/177.gif new file mode 100644 index 00000000..f7ff4370 Binary files /dev/null and b/pic/smilies/177.gif differ diff --git a/pic/smilies/178.gif b/pic/smilies/178.gif new file mode 100644 index 00000000..f625b24e Binary files /dev/null and b/pic/smilies/178.gif differ diff --git a/pic/smilies/179.gif b/pic/smilies/179.gif new file mode 100644 index 00000000..34e60cb6 Binary files /dev/null and b/pic/smilies/179.gif differ diff --git a/pic/smilies/18.gif b/pic/smilies/18.gif new file mode 100644 index 00000000..24f98ea1 Binary files /dev/null and b/pic/smilies/18.gif differ diff --git a/pic/smilies/180.gif b/pic/smilies/180.gif new file mode 100644 index 00000000..4d6b688f Binary files /dev/null and b/pic/smilies/180.gif differ diff --git a/pic/smilies/181.gif b/pic/smilies/181.gif new file mode 100644 index 00000000..65ba8021 Binary files /dev/null and b/pic/smilies/181.gif differ diff --git a/pic/smilies/182.gif b/pic/smilies/182.gif new file mode 100644 index 00000000..f67fd5d7 Binary files /dev/null and b/pic/smilies/182.gif differ diff --git a/pic/smilies/183.gif b/pic/smilies/183.gif new file mode 100644 index 00000000..e68c5c51 Binary files /dev/null and b/pic/smilies/183.gif differ diff --git a/pic/smilies/184.gif b/pic/smilies/184.gif new file mode 100644 index 00000000..644f292a Binary files /dev/null and b/pic/smilies/184.gif differ diff --git a/pic/smilies/185.gif b/pic/smilies/185.gif new file mode 100644 index 00000000..8286a38c Binary files /dev/null and b/pic/smilies/185.gif differ diff --git a/pic/smilies/186.gif b/pic/smilies/186.gif new file mode 100644 index 00000000..1fcffc0f Binary files /dev/null and b/pic/smilies/186.gif differ diff --git a/pic/smilies/187.gif b/pic/smilies/187.gif new file mode 100644 index 00000000..15c5dfdd Binary files /dev/null and b/pic/smilies/187.gif differ diff --git a/pic/smilies/188.gif b/pic/smilies/188.gif new file mode 100644 index 00000000..0d372d6b Binary files /dev/null and b/pic/smilies/188.gif differ diff --git a/pic/smilies/189.gif b/pic/smilies/189.gif new file mode 100644 index 00000000..01404bc2 Binary files /dev/null and b/pic/smilies/189.gif differ diff --git a/pic/smilies/19.gif b/pic/smilies/19.gif new file mode 100644 index 00000000..c79d65f3 Binary files /dev/null and b/pic/smilies/19.gif differ diff --git a/pic/smilies/190.gif b/pic/smilies/190.gif new file mode 100644 index 00000000..05dcd998 Binary files /dev/null and b/pic/smilies/190.gif differ diff --git a/pic/smilies/191.gif b/pic/smilies/191.gif new file mode 100644 index 00000000..b3dcf0ad Binary files /dev/null and b/pic/smilies/191.gif differ diff --git a/pic/smilies/2.gif b/pic/smilies/2.gif new file mode 100644 index 00000000..79a0f17a Binary files /dev/null and b/pic/smilies/2.gif differ diff --git a/pic/smilies/20.gif b/pic/smilies/20.gif new file mode 100644 index 00000000..aa1d95e8 Binary files /dev/null and b/pic/smilies/20.gif differ diff --git a/pic/smilies/21.gif b/pic/smilies/21.gif new file mode 100644 index 00000000..42e72109 Binary files /dev/null and b/pic/smilies/21.gif differ diff --git a/pic/smilies/22.gif b/pic/smilies/22.gif new file mode 100644 index 00000000..671f3113 Binary files /dev/null and b/pic/smilies/22.gif differ diff --git a/pic/smilies/23.gif b/pic/smilies/23.gif new file mode 100644 index 00000000..58ae1273 Binary files /dev/null and b/pic/smilies/23.gif differ diff --git a/pic/smilies/24.gif b/pic/smilies/24.gif new file mode 100644 index 00000000..51133a52 Binary files /dev/null and b/pic/smilies/24.gif differ diff --git a/pic/smilies/25.gif b/pic/smilies/25.gif new file mode 100644 index 00000000..a41542d3 Binary files /dev/null and b/pic/smilies/25.gif differ diff --git a/pic/smilies/26.gif b/pic/smilies/26.gif new file mode 100644 index 00000000..f728c3ac Binary files /dev/null and b/pic/smilies/26.gif differ diff --git a/pic/smilies/27.gif b/pic/smilies/27.gif new file mode 100644 index 00000000..242c2f9e Binary files /dev/null and b/pic/smilies/27.gif differ diff --git a/pic/smilies/28.gif b/pic/smilies/28.gif new file mode 100644 index 00000000..ff88ec74 Binary files /dev/null and b/pic/smilies/28.gif differ diff --git a/pic/smilies/29.gif b/pic/smilies/29.gif new file mode 100644 index 00000000..e0424ed9 Binary files /dev/null and b/pic/smilies/29.gif differ diff --git a/pic/smilies/3.gif b/pic/smilies/3.gif new file mode 100644 index 00000000..474bab65 Binary files /dev/null and b/pic/smilies/3.gif differ diff --git a/pic/smilies/30.gif b/pic/smilies/30.gif new file mode 100644 index 00000000..6e95b7d5 Binary files /dev/null and b/pic/smilies/30.gif differ diff --git a/pic/smilies/31.gif b/pic/smilies/31.gif new file mode 100644 index 00000000..8b31630a Binary files /dev/null and b/pic/smilies/31.gif differ diff --git a/pic/smilies/32.gif b/pic/smilies/32.gif new file mode 100644 index 00000000..b50ce598 Binary files /dev/null and b/pic/smilies/32.gif differ diff --git a/pic/smilies/33.gif b/pic/smilies/33.gif new file mode 100644 index 00000000..97175825 Binary files /dev/null and b/pic/smilies/33.gif differ diff --git a/pic/smilies/34.gif b/pic/smilies/34.gif new file mode 100644 index 00000000..4400aba8 Binary files /dev/null and b/pic/smilies/34.gif differ diff --git a/pic/smilies/35.gif b/pic/smilies/35.gif new file mode 100644 index 00000000..eca50b43 Binary files /dev/null and b/pic/smilies/35.gif differ diff --git a/pic/smilies/36.gif b/pic/smilies/36.gif new file mode 100644 index 00000000..044edc01 Binary files /dev/null and b/pic/smilies/36.gif differ diff --git a/pic/smilies/37.gif b/pic/smilies/37.gif new file mode 100644 index 00000000..47ea838d Binary files /dev/null and b/pic/smilies/37.gif differ diff --git a/pic/smilies/38.gif b/pic/smilies/38.gif new file mode 100644 index 00000000..4346c6ac Binary files /dev/null and b/pic/smilies/38.gif differ diff --git a/pic/smilies/39.gif b/pic/smilies/39.gif new file mode 100644 index 00000000..def8a49d Binary files /dev/null and b/pic/smilies/39.gif differ diff --git a/pic/smilies/4.gif b/pic/smilies/4.gif new file mode 100644 index 00000000..77b51910 Binary files /dev/null and b/pic/smilies/4.gif differ diff --git a/pic/smilies/40.gif b/pic/smilies/40.gif new file mode 100644 index 00000000..b1890c07 Binary files /dev/null and b/pic/smilies/40.gif differ diff --git a/pic/smilies/41.gif b/pic/smilies/41.gif new file mode 100644 index 00000000..2c4cd987 Binary files /dev/null and b/pic/smilies/41.gif differ diff --git a/pic/smilies/42.gif b/pic/smilies/42.gif new file mode 100644 index 00000000..40651db7 Binary files /dev/null and b/pic/smilies/42.gif differ diff --git a/pic/smilies/43.gif b/pic/smilies/43.gif new file mode 100644 index 00000000..28895c81 Binary files /dev/null and b/pic/smilies/43.gif differ diff --git a/pic/smilies/44.gif b/pic/smilies/44.gif new file mode 100644 index 00000000..f0bd582e Binary files /dev/null and b/pic/smilies/44.gif differ diff --git a/pic/smilies/45.gif b/pic/smilies/45.gif new file mode 100644 index 00000000..9c0d20dc Binary files /dev/null and b/pic/smilies/45.gif differ diff --git a/pic/smilies/46.gif b/pic/smilies/46.gif new file mode 100644 index 00000000..c293c4c8 Binary files /dev/null and b/pic/smilies/46.gif differ diff --git a/pic/smilies/47.gif b/pic/smilies/47.gif new file mode 100644 index 00000000..7a318dd3 Binary files /dev/null and b/pic/smilies/47.gif differ diff --git a/pic/smilies/48.gif b/pic/smilies/48.gif new file mode 100644 index 00000000..2775e267 Binary files /dev/null and b/pic/smilies/48.gif differ diff --git a/pic/smilies/49.gif b/pic/smilies/49.gif new file mode 100644 index 00000000..3635acf7 Binary files /dev/null and b/pic/smilies/49.gif differ diff --git a/pic/smilies/5.gif b/pic/smilies/5.gif new file mode 100644 index 00000000..1c4fbd1b Binary files /dev/null and b/pic/smilies/5.gif differ diff --git a/pic/smilies/50.gif b/pic/smilies/50.gif new file mode 100644 index 00000000..9e8d31d5 Binary files /dev/null and b/pic/smilies/50.gif differ diff --git a/pic/smilies/51.gif b/pic/smilies/51.gif new file mode 100644 index 00000000..4c7ca153 Binary files /dev/null and b/pic/smilies/51.gif differ diff --git a/pic/smilies/52.gif b/pic/smilies/52.gif new file mode 100644 index 00000000..bae3198b Binary files /dev/null and b/pic/smilies/52.gif differ diff --git a/pic/smilies/53.gif b/pic/smilies/53.gif new file mode 100644 index 00000000..8ec14e29 Binary files /dev/null and b/pic/smilies/53.gif differ diff --git a/pic/smilies/54.gif b/pic/smilies/54.gif new file mode 100644 index 00000000..20d851f8 Binary files /dev/null and b/pic/smilies/54.gif differ diff --git a/pic/smilies/55.gif b/pic/smilies/55.gif new file mode 100644 index 00000000..cfbbd5f7 Binary files /dev/null and b/pic/smilies/55.gif differ diff --git a/pic/smilies/56.gif b/pic/smilies/56.gif new file mode 100644 index 00000000..8fe4ba7a Binary files /dev/null and b/pic/smilies/56.gif differ diff --git a/pic/smilies/57.gif b/pic/smilies/57.gif new file mode 100644 index 00000000..5184739d Binary files /dev/null and b/pic/smilies/57.gif differ diff --git a/pic/smilies/58.gif b/pic/smilies/58.gif new file mode 100644 index 00000000..6acd29c9 Binary files /dev/null and b/pic/smilies/58.gif differ diff --git a/pic/smilies/59.gif b/pic/smilies/59.gif new file mode 100644 index 00000000..3b053a2f Binary files /dev/null and b/pic/smilies/59.gif differ diff --git a/pic/smilies/6.gif b/pic/smilies/6.gif new file mode 100644 index 00000000..fe77df2f Binary files /dev/null and b/pic/smilies/6.gif differ diff --git a/pic/smilies/60.gif b/pic/smilies/60.gif new file mode 100644 index 00000000..f140368a Binary files /dev/null and b/pic/smilies/60.gif differ diff --git a/pic/smilies/61.gif b/pic/smilies/61.gif new file mode 100644 index 00000000..096d51df Binary files /dev/null and b/pic/smilies/61.gif differ diff --git a/pic/smilies/62.gif b/pic/smilies/62.gif new file mode 100644 index 00000000..0e9383bf Binary files /dev/null and b/pic/smilies/62.gif differ diff --git a/pic/smilies/63.gif b/pic/smilies/63.gif new file mode 100644 index 00000000..a300c549 Binary files /dev/null and b/pic/smilies/63.gif differ diff --git a/pic/smilies/64.gif b/pic/smilies/64.gif new file mode 100644 index 00000000..19adec22 Binary files /dev/null and b/pic/smilies/64.gif differ diff --git a/pic/smilies/65.gif b/pic/smilies/65.gif new file mode 100644 index 00000000..a97b8172 Binary files /dev/null and b/pic/smilies/65.gif differ diff --git a/pic/smilies/66.gif b/pic/smilies/66.gif new file mode 100644 index 00000000..7f8427c5 Binary files /dev/null and b/pic/smilies/66.gif differ diff --git a/pic/smilies/67.gif b/pic/smilies/67.gif new file mode 100644 index 00000000..528788aa Binary files /dev/null and b/pic/smilies/67.gif differ diff --git a/pic/smilies/68.gif b/pic/smilies/68.gif new file mode 100644 index 00000000..2449923b Binary files /dev/null and b/pic/smilies/68.gif differ diff --git a/pic/smilies/69.gif b/pic/smilies/69.gif new file mode 100644 index 00000000..ed8759b3 Binary files /dev/null and b/pic/smilies/69.gif differ diff --git a/pic/smilies/7.gif b/pic/smilies/7.gif new file mode 100644 index 00000000..ea650369 Binary files /dev/null and b/pic/smilies/7.gif differ diff --git a/pic/smilies/70.gif b/pic/smilies/70.gif new file mode 100644 index 00000000..514c96e7 Binary files /dev/null and b/pic/smilies/70.gif differ diff --git a/pic/smilies/71.gif b/pic/smilies/71.gif new file mode 100644 index 00000000..b2afbe8d Binary files /dev/null and b/pic/smilies/71.gif differ diff --git a/pic/smilies/72.gif b/pic/smilies/72.gif new file mode 100644 index 00000000..b2ceacf8 Binary files /dev/null and b/pic/smilies/72.gif differ diff --git a/pic/smilies/73.gif b/pic/smilies/73.gif new file mode 100644 index 00000000..0841d291 Binary files /dev/null and b/pic/smilies/73.gif differ diff --git a/pic/smilies/74.gif b/pic/smilies/74.gif new file mode 100644 index 00000000..3edb6a0b Binary files /dev/null and b/pic/smilies/74.gif differ diff --git a/pic/smilies/75.gif b/pic/smilies/75.gif new file mode 100644 index 00000000..eaa0eba0 Binary files /dev/null and b/pic/smilies/75.gif differ diff --git a/pic/smilies/76.gif b/pic/smilies/76.gif new file mode 100644 index 00000000..5a55fae8 Binary files /dev/null and b/pic/smilies/76.gif differ diff --git a/pic/smilies/77.gif b/pic/smilies/77.gif new file mode 100644 index 00000000..81d4db6b Binary files /dev/null and b/pic/smilies/77.gif differ diff --git a/pic/smilies/78.gif b/pic/smilies/78.gif new file mode 100644 index 00000000..44facea9 Binary files /dev/null and b/pic/smilies/78.gif differ diff --git a/pic/smilies/79.gif b/pic/smilies/79.gif new file mode 100644 index 00000000..6792fdce Binary files /dev/null and b/pic/smilies/79.gif differ diff --git a/pic/smilies/8.gif b/pic/smilies/8.gif new file mode 100644 index 00000000..530996bb Binary files /dev/null and b/pic/smilies/8.gif differ diff --git a/pic/smilies/80.gif b/pic/smilies/80.gif new file mode 100644 index 00000000..fd423779 Binary files /dev/null and b/pic/smilies/80.gif differ diff --git a/pic/smilies/81.gif b/pic/smilies/81.gif new file mode 100644 index 00000000..39b8d5fa Binary files /dev/null and b/pic/smilies/81.gif differ diff --git a/pic/smilies/82.gif b/pic/smilies/82.gif new file mode 100644 index 00000000..079b2bae Binary files /dev/null and b/pic/smilies/82.gif differ diff --git a/pic/smilies/83.gif b/pic/smilies/83.gif new file mode 100644 index 00000000..0f8fd4bf Binary files /dev/null and b/pic/smilies/83.gif differ diff --git a/pic/smilies/84.gif b/pic/smilies/84.gif new file mode 100644 index 00000000..581cb4c3 Binary files /dev/null and b/pic/smilies/84.gif differ diff --git a/pic/smilies/85.gif b/pic/smilies/85.gif new file mode 100644 index 00000000..b42ee750 Binary files /dev/null and b/pic/smilies/85.gif differ diff --git a/pic/smilies/86.gif b/pic/smilies/86.gif new file mode 100644 index 00000000..9361005c Binary files /dev/null and b/pic/smilies/86.gif differ diff --git a/pic/smilies/87.gif b/pic/smilies/87.gif new file mode 100644 index 00000000..f0703cb9 Binary files /dev/null and b/pic/smilies/87.gif differ diff --git a/pic/smilies/88.gif b/pic/smilies/88.gif new file mode 100644 index 00000000..dc72db7a Binary files /dev/null and b/pic/smilies/88.gif differ diff --git a/pic/smilies/89.gif b/pic/smilies/89.gif new file mode 100644 index 00000000..6b540719 Binary files /dev/null and b/pic/smilies/89.gif differ diff --git a/pic/smilies/9.gif b/pic/smilies/9.gif new file mode 100644 index 00000000..178a2f9f Binary files /dev/null and b/pic/smilies/9.gif differ diff --git a/pic/smilies/90.gif b/pic/smilies/90.gif new file mode 100644 index 00000000..a16b38e9 Binary files /dev/null and b/pic/smilies/90.gif differ diff --git a/pic/smilies/91.gif b/pic/smilies/91.gif new file mode 100644 index 00000000..86e61d77 Binary files /dev/null and b/pic/smilies/91.gif differ diff --git a/pic/smilies/92.gif b/pic/smilies/92.gif new file mode 100644 index 00000000..6ed99dda Binary files /dev/null and b/pic/smilies/92.gif differ diff --git a/pic/smilies/93.gif b/pic/smilies/93.gif new file mode 100644 index 00000000..890ade58 Binary files /dev/null and b/pic/smilies/93.gif differ diff --git a/pic/smilies/94.gif b/pic/smilies/94.gif new file mode 100644 index 00000000..83a1af9b Binary files /dev/null and b/pic/smilies/94.gif differ diff --git a/pic/smilies/95.gif b/pic/smilies/95.gif new file mode 100644 index 00000000..4f02db7f Binary files /dev/null and b/pic/smilies/95.gif differ diff --git a/pic/smilies/96.gif b/pic/smilies/96.gif new file mode 100644 index 00000000..5ebbd54a Binary files /dev/null and b/pic/smilies/96.gif differ diff --git a/pic/smilies/97.gif b/pic/smilies/97.gif new file mode 100644 index 00000000..b0a3baa1 Binary files /dev/null and b/pic/smilies/97.gif differ diff --git a/pic/smilies/98.gif b/pic/smilies/98.gif new file mode 100644 index 00000000..3d933b9e Binary files /dev/null and b/pic/smilies/98.gif differ diff --git a/pic/smilies/99.gif b/pic/smilies/99.gif new file mode 100644 index 00000000..ec9e7e75 Binary files /dev/null and b/pic/smilies/99.gif differ diff --git a/pic/staffleader.gif b/pic/staffleader.gif new file mode 100644 index 00000000..9733436b Binary files /dev/null and b/pic/staffleader.gif differ diff --git a/pic/sysop.gif b/pic/sysop.gif new file mode 100644 index 00000000..c6d08290 Binary files /dev/null and b/pic/sysop.gif differ diff --git a/pic/trans.gif b/pic/trans.gif new file mode 100644 index 00000000..35d42e80 Binary files /dev/null and b/pic/trans.gif differ diff --git a/pic/ultimate.gif b/pic/ultimate.gif new file mode 100644 index 00000000..3883e377 Binary files /dev/null and b/pic/ultimate.gif differ diff --git a/pic/uploader.gif b/pic/uploader.gif new file mode 100644 index 00000000..2aa1557e Binary files /dev/null and b/pic/uploader.gif differ diff --git a/pic/user.gif b/pic/user.gif new file mode 100644 index 00000000..937d2107 Binary files /dev/null and b/pic/user.gif differ diff --git a/pic/userbar/0.png b/pic/userbar/0.png new file mode 100644 index 00000000..25341549 Binary files /dev/null and b/pic/userbar/0.png differ diff --git a/pic/utorrentbig.png b/pic/utorrentbig.png new file mode 100644 index 00000000..f2061586 Binary files /dev/null and b/pic/utorrentbig.png differ diff --git a/pic/veteran.gif b/pic/veteran.gif new file mode 100644 index 00000000..2fafb581 Binary files /dev/null and b/pic/veteran.gif differ diff --git a/pic/vip.gif b/pic/vip.gif new file mode 100644 index 00000000..e401590a Binary files /dev/null and b/pic/vip.gif differ diff --git a/pic/vuzebig.png b/pic/vuzebig.png new file mode 100644 index 00000000..107a5549 Binary files /dev/null and b/pic/vuzebig.png differ diff --git a/pic/watermark.png b/pic/watermark.png new file mode 100644 index 00000000..8dab2c5a Binary files /dev/null and b/pic/watermark.png differ diff --git a/polloverview.php b/polloverview.php new file mode 100644 index 00000000..821d4269 --- /dev/null +++ b/polloverview.php @@ -0,0 +1,81 @@ +".$lang_polloverview['text_polls_overview']."\n"); + + print("\n" . + "\n"); + + while ($poll = mysql_fetch_assoc($res)) + { + $o = array($poll["option0"], $poll["option1"], $poll["option2"], $poll["option3"], $poll["option4"], $poll["option5"], $poll["option6"], $poll["option7"], $poll["option8"], $poll["option9"], $poll["option10"], $poll["option11"], $poll["option12"], $poll["option13"], $poll["option14"], $poll["option15"], $poll["option16"], $poll["option17"], $poll["option18"], $poll["option19"]); + + $added = gettime($poll['added']); + print("\n"); + } + print("
    ".$lang_polloverview['col_id']."".$lang_polloverview['col_added']."".$lang_polloverview['col_question']."
    ".$poll['id']."".$added."".$poll['question']."
    \n"); + + print("

    ".$lang_polloverview['text_poll_question']."


    \n"); + print("\n"); + foreach($o as $key=>$value) { + if($value != "") + print("\n"); + } + print("
    ".$lang_polloverview['col_option_no']."".$lang_polloverview['col_options']."
    ".$key."".$value."
    \n"); + $count = get_row_count("pollanswers", "WHERE pollid = ".sqlesc($pollid)." AND selection < 20"); + + print("

    ".$lang_polloverview['text_polls_user_overview']."

    \n"); + + if ($count == 0) { + print("

    ".$lang_polloverview['text_no_users_voted']."

    "); + } + else{ + $perpage = 100; + list($pagertop, $pagerbottom, $limit) = pager($perpage, $count, "?id=".$pollid."&"); + $res2 = sql_query("SELECT pollanswers.*, users.username FROM pollanswers LEFT JOIN users ON pollanswers.userid = users.id WHERE pollid = ".sqlesc($pollid)." AND selection < 20 ORDER BY username ASC ".$limit) or sqlerr(); + print($pagertop); + print(""); + print("\n"); + while ($useras = mysql_fetch_assoc($res2)) + { + $username = get_username($useras['userid']); + print("\n"); + } + print("
    ".$lang_polloverview['col_username']."".$lang_polloverview['col_selection']."
    ".$username."".$o[$useras['selection']]."
    \n"); + print($pagerbottom); + } + stdfoot(); +} +else +{ + $res = sql_query("SELECT id, added, question FROM polls ORDER BY id DESC") or sqlerr(); + if (mysql_num_rows($res) == 0) + stderr($lang_polloverview['std_error'], $lang_polloverview['text_no_users_voted']); + stdhead($lang_polloverview['head_poll_overview']); + print("

    ".$lang_polloverview['text_polls_overview']."

    \n"); + + print("\n" . + "\n"); + while ($poll = mysql_fetch_assoc($res)) + { + $added = gettime($poll['added']); + print("\n"); + } + print("
    ".$lang_polloverview['col_id']."".$lang_polloverview['col_added']."".$lang_polloverview['col_question']."
    ".$poll['id']."".$added."".$poll['question']."
    \n"); + stdfoot(); +} +?> diff --git a/preview.php b/preview.php new file mode 100644 index 00000000..0ab130e9 --- /dev/null +++ b/preview.php @@ -0,0 +1,9 @@ +\n"); +print ("".format_comment($body)."

    "); +?> diff --git a/promotionlink.php b/promotionlink.php new file mode 100644 index 00000000..38d42dbb --- /dev/null +++ b/promotionlink.php @@ -0,0 +1,71 @@ + ".$dt." OR ip=".sqlesc($ip).")"); + $row2=mysql_fetch_array($res2); + if ($row2[0]==0) + { + KPS("+", $prolinkpoint_bonus, $row['id']); + sql_query("INSERT INTO prolinkclicks (userid, ip, added) VALUES (".$row['id'].", ".sqlesc($ip).", NOW())"); + } + } + } + } + header("Location: " . get_protocol_prefix() . $BASEURL); +} +elseif(($updatekey || !$CURUSER['promotion_link']) && $CURUSER) +{ + $promotionkey=md5($CURUSER['email'].date("Y-m-d H:i:s").$CURUSER['passhash']); + sql_query("UPDATE users SET promotion_link=".sqlesc($promotionkey)." WHERE id=".sqlesc($CURUSER['id'])); + header("Location: " . get_protocol_prefix() . $BASEURL."/promotionlink.php"); +} +else +{ + stdhead($lang_promotionlink['head_promotion_link']); + begin_main_frame(); + $yourlink=get_protocol_prefix() . $BASEURL."/promotionlink.php?key=".$CURUSER['promotion_link']; + $imgurl=get_protocol_prefix() . $BASEURL."/".$prolinkimg; + begin_frame($lang_promotionlink['text_promotion_link']); +?> +

    ".$lang_promotionlink['text_your_promotion_link_is']."".$yourlink.""?>

    + + + + + + + + + + $userbar_class) +{ +?> + + + +
    /
    <?php echo htmlspecialchars($SITENAME)?>
    <?php echo htmlspecialchars($SITENAME)?>
    +
    + diff --git a/recover.php b/recover.php new file mode 100644 index 00000000..feb1b241 --- /dev/null +++ b/recover.php @@ -0,0 +1,146 @@ + {$lang_recover['mail_this_link']}

    +http://$BASEURL/recover.php?id={$arr["id"]}&secret=$hash +{$lang_recover['mail_four']} +EOD; + + sent_mail($arr["email"],$SITENAME,$SITEEMAIL,change_email_encode(get_langfolder_cookie(), $title),change_email_encode(get_langfolder_cookie(),$body),"confirmation",true,false,'',get_email_encode(get_langfolder_cookie())); + +} +elseif($_SERVER["REQUEST_METHOD"] == "GET" && $take_recover && isset($_GET["id"]) && isset($_GET["secret"])) +{ + $id = 0 + $_GET["id"]; + $md5 = $_GET["secret"]; + + if (!$id) + httperr(); + + $res = sql_query("SELECT username, email, passhash, editsecret FROM users WHERE id = " . sqlesc($id)) or sqlerr(__FILE__, __LINE__); + $arr = mysql_fetch_array($res) or httperr(); + + $email = $arr["email"]; + + $sec = hash_pad($arr["editsecret"]); + if (preg_match('/^ *$/s', $sec)) + httperr(); + if ($md5 != md5($sec . $email . $arr["passhash"] . $sec)) + httperr(); + + // generate new password; + $chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; + + $newpassword = ""; + for ($i = 0; $i < 10; $i++) + $newpassword .= $chars[mt_rand(0, strlen($chars) - 1)]; + + $sec = mksecret(); + + $newpasshash = md5($sec . $newpassword . $sec); + + sql_query("UPDATE users SET secret=" . sqlesc($sec) . ", editsecret='', passhash=" . sqlesc($newpasshash) . " WHERE id=" . sqlesc($id)." AND editsecret=" . sqlesc($arr["editsecret"])) or sqlerr(__FILE__, __LINE__); + + if (!mysql_affected_rows()) + stderr($lang_recover['std_error'], $lang_recover['std_unable_updating_user_data']); + $title = $SITENAME.$lang_recover['mail_two_title']; + $body = <<{$lang_recover['mail_here']} +{$lang_recover['mail_three_1']} +{$lang_confirm_resend['mail_google_answer']} +{$lang_recover['mail_three_2']} +{$lang_recover['mail_two_four']} + +EOD; + + sent_mail($email,$SITENAME,$SITEEMAIL,change_email_encode(get_langfolder_cookie(), $title),change_email_encode(get_langfolder_cookie(),$body),"details",true,false,'',get_email_encode(get_langfolder_cookie())); + +} +else +{ + stdhead(); + $s = ""; + ?> +
    + ".$lang_recover['text_select_lang']. $s . ""); + ?> +
    +

    +

    +

    +

    +

    +
    + + + + + +
    + delete_value('staff_report_count'); + $Cache->delete_value('staff_new_report_count'); + stderr($lang_report['std_message'],$lang_report['std_successfully_reported']); + die(); + } + else + { + stderr($lang_report['std_error'],$lang_report['std_already_reported_this']); + die(); + } +} + +//////////OFFER #1 START////////// +if (isset($takereportofferid) && isset($takereason)) +{ + takereport($takereportofferid, 'offer', $takereason); +} +//////////OFFER #1 END////////// + +//////////REQUEST #1 START////////// +elseif ((isset($takerequestid)) && (isset($takereason))) +{ + takereport($takerequestid, 'request', $takereason); +} +//////////REQUEST #1 END////////// + +//////////USER #1 START////////// +elseif ((isset($takeuser)) && (isset($takereason))) +{ + takereport($takeuser, 'user', $takereason); +} +//////////USER #1 END////////// + +//////////TORRENT #1 START////////// +elseif ((isset($taketorrent)) && (isset($takereason))) +{ + takereport($taketorrent, 'torrent', $takereason); +} +//////////TORRENT #1 END////////// + +//////////FORUM POST #1 START////////// +elseif ((isset($takeforumpost)) && (isset($takereason))) +{ + takereport($takeforumpost, 'post', $takereason); +} +//////////FORUM #1 END////////// + +//////////COMMENT #1 START////////// +elseif ((isset($takecommentid)) && (isset($takereason))) +{ + takereport($takecommentid, 'comment', $takereason); +} +//////////COMMENT #1 END////////// + +//////////SUBTITLE #1 START////////// +elseif ((isset($takesubtitleid)) && (isset($takereason))) +{ + takereport($takesubtitleid, 'subtitle', $takereason); +} +//////////SUBTITLE #1 END////////// + +//////////USER #2 START////////// +elseif (isset($user)) +{ + int_check($user); + if ($user == $CURUSER[id]) { + stderr($lang_report['std_sorry'],$lang_report['std_cannot_report_oneself']); + die; + } + $res = sql_query("SELECT username, class FROM users WHERE id=".sqlesc($user)) or sqlerr(__FILE__,__LINE__); + if (mysql_num_rows($res) == 0) + { + stderr($lang_report['std_error'],$lang_report['std_invalid_user_id']); + die(); + } + + $arr = mysql_fetch_assoc($res); + if ($arr["class"] >= $staffmem_class) + { + stderr($lang_report['std_sorry'],$lang_report['std_cannot_report'].get_user_class_name($arr["class"],false,true,true), false); + die(); + } + + else + { + stderr($lang_report['std_are_you_sure'], $lang_report['text_are_you_sure_user'].get_username(htmlspecialchars($user)).$lang_report['text_to_staff']."
    ".$lang_report['text_not_for_leechers']."
    ".$lang_report['text_reason_note']."
    ".$lang_report['text_reason_is']."
    ", false); + } +} +//////////USER #2 END////////// + +//////////TORRENT #2 START////////// +elseif (isset($torrent)) +{ + int_check($torrent); + $res = sql_query("SELECT name FROM torrents WHERE id=".sqlesc($torrent)); + + if (mysql_num_rows($res) == 0) + { + stderr($lang_report['std_error'],$lang_report['std_invalid_torrent_id']); + die(); + } + $arr = mysql_fetch_array($res); + stderr($lang_report['std_are_you_sure'], $lang_report['text_are_you_sure_torrent']."".htmlspecialchars($arr[name])."".$lang_report['text_to_staff']."
    ".$lang_report['text_reason_note']."
    ".$lang_report['text_reason_is']."
    ", false); +} +//////////TORRENT #2 END////////// + +//////////FORUM POST #2 START////////// +elseif (isset($forumpost)) +{ + int_check($forumpost); + $res = sql_query("SELECT topics.id AS topicid, topics.subject AS subject, posts.userid AS postuserid FROM topics LEFT JOIN posts ON posts.topicid = topics.id WHERE posts.id=".sqlesc($forumpost)); + + if (mysql_num_rows($res) == 0) + { + stderr($lang_report['std_error'],$lang_report['std_invalid_post_id']); + } + $arr = mysql_fetch_array($res); + stderr($lang_report['std_are_you_sure'], $lang_report['text_are_you_sure_post'].$forumpost.$lang_report['text_of_topic']."".htmlspecialchars($arr['subject'])."".$lang_report['text_by'].get_username($arr['postuserid']).$lang_report['text_to_staff']."
    ".$lang_report['text_reason_note']."
    ".$lang_report['text_reason_is']."
    ", false); +} +//////////FORUM POST #2 END////////// + +//////////COMMENT #2 START////////// +elseif (isset($commentid)) +{ + int_check($commentid); + $res = sql_query("SELECT id, user, torrent, request, offer FROM comments WHERE id=".sqlesc($commentid)); + if (mysql_num_rows($res) == 0) + { + stderr($lang_report['std_error'],$lang_report['std_invalid_comment_id']); + } + $arr = mysql_fetch_array($res); + if ($arr['torrent']){ //Comment of torrent. BTW, this is shitty code! + $name = get_single_value("torrents","name","WHERE id=".sqlesc($arr['torrent'])); + $url = "details.php?id=".$arr['torrent']."#".$commentid; + $of = $lang_report['text_of_torrent']; + } + elseif ($arr['offer']){ //Comment of offer + $name = get_single_value("offers","name","WHERE id=".sqlesc($arr['offer'])); + $url = "offers.php?id=".$arr['offer']."&off_details=1#".$commentid; + $of = $lang_report['text_of_offer']; + } + /*elseif ($arr['request']){ //Comment of request + $name = get_single_value("requests","request","WHERE id=".sqlesc($arr['request'])); + $url = "viewrequests.php?id=".$arr['request']."&req_details=1#".$commentid; + $of = $lang_report['text_of_request']; + }*/ + else //Comment belongs to no one + stderr($lang_report['std_error'], $lang_report['std_orphaned_comment']); + + stderr($lang_report['std_are_you_sure'], $lang_report['text_are_you_sure_comment'].$commentid.$of."".htmlspecialchars($name)."".$lang_report['text_by'].get_username($arr['user']).$lang_report['text_to_staff']."
    ".$lang_report['text_reason_note']."
    ".$lang_report['text_reason_is']."
    ", false); +} +//////////COMMENT #2 END////////// + +//////////OFFER #2 START////////// +elseif (isset($reportofferid)) +{ + int_check($reportofferid); + $res = sql_query("SELECT id,name FROM offers WHERE id=".sqlesc($reportofferid)); + if (mysql_num_rows($res) == 0) + { + stderr($lang_report['std_error'],$lang_report['std_invalid_offer_id']); + } + $arr = mysql_fetch_array($res); + stderr($lang_report['std_are_you_sure'], $lang_report['text_are_you_sure_offer']."".htmlspecialchars($arr['name'])."".$lang_report['text_to_staff']."
    ".$lang_report['text_reason_note']."
    ".$lang_report['text_reason_is']."
    ", false); +} +//////////OFFERT #2 END////////// + +//////////REQUEST #2 START////////// +elseif (isset($reportrequestid)) +{ + int_check($reportrequestid); + $res = sql_query("SELECT id,request FROM requests WHERE id=".sqlesc($reportrequestid)); + if (mysql_num_rows($res) == 0) + { + stderr($lang_report['std_error'],$lang_report['std_invalid_request_id']); + } + $arr = mysql_fetch_array($res); + stderr($lang_report['std_are_you_sure'], $lang_report['text_are_you_sure_request']."".htmlspecialchars($arr['request'])."".$lang_report['text_to_staff']."
    ".$lang_report['text_reason_note']."
    ".$lang_report['text_reason_is']."
    ", false); +} +//////////REQUEST #2 END////////// + +//////////SUBTITLE #2 START////////// +elseif (isset($subtitle)) +{ + int_check($subtitle); + $res = sql_query("SELECT id, torrent_id, title FROM subs WHERE id=".sqlesc($subtitle)); + if (mysql_num_rows($res) == 0) + { + stderr($lang_report['std_error'],$lang_report['std_invalid_subtitle_id']); + } + $arr = mysql_fetch_array($res); + stderr($lang_report['std_are_you_sure'], $lang_report['text_are_you_sure_subtitle']."".htmlspecialchars($arr['title'])."".$lang_report['text_to_staff']."
    ".$lang_report['text_reason_note']."
    ".$lang_report['text_reason_is']."
    ", false); +} +//////////SUBTITLE #2 END////////// + +else // unknown action + stderr($lang_report['std_error'],$lang_report['std_invalid_action']); +?> diff --git a/reports.php b/reports.php new file mode 100644 index 00000000..a2fc86d9 --- /dev/null +++ b/reports.php @@ -0,0 +1,155 @@ +".$lang_reports['text_reports'].""); +print("\n"); +print(""); + +print(""); +$reportres = sql_query("SELECT * FROM reports ORDER BY dealtwith ASC, id DESC $limit"); + +while ($row = mysql_fetch_array($reportres)) +{ + if ($row['dealtwith']) + $dealtwith = "".$lang_reports['text_yes']." - " . get_username($row['dealtby']); + else + $dealtwith = "".$lang_reports['text_no'].""; + switch ($row['type']) + { + case "torrent": + { + $type = $lang_reports['text_torrent']; + $res = sql_query("SELECT id, name FROM torrents WHERE id=".sqlesc($row['reportid'])); + if (mysql_num_rows($res) == 0) + $reporting = $lang_reports['text_torrent_does_not_exist']; + else + { + $arr = mysql_fetch_array($res); + $reporting = "".htmlspecialchars($arr['name']).""; + } + break; + } + case "user": + { + $type = $lang_reports['text_user']; + $res = sql_query("SELECT id FROM users WHERE id=".sqlesc($row['reportid'])); + if (mysql_num_rows($res) == 0) + $reporting = $lang_reports['text_user_does_not_exist']; + else + { + $arr = mysql_fetch_array($res); + $reporting = get_username($arr['id']); + } + break; + } + case "offer": + { + $type = $lang_reports['text_offer']; + $res = sql_query("SELECT id, name FROM offers WHERE id=".sqlesc($row['reportid'])); + if (mysql_num_rows($res) == 0) + $reporting = $lang_reports['text_offer_does_not_exist']; + else + { + $arr = mysql_fetch_array($res); + $reporting = "".htmlspecialchars($arr['name']).""; + } + break; + } +/* + case "request": + { + $type = "Request"; + $res = sql_query("SELECT id, request FROM requests WHERE id=".sqlesc($row['reportid'])); + if (mysql_num_rows($res) == 0) + $reporting = "Request doesn't exist or is deleted."; + else + { + $arr = mysql_fetch_array($res); + $reporting = "".htmlspecialchars($arr['request']).""; + } + break; + } +*/ + case "post": + { + $type = $lang_reports['text_forum_post']; + $res = sql_query("SELECT topics.id AS topicid, topics.subject AS subject, posts.userid AS postuserid FROM topics LEFT JOIN posts ON posts.topicid = topics.id WHERE posts.id=".sqlesc($row['reportid'])); + if (mysql_num_rows($res) == 0) + $reporting = $lang_reports['text_post_does_not_exist']; + else + { + $arr = mysql_fetch_array($res); + $reporting = $lang_reports['text_post_id'].$row['reportid'].$lang_reports['text_of_topic']."".htmlspecialchars($arr['subject'])."".$lang_reports['text_by'].get_username($arr['postuserid']); + } + break; + } + case "comment": + { + $type = $lang_reports['text_comment']; + $res = sql_query("SELECT id, user, torrent, offer FROM comments WHERE id=".sqlesc($row['reportid'])); + if (mysql_num_rows($res) == 0) + $reporting = $lang_reports['text_comment_does_not_exist']; + else + { + $arr = mysql_fetch_array($res); + if ($arr['torrent']) + { + $name = get_single_value("torrents","name","WHERE id=".sqlesc($arr['torrent'])); + $url = "details.php?id=".$arr['torrent']."#cid".$row['reportid']; + $of = $lang_reports['text_of_torrent']; + } + elseif ($arr['offer']) + { + $name = get_single_value("offers","name","WHERE id=".sqlesc($arr['offer'])); + $url = "offers.php?id=".$arr['offer']."&off_details=1#cid".$row['reportid']; + $of = $lang_reports['text_of_offer']; + } else //Comment belongs to no one + $of = "unknown"; + $reporting = $lang_reports['text_comment_id'].$row['reportid'].$of."".htmlspecialchars($name)."".$lang_reports['text_by'].get_username($arr['user']); + } + break; + } + case "subtitle": + { + $type = $lang_reports['text_subtitle']; + $res = sql_query("SELECT id, torrent_id, title FROM subs WHERE id=".sqlesc($row['reportid'])); + if (mysql_num_rows($res) == 0) + $reporting = $lang_reports['text_subtitle_does_not_exist']; + else + { + $arr = mysql_fetch_array($res); + $reporting = "".htmlspecialchars($arr['title'])."".$lang_reports['text_for_torrent_id']."".$arr['torrent_id'].""; + } + break; + } + default: + { + break; + } + } + + print("\n"); +} +?> + + +"); +print($pagerbottom); +end_main_frame(); +stdfoot(); diff --git a/reset.php b/reset.php new file mode 100644 index 00000000..a8caea85 --- /dev/null +++ b/reset.php @@ -0,0 +1,50 @@ +$username is reset , please inform user of this change.",false); +} +stdhead("Reset User's Lost Password"); +?> +
    ".$lang_reports['col_added']."".$lang_reports['col_reporter']."".$lang_reports['col_reporting']."".$lang_reports['col_type']."".$lang_reports['col_reason']."".$lang_reports['col_dealt_with']."".$lang_reports['col_action']."
    ".gettime($row['added'])."" . get_username($row['addedby']) . "".$reporting."".$type."".htmlspecialchars($row['reason'])."".$dealtwith."
    + + + + + + + +
    Reset User's Lost Password
    User Name:
    New Password:
    Minimum is 6 characters
    Confirm New Password:
    +setid ($movieid); + $target = array('Title', 'Credits', 'Plot'); + ($type == 2 ? $movie->purge_single(true) : ""); + set_cachetimestamp($id,"cache_stamp"); + $movie->preparecache($target,true); + $Cache->delete_value('imdb_id_'.$thenumbers.'_movie_name'); + $Cache->delete_value('imdb_id_'.$thenumbers.'_large', true); + $Cache->delete_value('imdb_id_'.$thenumbers.'_median', true); + $Cache->delete_value('imdb_id_'.$thenumbers.'_minor', true); + header("Location: " . get_protocol_prefix() . "$BASEURL/details.php?id=".htmlspecialchars($id)); + } + break; + } + default : + { + die("Error!"); + break; + } +} + +?> diff --git a/rules.php b/rules.php new file mode 100644 index 00000000..9b44b4a7 --- /dev/null +++ b/rules.php @@ -0,0 +1,30 @@ +new_page('rules', 900, true); +if (!$Cache->get_page()) +{ +$Cache->add_whole_row(); +//make_folder("cache/" , get_langfolder_cookie()); +//cache_check ('rules'); +begin_main_frame(); + +$lang_id = get_guest_lang_id(); +$is_rulelang = get_single_value("language","rule_lang","WHERE id = ".sqlesc($lang_id)); +if (!$is_rulelang){ + $lang_id = 6; //English +} +$res = sql_query("SELECT * FROM rules WHERE lang_id = ".sqlesc($lang_id)." ORDER BY id"); +while ($arr=mysql_fetch_assoc($res)){ + begin_frame($arr[title], false); + print(format_comment($arr["text"])); + end_frame(); +} +end_main_frame(); +} +//cache_save ('rules'); +stdfoot(); +?> diff --git a/scrape.php b/scrape.php new file mode 100644 index 00000000..61a70864 --- /dev/null +++ b/scrape.php @@ -0,0 +1,35 @@ + 25) continue; + $result[1][] = $suggest['suggest']; + $result[2][] = $suggest['count']." times"; + $i++; + if ($i >= 5) break; + } + echo json_encode($result); +} +?> diff --git a/sendmessage.php b/sendmessage.php new file mode 100644 index 00000000..16caa753 --- /dev/null +++ b/sendmessage.php @@ -0,0 +1,60 @@ +"); + print(""); + if ($_GET["returnto"] || $_SERVER["HTTP_REFERER"]) + print(""); + $title = $lang_sendmessage['text_message_to'].get_username($receiver); + begin_compose($title, ($replyto ? "reply" : "new"), $body, true, $subject); + print(""); + if ($replyto) { + print("".$lang_sendmessage['checkbox_delete_message_replying_to'].""); + } + + print("".$lang_sendmessage['checkbox_save_message_to_sendbox']); + print(""); + end_compose(); + end_main_frame(); + stdfoot(); +?> diff --git a/settings.php b/settings.php new file mode 100644 index 00000000..1a3fc2ba --- /dev/null +++ b/settings.php @@ -0,0 +1,626 @@ +".$lang_settings['std_here']."".$lang_settings['std_to_go_back']); +} + +function yesorno($title, $name, $value, $note="") +{ + global $lang_settings; + tr($title, "
    ".$note, 1); +} + +$action = isset($_POST['action']) ? $_POST['action'] : 'showmenu'; +$allowed_actions = array('basicsettings','mainsettings','smtpsettings','securitysettings','authoritysettings','tweaksettings', 'botsettings','codesettings','bonussettings','accountsettings','torrentsettings', 'attachmentsettings', 'advertisementsettings', 'savesettings_basic', 'savesettings_main','savesettings_smtp','savesettings_security','savesettings_authority','savesettings_tweak','savesettings_bot','savesettings_code','savesettings_bonus', 'savesettings_account','savesettings_torrent', 'savesettings_attachment', 'savesettings_advertisement', 'showmenu'); +if (!in_array($action, $allowed_actions)) +$action = 'showmenu'; +$notice = "

    ".$lang_settings['text_website_settings']."

    "; + +if ($action == 'savesettings_main') // save main +{ + stdhead($lang_settings['head_save_main_settings']); + $validConfig = array('site_online','max_torrent_size','announce_interval', 'annintertwoage', 'annintertwo', 'anninterthreeage', 'anninterthree', 'signup_timeout','minoffervotes','offervotetimeout','offeruptimeout','maxsubsize','postsperpage', 'topicsperpage', 'torrentsperpage', 'maxnewsnum','max_dead_torrent_time','maxusers','torrent_dir', 'iniupload','SITEEMAIL', 'ACCOUNTANTID', 'ALIPAYACCOUNT', 'PAYPALACCOUNT', 'SLOGAN', 'icplicense', 'autoclean_interval_one', 'autoclean_interval_two', 'autoclean_interval_three','autoclean_interval_four', 'autoclean_interval_five','reportemail','invitesystem','registration','showhotmovies','showclassicmovies','showimdbinfo', 'enablenfo', 'enableschool','restrictemail','showpolls','showstats','showlastxtorrents', 'showtrackerload','showshoutbox','showfunbox','showoffer','sptime','showhelpbox','enablebitbucket', 'smalldescription','altname','extforum','extforumurl','defaultlang','defstylesheet', 'donation','spsct','browsecat','specialcat','waitsystem','maxdlsystem','bitbucket','torrentnameprefix', 'showforumstats','verification','invite_count','invite_timeout', 'seeding_leeching_time_calc_start','startsubid', 'logo'); + GetVar($validConfig); + unset($MAIN); + foreach($validConfig as $config) { + $MAIN[$config] = $$config; + } + + WriteConfig('MAIN', $MAIN); + $Cache->delete_value('recent_news', true); + $Cache->delete_value('stats_users', true); + $Cache->delete_value('stats_torrents', true); + $Cache->delete_value('peers_count', true); + $actiontime = date("F j, Y, g:i a"); + write_log("Tracker MAIN settings updated by $CURUSER[username]. $actiontime",'mod'); + go_back(); +} +elseif ($action == 'savesettings_basic') // save basic +{ + stdhead($lang_settings['head_save_basic_settings']); + $validConfig = array('SITENAME', 'BASEURL', 'announce_url', 'mysql_host', 'mysql_user', 'mysql_pass', 'mysql_db'); + GetVar($validConfig); + if (!mysql_connect($mysql_host, $mysql_user, $mysql_pass)) { + stdmsg($lang_settings['std_error'], $lang_settings['std_mysql_connect_error'].$lang_settings['std_click']."".$lang_settings['std_here']."".$lang_settings['std_to_go_back']); + } else { + dbconn(); + unset($BASIC); + foreach($validConfig as $config) { + $BASIC[$config] = $$config; + } + WriteConfig('BASIC', $BASIC); + $actiontime = date("F j, Y, g:i a"); + write_log("Tracker basic settings updated by $CURUSER[username]. $actiontime",'mod'); + go_back(); + } +} +elseif ($action == 'savesettings_code') // save database +{ + stdhead($lang_settings['head_save_code_settings']); + $validConfig = array('mainversion','subversion','releasedate','website'); + GetVar($validConfig); + unset($CODE); + foreach($validConfig as $config) { + $CODE[$config] = $$config; + } + WriteConfig('CODE', $CODE); + $actiontime = date("F j, Y, g:i a"); + write_log("Tracker code settings updated by $CURUSER[username]. $actiontime",'mod'); + go_back(); +} +elseif ($action == 'savesettings_bonus') // save bonus +{ + stdhead($lang_settings['head_save_bonus_settings']); + $validConfig = array('donortimes','perseeding','maxseeding','tzero','nzero','bzero','l', 'uploadtorrent','uploadsubtitle','starttopic','makepost','addcomment','pollvote','offervote', 'funboxvote','saythanks','receivethanks','funboxreward','onegbupload','fivegbupload','tengbupload', 'ratiolimit','dlamountlimit','oneinvite','customtitle','vipstatus','bonusgift', 'basictax', 'taxpercentage', 'prolinkpoint', 'prolinktime'); + GetVar($validConfig); + unset($BONUS); + foreach($validConfig as $config) { + $BONUS[$config] = $$config; + } + WriteConfig('BONUS', $BONUS); + $actiontime = date("F j, Y, g:i a"); + write_log("Tracker bonus settings updated by $CURUSER[username]. $actiontime",'mod'); + go_back(); +} +elseif ($action == 'savesettings_account') // save account +{ + stdhead($lang_settings['head_save_account_settings']); + + $validConfig = array('neverdelete', 'neverdeletepacked', 'deletepacked', 'deleteunpacked', 'deletenotransfer', 'deletenotransfertwo', 'deletepeasant', 'psdlone', 'psratioone', 'psdltwo', 'psratiotwo', 'psdlthree', 'psratiothree', 'psdlfour', 'psratiofour', 'psdlfive', 'psratiofive', 'putime', 'pudl', 'puprratio', 'puderatio', 'eutime', 'eudl', 'euprratio', 'euderatio', 'cutime', 'cudl', 'cuprratio', 'cuderatio', 'iutime', 'iudl', 'iuprratio', 'iuderatio', 'vutime', 'vudl', 'vuprratio', 'vuderatio', 'exutime', 'exudl', 'exuprratio', 'exuderatio', 'uutime', 'uudl', 'uuprratio', 'uuderatio', 'nmtime', 'nmdl', 'nmprratio', 'nmderatio', 'getInvitesByPromotion'); + GetVar($validConfig); + unset($ACCOUNT); + foreach($validConfig as $config) { + $ACCOUNT[$config] = $$config; + } + + WriteConfig('ACCOUNT', $ACCOUNT); + $actiontime = date("F j, Y, g:i a"); + write_log("Tracker account settings updated by $CURUSER[username]. $actiontime",'mod'); + go_back(); +} +elseif($action == 'savesettings_torrent') // save account +{ + stdhead($lang_settings['head_save_torrent_settings']); + $validConfig = array('prorules', 'randomhalfleech','randomfree','randomtwoup','randomtwoupfree','randomtwouphalfdown','largesize', 'largepro','expirehalfleech','expirefree','expiretwoup','expiretwoupfree','expiretwouphalfleech', 'expirenormal','hotdays','hotseeder','halfleechbecome','freebecome','twoupbecome','twoupfreebecome', 'twouphalfleechbecome','normalbecome','uploaderdouble','deldeadtorrent', 'randomthirtypercentdown', 'thirtypercentleechbecome', 'expirethirtypercentleech'); + GetVar($validConfig); + unset($TORRENT); + foreach($validConfig as $config) { + $TORRENT[$config] = $$config; + } + + WriteConfig('TORRENT', $TORRENT); + $actiontime = date("F j, Y, g:i a"); + write_log("Tracker torrent settings updated by $CURUSER[username]. $actiontime",'mod'); + go_back(); +} +elseif ($action == 'savesettings_smtp') // save smtp +{ + stdhead($lang_settings['head_save_smtp_settings']); + $validConfig = array('smtptype', 'emailnotify'); + GetVar($validConfig); + if ($smtptype == 'advanced') { + $validConfig = array_merge($validConfig, array('smtp_host','smtp_port','smtp_from')); + } elseif ($smtptype == 'external') { + $validConfig = array_merge($validConfig, array('smtpaddress','smtpport','accountname','accountpassword')); + } + + GetVar($validConfig); + unset($SMTP); + foreach($validConfig as $config) { + $SMTP[$config] = $$config; + } + WriteConfig('SMTP', $SMTP); + $actiontime = date("F j, Y, g:i a"); + write_log("Tracker SMTP settings updated by $CURUSER[username]. $actiontime",'mod'); + go_back(); +} +elseif ($action == 'savesettings_security') // save security +{ + stdhead($lang_settings['head_save_security_settings']); + $validConfig = array('securelogin', 'securetracker', 'https_announce_url','iv','maxip','maxloginattempts','changeemail','cheaterdet','nodetect'); + GetVar($validConfig); + unset($SECURITY); + foreach($validConfig as $config) { + $SECURITY[$config] = $$config; + } + WriteConfig('SECURITY', $SECURITY); + $actiontime = date("F j, Y, g:i a"); + write_log("Tracker SECURITY settings updated by $CURUSER[username]. $actiontime",'mod'); + go_back(); +} +elseif ($action == 'savesettings_authority') // save user authority +{ + stdhead($lang_settings['head_save_authority_settings']); + $validConfig = array('defaultclass','staffmem','newsmanage','newfunitem','funmanage','sbmanage','pollmanage','applylink', 'linkmanage', 'postmanage','commanage','forummanage','viewuserlist','torrentmanage','torrentsticky', 'torrentonpromotion', 'askreseed', 'viewnfo', 'torrentstructure','sendinvite','viewhistory','topten','log','confilog','userprofile', 'torrenthistory','prfmanage', 'cruprfmanage','uploadsub','delownsub','submanage','updateextinfo', 'viewanonymous','beanonymous','addoffer','offermanage', 'upload','uploadspecial','movetorrent','chrmanage','viewinvite', 'buyinvite','seebanned','againstoffer','userbar'); + GetVar($validConfig); + unset($AUTHORITY); + foreach($validConfig as $config) { + $AUTHORITY[$config] = $$config; + } + + WriteConfig('AUTHORITY', $AUTHORITY); + $actiontime = date("F j, Y, g:i a"); + write_log("Tracker USER AUTHORITY settings updated by $CURUSER[username]. $actiontime",'mod'); + go_back(); +} +elseif ($action == 'savesettings_tweak') // save tweak +{ + stdhead($lang_settings['head_save_tweak_settings']); + $validConfig = array('where','iplog1','bonus','datefounded', 'enablelocation', 'titlekeywords', 'metakeywords', 'metadescription', 'enablesqldebug', 'sqldebug', 'cssdate', 'enabletooltip', 'prolinkimg', 'analyticscode'); + GetVar($validConfig); + unset($TWEAK); + foreach($validConfig as $config) { + $TWEAK[$config] = $$config; + } + WriteConfig('TWEAK', $TWEAK); + $actiontime = date("F j, Y, g:i a"); + write_log("Tracker TWEAK settings updated by $CURUSER[username]. $actiontime",'mod'); + go_back(); +} +elseif ($action == 'savesettings_attachment') // save attachment +{ + stdhead($lang_settings['head_save_attachment_settings']); + $validConfig = array('enableattach','classone','countone','sizeone', 'extone', 'classtwo','counttwo','sizetwo', 'exttwo', 'classthree','countthree','sizethree', 'extthree', 'classfour','countfour','sizefour', 'extfour', 'savedirectory', 'httpdirectory', 'savedirectorytype', 'thumbnailtype', 'thumbquality', 'thumbwidth', 'thumbheight', 'watermarkpos', 'watermarkwidth', 'watermarkheight', 'watermarkquality', 'altthumbwidth', 'altthumbheight'); + GetVar($validConfig); + unset($ATTACHMENT); + foreach($validConfig as $config) { + $ATTACHMENT[$config] = $$config; + } + + WriteConfig('ATTACHMENT', $ATTACHMENT); + $actiontime = date("F j, Y, g:i a"); + write_log("Tracker ATTACHMENT settings updated by $CURUSER[username]. $actiontime",'mod'); + go_back(); +} +elseif ($action == 'savesettings_advertisement') // save advertisement +{ + stdhead($lang_settings['head_save_advertisement_settings']); + $validConfig = array('enablead', 'enablenoad', 'noad', 'enablebonusnoad', 'bonusnoad', 'bonusnoadpoint', 'bonusnoadtime', 'adclickbonus'); + GetVar($validConfig); + unset($ADVERTISEMENT); + foreach($validConfig as $config) { + $ADVERTISEMENT[$config] = $$config; + } + + WriteConfig('ADVERTISEMENT', $ADVERTISEMENT); + $actiontime = date("F j, Y, g:i a"); + write_log("Tracker ADVERTISEMENT settings updated by $CURUSER[username]. $actiontime",'mod'); + go_back(); +} +elseif ($action == 'tweaksettings') // tweak settings +{ + stdhead($lang_settings['head_tweak_settings']); + print ($notice); + print (""); + yesorno($lang_settings['row_save_user_location'], 'where', $TWEAK["where"], $lang_settings['text_save_user_location_note']); + yesorno($lang_settings['row_log_user_ips'], 'iplog1', $TWEAK["iplog1"], $lang_settings['text_store_user_ips_note']); + tr($lang_settings['row_kps_enabled'],"
    ".$lang_settings['text_kps_note'], 1); + yesorno($lang_settings['row_enable_location'], 'enablelocation', $TWEAK["enablelocation"], $lang_settings['text_enable_location_note']); + yesorno($lang_settings['row_enable_tooltip'], 'enabletooltip', $TWEAK["enabletooltip"], $lang_settings['text_enable_tooltip_note']); + tr($lang_settings['row_title_keywords'],"
    ".$lang_settings['text_title_keywords_note'], 1); + tr($lang_settings['row_promotion_link_example_image'],"
    ".$lang_settings['text_promotion_link_example_note'], 1); + tr($lang_settings['row_meta_keywords'],"
    ".$lang_settings['text_meta_keywords_note'], 1); + tr($lang_settings['row_meta_description'],"
    ".$lang_settings['text_meta_description_note'], 1); + tr($lang_settings['row_web_analytics_code'],"
    ".$lang_settings['text_web_analytics_code_note'], 1); + tr($lang_settings['row_see_sql_debug'], "".$lang_settings['text_allow'].classlist('sqldebug',UC_STAFFLEADER,$TWEAK['sqldebug'], UC_MODERATOR).$lang_settings['text_see_sql_list'].get_user_class_name(UC_SYSOP,false,true,true),1); + tr($lang_settings['row_tracker_founded_date'],"
    ".$lang_settings['text_tracker_founded_date_note'], 1); + tr($lang_settings['row_css_date'],"
    ".$lang_settings['text_css_date'], 1); + + tr($lang_settings['row_save_settings'],"", 1); + print (""); +} +elseif ($action == 'smtpsettings') // stmp settings +{ + stdhead($lang_settings['head_smtp_settings']); + print ($notice); + print(""); + print (""); + yesorno($lang_settings['row_enable_email_notification'], 'emailnotify', $SMTP["emailnotify"], $lang_settings['text_email_notification_note']); + $smtp_select = " ". $lang_settings['text_smtp_default'] . "
    " . $lang_settings['text_smtp_advanced']."
    " . $lang_settings['text_smtp_external']."
    " . $lang_settings['text_smtp_none']; + tr($lang_settings['row_mail_function_type'], $smtp_select, 1); + print(""); + print(""); + tr($lang_settings['row_smtp_host']," ".$lang_settings['text_smtp_host_note'], 1); + tr($lang_settings['row_smtp_port']," ".$lang_settings['text_smtp_port_note'], 1); + if (strtoupper(substr(PHP_OS,0,3)=='WIN')) + tr($lang_settings['row_smtp_sendmail_from'], " ".$lang_settings['text_smtp_sendmail_from_note'].$MAIN["SITEEMAIL"], 1); + else + tr($lang_settings['row_smtp_sendmail_path'], $lang_settings['text_smtp_sendmail_path_note'], 1); + print(""); + print(""); + tr($lang_settings['row_outgoing_mail_address'], " ".$lang_settings['text_outgoing_mail_address_note'], 1); + tr($lang_settings['row_outgoing_mail_port'], " ".$lang_settings['text_outgoing_mail_port_note'], 1); + tr($lang_settings['row_smtp_account_name'], " ".$lang_settings['text_smtp_account_name_note'], 1); + tr($lang_settings['row_smtp_account_password'], " ".$lang_settings['text_smtp_account_password_note'], 1); + print(""); + tr($lang_settings['row_save_settings'],"", 1); +print (""); +print (""); +print(""); +} +elseif ($action == 'securitysettings') //security settings +{ + stdhead($lang_settings['head_security_settings']); + print ($notice); + print (""); + tr($lang_settings['row_enable_ssl']," ".$lang_settings['text_yes']. " ".$lang_settings['text_no']. " ".$lang_settings['text_optional']."
    ".$lang_settings['text_ssl_note'], 1); + tr($lang_settings['row_enable_ssl_tracker']," ".$lang_settings['text_yes']. " ".$lang_settings['text_no']. " ".$lang_settings['text_optional']."
    ".$lang_settings['text_ssl_note'], 1); + tr($lang_settings['row_https_announce_url']," ".$lang_settings['text_https_announce_url_note'] . $_SERVER["HTTP_HOST"]."/announce.php", 1); + yesorno($lang_settings['row_enable_image_verification'], 'iv', $SECURITY["iv"], $lang_settings['text_image_verification_note']); + yesorno($lang_settings['row_allow_email_change'], 'changeemail', $SECURITY["changeemail"], $lang_settings['text_email_change_note']); + tr($lang_settings['row_cheater_detection_level']," ".$lang_settings['text_cheater_detection_level_note']."
    ".$lang_settings['text_never_suspect'].classlist('nodetect',$AUTHORITY['staffmem'],$SECURITY['nodetect']).$lang_settings['text_or_above'].get_user_class_name(UC_UPLOADER,false,true,true).".", 1); + tr($lang_settings['row_max_ips']," ".$lang_settings['text_max_ips_note'], 1); + tr($lang_settings['row_max_login_attemps']," ".$lang_settings['text_max_login_attemps_note'], 1); + + tr($lang_settings['row_save_settings'],"", 1); + print (""); +} +elseif ($action == 'authoritysettings') //Authority settings +{ + stdhead($lang_settings['head_authority_settings']); + print ($notice); + $maxclass = UC_SYSOP; + print (""); + tr($lang_settings['row_default_class'], $lang_settings['text_default_user_class'].classlist('defaultclass',UC_STAFFLEADER,$AUTHORITY['defaultclass']).$lang_settings['text_default'].get_user_class_name(UC_USER,false,true,true).$lang_settings['text_default_class_note'], 1); + tr($lang_settings['row_staff_member'], $lang_settings['text_minimum_class'].classlist('staffmem',UC_STAFFLEADER,$AUTHORITY['staffmem']).$lang_settings['text_default'].get_user_class_name(UC_MODERATOR,false,true,true).$lang_settings['text_staff_member_note'], 1); + tr($lang_settings['row_news_management'], $lang_settings['text_minimum_class'].classlist('newsmanage',$maxclass,$AUTHORITY['newsmanage']).$lang_settings['text_default'].get_user_class_name(UC_ADMINISTRATOR,false,true,true).$lang_settings['text_news_management_note'],1); + tr($lang_settings['row_post_funbox_item'], $lang_settings['text_minimum_class'].classlist('newfunitem',$maxclass,$AUTHORITY['newfunitem']).$lang_settings['text_default'].get_user_class_name(UC_USER,false,true,true).$lang_settings['text_post_funbox_item_note'],1); + tr($lang_settings['row_funbox_management'], $lang_settings['text_minimum_class']. classlist('funmanage',$maxclass,$AUTHORITY['funmanage']).$lang_settings['text_default'].get_user_class_name(UC_MODERATOR,false,true,true).$lang_settings['text_funbox_management_note'],1); + tr($lang_settings['row_shoutbox_management'], $lang_settings['text_minimum_class']. classlist('sbmanage',$maxclass,$AUTHORITY['sbmanage']).$lang_settings['text_default'].get_user_class_name(UC_MODERATOR,false,true,true).$lang_settings['text_shoutbox_management_note'],1); + tr($lang_settings['row_poll_management'], $lang_settings['text_minimum_class'].classlist('pollmanage',$maxclass,$AUTHORITY['pollmanage']).$lang_settings['text_default'].get_user_class_name(UC_ADMINISTRATOR,false,true,true).$lang_settings['text_poll_management_note'],1); + tr($lang_settings['row_apply_for_links'], $lang_settings['text_minimum_class'].classlist('applylink',$maxclass,$AUTHORITY['applylink']).$lang_settings['text_default'].get_user_class_name(UC_USER,false,true,true).$lang_settings['text_apply_for_links_note'],1); + tr($lang_settings['row_link_management'], $lang_settings['text_minimum_class'].classlist('linkmanage',$maxclass,$AUTHORITY['linkmanage']).$lang_settings['text_default'].get_user_class_name(UC_ADMINISTRATOR,false,true,true).$lang_settings['text_link_management_note'],1); + tr($lang_settings['row_forum_post_management'], $lang_settings['text_minimum_class'].classlist('postmanage',$maxclass,$AUTHORITY['postmanage']).$lang_settings['text_default'].get_user_class_name(UC_MODERATOR,false,true,true).$lang_settings['text_forum_post_management_note'],1); + tr($lang_settings['row_comment_management'], $lang_settings['text_minimum_class'].classlist('commanage',$maxclass,$AUTHORITY['commanage']).$lang_settings['text_default'].get_user_class_name(UC_MODERATOR,false,true,true).$lang_settings['text_comment_management_note'],1); + tr($lang_settings['row_forum_management'], $lang_settings['text_minimum_class'].classlist('forummanage',$maxclass,$AUTHORITY['forummanage']).$lang_settings['text_default'].get_user_class_name(UC_ADMINISTRATOR,false,true,true).$lang_settings['text_forum_management_note'],1); + tr($lang_settings['row_view_userlist'], $lang_settings['text_minimum_class'].classlist('viewuserlist',$maxclass,$AUTHORITY['viewuserlist']).$lang_settings['text_default'].get_user_class_name(UC_POWER_USER,false,true,true).$lang_settings['text_view_userlist_note'],1); + tr($lang_settings['row_torrent_management'], $lang_settings['text_minimum_class'].classlist('torrentmanage',$maxclass,$AUTHORITY['torrentmanage']).$lang_settings['text_default'].get_user_class_name(UC_MODERATOR,false,true,true).$lang_settings['text_torrent_management_note'], 1); + tr($lang_settings['row_torrent_sticky'], $lang_settings['text_minimum_class'].classlist('torrentsticky',$maxclass,$AUTHORITY['torrentsticky']).$lang_settings['text_default'].get_user_class_name(UC_ADMINISTRATOR,false,true,true).$lang_settings['text_torrent_sticky_note'],1); + tr($lang_settings['row_torrent_on_promotion'], $lang_settings['text_minimum_class'].classlist('torrentonpromotion',$maxclass,$AUTHORITY['torrentonpromotion']).$lang_settings['text_default'].get_user_class_name(UC_ADMINISTRATOR,false,true,true).$lang_settings['text_torrent_promotion_note'],1); + tr($lang_settings['row_ask_for_reseed'], $lang_settings['text_minimum_class'].classlist('askreseed',$maxclass,$AUTHORITY['askreseed']).$lang_settings['text_default'].get_user_class_name(UC_POWER_USER,false,true,true).$lang_settings['text_ask_for_reseed_note'],1); + tr($lang_settings['row_view_nfo'], $lang_settings['text_minimum_class'].classlist('viewnfo',$maxclass,$AUTHORITY['viewnfo']).$lang_settings['text_default'].get_user_class_name(UC_POWER_USER,false,true,true).$lang_settings['text_view_nfo_note'],1); + tr($lang_settings['row_view_torrent_structure'], $lang_settings['text_minimum_class'].classlist('torrentstructure',$maxclass,$AUTHORITY['torrentstructure']).$lang_settings['text_default'].get_user_class_name(UC_ULTIMATE_USER,false,true,true).$lang_settings['text_view_torrent_structure_note'],1); + tr($lang_settings['row_send_invite'], $lang_settings['text_minimum_class'].classlist('sendinvite',$maxclass,$AUTHORITY['sendinvite']).$lang_settings['text_default'].get_user_class_name(UC_POWER_USER,false,true,true).$lang_settings['text_send_invite_note'],1); + tr($lang_settings['row_view_history'], $lang_settings['text_minimum_class'].classlist('viewhistory',$maxclass,$AUTHORITY['viewhistory']).$lang_settings['text_default'].get_user_class_name(UC_VETERAN_USER,false,true,true).$lang_settings['text_view_history_note'],1); + tr($lang_settings['row_view_topten'], $lang_settings['text_minimum_class'].classlist('topten',$maxclass,$AUTHORITY['topten']).$lang_settings['text_default'].get_user_class_name(UC_POWER_USER,false,true,true).$lang_settings['text_view_topten_note'],1); + tr($lang_settings['row_view_general_log'], $lang_settings['text_minimum_class'].classlist('log',$maxclass,$AUTHORITY['log']).$lang_settings['text_default'].get_user_class_name(UC_INSANE_USER,false,true,true).$lang_settings['text_view_general_log_note'],1); + tr($lang_settings['row_view_confidential_log'], $lang_settings['text_minimum_class'].classlist('confilog',$maxclass,$AUTHORITY['confilog']).$lang_settings['text_default'].get_user_class_name(UC_MODERATOR,false,true,true).$lang_settings['text_view_confidential_log_note'],1); + tr($lang_settings['row_view_user_confidential'], $lang_settings['text_minimum_class'].classlist('userprofile',$maxclass,$AUTHORITY['userprofile']).$lang_settings['text_default'].get_user_class_name(UC_ADMINISTRATOR,false,true,true).$lang_settings['text_view_user_confidential_note'],1); + tr($lang_settings['row_view_user_torrent'], $lang_settings['text_minimum_class'].classlist('torrenthistory',$maxclass,$AUTHORITY['torrenthistory']).$lang_settings['text_default'].get_user_class_name(UC_POWER_USER,false,true,true).$lang_settings['text_view_user_torrent_note'],1); + tr($lang_settings['row_general_profile_management'], $lang_settings['text_minimum_class'].classlist('prfmanage',$maxclass,$AUTHORITY['prfmanage']).$lang_settings['text_default'].get_user_class_name(UC_MODERATOR,false,true,true).$lang_settings['text_general_profile_management_note'],1); + tr($lang_settings['row_crucial_profile_management'], $lang_settings['text_minimum_class'].classlist('cruprfmanage',$maxclass,$AUTHORITY['cruprfmanage']).$lang_settings['text_default'].get_user_class_name(UC_ADMINISTRATOR,false,true,true).$lang_settings['text_crucial_profile_management_note'].get_user_class_name(UC_STAFFLEADER,false,true,true).$lang_settings['text_can_manage_donation'],1); + tr($lang_settings['row_upload_subtitle'], $lang_settings['text_minimum_class'].classlist('uploadsub',$maxclass,$AUTHORITY['uploadsub']).$lang_settings['text_default'].get_user_class_name(UC_USER,false,true,true).$lang_settings['text_upload_subtitle_note'],1); + tr($lang_settings['row_delete_own_subtitle'], $lang_settings['text_minimum_class'].classlist('delownsub',$maxclass,$AUTHORITY['delownsub']).$lang_settings['text_default'].get_user_class_name(UC_POWER_USER,false,true,true).$lang_settings['text_delete_own_subtitle_note'],1); + tr($lang_settings['row_subtitle_management'], $lang_settings['text_minimum_class'].classlist('submanage',$maxclass,$AUTHORITY['submanage']).$lang_settings['text_default'].get_user_class_name(UC_MODERATOR,false,true,true).$lang_settings['text_subtitle_management'],1); + tr($lang_settings['row_update_external_info'], $lang_settings['text_minimum_class'].classlist('updateextinfo',$maxclass,$AUTHORITY['updateextinfo']).$lang_settings['text_default'].get_user_class_name(UC_EXTREME_USER,false,true,true).$lang_settings['text_update_external_info_note'],1); + tr($lang_settings['row_view_anonymous'], $lang_settings['text_minimum_class'].classlist('viewanonymous',$maxclass,$AUTHORITY['viewanonymous']).$lang_settings['text_default'].get_user_class_name(UC_UPLOADER,false,true,true).$lang_settings['text_view_anonymous_note'],1); + tr($lang_settings['row_be_anonymous'], $lang_settings['text_minimum_class'].classlist('beanonymous',$maxclass,$AUTHORITY['beanonymous']).$lang_settings['text_default'].get_user_class_name(UC_CRAZY_USER,false,true,true).$lang_settings['text_be_anonymous_note'],1); + tr($lang_settings['row_add_offer'], $lang_settings['text_minimum_class'].classlist('addoffer',$maxclass,$AUTHORITY['addoffer']).$lang_settings['text_default'].get_user_class_name(UC_PEASANT,false,true,true).$lang_settings['text_add_offer_note'], 1); + tr($lang_settings['row_offer_management'], $lang_settings['text_minimum_class'].classlist('offermanage',$maxclass,$AUTHORITY['offermanage']).$lang_settings['text_default'].get_user_class_name(UC_MODERATOR,false,true,true).$lang_settings['text_offer_management_note'],1); + tr($lang_settings['row_upload_torrent'], $lang_settings['text_minimum_class'].classlist('upload',$maxclass,$AUTHORITY['upload']).$lang_settings['text_default'].get_user_class_name(UC_POWER_USER,false,true,true).$lang_settings['text_upload_torrent_note'], 1); + if (THISTRACKER == "HDStar") + tr($lang_settings['row_upload_special_torrent'], $lang_settings['text_minimum_class'].classlist('uploadspecial',$maxclass,$AUTHORITY['uploadspecial']).$lang_settings['text_default'].get_user_class_name(UC_UPLOADER,false,true,true).$lang_settings['text_upload_special_torrent_note'],1); + if (THISTRACKER == "HDStar") + tr($lang_settings['row_move_torrent'], $lang_settings['text_minimum_class'].classlist('movetorrent',$maxclass,$AUTHORITY['movetorrent']).$lang_settings['text_default'].get_user_class_name(UC_MODERATOR,false,true,true).$lang_settings['text_move_torrent_note'],1); + tr($lang_settings['row_chronicle_management'], $lang_settings['text_minimum_class'].classlist('chrmanage',$maxclass,$AUTHORITY['chrmanage']).$lang_settings['text_default'].get_user_class_name(UC_MODERATOR,false,true,true).$lang_settings['text_chronicle_management_note'],1); + tr($lang_settings['row_view_invite'], $lang_settings['text_minimum_class'].classlist('viewinvite',$maxclass,$AUTHORITY['viewinvite']).$lang_settings['text_default'].get_user_class_name(UC_MODERATOR,false,true,true).$lang_settings['text_view_invite_note'],1); + tr($lang_settings['row_buy_invites'], $lang_settings['text_minimum_class'].classlist('buyinvite',$maxclass,$AUTHORITY['buyinvite']).$lang_settings['text_default'].get_user_class_name(UC_INSANE_USER,false,true,true).$lang_settings['text_buy_invites_note'],1); + tr($lang_settings['row_see_banned_torrents'], $lang_settings['text_minimum_class'].classlist('seebanned',$maxclass,$AUTHORITY['seebanned']).$lang_settings['text_default'].get_user_class_name(UC_UPLOADER,false,true,true).$lang_settings['text_see_banned_torrents_note'],1); + tr($lang_settings['row_vote_against_offers'], $lang_settings['text_minimum_class'].classlist('againstoffer',$maxclass,$AUTHORITY['againstoffer']).$lang_settings['text_default'].get_user_class_name(UC_USER,false,true,true).$lang_settings['text_vote_against_offers_note'],1); + tr($lang_settings['row_allow_userbar'], $lang_settings['text_minimum_class'].classlist('userbar',$maxclass,$AUTHORITY['userbar']).$lang_settings['text_default'].get_user_class_name(UC_POWER_USER,false,true,true).$lang_settings['text_allow_userbar_note'],1); + tr($lang_settings['row_save_settings'],"", 1); + print (""); +} +elseif ($action == 'basicsettings') // basic settings +{ + stdhead($lang_settings['head_basic_settings']); + print ($notice); + print (""); + tr($lang_settings['row_site_name']," ".$lang_settings['text_site_name_note'], 1); + tr($lang_settings['row_base_url']," ".$lang_settings['text_it_should_be'] . $_SERVER["HTTP_HOST"] . $lang_settings['text_base_url_note'], 1); + tr($lang_settings['row_announce_url']," ".$lang_settings['text_it_should_be'] . $_SERVER["HTTP_HOST"]."/announce.php", 1); + tr($lang_settings['row_mysql_host']," ".$lang_settings['text_mysql_host_note'], 1); + tr($lang_settings['row_mysql_user']," ".$lang_settings['text_mysql_user_note'], 1); + tr($lang_settings['row_mysql_password']," ".$lang_settings['text_mysql_password_note'], 1); + tr($lang_settings['row_mysql_database_name']," ".$lang_settings['text_mysql_database_name_note'], 1); + tr($lang_settings['row_save_settings'],"", 1); + print (""); +} +elseif ($action == 'attachmentsettings') // basic settings +{ + stdhead($lang_settings['head_attachment_settings']); + print ($notice); + print (""); + yesorno($lang_settings['row_enable_attachment'], 'enableattach', $ATTACHMENT["enableattach"], $lang_settings['text_enable_attachment_note']); + tr($lang_settings['row_attachment_authority'], $lang_settings['text_attachment_authority_note_one']."
    • ".classlist('classone', UC_STAFFLEADER, $ATTACHMENT['classone']) . $lang_settings['text_can_upload_at_most'] . " ".$lang_settings['text_file_size_below']."".$lang_settings['text_with_extension_name']."".$lang_settings['text_authority_default_one_one'].get_user_class_name(UC_USER,false,true,true).$lang_settings['text_authority_default_one_two']."
    • ".classlist('classtwo', UC_STAFFLEADER, $ATTACHMENT['classtwo']) . $lang_settings['text_can_upload_at_most'] . " ".$lang_settings['text_file_size_below']."".$lang_settings['text_with_extension_name']."".$lang_settings['text_authority_default_two_one'].get_user_class_name(UC_POWER_USER,false,true,true).$lang_settings['text_authority_default_two_two']."
    • ".classlist('classthree', UC_STAFFLEADER, $ATTACHMENT['classthree']) . $lang_settings['text_can_upload_at_most'] . " ".$lang_settings['text_file_size_below']."".$lang_settings['text_with_extension_name']."".$lang_settings['text_authority_default_three_one'].get_user_class_name(UC_INSANE_USER,false,true,true).$lang_settings['text_authority_default_three_two']."
    • ".classlist('classfour', UC_STAFFLEADER, $ATTACHMENT['classfour']) . $lang_settings['text_can_upload_at_most'] . " ".$lang_settings['text_file_size_below']."".$lang_settings['text_with_extension_name']."".$lang_settings['text_authority_default_four_one'].get_user_class_name(UC_MODERATOR,false,true,true).$lang_settings['text_authority_default_four_two']."
    ".$lang_settings['text_attachment_authority_note_two'], 1); + tr($lang_settings['row_save_directory']," ".$lang_settings['text_save_directory_note'], 1); + tr($lang_settings['row_http_directory']," ".$lang_settings['text_http_directory_note'], 1); + tr($lang_settings['row_save_directory_type'],"".$lang_settings['text_one_directory']."
    ". $lang_settings['text_directories_by_monthes'] . "
    ".$lang_settings['text_directories_by_days'] . "
    " . $lang_settings['text_save_directory_type_note'], 1); + tr($lang_settings['row_image_thumbnails']," ".$lang_settings['text_no_thumbnail']."
    ".$lang_settings['text_create_thumbnail']."
    ". $lang_settings['text_resize_big_image']."
    " . $lang_settings['text_image_thumbnail_note'], 1); + tr($lang_settings['row_thumbnail_quality']," ".$lang_settings['text_thumbnail_quality_note'], 1); + tr($lang_settings['row_thumbnail_size']," * ".$lang_settings['text_thumbnail_size_note'], 1); + tr($lang_settings['row_alternative_thumbnail_size']," * ".$lang_settings['text_alternative_thumbnail_size_note'], 1); + tr($lang_settings['row_watermark'], " ".$lang_settings['text_no_watermark']."
    ".$lang_settings['text_left_top']." ".$lang_settings['text_top']." ".$lang_settings['text_right_top']."
    ".$lang_settings['text_left']." ".$lang_settings['text_center']." ".$lang_settings['text_right']."
    ".$lang_settings['text_left_bottom']." ".$lang_settings['text_bottom']." ".$lang_settings['text_right_bottom']."
    ".$lang_settings['text_random_position']."
    ".$lang_settings['text_watermark_note'], 1); + tr($lang_settings['row_image_size_for_watermark']," * ".$lang_settings['text_watermark_size_note'], 1); + //yesorno($lang_settings['row_add_watermark_to_thumbnail'], 'wmthumb', $ATTACHMENT["wmthumb"], $lang_settings['text_watermark_to_thumbnail_note']); + tr($lang_settings['row_jpeg_quality_with_watermark']," ".$lang_settings['text_jpeg_watermark_quality_note'], 1); + tr($lang_settings['row_save_settings'],"", 1); + print (""); +} +elseif ($action == 'advertisementsettings') +{ + stdhead($lang_settings['head_advertisement_settings']); + print ($notice); + print (""); + yesorno($lang_settings['row_enable_advertisement'], 'enablead', $ADVERTISEMENT['enablead'], $lang_settings['text_enable_advertisement_note']); + tr($lang_settings['row_no_advertisement'], "".classlist('noad', UC_STAFFLEADER, $ADVERTISEMENT['noad']).$lang_settings['text_can_choose_no_advertisement'].get_user_class_name(UC_UPLOADER,false,true,true), 1); + tr($lang_settings['row_bonus_no_advertisement'], "".classlist('bonusnoad', UC_STAFFLEADER, $ADVERTISEMENT['bonusnoad']).$lang_settings['text_no_advertisement_with_bonus'].get_user_class_name(UC_POWER_USER,false,true,true), 1); + tr($lang_settings['row_no_advertisement_bonus_price'], $lang_settings['text_it_costs_user']."".$lang_settings['text_bonus_points_to_buy']."".$lang_settings['text_days_without_advertisements'], 1); + tr($lang_settings['row_click_advertisement_bonus'], $lang_settings['text_user_would_get']."".$lang_settings['text_points_clicking_on_advertisements'], 1); + tr($lang_settings['row_save_settings'],"", 1); + print (""); +} +elseif ($action == 'codesettings') // code settings +{ + stdhead($lang_settings['head_code_settings']); + print ($notice); + print (""); + tr($lang_settings['row_main_version']," ".$lang_settings['text_main_version_note'], 1); + tr($lang_settings['row_sub_version']," ".$lang_settings['text_sub_version_note'], 1); + tr($lang_settings['row_release_date']," ".$lang_settings['text_release_date_note'], 1); + tr($lang_settings['row_web_site']," ".$lang_settings['text_web_site_note_one'].PROJECTNAME.$lang_settings['text_web_site_note_two'], 1); + tr($lang_settings['row_save_settings'],"", 1); + print (""); +} +elseif ($action == 'bonussettings'){ + stdhead($lang_settings['head_bonus_settings']); + print ($notice); + print (""); + print(""); + tr($lang_settings['row_donor_gets_double'], $lang_settings['text_donor_gets']."".$lang_settings['text_times_as_many'],1); + tr($lang_settings['row_basic_seeding_bonus'], $lang_settings['text_user_would_get']."".$lang_settings['text_bonus_points']."".$lang_settings['text_torrents_default'], 1); + tr($lang_settings['row_seeding_formula'], $lang_settings['text_bonus_formula_one']."
        \"A
        \"B
    ".$lang_settings['text_where']."
    • ".$lang_settings['text_bonus_formula_two']."
    • ".$lang_settings['text_bonus_formula_three']."".$lang_settings['text_bonus_formula_four']."
    • ".$lang_settings['text_bonus_formula_five']."
    • ".$lang_settings['text_bonus_formula_six']."".$lang_settings['text_bonus_formula_seven']."
    • ".$lang_settings['text_bonus_formula_eight']."
    • ".$lang_settings['text_bonus_formula_nine']."".$lang_settings['text_bonus_formula_ten']."
    • ".$lang_settings['text_bonus_formula_eleven']."".$lang_settings['text_bonus_formula_twelve']."
    \n", 1); + print(""); + tr($lang_settings['row_uploading_torrent'],$lang_settings['text_user_would_get']."".$lang_settings['text_uploading_torrent_note'], 1); + tr($lang_settings['row_uploading_subtitle'],$lang_settings['text_user_would_get']."".$lang_settings['text_uploading_subtitle_note'], 1); + tr($lang_settings['row_starting_topic'],$lang_settings['text_user_would_get']."".$lang_settings['text_starting_topic_note'], 1); + tr($lang_settings['row_making_post'],$lang_settings['text_user_would_get']."".$lang_settings['text_making_post_note'], 1); + tr($lang_settings['row_adding_comment'],$lang_settings['text_user_would_get']."".$lang_settings['text_adding_comment_note'], 1); + tr($lang_settings['row_voting_on_poll'],$lang_settings['text_user_would_get']."".$lang_settings['text_voting_on_poll_note'], 1); + tr($lang_settings['row_voting_on_offer'],$lang_settings['text_user_would_get']."".$lang_settings['text_voting_on_offer_note'], 1); + tr($lang_settings['row_voting_on_funbox'],$lang_settings['text_user_would_get']."".$lang_settings['text_voting_on_funbox_note'], 1); + tr($lang_settings['row_saying_thanks'], $lang_settings['text_giver_and_receiver_get']."".$lang_settings['text_saying_thanks_and']."".$lang_settings['text_saying_thanks_default'], 1); + tr($lang_settings['row_funbox_stuff_reward'],$lang_settings['text_user_would_get']."".$lang_settings['text_funbox_stuff_reward_note'], 1); + tr($lang_settings['row_promotion_link_click'],$lang_settings['text_user_would_get']."".$lang_settings['text_promotion_link_note_one']."".$lang_settings['text_promotion_link_note_two'], 1); + print(""); + tr($lang_settings['row_one_gb_credit'],$lang_settings['text_it_costs_user']."".$lang_settings['text_one_gb_credit_note'], 1); + tr($lang_settings['row_five_gb_credit'],$lang_settings['text_it_costs_user']."".$lang_settings['text_five_gb_credit_note'], 1); + tr($lang_settings['row_ten_gb_credit'],$lang_settings['text_it_costs_user']."".$lang_settings['text_ten_gb_credit_note'], 1); + tr($lang_settings['row_ratio_limit'],$lang_settings['text_user_with_ratio']."".$lang_settings['text_uploaded_amount_above']."".$lang_settings['text_ratio_limit_default'], 1); + tr($lang_settings['row_buy_an_invite'],$lang_settings['text_it_costs_user']."".$lang_settings['text_buy_an_invite_note'], 1); + tr($lang_settings['row_custom_title'],$lang_settings['text_it_costs_user']."".$lang_settings['text_custom_title_note'], 1); + tr($lang_settings['row_vip_status'],$lang_settings['text_it_costs_user']."".$lang_settings['text_vip_status_note'], 1); + yesorno($lang_settings['row_allow_giving_bonus_gift'], 'bonusgift', $BONUS["bonusgift"], $lang_settings['text_giving_bonus_gift_note']); + tr($lang_settings['row_bonus_gift_tax'], $lang_settings['text_system_charges']."".$lang_settings['text_bonus_points_plus']."".$lang_settings['text_bonus_gift_tax_note'], 1); + tr($lang_settings['row_save_settings'], "", 1); + print (""); +} +elseif ($action == 'accountsettings'){ + stdhead($lang_settings['head_account_settings']); + print ($notice); + $maxclass = UC_VIP; + print (""); + print(""); + tr($lang_settings['row_never_delete'],classlist('neverdelete',$maxclass,$ACCOUNT['neverdelete']).$lang_settings['text_never_delete'].get_user_class_name(UC_VETERAN_USER,false,true,true), 1); + tr($lang_settings['row_never_delete_if_packed'],classlist('neverdeletepacked',$maxclass,$ACCOUNT['neverdeletepacked']).$lang_settings['text_never_delete_if_packed'].get_user_class_name(UC_ELITE_USER,false,true,true), 1); + tr($lang_settings['row_delete_packed'],$lang_settings['text_delete_packed_note_one']."".$lang_settings['text_delete_packed_note_two'], 1); + tr($lang_settings['row_delete_unpacked'],$lang_settings['text_delete_unpacked_note_one']."".$lang_settings['text_delete_unpacked_note_two'], 1); + tr($lang_settings['row_delete_no_transfer'],$lang_settings['text_delete_transfer_note_one']."".$lang_settings['text_delete_transfer_note_two']."".$lang_settings['text_delete_transfer_note_three'], 1); + print(""); + tr($lang_settings['row_ban_peasant_one'].get_user_class_name(UC_PEASANT,false,false,true).$lang_settings['row_ban_peasant_two'],get_user_class_name(UC_PEASANT,false,true,true).$lang_settings['text_ban_peasant_note_one']."".$lang_settings['text_ban_peasant_note_two'], 1); + tr($lang_settings['row_demoted_to_peasant_one'].get_user_class_name(UC_PEASANT,false,false,true).$lang_settings['row_demoted_to_peasant_two'],$lang_settings['text_demoted_peasant_note_one'].get_user_class_name(UC_PEASANT,false,true,true).$lang_settings['text_demoted_peasant_note_two']."
      +
    • ".$lang_settings['text_downloaded_amount_larger_than']."".$lang_settings['text_and_ratio_below']."".$lang_settings['text_demote_peasant_default_one']."
    • +
    • ".$lang_settings['text_downloaded_amount_larger_than']."".$lang_settings['text_and_ratio_below']."".$lang_settings['text_demote_peasant_default_two']."
    • +
    • ".$lang_settings['text_downloaded_amount_larger_than']."".$lang_settings['text_and_ratio_below']."".$lang_settings['text_demote_peasant_default_three']."
    • +
    • ".$lang_settings['text_downloaded_amount_larger_than']."".$lang_settings['text_and_ratio_below']."".$lang_settings['text_demote_peasant_default_four']."
    • +
    • ".$lang_settings['text_downloaded_amount_larger_than']."".$lang_settings['text_and_ratio_below']."".$lang_settings['text_demote_peasant_default_five']."
    • +

    ".$lang_settings['text_demote_peasant_note'], 1); + function promotion_criteria($class, $input, $time, $dl, $prratio, $deratio, $defaultInvites=0){ + global $lang_settings; + global $ACCOUNT; + $inputtime = $input."time"; + $inputdl = $input."dl"; + $inputprratio = $input."prratio"; + $inputderatio = $input."deratio"; + if (!isset($class)) + return; + tr($lang_settings['row_promote_to_one'].get_user_class_name($class,false,false,true).$lang_settings['row_promote_to_two'], $lang_settings['text_member_longer_than']."".$lang_settings['text_downloaded_more_than']."".$lang_settings['text_with_ratio_above']."".$lang_settings['text_be_promoted_to'].get_user_class_name($class,false,true,true).$lang_settings['text_promote_to_default_one']."'".$time."', '".$dl."', '".$prratio."'.
    ".$lang_settings['text_demote_with_ratio_below']."".$lang_settings['text_promote_to_default_two']."'".$deratio."'.
    ".$lang_settings['text_users_get']."".$lang_settings['text_invitations_default']."'".$defaultInvites."'.", 1); + } + promotion_criteria(UC_POWER_USER, "pu", 4, 50, 1.05, 0.95, 1); + promotion_criteria(UC_ELITE_USER, "eu", 8, 120, 1.55, 1.45, 0); + promotion_criteria(UC_CRAZY_USER, "cu", 15, 300, 2.05, 1.95, 2); + promotion_criteria(UC_INSANE_USER, "iu", 25, 500, 2.55, 2.45, 0); + promotion_criteria(UC_VETERAN_USER, "vu", 40, 750, 3.05, 2.95, 3); + promotion_criteria(UC_EXTREME_USER, "exu", 60, 1024, 3.55, 3.45, 0); + promotion_criteria(UC_ULTIMATE_USER, "uu", 80, 1536, 4.05, 3.95, 5); + promotion_criteria(UC_NEXUS_MASTER, "nm", 100, 3072, 4.55, 4.45, 10); + tr($lang_settings['row_save_settings'],"", 1); + print (""); +} +elseif ($action == 'torrentsettings') +{ + stdhead($lang_settings['head_torrent_settings']); + print ($notice); + print (""); + + yesorno($lang_settings['row_promotion_rules'], 'prorules', $TORRENT["prorules"], $lang_settings['text_promotion_rules_note']); + tr($lang_settings['row_random_promotion'], $lang_settings['text_random_promotion_note_one']."
    • ".$lang_settings['text_halfleech_chance_becoming']."
    • ".$lang_settings['text_free_chance_becoming']."
    • ".$lang_settings['text_twoup_chance_becoming']."
    • ".$lang_settings['text_freetwoup_chance_becoming']."
    • ".$lang_settings['text_twouphalfleech_chance_becoming']."
    • ".$lang_settings['text_thirtypercentleech_chance_becoming']."
    ".$lang_settings['text_random_promotion_note_two'], 1); + tr($lang_settings['row_large_torrent_promotion'], $lang_settings['text_torrent_larger_than']."".$lang_settings['text_gb_promoted_to']."".$lang_settings['text_by_system_upon_uploading']."
    ".$lang_settings['text_large_torrent_promotion_note'], 1); + tr($lang_settings['row_promotion_timeout'], $lang_settings['text_promotion_timeout_note_one']."
      +
    • ".$lang_settings['text_halfleech_will_become']."".$lang_settings['text_after']."".$lang_settings['text_halfleech_timeout_default']."
    • + +
    • ".$lang_settings['text_free_will_become']."".$lang_settings['text_after']."".$lang_settings['text_free_timeout_default']."
    • + +
    • ".$lang_settings['text_twoup_will_become']."".$lang_settings['text_after']."".$lang_settings['text_twoup_timeout_default']."
    • + +
    • ".$lang_settings['text_freetwoup_will_become']."".$lang_settings['text_after']."".$lang_settings['text_freetwoup_timeout_default']."
    • + +
    • ".$lang_settings['text_halfleechtwoup_will_become']."".$lang_settings['text_after']."".$lang_settings['text_halfleechtwoup_timeout_default']."
    • + +
    • ".$lang_settings['text_thirtypercentleech_will_become']."".$lang_settings['text_after']."".$lang_settings['text_thirtypercentleech_timeout_default']."
    • + +
    • ".$lang_settings['text_normal_will_become']."".$lang_settings['text_after']."".$lang_settings['text_normal_timeout_default']."
    • + +
    ".$lang_settings['text_promotion_timeout_note_two'], 1); + tr($lang_settings['row_auto_pick_hot'], $lang_settings['text_torrents_uploaded_within']."".$lang_settings['text_days_with_more_than']."".$lang_settings['text_be_picked_as_hot']."
    ".$lang_settings['text_auto_pick_hot_default'], 1); + tr($lang_settings['row_uploader_get_double'], $lang_settings['text_torrent_uploader_gets']."".$lang_settings['text_times_uploading_credit'].$lang_settings['text_uploader_get_double_default'], 1); + tr($lang_settings['row_delete_dead_torrents'], $lang_settings['text_torrents_being_dead_for']."".$lang_settings['text_days_be_deleted']."
    ".$lang_settings['row_delete_dead_torrents_note'], 1); + tr($lang_settings['row_save_settings'],"", 1); + print (""); +} +elseif ($action == 'mainsettings') // main settings +{ + stdhead($lang_settings['head_main_settings']); + print ($notice); + print (""); + $sh = "gmail.com"; + + yesorno($lang_settings['row_site_online'], 'site_online', $MAIN['site_online'], $lang_settings['text_site_online_note']); + yesorno($lang_settings['row_enable_invite_system'], 'invitesystem', $MAIN['invitesystem'], $lang_settings['text_invite_system_note']); + tr($lang_settings['row_initial_uploading_amount']," ".$lang_settings['text_initial_uploading_amount_note'], 1); + tr($lang_settings['row_initial_invites']," ".$lang_settings['text_initial_invites_note'], 1); + tr($lang_settings['row_invite_timeout']," ".$lang_settings['text_invite_timeout_note'], 1); + yesorno($lang_settings['row_enable_registration_system'], 'registration', $MAIN['registration'], $lang_settings['row_allow_registrations']); + tr($lang_settings['row_verification_type']," ".$lang_settings['text_email'] ." ".$lang_settings['text_admin']." ".$lang_settings['text_automatically']."
    ".$lang_settings['text_verification_type_note'], 1); + yesorno($lang_settings['row_enable_wait_system'],'waitsystem', $MAIN['waitsystem'], $lang_settings['text_wait_system_note']); + yesorno($lang_settings['row_enable_max_slots_system'],'maxdlsystem', $MAIN['maxdlsystem'], $lang_settings['text_max_slots_system_note']); + yesorno($lang_settings['row_show_polls'], 'showpolls', $MAIN['showpolls'], $lang_settings['text_show_polls_note']); + yesorno($lang_settings['row_show_stats'],'showstats', $MAIN['showstats'], $lang_settings['text_show_stats_note']); + //yesorno($lang_settings['row_show_last_posts'],'showlastxforumposts', $MAIN['showlastxforumposts'], $lang_settings['text_show_last_posts_note']); + yesorno($lang_settings['row_show_last_torrents'],'showlastxtorrents', $MAIN['showlastxtorrents'], $lang_settings['text_show_last_torrents_note']); + yesorno($lang_settings['row_show_server_load'],'showtrackerload', $MAIN['showtrackerload'], $lang_settings['text_show_server_load_note']); + yesorno($lang_settings['row_show_forum_stats'],'showforumstats', $MAIN['showforumstats'], $lang_settings['text_show_forum_stats_note']); + yesorno($lang_settings['row_show_hot'],'showhotmovies', $MAIN['showhotmovies'], $lang_settings['text_show_hot_note']); + yesorno($lang_settings['row_show_classic'],'showclassicmovies', $MAIN['showclassicmovies'], $lang_settings['text_show_classic_note']); + yesorno($lang_settings['row_enable_imdb_system'],'showimdbinfo', $MAIN['showimdbinfo'], $lang_settings['text_imdb_system_note']); + yesorno($lang_settings['row_enable_nfo'],'enablenfo', $MAIN['enablenfo'], $lang_settings['text_enable_nfo_note']); + yesorno($lang_settings['row_enable_school_system'],'enableschool', $MAIN['enableschool'], $lang_settings['text_school_system_note']); + yesorno($lang_settings['row_restrict_email_domain'],'restrictemail', $MAIN['restrictemail'], $lang_settings['text_restrict_email_domain_note']); + yesorno($lang_settings['row_show_shoutbox'],'showshoutbox', $MAIN['showshoutbox'], $lang_settings['text_show_shoutbox_note']); + yesorno($lang_settings['row_show_funbox'],'showfunbox', $MAIN['showfunbox'], $lang_settings['text_show_funbox_note']); + yesorno($lang_settings['row_enable_offer_section'],'showoffer', $MAIN['showoffer'], $lang_settings['text_offer_section_note']); + yesorno($lang_settings['row_show_donation'],'donation', $MAIN['donation'], $lang_settings['text_show_donation_note']); + if (THISTRACKER == "HDStar") + yesorno($lang_settings['row_show_special_section'],'spsct', $MAIN['spsct'], $lang_settings['text_show_special_section_note']); + yesorno($lang_settings['row_weekend_free_uploading'],'sptime', $MAIN['sptime'], $lang_settings['text_weekend_free_uploading_note']); + yesorno($lang_settings['row_enable_helpbox'],'showhelpbox', $MAIN['showhelpbox'], $lang_settings['text_helpbox_note']); + yesorno($lang_settings['row_enable_bitbucket'],'enablebitbucket', $MAIN['enablebitbucket'], $lang_settings['text_bitbucket_note']); + yesorno($lang_settings['row_enable_small_description'],'smalldescription', $MAIN['smalldescription'], $lang_settings['text_small_description_note']); + if (THISTRACKER == "PTShow") + yesorno($lang_settings['row_ptshow_naming_style'],' altname', $MAIN['altname'], $lang_settings['text_ptshow_naming_style_note']); + yesorno($lang_settings['row_use_external_forum'],'extforum', $MAIN['extforum'], $lang_settings['text_use_external_forum_note']); + tr($lang_settings['row_external_forum_url']," ".$lang_settings['text_external_forum_url_note'], 1); + $res = sql_query("SELECT id, name FROM searchbox") or sqlerr(__FILE__, __LINE__); + $catlist = ""; + while($array = mysql_fetch_array($res)){ + $bcatlist .= "".$array['name']." "; + $scatlist .= "".$array['name']." "; + } + tr($lang_settings['row_torrents_category_mode'], $bcatlist."
    ".$lang_settings['text_torrents_category_mode_note'], 1); + if (THISTRACKER == "HDStar") + tr($lang_settings['row_special_category_mode'], $scatlist."
    ".$lang_settings['text_special_category_mode_note'], 1); + $res = sql_query("SELECT * FROM language WHERE site_lang=1") or sqlerr(__FILE__, __LINE__); + $langlist = ""; + while($array = mysql_fetch_array($res)) + $langlist .= "".$array['lang_name']." "; + tr($lang_settings['row_default_site_language'], $langlist."
    ".$lang_settings['text_default_site_language_note'], 1); + $res = sql_query("SELECT * FROM stylesheets ORDER BY name") or sqlerr(__FILE__, __LINE__); + $csslist = ""; + tr($lang_settings['row_default_stylesheet'], $csslist."
    ".$lang_settings['text_default_stylesheet_note'], 1); + tr($lang_settings['row_site_logo'],"".$lang_settings['text_site_logo_note'], 1); + tr($lang_settings['row_max_torrent_size'],"".$lang_settings['text_max_torrent_size_note'], 1); + tr($lang_settings['row_announce_interval'], $lang_settings['text_announce_interval_note_one']."
    • ".$lang_settings['text_announce_default']." ".$lang_settings['text_announce_default_default']."
    • ".$lang_settings['text_for_torrents_older_than']."".$lang_settings['text_days']." ".$lang_settings['text_announce_two_default']."
    • ".$lang_settings['text_for_torrents_older_than']."".$lang_settings['text_days']." ".$lang_settings['text_announce_three_default']."
    ".$lang_settings['text_announce_interval_note_two'], 1); + tr($lang_settings['row_cleanup_interval'], $lang_settings['text_cleanup_interval_note_one']."
    • ".$lang_settings['text_priority_one']." ".$lang_settings['text_priority_one_note']."
    • ".$lang_settings['text_priority_two']." ".$lang_settings['text_priority_two_note']."
    • ".$lang_settings['text_priority_three']." ".$lang_settings['text_priority_three_note']."
    • ".$lang_settings['text_priority_four']." ".$lang_settings['text_priority_four_note']."
    • ".$lang_settings['text_priority_five']." ".$lang_settings['text_priority_five_note']."
    ".$lang_settings['text_cleanup_interval_note_two'], 1); + tr($lang_settings['row_signup_timeout']," ".$lang_settings['text_signup_timeout_note'], 1); + tr($lang_settings['row_min_offer_votes']," ".$lang_settings['text_min_offer_votes_note'], 1); + tr($lang_settings['row_offer_vote_timeout']," ".$lang_settings['text_offer_vote_timeout_note'], 1); + tr($lang_settings['row_offer_upload_timeout']," ".$lang_settings['text_offer_upload_timeout_note'], 1); + tr($lang_settings['row_max_subtitle_size']," ". $lang_settings['text_max_subtitle_size_note'], 1); + tr($lang_settings['row_posts_per_page']," ".$lang_settings['text_posts_per_page_note'], 1); + tr($lang_settings['row_topics_per_page']," ".$lang_settings['text_topics_per_page_note'], 1); + tr($lang_settings['row_torrents_per_page']," ".$lang_settings['text_torrents_per_page_note'], 1); + tr($lang_settings['row_number_of_news']," ".$lang_settings['text_number_of_news_note'], 1); + tr($lang_settings['row_torrent_dead_time']," ".$lang_settings['text_torrent_dead_time_note'], 1); + tr($lang_settings['row_max_users']," ".$lang_settings['text_max_users'], 1); + tr($lang_settings['row_site_accountant_userid']," ".$lang_settings['text_site_accountant_userid_note'], 1); + tr($lang_settings['row_alipay_account']," ".$lang_settings['text_alipal_account_note'], 1); + tr($lang_settings['row_paypal_account']," ".$lang_settings['text_paypal_account_note'], 1); + tr($lang_settings['row_site_email']," ".$lang_settings['text_site_email_note'], 1); + tr($lang_settings['row_report_email']," ".$lang_settings['text_report_email_note'], 1); + tr($lang_settings['row_site_slogan']," ".$lang_settings['text_site_slogan_note'], 1); + tr($lang_settings['row_icp_license']," ".$lang_settings['text_icp_license_note'], 1); + tr($lang_settings['row_torrent_directory'], " ".$lang_settings['text_torrent_directory'], 1); + tr($lang_settings['row_bitbucket_directory']," ".$lang_settings['text_bitbucket_directory_note'], 1); + tr($lang_settings['row_torrent_name_prefix'], " ".$lang_settings['text_torrent_name_prefix_note'], 1); + tr($lang_settings['row_save_settings'],"", 1); + print (""); +} +elseif ($action == 'showmenu') // settings main page +{ + stdhead($lang_settings['head_website_settings']); + print ($notice); + tr($lang_settings['row_basic_settings'], " ".$lang_settings['text_basic_settings_note']."", 1); + tr($lang_settings['row_main_settings'], " ".$lang_settings['text_main_settings_note']."", 1); + tr($lang_settings['row_smtp_settings'], " ".$lang_settings['text_smtp_settings_note']."", 1); + tr($lang_settings['row_security_settings']," ".$lang_settings['text_security_settings_note']."", 1); + tr($lang_settings['row_authority_settings']," ".$lang_settings['text_authority_settings_note']."", 1); + tr($lang_settings['row_tweak_settings']," ".$lang_settings['text_tweak_settings_note']."", 1); + tr($lang_settings['row_bonus_settings'], " ".$lang_settings['text_bonus_settings_note']."", 1); + tr($lang_settings['row_account_settings'], " ".$lang_settings['text_account_settings_settings']."", 1); + tr($lang_settings['row_torrents_settings'], " ".$lang_settings['text_torrents_settings_note']."", 1); + tr($lang_settings['row_attachment_settings'], " ".$lang_settings['text_attachment_settings_note']."", 1); + tr($lang_settings['row_advertisement_settings'], " ".$lang_settings['text_advertisement_settings_note']."", 1); + tr($lang_settings['row_code_settings'], " ".$lang_settings['text_code_settings_note']."", 1); +} +print("
    +".$lang_settings['text_configuration_file_saving_note']." +
    ".$lang_settings['text_setting_for_advanced_type']."
    ".$lang_settings['text_setting_for_external_type']."
    ".$lang_settings['text_mail_test_note']."".$lang_settings['text_here']."
    ".$lang_settings['text_bonus_by_seeding']."
    ".$lang_settings['text_misc_ways_get_bonus']."
    ".$lang_settings['text_things_cost_bonus']."
    ".$lang_settings['text_delete_inactive_accounts']."
    ".$lang_settings['text_user_promotion_demotion']."
    "); +stdfoot(); +?> diff --git a/shoutbox.php b/shoutbox.php new file mode 100644 index 00000000..3c337352 --- /dev/null +++ b/shoutbox.php @@ -0,0 +1,140 @@ += $sbmanage_class)) + { + sql_query("DELETE FROM shoutbox WHERE id=".mysql_real_escape_string($_GET['del'])); + } + } +} +$where=$_GET["type"]; +$refresh = ($CURUSER['sbrefresh'] ? $CURUSER['sbrefresh'] : 120) +?> + + + + +" type="text/css"> + + + + + + onload="" onload="hbquota()" > +parent.document.forms['shbox'].shbox_text.value='';"; +} +} + +$limit = ($CURUSER['sbnum'] ? $CURUSER['sbnum'] : 70); +if ($where == "helpbox") +{ +$sql = "SELECT * FROM shoutbox WHERE type='hb' ORDER BY date DESC LIMIT ".$limit; +} +elseif ($CURUSER['hidehb'] == 'yes' || $showhelpbox_main != 'yes'){ +$sql = "SELECT * FROM shoutbox WHERE type='sb' ORDER BY date DESC LIMIT ".$limit; +} +elseif ($CURUSER){ +$sql = "SELECT * FROM shoutbox ORDER BY date DESC LIMIT ".$limit; +} +else { +die("

    ".$lang_shoutbox['std_access_denied']."

    "."

    ".$lang_shoutbox['std_access_denied_note']."

    "); +} +$res = sql_query($sql) or sqlerr(__FILE__, __LINE__); +if (mysql_num_rows($res) == 0) +print("\n"); +else +{ + print("\n"); + + while ($arr = mysql_fetch_assoc($res)) + { + if (get_user_class() >= $sbmanage_class) { + $del="[".$lang_shoutbox['text_del']."]"; + } + if ($arr["userid"]) { + $username = get_username($arr["userid"],false,true,true,true,false,false,"",true); + if ($_GET["type"] != 'helpbox' && $arr["type"] == 'hb') + $username .= $lang_shoutbox['text_to_guest']; + } + else $username = $lang_shoutbox['text_guest']; + if ($CURUSER['timetype'] != 'timealive') + $time = strftime("%m.%d %H:%M",$arr["date"]); + else $time = get_elapsed_time($arr["date"]).$lang_shoutbox['text_ago']; + print("\n"); + } + print("
    [".$time."] ". +$del ." ". $username." " . format_comment($arr["text"],true,false,true,true,600,true,false)." +
    "); +} +?> + + diff --git a/signup.php b/signup.php new file mode 100644 index 00000000..7beb9dde --- /dev/null +++ b/signup.php @@ -0,0 +1,110 @@ +\n"; + +$langs = langlist("site_lang"); + +foreach ($langs as $row) +{ + if ($row["site_lang_folder"] == get_langfolder_cookie()) $se = " selected"; else $se = ""; + $s .= "\n"; +} +$s .= "\n"; +?> +
    > +"); +print("
    ".$lang_signup['text_select_lang']. $s . "
    "); +?> +
    +

    +

    + + +"); +?> + + + + + +---- ".$lang_signup['select_none_selected']." ----n"; +$ct_r = sql_query("SELECT id,name FROM countries ORDER BY name") or die; +while ($ct_a = mysql_fetch_array($ct_r)) +$countries .= "n"; +tr($lang_signup['row_country'], "", 1); +//School select +if ($showschool == 'yes'){ +$schools = "n"; +$sc_r = sql_query("SELECT id,name FROM schools ORDER BY name") or die; +while ($sc_a = mysql_fetch_array($sc_r)) +$schools .= "n"; +tr($lang_signup['row_school'], "", 1); +} +?> + + +> + +
    ".$lang_signup['text_cookies_note']."

    +

    +
    + +
    +
    +

    +
    +

    style='height: 25px'>

    +
    +new_page('staff_page', 900, true); +if (!$Cache->get_page()){ +$Cache->add_whole_row(); +begin_main_frame(); +$secs = 900; +$dt = TIMENOW - $secs; +$onlineimg = "\"online\""; +$offlineimg = "\"offline\""; +$sendpmimg = "\"pm\""; +//--------------------- FIRST LINE SUPPORT SECTION ---------------------------// +unset($ppl); +$res = sql_query("SELECT * FROM users WHERE users.support='yes' AND users.status='confirmed' ORDER BY users.username") or sqlerr(); +while ($arr = mysql_fetch_assoc($res)) +{ + $countryrow = get_country_row($arr['country']); + $ppl .= "". get_username($arr['id']) ." + ".(strtotime($arr['last_access']) > $dt ? $onlineimg : $offlineimg)."". + "".$sendpmimg."". + "".$arr['supportlang']."". + "".$arr['supportfor']."\n"; +} + +begin_frame($lang_staff['text_firstline_support']." - [".$lang_staff['text_apply_for_it']."]"); +?> + +

    + + + + + + + + + + + + + +
    +
    +
    +". get_username($arr['id']) ." + ".(strtotime($arr['last_access']) > $dt ? $onlineimg : $offlineimg)."". + "".$sendpmimg."". + "".$arr['pickfor']."\n"; +} + +begin_frame($lang_staff['text_movie_critics']." - [".$lang_staff['text_apply_for_it']."]"); +?> + +

    + + + + + + + + + + + + +
    +
    +
    +".$forumrow['name'].", "; + } + $forums = rtrim(trim($forums),","); + $ppl .= "". get_username($arr['userid']) ." + ".(strtotime($arr['last_access']) > $dt ? $onlineimg : $offlineimg)."". + "".$sendpmimg."". + "".$forums."\n"; +} + +begin_frame($lang_staff['text_forum_moderators']." - [".$lang_staff['text_apply_for_it']."]"); +?> + +

    + + + + + + + + + + + + +
    +
    +
    + ".UC_VIP." AND status='confirmed' ORDER BY class DESC, username") or sqlerr(); +while ($arr = mysql_fetch_assoc($res)) +{ + if($curr_class != $arr['class']) + { + $curr_class = $arr['class']; + if ($ppl != "") + $ppl .= " "; + $ppl .= "" . get_user_class_name($arr["class"],false,true,true) . ""; + $ppl .= "" . + "" . $lang_staff['text_username'] . "". + "" . $lang_staff['text_country'] . "". + "" . $lang_staff['text_online_or_offline'] . "". + "" . $lang_staff['text_contact'] . "". + "" . $lang_staff['text_duties'] . "". + ""; + $ppl .= "
    "; + } + $countryrow = get_country_row($arr['country']); + $ppl .= "". get_username($arr['id']) ." + ".(strtotime($arr['last_access']) > $dt ? $onlineimg : $offlineimg)."". + "".$sendpmimg."". + "".$arr['stafffor']."\n"; +} + +begin_frame($lang_staff['text_general_staff']." - [".$lang_staff['text_apply_for_it']."]"); +?> + +

    + + +
    +". get_username($arr['id']) ." + ".(strtotime($arr['last_access']) > $dt ? $onlineimg : $offlineimg)."". + "".$sendpmimg."". + "".$arr['stafffor']."\n"; +} + +begin_frame($lang_staff['text_vip']); +?> + +

    + + + + + + + + + + + + +
    +
    +
    +end_whole_row(); + $Cache->cache_page(); +} +echo $Cache->next_row(); +stdfoot(); diff --git a/staffbox.php b/staffbox.php new file mode 100644 index 00000000..89c6073b --- /dev/null +++ b/staffbox.php @@ -0,0 +1,250 @@ +".$lang_staffbox['text_staff_pm'].""); + if ($count == 0) + { + stdmsg($lang_staffbox['std_sorry'], $lang_staffbox['std_no_messages_yet']); + } + else + { + begin_main_frame(); + print("
    "); + print("\n"); + print(" + + + + + + "); + + $res = sql_query("SELECT staffmessages.id, staffmessages.added, staffmessages.subject, staffmessages.answered, staffmessages.answeredby, staffmessages.sender, staffmessages.answer FROM staffmessages ORDER BY id desc $limit"); + + while ($arr = mysql_fetch_assoc($res)) + { + if ($arr[answered]) + { + $answered = "".$lang_staffbox['text_yes']." - " . get_username($arr['answeredby']) . ""; + } + else + $answered = "".$lang_staffbox['text_no'].""; + + $pmid = $arr["id"]; + print("\n"); + } + print(""); + print("
    ".$lang_staffbox['col_subject']."".$lang_staffbox['col_sender']."".$lang_staffbox['col_added']."".$lang_staffbox['col_answered']."".$lang_staffbox['col_action']."
    ".htmlspecialchars($arr[subject])."" . get_username($arr['sender']) . "".gettime($arr[added], true, false)."$answered
    \n"); + print("
    "); + echo $pagerbottom; + end_main_frame(); + } + stdfoot(); +} + + ////////////////////////// + // VIEW PM'S // + ////////////////////////// + +if ($action == "viewpm") +{ + if (get_user_class() < $staffmem_class) + permissiondenied(); + +$pmid = 0 + $_GET["pmid"]; + +$ress4 = sql_query("SELECT * FROM staffmessages WHERE id=".sqlesc($pmid)); +$arr4 = mysql_fetch_assoc($ress4); + +$answeredby = get_username($arr4["answeredby"]); + +if (is_valid_id($arr4["sender"])) +{ +$sender = get_username($arr4["sender"]); +} +else +$sender = $lang_staffbox['text_system']; + +$subject = htmlspecialchars($arr4["subject"]); +if ($arr4["answered"] == 1){ +$colspan = "3"; +$width = "33"; +} +else{ +$colspan = "2"; +$width = "50"; +} +stdhead($lang_staffbox['head_view_staff_pm']); +print("

    ".$lang_staffbox['text_staff_pm']."-->".$subject."

    "); +print(""); +print(""); +if ($arr4["answered"] == 1) +print(""); +print(""); +print(""); +if ($arr4["answered"] == 1) +print(""); +print(""); +print(""); +if ($arr4["answered"] == 1 && $arr4["answer"]) +{ +print(""); +} +print(""); +print("
    ".$lang_staffbox['col_from']."".$lang_staffbox['col_answered_by']."".$lang_staffbox['col_date']."
    ".$sender."".$answeredby."".gettime($arr4["added"])."
    ".format_comment($arr4["msg"])."
    ".format_comment($arr4["answer"])."
    "); +print(""); +if ($arr4["answered"] == 0) +print("[ ".$lang_staffbox['text_reply']." ] [ ".$lang_staffbox['text_mark_answered']." ] "); +print("[ ".$lang_staffbox['text_delete']." ]"); +print(""); +print("
    "); +stdfoot(); +} + ////////////////////////// + // ANSWER MESSAGE // + ////////////////////////// + +if ($action == "answermessage") { + if (get_user_class() < $staffmem_class) + permissiondenied(); + + $answeringto = $_GET["answeringto"]; + $receiver = 0 + $_GET["receiver"]; + + int_check($receiver,true); + + $res = sql_query("SELECT * FROM users WHERE id=$receiver") or die(mysql_error()); + $user = mysql_fetch_assoc($res); + + if (!$user) + stderr($lang_staffbox['std_error'], $lang_staffbox['std_no_user_id']); + + $res2 = sql_query("SELECT * FROM staffmessages WHERE id=$answeringto") or die(mysql_error()); + $staffmsg = mysql_fetch_assoc($res2); + stdhead($lang_staffbox['head_answer_to_staff_pm']); + begin_main_frame(); + ?> +
    + + "> + + > + > +".htmlspecialchars($staffmsg['subject'])."".$lang_staffbox['text_sent_by'].get_username($staffmsg['sender']); + begin_compose($title, "reply", "", false); + end_compose(); + print("
    "); + end_main_frame(); + stdfoot(); +} + + ////////////////////////// + // TAKE ANSWER // + ////////////////////////// +if ($action == "takeanswer") { + if ($_SERVER["REQUEST_METHOD"] != "POST") + die(); + + if (get_user_class() < $staffmem_class) + permissiondenied(); + + $receiver = 0 + $_POST["receiver"]; + $answeringto = $_POST["answeringto"]; + + int_check($receiver,true); + + $userid = $CURUSER["id"]; + + $msg = trim($_POST["body"]); + + $message = sqlesc($msg); + + $added = "'" . date("Y-m-d H:i:s") . "'"; + + if (!$msg) + stderr($lang_staffbox['std_error'], $lang_staffbox['std_body_is_empty']); + +sql_query("INSERT INTO messages (sender, receiver, added, msg) VALUES($userid, $receiver, $added, $message)") or sqlerr(__FILE__, __LINE__); + +sql_query("UPDATE staffmessages SET answer=$message, answered='1', answeredby='$userid' WHERE id=$answeringto") or sqlerr(__FILE__, __LINE__); +$Cache->delete_value('staff_new_message_count'); + header("Location: staffbox.php?action=viewpm&pmid=$answeringto"); + die; +} + ////////////////////////// + // DELETE STAFF MESSAGE // + ////////////////////////// + +if ($action == "deletestaffmessage") { + + $id = 0 + $_GET["id"]; + + if (!is_numeric($id) || $id < 1 || floor($id) != $id) + die; + + if (get_user_class() < $staffmem_class) + permissiondenied(); + + sql_query("DELETE FROM staffmessages WHERE id=" . sqlesc($id)) or die(); +$Cache->delete_value('staff_message_count'); +$Cache->delete_value('staff_new_message_count'); + header("Location: " . get_protocol_prefix() . "$BASEURL/staffbox.php"); +} + + ////////////////////////// + // MARK AS ANSWERED // + ////////////////////////// + +if ($action == "setanswered") { + + if (get_user_class() < $staffmem_class) + permissiondenied(); + +$id = 0 + $_GET["id"]; + +sql_query ("UPDATE staffmessages SET answered=1, answeredby = $CURUSER[id] WHERE id = $id") or sqlerr(); +$Cache->delete_value('staff_new_message_count'); +header("Refresh: 0; url=staffbox.php?action=viewpm&pmid=$id"); +} + + ////////////////////////// + // MARK AS ANSWERED #2 // + ////////////////////////// + +if ($action == "takecontactanswered") { + if (get_user_class() < $staffmem_class) + permissiondenied(); + +if ($_POST['setdealt']){ + $res = sql_query ("SELECT id FROM staffmessages WHERE answered=0 AND id IN (" . implode(", ", $_POST[setanswered]) . ")"); + while ($arr = mysql_fetch_assoc($res)) + sql_query ("UPDATE staffmessages SET answered=1, answeredby = $CURUSER[id] WHERE id = $arr[id]") or sqlerr(); +} +elseif ($_POST['delete']){ + $res = sql_query ("SELECT id FROM staffmessages WHERE id IN (" . implode(", ", $_POST[setanswered]) . ")"); + while ($arr = mysql_fetch_assoc($res)) + sql_query ("DELETE FROM staffmessages WHERE id = $arr[id]") or sqlerr(); +} +$Cache->delete_value('staff_new_message_count'); +header("Refresh: 0; url=staffbox.php"); +} + +?> diff --git a/staffmess.php b/staffmess.php new file mode 100644 index 00000000..391422f1 --- /dev/null +++ b/staffmess.php @@ -0,0 +1,127 @@ + +
    +
    +

    Mass PM to all Staff members and users:

    +
    + +"> + + + + + + + + + + + + + +
    The message has ben sent.
    Send to:
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + Peasant + User + Power User + Elite User
    + Crazy User + Insane User + Veteran User + Extreme User
    + Ultimate User + Nexus Master + VIP + Uploader
    + Moderator + Administrator + SysOp + Staff Leader  
    +
    Subject
    Sender:   + + +  System + +
    +> +
    + +
    +
    +NOTE: Do not user BB codes. (NO HTML) +Administration"); +if (get_user_class() < UC_MODERATOR) +{ + stdmsg("Error", "Access denied!!!"); + stdfoot(); + exit; +} +begin_main_frame(); + +///////////////////// SysOp Only \\\\\\\\\\\\\\\\\\\\\\\\\\\\ +if (get_user_class() >= UC_SYSOP) { + echo("

    ..:: For SysOp Only ::..

    "); + print("
    "); + print("
    "); + print(""); + echo(""); + $query = "SELECT * FROM sysoppanel"; + $sql = sql_query($query); + while ($row = mysql_fetch_array($sql)) { + $id = $row['id']; + $name = $row['name']; + $url = $row['url']; + $info = $row['info']; + + echo(""); + } + print("
    Option NameInfo
    $name $info
    "); + print("
    "); + print("
    "); +} +///////////////////// Admin Only \\\\\\\\\\\\\\\\\\\\\\\\\\\\ +if (get_user_class() >= UC_ADMINISTRATOR) { + echo("

    ..:: For Administrator Only :..

    "); + print("
    "); + print("
    "); + print(""); + echo(""); + $query = "SELECT * FROM adminpanel"; + $sql = sql_query($query); + while ($row = mysql_fetch_array($sql)) { + $id = $row['id']; + $name = $row['name']; + $url = $row['url']; + $info = $row['info']; + + echo(""); + } + print("
    Option NameInfo
    $name $info
    "); + print("
    "); + print("
    "); +} +///////////////////// Moderator Only \\\\\\\\\\\\\\\\\\\\\\\\\\\\ +if (get_user_class() >= UC_MODERATOR) { + echo("

    ..:: For Moderator Only ::..

    "); + print("
    "); + print("
    "); + print(""); + echo(""); + $query = "SELECT * FROM modpanel"; + $sql = sql_query($query); + while ($row = mysql_fetch_array($sql)) { + $id = $row['id']; + $name = $row['name']; + $url = $row['url']; + $info = $row['info']; + + echo(""); + } + + print("
    Option NameInfo
    $name $info
    "); + print("
    "); + print("
    "); +} +end_main_frame(); +stdfoot(); +?> diff --git a/stats.php b/stats.php new file mode 100644 index 00000000..189816b4 --- /dev/null +++ b/stats.php @@ -0,0 +1,122 @@ + + + + + 3 + GROUP BY u.id ORDER BY $orderby"; + +$res = sql_query($query) or sqlerr(__FILE__, __LINE__); + +if (mysql_num_rows($res) == 0) + stdmsg("Sorry...", "No uploaders."); +else +{ + begin_frame("Uploader Activity", True); + begin_table(); + print("\n + Uploader\n + Last Upload\n + Torrents\n + Perc.\n + Peers\n + Perc.\n + \n"); + while ($uper = mysql_fetch_array($res)) + { + print("" . get_username($uper['id']) . "\n"); + print("".$uper['last']." (".get_elapsed_time(strtotime($uper['last']))." ago)"):"align=center>---") . "\n"); + print("" . $uper['n_t'] . "\n"); + print("" . ($n_tor > 0?number_format(100 * $uper['n_t']/$n_tor,1)."%":"---") . "\n"); + print("" . $uper['n_p']."\n"); + print("" . ($n_peers > 0?number_format(100 * $uper['n_p']/$n_peers,1)."%":"---") . "\n"); + } + end_table(); + end_frame(); +} + +if ($n_tor == 0) + stdmsg("Sorry...", "No categories defined!"); +else +{ + if ($catorder == "lastul") + $orderby = "last DESC, c.name"; + elseif ($catorder == "torrents") + $orderby = "n_t DESC, c.name"; + elseif ($catorder == "peers") + $orderby = "n_p DESC, name"; + else + $orderby = "c.name"; + + $res = sql_query("SELECT c.name, MAX(t.added) AS last, COUNT(DISTINCT t.id) AS n_t, COUNT(p.id) AS n_p + FROM categories as c LEFT JOIN torrents as t ON t.category = c.id LEFT JOIN peers as p + ON t.id = p.torrent GROUP BY c.id ORDER BY $orderby") or sqlerr(__FILE__, __LINE__); + + begin_frame("Category Activity", True); + begin_table(); + print("Category + Last Upload + Torrents + Perc. + Peers + Perc.\n"); + while ($cat = mysql_fetch_array($res)) + { + print("" . $cat['name'] . ""); + print("".$cat['last']." (".get_elapsed_time(strtotime($cat['last']))." ago)"):"align = center>---") .""); + print("" . $cat['n_t'] . ""); + print("" . number_format(100 * $cat['n_t']/$n_tor,1) . "%"); + print("" . $cat['n_p'] . ""); + print("" . ($n_peers > 0?number_format(100 * $cat['n_p']/$n_peers,1)."%":"---") . "\n"); + } + end_table(); + end_frame(); +} + +end_main_frame(); +stdfoot(); +die; +?> diff --git a/styles/.htaccess b/styles/.htaccess new file mode 100644 index 00000000..9e2e17c4 --- /dev/null +++ b/styles/.htaccess @@ -0,0 +1,3 @@ +Options -Indexes +Order allow,deny +Allow from all diff --git a/styles/BambooGreen/DomTT.css b/styles/BambooGreen/DomTT.css new file mode 100644 index 00000000..ca466833 --- /dev/null +++ b/styles/BambooGreen/DomTT.css @@ -0,0 +1,80 @@ +div.niceTitle +{ + background-color: #55aa55; + color: #000000; + font-size: 13px; + left: 0; + top: 0; + padding: 4px; + position: absolute; + text-align: left; + z-index: 20; + -moz-border-radius: 0 10px 10px 10px; + -webkit-border-top-right-radius: 10px; + -webkit-border-bottom-right-radius: 10px; + -webkit-border-bottom-left-radius: 10px; + -webkit-border-top-left-radius: 0px; + border-top-right-radius: 10px; + border-bottom-right-radius: 10px; + border-bottom-left-radius: 10px; + border-top-left-radius: 0px; + filter: progid:DXImageTransform.Microsoft.Alpha(opacity=87); + -moz-opacity: .87; + -khtml-opacity: .87; + opacity: .87; +} +div.smilies table +{ + width: 60px; + height: 60px; + background-color: transparent; + text-align: center; + vertical-align: middle; +} +div.smilies td +{ + background-color: #55aa55; + color: #000000; + border: none; + font-size: 13px; + z-index: 20; + filter: progid:DXImageTransform.Microsoft.Alpha(opacity=87); + -moz-opacity: .87; + -khtml-opacity: .87; + opacity: .87; +} +div.niceTitle .contents +{ + margin: 0; + padding: 0 3px; + filter: progid:DXImageTransform.Microsoft.Alpha(opacity=100); + -moz-opacity: 1; + -khtml-opacity: 1; + opacity: 1; +} +div.attach .contents +{ + width: 130px; + background:#FFFFFF none repeat scroll 0 0; + border:1px solid #E6E7E1; + font-size:12px; + padding:5px; +} +div.attach .contents a +{ + color:#0099CC; + text-decoration:none; +} +div.attach .contents +{ + width: 130px; + background:#FFFFFF none repeat scroll 0 0; + border:1px solid #E6E7E1; + font-size:12px; + padding:5px; +} +div.attach .contents strong +{ + color: #0099CC; + font-weight: bold; +} diff --git a/styles/BambooGreen/bg.jpg b/styles/BambooGreen/bg.jpg new file mode 100644 index 00000000..c2dea0c5 Binary files /dev/null and b/styles/BambooGreen/bg.jpg differ diff --git a/styles/BambooGreen/theme.css b/styles/BambooGreen/theme.css new file mode 100644 index 00000000..37b98a50 --- /dev/null +++ b/styles/BambooGreen/theme.css @@ -0,0 +1,638 @@ +body +{ + margin-top: 0px; + margin-bottom: 0px; + background: url(./bg.jpg) no-repeat center top; + background-color: #006633; + color: #000000; + font-family: tahoma, arial, helvetica, sans-serif; +} +body.inframe +{ + background-image: none; + background-color: #c6e3c6; +} +table +{ + border-right: none; + border-top: none; + border-left: none; + border-bottom: none; + border-collapse: collapse; + background-color: #c6e3c6 +} +table.head +{ + background: transparent; + height: 100px; + width: 920px; +} +table.main +{ + border-right: none; + border-top: none; + border-left: none; + border-bottom: none; + background-color: #55aa55 +} +table.mainouter +{ + border-right: lime; + border-top: lime; + border-left: lime; + border-bottom: lime; + background-color: #55aa55 +} +table.message +{ + border-right: lime 1px solid; + border-top: lime 1px solid; + border-left: lime 1px solid; + border-bottom: lime 1px solid +} +table.bottom +{ + background: none transparent scroll repeat 0% 0% +} +a.info +{ + z-index: 24; + color: #000; + position: relative; + background-color: #ccc; + text-decoration: none +} +a.info:hover +{ + z-index: 25; + background-color: #ff0 +} +a.info span +{ + display: none +} +a.info:hover span +{ + border-right: #0cf 1px solid; + border-top: #0cf 1px solid; + display: block; + left: 2em; + border-left: #0cf 1px solid; + width: 15em; + color: #000; + border-bottom: #0cf 1px solid; + position: absolute; + top: 2em; + background-color: #cff; + text-align: center +} +table.bottom +{ + background: none transparent scroll repeat 0% 0% +} +h2 +{ + background-position: left top; + padding-right: 4px; + padding-left: 4px; + margin-bottom: 0px; + padding-bottom: 3px; + padding-top: 3px; + background-color: #006600; + background-repeat: repeat; +} +h2.transparentbg +{ + background-color: transparent; + background-image: none +} +p.sub +{ + margin-bottom: 4pt +} +td +{ + border-right: #00aa00 1px solid; + border-top: #00aa00 1px solid; + border-left: #00aa00 1px solid; + border-bottom: #00aa00 1px solid +} +td.embedded +{ + border-right: medium none; + padding-right: 0px; + border-top: medium none; + padding-left: 0px; + padding-bottom: 0px; + border-left: medium none; + padding-top: 0px; + border-bottom: medium none; + text-align: left +} +td.no_border +{ + border-right: medium none; + padding-right: 2px; + border-top: medium none; + padding-left: 2px; + padding-bottom: 3px; + border-left: medium none; + padding-top: 3px; + border-bottom: medium none; + background-color: transparent; + text-align: left +} +td.no_border_wide +{ + border-right: medium none; + padding-right: 16px; + border-top: medium none; + padding-top: 0px; + border-left: medium none; + padding-left: 0px; + border-bottom: medium none; + padding-bottom: 0px; + background-color: transparent; + text-align: left; + vertical-align: top; +} +td.shoutrow +{ + border-right: medium none; + border-top: medium none; + border-left: medium none; + border-bottom: medium none; +} +td.bottom +{ + border-right: medium none; + border-top: medium none; + border-left: medium none; + border-bottom: medium none +} +td.heading +{ + font-weight: bold +} +td.text +{ + padding-right: 10pt; + padding-left: 10pt; + padding-bottom: 10pt; + padding-top: 10pt +} +td.comment +{ + padding-right: 10pt; + padding-left: 10pt; + padding-bottom: 10pt; + padding-top: 10pt; + text-align: left +} +td.colhead +{ + white-space:nowrap; + font-weight: bold; + color: #ffffff; + background-color: #006600 +} +.nowrap +{ + white-space:nowrap; +} +td.rowhead_left +{ + text-align: left +} +td.rowhead_center +{ + text-align: center +} +td.rowhead +{ + font-weight: bold; + vertical-align: top; + text-align: right +} +td.rowfollow +{ +} +td.colfollow +{ +text-align: center; +} +table.torrents td.colhead +{ +text-align: center; +} +table.torrents td.rowfollow +{ +text-align: center; +} +td.toolbox +{ +} +td.title +{ +} +td.navigation +{ + border-right: medium none; + border-top: medium none; + font-weight: bold; + border-left: medium none; + border-bottom: medium none +} +td.clear +{ + border-right: 0px; + border-top: 0px; + background: none transparent scroll repeat 0% 0%; + border-left: 0px; + border-bottom: 0px +} +form +{ + margin-top: 0px; + margin-bottom: 0px +} +.sublink +{ + font-weight: normal; + font-style: italic +} +font.gray +{ + color: #aca899; + text-decoration: underline +} +.attach img +{ + border: 0; + width: 16px; + height: 16px; +} +.attach a:link +{ + color: #0099CC; + text-decoration: underline; +} +.attach .size +{ + color: gray; +} +a:link +{ + color: #000000; + text-decoration: none +} +a:visited +{ + color: #000000; + text-decoration: none +} +a:hover +{ + color: #008c00 +} +a.index +{ + font-weight: bold +} +a.biglink +{ + font-weight: bold; + text-decoration: none +} +a.altlink:link +{ + font-weight: bold; + color: #81c281; + text-decoration: none +} +a.altlink:visited +{ + font-weight: bold; + color: #81c281; + text-decoration: none +} +a.altlink:hover +{ + color: #f1ab41; +} +a.faqlink:link +{ + font-weight: bold; + color: #008600; + text-decoration: none +} +a.faqlink:visited +{ + font-weight: bold; + color: #008600; + text-decoration: none +} +a.faqlink:hover +{ + color: #f1ab41; +} +a.altlink_blue:link +{ + font-weight: bold; + color: #004e98; + text-decoration: none +} +a.altlink_blue:visited +{ + font-weight: bold; + color: #004e98; + text-decoration: none +} +a.altlink_blue:hover +{ + text-decoration: underline +} +a.altlink_green:link +{ + font-weight: bold; + color: #007800; + text-decoration: none +} +a.altlink_green:visited +{ + font-weight: bold; + color: #007800; + text-decoration: none +} +a.altlink_green:hover +{ + text-decoration: underline +} +.important +{ + font-weight: bold; +} +.red +{ + color: #ee0000 +} +.yellow +{ + color: #997700 +} +.green +{ + color: #000000 +} +.btn2 +{ + +} +.btn +{ + +} +li +{ + margin-top: 6pt; + margin-bottom: 6pt; + margin-left: 16pt +} +ul +{ + margin-top: 0px; + margin-bottom: 0px; +} +img +{ + border: 0; +} +img.border +{ + border-right: #000000 1px solid; + border-top: #000000 1px solid; + border-left: #000000 1px solid; + border-bottom: #000000 1px solid +} +.gobutton +{ + background: #006600; + color: #000 +} +.codetop +{ + padding-right: 3px; + padding-left: 3px; + font-weight: bold; + background: #71c271; + padding-bottom: 3px; + margin: 0px auto; + color: #000; + padding-top: 3px +} +.codemain +{ + border-right: #000 1px solid; + padding-right: 3px; + border-top: #000 1px solid; + padding-left: 3px; + background: #fff; + padding-bottom: 3px; + margin: 0px auto; + border-left: #000 1px solid; + color: #000; + padding-top: 3px; + border-bottom: #000 1px solid +} +.dropmenu +{ + background:#F2F9FD none repeat scroll 0 0; + border:3px solid #A6C9D7; + margin-top:3px; + opacity:0.9; + position:absolute; + text-align:left; +} +.dropmenu ul +{ + list-style-type: none; + white-space: nowrap; + padding:10px; +} +.dropmenu ul li +{ + margin-left: 0px; + margin-right: 0px; +} +ul.menu +{ + list-style-image: none; + list-style-type: none; + white-space: nowrap; + text-align: center; +} +ul.menu li +{ + display: inline; + margin-left: 0px; + margin-bottom: 0px; +} +ul.menu li a +{ + color: #ffffff; + background-color: #00aa00; + border-color: green green #00aa00; + border-style: solid; + border-width: 1px; + margin-right: 1px; + padding: 3px 7px; + text-decoration: none; + font-style: normal; + font-weight: bold; + font-family: verdana; + font-variant: normal; + text-align: center; + display: inline-block; +} +ul.menu li a:link +{ + color: #ffffff; +} +ul.menu li a:visited +{ + color: #ffffff; +} +ul.menu li a:hover +{ + background-color: #00ff00; +} +ul.menu li a:active +{ + color: #ffffff; +} +ul.menu li.selected a +{ + background-color: #336633; + background-image: none; + border: 1px solid #00aa00; + color: #ffffff; +} +ul.menu li.selected a:hover +{ + background-color: #336633; +} +.listitem +{ + margin-left: 10px; + margin-right: 5px +} +.StaffLeader_Name{color: #8b0000} +A.StaffLeader_Name:link{color: #8b0000} +A.StaffLeader_Name:visited{color: #8b0000} + +.SysOp_Name{color: #a0522d} +A.SysOp_Name:link{color: #a0522d} +A.SysOp_Name:visited{color: #a0522d} + +.Administrator_Name{color: #4b0082} +A.Administrator_Name:link{color: #4b0082} +A.Administrator_Name:visited{color: #4b0082} + +.Moderator_Name{color: #6495ED} +A.Moderator_Name:link{color: #6495ED} +A.Moderator_Name:visited{color: #6495ED} + +.ForumModerator_Name{COLOR: #1cc6d5} +A.ForumModerator_Name:link{COLOR: #1cc6d5} +A.ForumModerator_Name:visited{COLOR: #1cc6d5} + +.Retiree_Name{COLOR: #1cc6d5} +A.Retiree_Name:link{COLOR: #1cc6d5} +A.Retiree_Name:visited{COLOR: #1cc6d5} + +.Uploader_Name{color: #DC143C} +A.Uploader_Name:link{color: #DC143C} +A.Uploader_Name:visited{color: #DC143C} + +.VIP_Name{color: #009F00} +A.VIP_Name:link{color: #009F00} +A.VIP_Name:visited{color: #009F00} + +.NexusMaster_Name{color: #38ACEC} +A.NexusMaster_Name:link{color: #38ACEC} +A.NexusMaster_Name:visited{color: #38ACEC} + +.UltimateUser_Name{color: #006400} +A.UltimateUser_Name:link{color: #006400} +A.UltimateUser_Name:visited{color: #006400} + +.ExtremeUser_Name{color: #FF8C00} +A.ExtremeUser_Name:link{color: #FF8C00} +A.ExtremeUser_Name:visited{color: #FF8C00} + +.VeteranUser_Name{color: #483D8B} +A.VeteranUser_Name:link{color: #483D8B} +A.VeteranUser_Name:visited{color: #483D8B} + +.InsaneUser_Name{color: #8B008B} +A.InsaneUser_Name:link{color: #8B008B} +A.InsaneUser_Name:visited{color: #8B008B} + +.CrazyUser_Name{color: #00BFFF} +A.CrazyUser_Name:link{color: #00BFFF} +A.CrazyUser_Name:visited{color: #00BFFF} + +.EliteUser_Name{color: #008B8B} +A.EliteUser_Name:link{color: #008B8B} +A.EliteUser_Name:visited{color: #008B8B} + +.PowerUser_Name{color: #DAA520} +A.PowerUser_Name:link{color: #DAA520} +A.PowerUser_Name:visited{color: #DAA520} + +.User_Name{color: #000000} +A.User_Name:link{color: #000000} +A.User_Name:visited{color: #000000} + +.Peasant_Name{color: #708090} +A.Peasant_Name:link{color: #708090} +A.Peasant_Name:visited{color: #708090} + +.color_bonus{color: #339933} +.color_invite{color: #339933} +.color_slots{color: #339933} +.color_downloaded{color: #8b0000} +.color_uploaded{color: #0000f6} +.color_ratio{color: #339933} +.color_active{color: #339933} +.color_connectable{color: #339933} + +.logo +{ + color: #ffffff; + font-family: tahoma, arial, helvetica, sans-serif; +} + +.slogan +{ + color: #eeeeee; + font-family: tahoma, arial, helvetica, sans-serif; +} + +.free{color:#f0cc00} +.twoup{color:#aaaaaa} +.twoupfree{color:#99cc66} +.halfdown{color:#7c7ff6} +.twouphalfdown{color:#7ad6ea} +.thirtypercent{color:#70328d} +.free_bg{background-color:#ffff99} +.twoup_bg{background-color:#dddddd} +.twoupfree_bg{background-color:#ccff99} +.halfdown_bg{background-color:#cccdf8} +.twouphalfdown_bg{background-color: #96dbea} +.thirtypercentdown_bg{background-color:#ddc3ea} +.hot{color:#e78d0f} +.classic{color:#77b300} +.recommended{color:#820084} +.new{color:#ff0000} +.striking{color:#ff0000} diff --git a/styles/BlasphemyOrange/DomTT.css b/styles/BlasphemyOrange/DomTT.css new file mode 100644 index 00000000..00f25eca --- /dev/null +++ b/styles/BlasphemyOrange/DomTT.css @@ -0,0 +1,80 @@ +div.niceTitle +{ + background-color: #ffc580; + color: #000000; + font-size: 13px; + left: 0; + top: 0; + padding: 4px; + position: absolute; + text-align: left; + z-index: 20; + -moz-border-radius: 0 10px 10px 10px; + -webkit-border-top-right-radius: 10px; + -webkit-border-bottom-right-radius: 10px; + -webkit-border-bottom-left-radius: 10px; + -webkit-border-top-left-radius: 0px; + border-top-right-radius: 10px; + border-bottom-right-radius: 10px; + border-bottom-left-radius: 10px; + border-top-left-radius: 0px; + filter: progid:DXImageTransform.Microsoft.Alpha(opacity=87); + -moz-opacity: .87; + -khtml-opacity: .87; + opacity: .87; +} +div.smilies table +{ + width: 60px; + height: 60px; + background-color: transparent; + text-align: center; + vertical-align: middle; +} +div.smilies td +{ + background-color: #ffc580; + color: #000000; + border: none; + font-size: 13px; + z-index: 20; + filter: progid:DXImageTransform.Microsoft.Alpha(opacity=87); + -moz-opacity: .87; + -khtml-opacity: .87; + opacity: .87; +} +div.niceTitle .contents +{ + margin: 0; + padding: 0 3px; + filter: progid:DXImageTransform.Microsoft.Alpha(opacity=100); + -moz-opacity: 1; + -khtml-opacity: 1; + opacity: 1; +} +div.attach .contents +{ + width: 130px; + background:#FFFFFF none repeat scroll 0 0; + border:1px solid #E6E7E1; + font-size:12px; + padding:5px; +} +div.attach .contents strong +{ + color: #0099CC; + font-weight: bold; +} +div.attach .contents +{ + width: 130px; + background:#FFFFFF none repeat scroll 0 0; + border:1px solid #E6E7E1; + font-size:12px; + padding:5px; +} +div.attach .contents strong +{ + color: #0099CC; + font-weight: bold; +} diff --git a/styles/BlasphemyOrange/bg.gif b/styles/BlasphemyOrange/bg.gif new file mode 100644 index 00000000..0c5de15c Binary files /dev/null and b/styles/BlasphemyOrange/bg.gif differ diff --git a/styles/BlasphemyOrange/btnbg.gif b/styles/BlasphemyOrange/btnbg.gif new file mode 100644 index 00000000..ad9f98d1 Binary files /dev/null and b/styles/BlasphemyOrange/btnbg.gif differ diff --git a/styles/BlasphemyOrange/code.gif b/styles/BlasphemyOrange/code.gif new file mode 100644 index 00000000..abc9c13a Binary files /dev/null and b/styles/BlasphemyOrange/code.gif differ diff --git a/styles/BlasphemyOrange/shade.gif b/styles/BlasphemyOrange/shade.gif new file mode 100644 index 00000000..dd63adaa Binary files /dev/null and b/styles/BlasphemyOrange/shade.gif differ diff --git a/styles/BlasphemyOrange/shadeactive.gif b/styles/BlasphemyOrange/shadeactive.gif new file mode 100644 index 00000000..485673d4 Binary files /dev/null and b/styles/BlasphemyOrange/shadeactive.gif differ diff --git a/styles/BlasphemyOrange/theme.css b/styles/BlasphemyOrange/theme.css new file mode 100644 index 00000000..4e123722 --- /dev/null +++ b/styles/BlasphemyOrange/theme.css @@ -0,0 +1,683 @@ +body +{ + margin-top: 0px; + background: #e6e6e6 url(./bg.gif) repeat left top; + margin-bottom: 0px; + color: #000000; + font-family: tahoma, arial, helvetica, sans-serif; +} +body.inframe +{ + background: transparent none; +} +table +{ + border-right: medium none; + border-top: medium none; + border-left: medium none; + border-bottom: medium none; + border-collapse: collapse; + background-color: transparent +} +table.head +{ + background: transparent; + height: 100px; + width: 920px; +} +table.main +{ + border-right: medium none; + border-top: medium none; + border-left: medium none; + border-bottom: medium none; + background-color: transparent +} +table.mainouter +{ + border-right: gray; + border-top: gray; + border-left: gray; + border-bottom: gray; + background-color: white +} +table.message +{ + border-right: #bccad6 1px solid; + border-top: #bccad6 1px solid; + border-left: #bccad6 1px solid; + border-bottom: #bccad6 1px solid +} +table.bottom +{ + background: none transparent scroll repeat 0% 0% +} +a.info +{ + z-index: 24; + color: #000; + position: relative; + background-color: #ccc; + text-decoration: none +} +a.info:hover +{ + z-index: 25; + background-color: #ff0 +} +a.info span +{ + display: none +} +a.info:hover span +{ + border-right: #0cf 1px solid; + border-top: #0cf 1px solid; + display: block; + left: 2em; + border-left: #0cf 1px solid; + width: 15em; + color: #000; + border-bottom: #0cf 1px solid; + position: absolute; + top: 2em; + background-color: #cff; + text-align: center +} +table.bottom +{ + background: none transparent scroll repeat 0% 0% +} +h1 +{ +} +h2 +{ + padding-right: 4px; + background-position: left top; + padding-left: 4px; + background-image: url(./shade.gif); + margin-bottom: 0px; + padding-bottom: 3px; + padding-top: 3px; + background-repeat: repeat-x; + background-color: #ff9718; +} +h2.transparentbg +{ + background-color: transparent; + background-image: none +} +p +{ +} +p.sub +{ + margin-bottom: 4pt +} +td +{ + border-right: #cccccc 1px solid; + border-top: #cccccc 1px solid; + border-left: #cccccc 1px solid; + border-bottom: #cccccc 1px solid +} +td.embedded +{ + border-right: medium none; + padding-right: 0px; + border-top: medium none; + padding-left: 0px; + padding-bottom: 0px; + border-left: medium none; + padding-top: 0px; + border-bottom: medium none; + text-align: left +} +td.no_border +{ + border-right: medium none; + padding-right: 2px; + border-top: medium none; + padding-left: 2px; + padding-bottom: 3px; + border-left: medium none; + padding-top: 3px; + border-bottom: medium none; + background-color: transparent; + text-align: left +} +td.no_border_wide +{ + border-right: medium none; + padding-right: 16px; + border-top: medium none; + padding-top: 0px; + border-left: medium none; + padding-left: 0px; + border-bottom: medium none; + padding-bottom: 0px; + background-color: transparent; + text-align: left; + vertical-align: top; +} +td.shoutrow +{ + border-right: medium none; + border-top: medium none; + border-left: medium none; + border-bottom: medium none; + background-color: #ffffff +} +td.bottom +{ + border-right: medium none; + border-top: medium none; + border-left: medium none; + border-bottom: medium none +} +td.heading +{ + font-weight: bold +} +td.text +{ + padding-right: 10pt; + padding-left: 10pt; + padding-bottom: 10pt; + padding-top: 10pt +} +td.comment +{ + padding-right: 10pt; + padding-left: 10pt; + padding-bottom: 10pt; + padding-top: 10pt; + text-align: left +} +td.colhead +{ + white-space:nowrap; + font-weight: bold; + background: url(./shade.gif) white repeat-x left top; + background-color: #ff9718; + color: #ffffff; +} +.nowrap +{ + white-space:nowrap; +} +td.rowhead_left +{ + text-align: left +} +td.rowhead_center +{ + text-align: center +} +td.rowhead +{ + font-weight: bold; + vertical-align: top; + text-align: right +} +td.rowfollow +{ +} +td.colfollow +{ +text-align: center; +} +table.torrents +{ +text-align: center; +} +table.torrents td.rowfollow +{ +text-align: center; +} +td.toolbox +{ +} +td.title +{ +} +td.navigation +{ + border-right: medium none; + border-top: medium none; + font-weight: bold; + border-left: medium none; + border-bottom: medium none +} +td.clear +{ + border-right: 0px; + border-top: 0px; + background: none transparent scroll repeat 0% 0%; + border-left: 0px; + border-bottom: 0px +} +td.nothing +{ + border-right: 0px; + padding-right: 0px; + border-top: 0px; + padding-left: 0px; + background: none transparent scroll repeat 0% 0%; + padding-bottom: 0px; + border-left: 0px; + padding-top: 0px; + border-bottom: 0px +} +form +{ + margin-top: 0px; + margin-bottom: 0px +} +.sublink +{ + font-weight: normal; + font-style: italic +} +font.gray +{ + color: #aca899; + text-decoration: underline; +} +.attach img +{ + border: 0; + width: 16px; + height: 16px; +} +.attach a:link +{ + color: #0099CC; + text-decoration: underline; +} +.attach .size +{ + color: gray; +} +a:link +{ + color: #000000; + text-decoration: none +} +a:visited +{ + color: #000000; + text-decoration: none +} +a:hover +{ + color: #ff8e00 +} +a.index +{ + font-weight: bold +} +a.biglink +{ + font-weight: bold; + text-decoration: none +} +a.altlink:link +{ + font-weight: bold; + color: #a83838; + text-decoration: none +} +a.altlink:visited +{ + font-weight: bold; + color: #a83838; + text-decoration: none +} +a.altlink:hover +{ + text-decoration: underline +} +a.faqlink:link +{ + font-weight: bold; + color: #a83838; + text-decoration: none +} +a.faqlink:visited +{ + font-weight: bold; + color: #a83838; + text-decoration: none +} +a.faqlink:hover +{ + text-decoration: underline +} +a.altlink_blue:link +{ + font-weight: bold; + color: #004e98; + text-decoration: none +} +a.altlink_blue:visited +{ + font-weight: bold; + color: #004e98; + text-decoration: none +} +a.altlink_blue:hover +{ + text-decoration: underline +} +a.altlink_green:link +{ + font-weight: bold; + color: #007800; + text-decoration: none +} +a.altlink_green:visited +{ + font-weight: bold; + color: #007800; + text-decoration: none +} +a.altlink_green:hover +{ + text-decoration: underline +} +.important +{ + font-weight: bold; +} +.red +{ + color: #ee0000 +} +.yellow +{ + color: #997700 +} +.green +{ + color: #000000 +} +.btn2 +{ + border-right: #ccc 1px outset; + padding-right: 2px; + border-top: #ccc 1px outset; + padding-left: 2px; + font-weight: bold; + background: url(./btnbg.gif) repeat-x left top; + padding-bottom: 1px; + border-left: #ccc 1px outset; + cursor: pointer; + color: #666; + padding-top: 1px; + border-bottom: #ccc 1px outset +} +.btn +{ + border-right: #ccc 1px outset; + padding-right: 2px; + border-top: #ccc 1px outset; + padding-left: 2px; + font-weight: bold; + background: url(./btnbg.gif) repeat-x left top; + padding-bottom: 1px; + border-left: #ccc 1px outset; + cursor: pointer; + color: #666; + padding-top: 1px; + border-bottom: #ccc 1px outset +} +.small +{ +} +.big +{ +} +li +{ + margin-top: 6pt; + margin-bottom: 6pt; + margin-left: 16pt +} +ul +{ + margin-top: 0px; + margin-bottom: 0px; +} +img +{ + border: 0; +} +img.border +{ + border-right: #000000 1px solid; + border-top: #000000 1px solid; + border-left: #000000 1px solid; + border-bottom: #000000 1px solid +} +.gobutton +{ + background: #476ba2; + color: #fff +} +.codetop +{ + padding-right: 3px; + padding-left: 3px; + font-weight: bold; + background: url(./code.gif) #f1b000 no-repeat right 50%; + padding-bottom: 3px; + margin: 0px auto; + color: #000; + padding-top: 3px +} +.codemain +{ + border-right: #000 1px solid; + padding-right: 3px; + border-top: #000 1px solid; + padding-left: 3px; + background: #fff; + padding-bottom: 3px; + margin: 0px auto; + border-left: #000 1px solid; + color: #000; + padding-top: 3px; + border-bottom: #000 1px solid +} +.dropmenu +{ + background:#F2F9FD none repeat scroll 0 0; + border:3px solid #A6C9D7; + margin-top:3px; + opacity:0.9; + position:absolute; + text-align:left; +} +.dropmenu ul +{ + list-style-type: none; + white-space: nowrap; + padding:10px; +} +.dropmenu ul li +{ + margin-left: 0px; + margin-right: 0px; +} +ul.menu +{ + list-style-image: none; + list-style-type: none; + white-space: nowrap; + text-align: center; +} +ul.menu li +{ + display: inline; + margin-left: 0px; + margin-right: 0px; +} +ul.menu li a +{ + color: #2d2b2b; + background: url(./shade.gif) repeat-x left top; + border: 1px solid white; + background-color: #ff9718; + margin-right: 1px; + padding: 3px 7px; + text-decoration: none; + font-style: normal; + font-weight: bold; + font-family: verdana; + font-variant: normal; + text-align: center; + display: inline-block; +} +ul.menu li a:link +{ + color: #2d2b2b; +} +ul.menu li a:visited +{ + color: #2d2b2b; +} +ul.menu li a:hover +{ + color: #2d2b2b; + text-decoration: underline; +} +ul.menu li a:active +{ + color: #2d2b2b; +} +ul.menu li.selected a +{ + background-image: url(./shadeactive.gif); + background-color: #8a8a8a; +} +ul.menu li.selected a:hover +{ + text-decoration: none; +} +.listitem +{ + margin-left: 10px; + margin-right: 5px +} +.StaffLeader_Name{color: #8b0000} +A.StaffLeader_Name:link{color: #8b0000} +A.StaffLeader_Name:visited{color: #8b0000} + +.SysOp_Name{color: #a0522d} +A.SysOp_Name:link{color: #a0522d} +A.SysOp_Name:visited{color: #a0522d} + +.Administrator_Name{color: #4b0082} +A.Administrator_Name:link{color: #4b0082} +A.Administrator_Name:visited{color: #4b0082} + +.Moderator_Name{color: #6495ED} +A.Moderator_Name:link{color: #6495ED} +A.Moderator_Name:visited{color: #6495ED} + +.ForumModerator_Name{COLOR: #1cc6d5} +A.ForumModerator_Name:link{COLOR: #1cc6d5} +A.ForumModerator_Name:visited{COLOR: #1cc6d5} + +.Retiree_Name{COLOR: #1cc6d5} +A.Retiree_Name:link{COLOR: #1cc6d5} +A.Retiree_Name:visited{COLOR: #1cc6d5} + +.Uploader_Name{color: #DC143C} +A.Uploader_Name:link{color: #DC143C} +A.Uploader_Name:visited{color: #DC143C} + +.VIP_Name{color: #009F00} +A.VIP_Name:link{color: #009F00} +A.VIP_Name:visited{color: #009F00} + +.NexusMaster_Name{color: #38ACEC} +A.NexusMaster_Name:link{color: #38ACEC} +A.NexusMaster_Name:visited{color: #38ACEC} + +.UltimateUser_Name{color: #006400} +A.UltimateUser_Name:link{color: #006400} +A.UltimateUser_Name:visited{color: #006400} + +.ExtremeUser_Name{color: #FF8C00} +A.ExtremeUser_Name:link{color: #FF8C00} +A.ExtremeUser_Name:visited{color: #FF8C00} + +.VeteranUser_Name{color: #483D8B} +A.VeteranUser_Name:link{color: #483D8B} +A.VeteranUser_Name:visited{color: #483D8B} + +.InsaneUser_Name{color: #8B008B} +A.InsaneUser_Name:link{color: #8B008B} +A.InsaneUser_Name:visited{color: #8B008B} + +.CrazyUser_Name{color: #00BFFF} +A.CrazyUser_Name:link{color: #00BFFF} +A.CrazyUser_Name:visited{color: #00BFFF} + +.EliteUser_Name{color: #008B8B} +A.EliteUser_Name:link{color: #008B8B} +A.EliteUser_Name:visited{color: #008B8B} + +.PowerUser_Name{color: #DAA520} +A.PowerUser_Name:link{color: #DAA520} +A.PowerUser_Name:visited{color: #DAA520} + +.User_Name{color: #000000} +A.User_Name:link{color: #000000} +A.User_Name:visited{color: #000000} + +.Peasant_Name{color: #708090} +A.Peasant_Name:link{color: #708090} +A.Peasant_Name:visited{color: #708090} + +.color_bonus{color: #1900d1} +.color_invite{color: #1900d1} +.color_slots{color: #1900d1} +.color_downloaded{color: #8b0000} +.color_uploaded{color: #008000} +.color_ratio{color: #1900d1} +.color_active{color: #1900d1} +.color_connectable{color: #1900d1} + +.logo +{ + color: #ffa531; + font-family: tahoma, arial, helvetica, sans-serif; +} + +.slogan +{ + color: #de9332; + font-family: tahoma, arial, helvetica, sans-serif; +} + +.free{color:#f0cc00} +.twoup{color:#aaaaaa} +.twoupfree{color:#99cc66} +.halfdown{color:#7c7ff6} +.twouphalfdown{color:#7ad6ea} +.thirtypercent{color:#70328d} +.free_bg{background-color:#ffff99} +.twoup_bg{background-color:#dddddd} +.twoupfree_bg{background-color:#ccff99} +.halfdown_bg{background-color:#cccdf8} +.twouphalfdown_bg{background-color: #96dbea} +.thirtypercentdown_bg{background-color:#ddc3ea} +.hot{color:#e78d0f} +.classic{color:#77b300} +.recommended{color:#820084} +.new{color:#ff0000} +.striking{color:#ff0000} diff --git a/styles/BlueGene/DomTT.css b/styles/BlueGene/DomTT.css new file mode 100644 index 00000000..bc943ad9 --- /dev/null +++ b/styles/BlueGene/DomTT.css @@ -0,0 +1,67 @@ +div.niceTitle +{ + background-color: #7c98ae; + color: #000000; + font-size: 13px; + left: 0; + top: 0; + padding: 4px; + position: absolute; + text-align: left; + z-index: 20; + -moz-border-radius: 0 10px 10px 10px; + -webkit-border-top-right-radius: 10px; + -webkit-border-bottom-right-radius: 10px; + -webkit-border-bottom-left-radius: 10px; + -webkit-border-top-left-radius: 0px; + border-top-right-radius: 10px; + border-bottom-right-radius: 10px; + border-bottom-left-radius: 10px; + border-top-left-radius: 0px; + filter: progid:DXImageTransform.Microsoft.Alpha(opacity=87); + -moz-opacity: .87; + -khtml-opacity: .87; + opacity: .87; +} +div.smilies table +{ + width: 60px; + height: 60px; + background-color: transparent; + text-align: center; + vertical-align: middle; +} +div.smilies td +{ + background-color: #7c98ae; + color: #000000; + border: none; + font-size: 13px; + z-index: 20; + filter: progid:DXImageTransform.Microsoft.Alpha(opacity=87); + -moz-opacity: .87; + -khtml-opacity: .87; + opacity: .87; +} +div.niceTitle .contents +{ + margin: 0; + padding: 0 3px; + filter: progid:DXImageTransform.Microsoft.Alpha(opacity=100); + -moz-opacity: 1; + -khtml-opacity: 1; + opacity: 1; +} +div.attach .contents +{ + width: 130px; + background:#FFFFFF none repeat scroll 0 0; + border:1px solid #E6E7E1; + font-size:12px; + padding:5px; +} +div.attach .contents strong +{ + color: #0099CC; + font-weight: bold; +} diff --git a/styles/BlueGene/btnbg.gif b/styles/BlueGene/btnbg.gif new file mode 100644 index 00000000..0dab8ee6 Binary files /dev/null and b/styles/BlueGene/btnbg.gif differ diff --git a/styles/BlueGene/code.gif b/styles/BlueGene/code.gif new file mode 100644 index 00000000..abc9c13a Binary files /dev/null and b/styles/BlueGene/code.gif differ diff --git a/styles/BlueGene/shade.gif b/styles/BlueGene/shade.gif new file mode 100644 index 00000000..a927d4be Binary files /dev/null and b/styles/BlueGene/shade.gif differ diff --git a/styles/BlueGene/shadeactive.gif b/styles/BlueGene/shadeactive.gif new file mode 100644 index 00000000..46078257 Binary files /dev/null and b/styles/BlueGene/shadeactive.gif differ diff --git a/styles/BlueGene/shadehover.gif b/styles/BlueGene/shadehover.gif new file mode 100644 index 00000000..1c2cb067 Binary files /dev/null and b/styles/BlueGene/shadehover.gif differ diff --git a/styles/BlueGene/theme.css b/styles/BlueGene/theme.css new file mode 100644 index 00000000..08e17f40 --- /dev/null +++ b/styles/BlueGene/theme.css @@ -0,0 +1,673 @@ +body +{ + margin-top: 0px; + margin-bottom: 0px; + color: #000000; + font-family: tahoma, arial, helvetica, sans-serif; + background-color: #587993 +} +body.inframe +{ + background-image: none; + background-color: #bccad6 +} +table +{ + border-right: medium none; + border-top: medium none; + border-left: medium none; + border-bottom: medium none; + border-collapse: collapse; + background-color: #bccad6 +} +table.head +{ + background: transparent; + height: 100px; + width: 920px; +} +table.main +{ + border-right: medium none; + border-top: medium none; + border-left: medium none; + border-bottom: medium none; + background-color: #7c98ae +} +table.mainouter +{ + border-right: gray; + border-top: gray; + border-left: gray; + border-bottom: gray; + background-color: #7c98ae +} +table.message +{ + border-right: #bccad6 1px solid; + border-top: #bccad6 1px solid; + border-left: #bccad6 1px solid; + border-bottom: #bccad6 1px solid +} +table.bottom +{ + background: none transparent scroll repeat 0% 0% +} +a.info +{ + z-index: 24; + color: #000; + position: relative; + background-color: #ccc; + text-decoration: none +} +a.info:hover +{ + z-index: 25; + background-color: #ff0 +} +a.info span +{ + display: none +} +a.info:hover span +{ + border-right: #0cf 1px solid; + border-top: #0cf 1px solid; + display: block; + left: 2em; + border-left: #0cf 1px solid; + width: 15em; + color: #000; + border-bottom: #0cf 1px solid; + position: absolute; + top: 2em; + background-color: #cff; + text-align: center +} +table.bottom +{ + background: none transparent scroll repeat 0% 0% +} +h1 +{ +} +h2 +{ + background-position: left top; + padding-right: 4px; + padding-left: 4px; + margin-bottom: 0px; + padding-bottom: 3px; + padding-top: 3px; + background-color: #2f4879; + background-repeat: repeat; +} +h2.transparentbg +{ + background-color: transparent; + background-image: none +} +p +{ +} +p.sub +{ + margin-bottom: 4pt +} +td +{ + border-right: #000000 1px solid; + border-top: #000000 1px solid; + border-left: #000000 1px solid; + border-bottom: #000000 1px solid +} +td.embedded +{ + border-right: medium none; + padding-right: 0px; + border-top: medium none; + padding-left: 0px; + padding-bottom: 0px; + border-left: medium none; + padding-top: 0px; + border-bottom: medium none; + text-align: left +} +td.no_border +{ + border-right: medium none; + padding-right: 2px; + border-top: medium none; + padding-left: 2px; + padding-bottom: 3px; + border-left: medium none; + padding-top: 3px; + border-bottom: medium none; + background-color: transparent; + text-align: left +} +td.no_border_wide +{ + border-right: medium none; + padding-right: 16px; + border-top: medium none; + padding-top: 0px; + border-left: medium none; + padding-left: 0px; + border-bottom: medium none; + padding-bottom: 0px; + background-color: transparent; + text-align: left; + vertical-align: top; +} +td.shoutrow +{ + border-right: medium none; + border-top: medium none; + border-left: medium none; + border-bottom: medium none; +} +td.bottom +{ + border-right: medium none; + border-top: medium none; + border-left: medium none; + border-bottom: medium none +} +td.heading +{ + font-weight: bold +} +td.text +{ + padding-right: 10pt; + padding-left: 10pt; + padding-bottom: 10pt; + padding-top: 10pt +} +td.comment +{ + padding-right: 10pt; + padding-left: 10pt; + padding-bottom: 10pt; + padding-top: 10pt; + text-align: left +} +td.colhead +{ + white-space:nowrap; + font-weight: bold; + color: #ffffff; + background-color: #2f4879 +} +.nowrap +{ + white-space:nowrap; +} +td.rowhead_left +{ + text-align: left +} +td.rowhead_center +{ + text-align: center +} +td.rowhead +{ + font-weight: bold; + vertical-align: top; + text-align: right +} +td.rowfollow +{ +} +td.colfollow +{ +text-align: center; +} +table.torrents td.colhead +{ +text-align: center; +} +table.torrents td.rowfollow +{ +text-align: center; +} +td.toolbox +{ +} +td.title +{ +} +td.navigation +{ + border-right: medium none; + border-top: medium none; + font-weight: bold; + border-left: medium none; + border-bottom: medium none +} +td.clear +{ + border-right: 0px; + border-top: 0px; + background: none transparent scroll repeat 0% 0%; + border-left: 0px; + border-bottom: 0px +} +form +{ + margin-top: 0px; + margin-bottom: 0px +} +.sublink +{ + font-weight: normal; + font-style: italic +} +font.gray +{ + color: #aca899; + text-decoration: underline +} +img +{ + border: 0; +} +.attach img +{ + border: 0; + width: 16px; + height: 16px; +} +.attach a:link +{ + color: #0099CC; + text-decoration: underline; +} +.attach .size +{ + color: gray; +} +a:link +{ + color: #000000; + text-decoration: none +} +a:visited +{ + color: #000000; + text-decoration: none +} +a:hover +{ + color: #00008c +} +a.index +{ + font-weight: bold +} +a.biglink +{ + font-weight: bold; + text-decoration: none +} +a.altlink:link +{ + font-weight: bold; + color: #a83838; + text-decoration: none +} +a.altlink:visited +{ + font-weight: bold; + color: #a83838; + text-decoration: none +} +a.altlink:hover +{ + text-decoration: underline +} +a.faqlink:link +{ + font-weight: bold; + color: #a83838; + text-decoration: none +} +a.faqlink:visited +{ + font-weight: bold; + color: #a83838; + text-decoration: none +} +a.faqlink:hover +{ + text-decoration: underline +} +a.altlink_blue:link +{ + font-weight: bold; + color: #004e98; + text-decoration: none +} +a.altlink_blue:visited +{ + font-weight: bold; + color: #004e98; + text-decoration: none +} +a.altlink_blue:hover +{ + text-decoration: underline +} +a.altlink_green:link +{ + font-weight: bold; + color: #007800; + text-decoration: none +} +a.altlink_green:visited +{ + font-weight: bold; + color: #007800; + text-decoration: none +} +a.altlink_green:hover +{ + text-decoration: underline +} +.important +{ + font-weight: bold; +} +.red +{ + color: #ee0000 +} +.yellow +{ + color: #997700 +} +.green +{ + color: #000000 +} +.btn2 +{ + border-right: #ccc 1px outset; + padding-right: 2px; + border-top: #ccc 1px outset; + padding-left: 2px; + font-weight: bold; + background: url(./btnbg.gif) repeat-x left top; + padding-bottom: 1px; + border-left: #ccc 1px outset; + cursor: pointer; + color: #666; + padding-top: 1px; + border-bottom: #ccc 1px outset +} +.btn +{ + border-right: #ccc 1px outset; + padding-right: 2px; + border-top: #ccc 1px outset; + padding-left: 2px; + font-weight: bold; + background: url(./btnbg.gif) repeat-x left top; + padding-bottom: 1px; + border-left: #ccc 1px outset; + cursor: pointer; + color: #666; + padding-top: 1px; + border-bottom: #ccc 1px outset +} +.small +{ +} +.big +{ +} +li +{ + margin-top: 6pt; + margin-bottom: 6pt; + margin-left: 16pt; +} +ul +{ + margin-top: 0px; + margin-bottom: 0px; +} +img.border +{ + border-right: #000000 1px solid; + border-top: #000000 1px solid; + border-left: #000000 1px solid; + border-bottom: #000000 1px solid +} +.gobutton +{ + background: #476ba2; + color: #fff +} +.codetop +{ + padding-right: 3px; + padding-left: 3px; + font-weight: bold; + background: url(./code.gif) #f1b000 no-repeat right 50%; + padding-bottom: 3px; + margin: 0px auto; + color: #000; + padding-top: 3px +} +.codemain +{ + border-right: #000 1px solid; + padding-right: 3px; + border-top: #000 1px solid; + padding-left: 3px; + background: #fff; + padding-bottom: 3px; + margin: 0px auto; + border-left: #000 1px solid; + color: #000; + padding-top: 3px; + border-bottom: #000 1px solid +} +.dropmenu +{ + background:#F2F9FD none repeat scroll 0 0; + border:3px solid #A6C9D7; + margin-top:3px; + opacity:0.9; + position:absolute; + text-align:left; +} +.dropmenu ul +{ + list-style-type: none; + white-space: nowrap; + padding:10px; +} +.dropmenu ul li +{ + margin-left: 0px; + margin-right: 0px; +} +ul.menu +{ + list-style-image: none; + list-style-type: none; + white-space: nowrap; + text-align: center; +} +ul.menu li +{ + display: inline; + margin-left: 0px; + margin-right: 0px; +} +ul.menu li a +{ + color: #2d2b2b; + background: url(./shade.gif) repeat-x left top; + border: 1px solid white; + background-color: #dedede; + margin-right: 1px; + padding: 3px 7px; + text-decoration: none; + font-style: normal; + font-weight: bold; + font-family: verdana; + font-variant: normal; + text-align: center; + display: inline-block; +} +ul.menu li a:link +{ + color: #2d2b2b; +} +ul.menu li a:visited +{ + color: #2d2b2b; +} +ul.menu li a:hover +{ + color: #2d2b2b; + background: url(./shadehover.gif) repeat-x left top; + background-color: #72b5ec; + text-decoration: underline; +} +ul.menu li a:active +{ + color: #2d2b2b; +} +ul.menu li.selected a +{ + background-image: url(./shadeactive.gif); + background-color: #72b5ec; +} +ul.menu li.selected a:hover +{ + background: url(./shadehover.gif) repeat-x left top; + background-color: #72b5ec; + text-decoration: underline; +} +.listitem +{ + margin-left: 10px; + margin-right: 5px +} +.StaffLeader_Name{color: #8b0000} +A.StaffLeader_Name:link{color: #8b0000} +A.StaffLeader_Name:visited{color: #8b0000} + +.SysOp_Name{color: #a0522d} +A.SysOp_Name:link{color: #a0522d} +A.SysOp_Name:visited{color: #a0522d} + +.Administrator_Name{color: #4b0082} +A.Administrator_Name:link{color: #4b0082} +A.Administrator_Name:visited{color: #4b0082} + +.Moderator_Name{color: #6495ED} +A.Moderator_Name:link{color: #6495ED} +A.Moderator_Name:visited{color: #6495ED} + +.ForumModerator_Name{COLOR: #1cc6d5} +A.ForumModerator_Name:link{COLOR: #1cc6d5} +A.ForumModerator_Name:visited{COLOR: #1cc6d5} + +.Retiree_Name{COLOR: #1cc6d5} +A.Retiree_Name:link{COLOR: #1cc6d5} +A.Retiree_Name:visited{COLOR: #1cc6d5} + +.Uploader_Name{color: #DC143C} +A.Uploader_Name:link{color: #DC143C} +A.Uploader_Name:visited{color: #DC143C} + +.VIP_Name{color: #009F00} +A.VIP_Name:link{color: #009F00} +A.VIP_Name:visited{color: #009F00} + +.NexusMaster_Name{color: #38ACEC} +A.NexusMaster_Name:link{color: #38ACEC} +A.NexusMaster_Name:visited{color: #38ACEC} + +.UltimateUser_Name{color: #006400} +A.UltimateUser_Name:link{color: #006400} +A.UltimateUser_Name:visited{color: #006400} + +.ExtremeUser_Name{color: #FF8C00} +A.ExtremeUser_Name:link{color: #FF8C00} +A.ExtremeUser_Name:visited{color: #FF8C00} + +.VeteranUser_Name{color: #483D8B} +A.VeteranUser_Name:link{color: #483D8B} +A.VeteranUser_Name:visited{color: #483D8B} + +.InsaneUser_Name{color: #8B008B} +A.InsaneUser_Name:link{color: #8B008B} +A.InsaneUser_Name:visited{color: #8B008B} + +.CrazyUser_Name{color: #00BFFF} +A.CrazyUser_Name:link{color: #00BFFF} +A.CrazyUser_Name:visited{color: #00BFFF} + +.EliteUser_Name{color: #008B8B} +A.EliteUser_Name:link{color: #008B8B} +A.EliteUser_Name:visited{color: #008B8B} + +.PowerUser_Name{color: #DAA520} +A.PowerUser_Name:link{color: #DAA520} +A.PowerUser_Name:visited{color: #DAA520} + +.User_Name{color: #000000} +A.User_Name:link{color: #000000} +A.User_Name:visited{color: #000000} + +.Peasant_Name{color: #708090} +A.Peasant_Name:link{color: #708090} +A.Peasant_Name:visited{color: #708090} + +.color_bonus{color: #1900d1} +.color_invite{color: #1900d1} +.color_slots{color: #1900d1} +.color_downloaded{color: #8b0000} +.color_uploaded{color: #008000} +.color_ratio{color: #1900d1} +.color_active{color: #1900d1} +.color_connectable{color: #1900d1} + +.logo +{ + color: #ffffff; + font-family: tahoma, arial, helvetica, sans-serif; +} + +.slogan +{ + color: #ffffff; + font-family: tahoma, arial, helvetica, sans-serif; +} + +.free{color:#f0cc00} +.twoup{color:#d2b8b8} +.twoupfree{color:#99cc66} +.halfdown{color:#7c7ff6} +.twouphalfdown{color:#7ad6ea} +.thirtypercent{color:#70328d} +.free_bg{background-color:#ffff99} +.twoup_bg{background-color:#ffecec} +.twoupfree_bg{background-color:#ccff99} +.halfdown_bg{background-color:#cccdf8} +.twouphalfdown_bg{background-color: #96dbea} +.thirtypercentdown_bg{background-color:#ddc3ea} +.hot{color:#e78d0f} +.classic{color:#77b300} +.recommended{color:#820084} +.new{color:#ff0000} +.striking{color:#ff0000} diff --git a/styles/Classic/DomTT.css b/styles/Classic/DomTT.css new file mode 100644 index 00000000..8c5f294d --- /dev/null +++ b/styles/Classic/DomTT.css @@ -0,0 +1,67 @@ +div.niceTitle +{ + background-color: #cfcfcc; + color: #000000; + font-size: 13px; + left: 0; + top: 0; + padding: 4px; + position: absolute; + text-align: left; + z-index: 20; + -moz-border-radius: 0 10px 10px 10px; + -webkit-border-top-right-radius: 10px; + -webkit-border-bottom-right-radius: 10px; + -webkit-border-bottom-left-radius: 10px; + -webkit-border-top-left-radius: 0px; + border-top-right-radius: 10px; + border-bottom-right-radius: 10px; + border-bottom-left-radius: 10px; + border-top-left-radius: 0px; + filter: progid:DXImageTransform.Microsoft.Alpha(opacity=87); + -moz-opacity: .87; + -khtml-opacity: .87; + opacity: .87; +} +div.smilies table +{ + width: 60px; + height: 60px; + background-color: transparent; + text-align: center; + vertical-align: middle; +} +div.smilies td +{ + background-color: #cfcfcc; + color: #000000; + border: none; + font-size: 13px; + z-index: 20; + filter: progid:DXImageTransform.Microsoft.Alpha(opacity=87); + -moz-opacity: .87; + -khtml-opacity: .87; + opacity: .87; +} +div.niceTitle .contents +{ + margin: 0; + padding: 0 3px; + filter: progid:DXImageTransform.Microsoft.Alpha(opacity=100); + -moz-opacity: 1; + -khtml-opacity: 1; + opacity: 1; +} +div.attach .contents +{ + width: 130px; + background:#FFFFFF none repeat scroll 0 0; + border:1px solid #E6E7E1; + font-size:12px; + padding:5px; +} +div.attach .contents strong +{ + color: #0099CC; + font-weight: bold; +} diff --git a/styles/Classic/btnbg.gif b/styles/Classic/btnbg.gif new file mode 100644 index 00000000..740ed0d5 Binary files /dev/null and b/styles/Classic/btnbg.gif differ diff --git a/styles/Classic/code.gif b/styles/Classic/code.gif new file mode 100644 index 00000000..abc9c13a Binary files /dev/null and b/styles/Classic/code.gif differ diff --git a/styles/Classic/shade.gif b/styles/Classic/shade.gif new file mode 100644 index 00000000..2dd62496 Binary files /dev/null and b/styles/Classic/shade.gif differ diff --git a/styles/Classic/shadeactive.gif b/styles/Classic/shadeactive.gif new file mode 100644 index 00000000..0a782321 Binary files /dev/null and b/styles/Classic/shadeactive.gif differ diff --git a/styles/Classic/theme.css b/styles/Classic/theme.css new file mode 100644 index 00000000..0634ce1c --- /dev/null +++ b/styles/Classic/theme.css @@ -0,0 +1,653 @@ +body +{ + margin-top: 0px; + margin-bottom: 0px; + color: #000000; + font-family: tahoma, arial, helvetica, sans-serif; + background-color: #cfcfcc; +} +body.inframe +{ + background-image: none; + background-color: #ece9d8; +} +table +{ + border-right: medium none; + border-top: medium none; + border-left: medium none; + border-bottom: medium none; + border-collapse: collapse; + background-color: #ece9d8 +} +table.head +{ + background: transparent; + height: 100px; + width: 920px; +} +table.main +{ + background-color: #f5f4ea +} +table.mainouter +{ + background-color: #f5f4ea +} +table.message +{ + border-right: #000000 1px solid; + border-top: #000000 1px solid; + border-left: #000000 1px solid; + border-bottom: #000000 1px solid +} +table.bottom +{ + background: none transparent scroll repeat 0% 0% +} +a.info +{ + z-index: 24; + color: #000; + position: relative; + background-color: #ccc; + text-decoration: none +} +a.info:hover +{ + z-index: 25; + background-color: #ff0 +} +a.info span +{ + display: none +} +a.info:hover span +{ + border-right: #0cf 1px solid; + border-top: #0cf 1px solid; + display: block; + left: 2em; + border-left: #0cf 1px solid; + width: 15em; + color: #000; + border-bottom: #0cf 1px solid; + position: absolute; + top: 2em; + background-color: #cff; + text-align: center +} +table.bottom +{ + background: none transparent scroll repeat 0% 0% +} +h1 +{ +} +h2 +{ + margin-bottom: 6px +} +h2.transparentbg +{ + background-color: transparent; + background-image: none +} +p +{ +} +p.sub +{ + margin-bottom: 4pt +} +td +{ + border-right: #000000 1px solid; + border-top: #000000 1px solid; + border-left: #000000 1px solid; + border-bottom: #000000 1px solid +} +td.embedded +{ + border-right: medium none; + padding-right: 0px; + border-top: medium none; + padding-left: 0px; + padding-bottom: 0px; + border-left: medium none; + padding-top: 0px; + border-bottom: medium none; + text-align: left +} +td.no_border +{ + border-right: medium none; + padding-right: 2px; + border-top: medium none; + padding-left: 2px; + padding-bottom: 3px; + border-left: medium none; + padding-top: 3px; + border-bottom: medium none; + background-color: transparent; + text-align: left +} +td.no_border_wide +{ + border-right: medium none; + padding-right: 16px; + border-top: medium none; + padding-top: 0px; + border-left: medium none; + padding-left: 0px; + border-bottom: medium none; + padding-bottom: 0px; + background-color: transparent; + text-align: left; + vertical-align: top; +} +td.shoutrow +{ + border-right: medium none; + border-top: medium none; + border-left: medium none; + border-bottom: medium none; + background-color: #f5f4ea +} +td.bottom +{ + border-right: medium none; + border-top: medium none; + border-left: medium none; + border-bottom: medium none +} +td.heading +{ + font-weight: bold +} +td.text +{ + padding-right: 10pt; + padding-left: 10pt; + padding-bottom: 10pt; + padding-top: 10pt +} +td.comment +{ + padding-right: 10pt; + padding-left: 10pt; + padding-bottom: 10pt; + padding-top: 10pt; + text-align: left +} +td.colhead +{ + white-space:nowrap; + font-weight: bold; + color: #ffffff; + background-color: #0055a4 +} +.nowrap +{ + white-space:nowrap; +} +td.rowhead_left +{ + text-align: left +} +td.rowhead_center +{ + text-align: center +} +td.rowhead +{ + font-weight: bold; + vertical-align: top; + text-align: right +} +td.rowfollow +{ +} +td.colfollow +{ +text-align: center; +} +table.torrents td.colhead +{ +text-align: center; +} +table.torrents td.rowfollow +{ +text-align: center; +} +td.toolbox +{ +} +td.title +{ +} +td.navigation +{ + border-right: medium none; + border-top: medium none; + font-weight: bold; + border-left: medium none; + border-bottom: medium none +} +td.clear +{ + border-right: 0px; + border-top: 0px; + background: none transparent scroll repeat 0% 0%; + border-left: 0px; + border-bottom: 0px +} +form +{ + margin-top: 0px; + margin-bottom: 0px +} +.sublink +{ + font-weight: normal; + font-style: italic +} +font.gray +{ + color: #aca899; + text-decoration: underline +} +.attach img +{ + border: 0; + width: 16px; + height: 16px; +} +.attach a:link +{ + color: #0099CC; + text-decoration: underline; +} +.attach .size +{ + color: gray; +} +a:link +{ + color: #000000; + text-decoration: none +} +a:visited +{ + color: #000000; + text-decoration: none +} +a:hover +{ + color: #ff0000 +} +a.index +{ + font-weight: bold +} +a.biglink +{ + font-weight: bold; +} +a.altlink:link +{ + font-weight: bold; + color: #a83838; + text-decoration: none +} +a.altlink:visited +{ + font-weight: bold; + color: #a83838; + text-decoration: none +} +a.altlink:hover +{ + text-decoration: underline +} +a.altlink_blue:link +{ + font-weight: bold; + color: #004e98; + text-decoration: none +} +a.altlink_blue:visited +{ + font-weight: bold; + color: #004e98; + text-decoration: none +} +a.altlink_blue:hover +{ + text-decoration: underline +} +a.altlink_green:link +{ + font-weight: bold; + color: #007800; + text-decoration: none +} +a.altlink_green:visited +{ + font-weight: bold; + color: #007800; + text-decoration: none +} +a.altlink_green:hover +{ + text-decoration: underline +} +.important +{ + font-weight: bold; +} +.red +{ + color: #ee0000 +} +.yellow +{ + color: #997700 +} +.green +{ + color: #000000 +} +.btn2 +{ + border-right: #ccc 1px outset; + padding-right: 2px; + border-top: #ccc 1px outset; + padding-left: 2px; + font-weight: bold; + background: url(./btnbg.gif) repeat-x left top; + padding-bottom: 1px; + border-left: #ccc 1px outset; + cursor: pointer; + color: #666; + padding-top: 1px; + border-bottom: #ccc 1px outset +} +.btn +{ + border-right: #ccc 1px outset; + padding-right: 2px; + border-top: #ccc 1px outset; + padding-left: 2px; + font-weight: bold; + background: url(./btnbg.gif) repeat-x left top; + padding-bottom: 1px; + border-left: #ccc 1px outset; + cursor: pointer; + color: #666; + padding-top: 1px; + border-bottom: #ccc 1px outset +} +.small +{ +} +.big +{ +} +li +{ + margin-top: 6pt; + margin-bottom: 6pt; + margin-left: 16pt; +} +ul +{ + margin-top: 0px; + margin-bottom: 0px; +} +img +{ + border: 0; +} +img.border +{ + border-right: #000000 1px solid; + border-top: #000000 1px solid; + border-left: #000000 1px solid; + border-bottom: #000000 1px solid +} +.gobutton +{ + background: #476ba2; + color: #fff +} +.codetop +{ + padding-right: 3px; + padding-left: 3px; + font-weight: bold; + background: url(./code.gif) #f1b000 no-repeat right 50%; + padding-bottom: 3px; + margin: 0px auto; + color: #000; + padding-top: 3px +} +.codemain +{ + border-right: #000 1px solid; + padding-right: 3px; + border-top: #000 1px solid; + padding-left: 3px; + background: #fff; + padding-bottom: 3px; + margin: 0px auto; + border-left: #000 1px solid; + color: #000; + padding-top: 3px; + border-bottom: #000 1px solid +} +.dropmenu +{ + background:#F2F9FD none repeat scroll 0 0; + border:3px solid #A6C9D7; + margin-top:3px; + opacity:0.9; + position:absolute; + text-align:left; +} +.dropmenu ul +{ + list-style-type: none; + white-space: nowrap; + padding:10px; +} +.dropmenu ul li +{ + margin-left: 0px; + margin-right: 0px; +} +ul.menu +{ + list-style-image: none; + list-style-type: none; + white-space: nowrap; + text-align: center; + margin-bottom: 0px; + margin-top: 1px; + margin-left: 0px; + padding-top: 3px; + padding-bottom: 3px; +} +ul.menu li +{ + display: inline; + margin-left: 0px; + margin-right: 0px; +} +ul.menu li a +{ + border-right: #778 1px solid; + padding-right: 7px; + border-top: #778 1px solid; + padding-left: 7px; + background: url(./shade.gif) white repeat-x left top; + background-color: #cfe0df; + padding-bottom: 3px; + border-left: #778 1px solid; + color: #2d2b2b; + margin-right: 3px; + padding-top: 3px; + border-bottom: none; + text-decoration: none; + font-style: normal; + font-weight: bold; + font-family: verdana; + font-variant: normal; + text-align: center; + display: inline-block; +} +ul.menu li a:link +{ + color: #2d2b2b; +} +ul.menu li a:visited +{ + color: #2d2b2b; +} +ul.menu li a:hover +{ + color: #2d2b2b; + text-decoration: underline; +} +ul.menu li a:active +{ + color: #2d2b2b; +} +ul.menu li.selected a +{ + background-image: url(./shadeactive.gif); + background-color: #ffffff; + border-bottom-color: white; + font: bold 11px verdana; + position: relative; + top: 1px; +} +ul.menu li.selected a:hover +{ + text-decoration: none; +} +.listitem +{ + margin-left: 10px; + margin-right: 5px +} +.StaffLeader_Name{color: #8b0000} +A.StaffLeader_Name:link{color: #8b0000} +A.StaffLeader_Name:visited{color: #8b0000} + +.SysOp_Name{color: #a0522d} +A.SysOp_Name:link{color: #a0522d} +A.SysOp_Name:visited{color: #a0522d} + +.Administrator_Name{color: #4b0082} +A.Administrator_Name:link{color: #4b0082} +A.Administrator_Name:visited{color: #4b0082} + +.Moderator_Name{color: #6495ED} +A.Moderator_Name:link{color: #6495ED} +A.Moderator_Name:visited{color: #6495ED} + +.ForumModerator_Name{COLOR: #1cc6d5} +A.ForumModerator_Name:link{COLOR: #1cc6d5} +A.ForumModerator_Name:visited{COLOR: #1cc6d5} + +.Retiree_Name{COLOR: #1cc6d5} +A.Retiree_Name:link{COLOR: #1cc6d5} +A.Retiree_Name:visited{COLOR: #1cc6d5} + +.Uploader_Name{color: #DC143C} +A.Uploader_Name:link{color: #DC143C} +A.Uploader_Name:visited{color: #DC143C} + +.VIP_Name{color: #009F00} +A.VIP_Name:link{color: #009F00} +A.VIP_Name:visited{color: #009F00} + +.NexusMaster_Name{color: #38ACEC} +A.NexusMaster_Name:link{color: #38ACEC} +A.NexusMaster_Name:visited{color: #38ACEC} + +.UltimateUser_Name{color: #006400} +A.UltimateUser_Name:link{color: #006400} +A.UltimateUser_Name:visited{color: #006400} + +.ExtremeUser_Name{color: #FF8C00} +A.ExtremeUser_Name:link{color: #FF8C00} +A.ExtremeUser_Name:visited{color: #FF8C00} + +.VeteranUser_Name{color: #483D8B} +A.VeteranUser_Name:link{color: #483D8B} +A.VeteranUser_Name:visited{color: #483D8B} + +.InsaneUser_Name{color: #8B008B} +A.InsaneUser_Name:link{color: #8B008B} +A.InsaneUser_Name:visited{color: #8B008B} + +.CrazyUser_Name{color: #00BFFF} +A.CrazyUser_Name:link{color: #00BFFF} +A.CrazyUser_Name:visited{color: #00BFFF} + +.EliteUser_Name{color: #008B8B} +A.EliteUser_Name:link{color: #008B8B} +A.EliteUser_Name:visited{color: #008B8B} + +.PowerUser_Name{color: #DAA520} +A.PowerUser_Name:link{color: #DAA520} +A.PowerUser_Name:visited{color: #DAA520} + +.User_Name{color: #000000} +A.User_Name:link{color: #000000} +A.User_Name:visited{color: #000000} + +.Peasant_Name{color: #708090} +A.Peasant_Name:link{color: #708090} +A.Peasant_Name:visited{color: #708090} + +.color_bonus{color: #1900d1} +.color_invite{color: #1900d1} +.color_slots{color: #1900d1} +.color_downloaded{color: #8b0000} +.color_uploaded{color: #008000} +.color_ratio{color: #1900d1} +.color_active{color: #1900d1} +.color_connectable{color: #1900d1} + +.logo +{ + color: #000000; + font-family: tahoma, arial, helvetica, sans-serif; +} + +.slogan +{ + color: #333333; + font-family: tahoma, arial, helvetica, sans-serif; +} + +.free{color:#f0cc00} +.twoup{color:#d2b8b8} +.twoupfree{color:#99cc66} +.halfdown{color:#7c7ff6} +.twouphalfdown{color:#7ad6ea} +.thirtypercent{color:#70328d} +.free_bg{background-color:#ffff99} +.twoup_bg{background-color:#ffecec} +.twoupfree_bg{background-color:#ccff99} +.halfdown_bg{background-color:#cccdf8} +.twouphalfdown_bg{background-color: #96dbea} +.thirtypercentdown_bg{background-color:#ddc3ea} +.hot{color:#e78d0f} +.classic{color:#77b300} +.recommended{color:#820084} +.new{color:#ff0000} +.striking{color:#ff0000} diff --git a/styles/DarkPassion/DomTT.css b/styles/DarkPassion/DomTT.css new file mode 100644 index 00000000..ae90e912 --- /dev/null +++ b/styles/DarkPassion/DomTT.css @@ -0,0 +1,67 @@ +div.niceTitle +{ + background-color: #333333; + color: #FFFFFF; + font-size: 13px; + left: 0; + top: 0; + padding: 4px; + position: absolute; + text-align: left; + z-index: 20; + -moz-border-radius: 0 10px 10px 10px; + -webkit-border-top-right-radius: 10px; + -webkit-border-bottom-right-radius: 10px; + -webkit-border-bottom-left-radius: 10px; + -webkit-border-top-left-radius: 0px; + border-top-right-radius: 10px; + border-bottom-right-radius: 10px; + border-bottom-left-radius: 10px; + border-top-left-radius: 0px; + filter: progid:DXImageTransform.Microsoft.Alpha(opacity=87); + -moz-opacity: .87; + -khtml-opacity: .87; + opacity: .87; +} +div.smilies table +{ + width: 60px; + height: 60px; + background-color: transparent; + text-align: center; + vertical-align: middle; +} +div.smilies td +{ + background-color: #333333; + color: #FFFFFF; + border: none; + font-size: 13px; + z-index: 20; + filter: progid:DXImageTransform.Microsoft.Alpha(opacity=87); + -moz-opacity: .87; + -khtml-opacity: .87; + opacity: .87; +} +div.niceTitle .contents +{ + margin: 0; + padding: 0 3px; + filter: progid:DXImageTransform.Microsoft.Alpha(opacity=100); + -moz-opacity: 1; + -khtml-opacity: 1; + opacity: 1; +} +div.attach .contents +{ + width: 130px; + background:#FFFFFF none repeat scroll 0 0; + border:1px solid #E6E7E1; + font-size:12px; + padding:5px; +} +div.attach .contents strong +{ + color: #0099CC; + font-weight: bold; +} diff --git a/styles/DarkPassion/code.gif b/styles/DarkPassion/code.gif new file mode 100644 index 00000000..abc9c13a Binary files /dev/null and b/styles/DarkPassion/code.gif differ diff --git a/styles/DarkPassion/theme.css b/styles/DarkPassion/theme.css new file mode 100644 index 00000000..b303cd07 --- /dev/null +++ b/styles/DarkPassion/theme.css @@ -0,0 +1,646 @@ +body +{ + margin-top: 0px; + margin-bottom: 0px; + color: #feffff; + font-family: tahoma, arial, helvetica, sans-serif; + background-color: #161f2c; +} +body.inframe +{ + background-image: none; + background-color: #0e1927; +} +table +{ + border-right: medium none; + border-top: medium none; + border-left: medium none; + border-bottom: medium none; + border-collapse: collapse; + background-color: #0e1927 +} +table.head +{ + background: transparent; + height: 100px; + width: 920px; +} +table.main +{ + border-right: medium none; + border-top: medium none; + border-left: medium none; + border-bottom: medium none; + background-color: #09111b +} +table.mainouter +{ + border-right: gray; + border-top: gray; + border-left: gray; + border-bottom: gray; + background-color: #09111b +} +table.message +{ + border-right: #0e1927 1px solid; + border-top: #0e1927 1px solid; + border-left: #0e1927 1px solid; + border-bottom: #0e1927 1px solid +} +table.bottom +{ + background: none transparent scroll repeat 0% 0% +} +a.info +{ + z-index: 24; + color: #000; + position: relative; + background-color: #ccc; + text-decoration: none +} +a.info:hover +{ + z-index: 25; + background-color: #ff0 +} +a.info span +{ + display: none +} +a.info:hover span +{ + border-right: #0cf 1px solid; + border-top: #0cf 1px solid; + display: block; + left: 2em; + border-left: #0cf 1px solid; + width: 15em; + color: #000; + border-bottom: #0cf 1px solid; + position: absolute; + top: 2em; + background-color: #cff; + text-align: center +} +table.bottom +{ + background: none transparent scroll repeat 0% 0% +} +h1 +{ +} +h2 +{ + background-position: left top; + padding-right: 4px; + padding-left: 4px; + margin-bottom: 0px; + padding-bottom: 3px; + padding-top: 3px; + background-color: #060a10; + background-repeat: repeat; +} +h2.transparentbg +{ + background-color: transparent; + background-image: none +} +p +{ +} +p.sub +{ + margin-bottom: 4pt +} +td +{ + border-right: #070c13 1px solid; + border-top: #070c13 1px solid; + border-left: #070c13 1px solid; + border-bottom: #070c13 1px solid +} +td.embedded +{ + border-right: medium none; + padding-right: 0px; + border-top: medium none; + padding-left: 0px; + padding-bottom: 0px; + border-left: medium none; + padding-top: 0px; + border-bottom: medium none; + text-align: left +} +td.no_border +{ + border-right: medium none; + padding-right: 2px; + border-top: medium none; + padding-left: 2px; + padding-bottom: 3px; + border-left: medium none; + padding-top: 3px; + border-bottom: medium none; + background-color: transparent; + text-align: left +} +td.no_border_wide +{ + border-right: medium none; + padding-right: 16px; + border-top: medium none; + padding-top: 0px; + border-left: medium none; + padding-left: 0px; + border-bottom: medium none; + padding-bottom: 0px; + background-color: transparent; + text-align: left; + vertical-align: top; +} +td.shoutrow +{ + border-right: medium none; + border-top: medium none; + border-left: medium none; + border-bottom: medium none; + background-color: #161f2c +} +td.bottom +{ + border-right: medium none; + border-top: medium none; + border-left: medium none; + border-bottom: medium none +} +td.heading +{ + font-weight: bold +} +td.text +{ + padding-right: 10pt; + padding-left: 10pt; + padding-bottom: 10pt; + padding-top: 10pt +} +td.comment +{ + padding-right: 10pt; + padding-left: 10pt; + padding-bottom: 10pt; + padding-top: 10pt; + text-align: left +} +td.colhead +{ + white-space:nowrap; + font-weight: bold; + color: #ffffff; + background-color: #060a10 +} +.nowrap +{ + white-space:nowrap; +} +td.rowhead_left +{ + text-align: left +} +td.rowhead_center +{ + text-align: center +} +td.rowhead +{ + font-weight: bold; + vertical-align: top; + text-align: right +} +td.rowfollow +{ +} +td.colfollow +{ +text-align: center; +} +table.torrents td.colhead +{ +text-align: center; +} +table.torrents td.rowfollow +{ +text-align: center; +} +td.toolbox +{ +} +td.title +{ +} +td.navigation +{ + border-right: medium none; + border-top: medium none; + font-weight: bold; + border-left: medium none; + border-bottom: medium none +} +td.clear +{ + border-right: 0px; + border-top: 0px; + background: none transparent scroll repeat 0% 0%; + border-left: 0px; + border-bottom: 0px +} +form +{ + margin-top: 0px; + margin-bottom: 0px +} +.sublink +{ + font-weight: normal; + font-style: italic +} +font.gray +{ + color: #aca899; + text-decoration: underline +} +.attach img +{ + border: 0; + width: 16px; + height: 16px; +} +.attach a:link +{ + color: #0099CC; + text-decoration: underline; +} +.attach .size +{ + color: gray; +} +a:link +{ + color: #feffff; + text-decoration: none +} +a:visited +{ + color: #feffff; + text-decoration: none +} +a:hover +{ + color: #4c5c6b +} +a.index +{ + font-weight: bold +} +a.biglink +{ + font-weight: bold; + text-decoration: none +} +a.altlink:link +{ + font-weight: bold; + color: #a83838; + text-decoration: none +} +a.altlink:visited +{ + font-weight: bold; + color: #a83838; + text-decoration: none +} +a.altlink:hover +{ + text-decoration: underline +} +a.faqlink:link +{ + font-weight: bold; + color: #a83838; + text-decoration: none +} +a.faqlink:visited +{ + font-weight: bold; + color: #a83838; + text-decoration: none +} +a.faqlink:hover +{ + text-decoration: underline +} +a.altlink_blue:link +{ + font-weight: bold; + color: #004e98; + text-decoration: none +} +a.altlink_blue:visited +{ + font-weight: bold; + color: #004e98; + text-decoration: none +} +a.altlink_blue:hover +{ + text-decoration: underline +} +a.altlink_green:link +{ + font-weight: bold; + color: #007800; + text-decoration: none +} +a.altlink_green:visited +{ + font-weight: bold; + color: #007800; + text-decoration: none +} +a.altlink_green:hover +{ + text-decoration: underline +} +.important +{ + font-weight: bold; +} +.red +{ + color: #ee0000 +} +.yellow +{ + color: #997700 +} +.green +{ + color: #feffff +} +.btn2 +{ +} +.btn +{ +} +.small +{ +} +.big +{ +} +li +{ + margin-top: 6pt; + margin-bottom: 6pt; + margin-left: 16pt; +} +ul +{ + margin-top: 0px; + margin-bottom: 0px; +} +img +{ + border: 0; +} +img.border +{ + border-right: #070c13 1px solid; + border-top: #070c13 1px solid; + border-left: #070c13 1px solid; + border-bottom: #070c13 1px solid +} +.gobutton +{ + background: #476ba2; + color: #fff +} +.codetop +{ + padding-right: 3px; + padding-left: 3px; + font-weight: bold; + background: url(./code.gif) #f1b000 no-repeat right 50%; + padding-bottom: 3px; + margin: 0px auto; + color: #000; + padding-top: 3px +} +.codemain +{ + border-right: #000 1px solid; + padding-right: 3px; + border-top: #000 1px solid; + padding-left: 3px; + background: #fff; + padding-bottom: 3px; + margin: 0px auto; + border-left: #000 1px solid; + color: #000; + padding-top: 3px; + border-bottom: #000 1px solid +} +.dropmenu +{ + background:#F2F9FD none repeat scroll 0 0; + border:3px solid #A6C9D7; + margin-top:3px; + opacity:0.9; + position:absolute; + text-align:left; +} +.dropmenu ul +{ + list-style-type: none; + white-space: nowrap; + padding:10px; +} +.dropmenu ul li +{ + margin-left: 0px; + margin-right: 0px; +} +ul.menu +{ + list-style-image: none; + list-style-type: none; + white-space: nowrap; + text-align: center; +} +ul.menu li +{ + display: inline; + margin-left: 0px; + margin-right: 0px; +} +ul.menu li a +{ + color: #ffffff; + border: medium none; + background-color: #020204; + border: 1px none #000000; + padding: 5px 10px; + text-decoration: none; + font-style: normal; + font-weight: bold; + font-family: verdana; + font-variant: normal; + text-align: center; + display: inline-block; +} +ul.menu li a:link +{ + color: #ffffff; +} +ul.menu li a:visited +{ + color: #ffffff; +} +ul.menu li a:hover +{ + color: #ffffff; + background-color: #4d5e6d; +} +ul.menu li a:active +{ + color: #ffffff; +} +ul.menu li.selected a +{ + background-image: none; + background-color: #4d5e6d; +} +ul.menu li.selected a:hover +{ + background-image: none; + background-color: #4d5e6d; +} +.listitem +{ + margin-left: 10px; + margin-right: 5px +} +.StaffLeader_Name{color: #8b0000} +A.StaffLeader_Name:link{color: #8b0000} +A.StaffLeader_Name:visited{color: #8b0000} + +.SysOp_Name{color: #a0522d} +A.SysOp_Name:link{color: #a0522d} +A.SysOp_Name:visited{color: #a0522d} + +.Administrator_Name{color: #4b0082} +A.Administrator_Name:link{color: #4b0082} +A.Administrator_Name:visited{color: #4b0082} + +.Moderator_Name{color: #6495ED} +A.Moderator_Name:link{color: #6495ED} +A.Moderator_Name:visited{color: #6495ED} + +.ForumModerator_Name{COLOR: #1cc6d5} +A.ForumModerator_Name:link{COLOR: #1cc6d5} +A.ForumModerator_Name:visited{COLOR: #1cc6d5} + +.Retiree_Name{COLOR: #1cc6d5} +A.Retiree_Name:link{COLOR: #1cc6d5} +A.Retiree_Name:visited{COLOR: #1cc6d5} + +.Uploader_Name{color: #DC143C} +A.Uploader_Name:link{color: #DC143C} +A.Uploader_Name:visited{color: #DC143C} + +.VIP_Name{color: #009F00} +A.VIP_Name:link{color: #009F00} +A.VIP_Name:visited{color: #009F00} + +.NexusMaster_Name{color: #38ACEC} +A.NexusMaster_Name:link{color: #38ACEC} +A.NexusMaster:visited{color: #38ACEC} + +.UltimateUser_Name{color: #006400} +A.UltimateUser_Name:link{color: #006400} +A.UltimateUser_Name:visited{color: #006400} + +.ExtremeUser_Name{color: #FF8C00} +A.ExtremeUser_Name:link{color: #FF8C00} +A.ExtremeUser_Name:visited{color: #FF8C00} + +.VeteranUser_Name{color: #483D8B} +A.VeteranUser_Name:link{color: #483D8B} +A.VeteranUser_Name:visited{color: #483D8B} + +.InsaneUser_Name{color: #8B008B} +A.InsaneUser_Name:link{color: #8B008B} +A.InsaneUser_Name:visited{color: #8B008B} + +.CrazyUser_Name{color: #00BFFF} +A.CrazyUser_Name:link{color: #00BFFF} +A.CrazyUser_Name:visited{color: #00BFFF} + +.EliteUser_Name{color: #008B8B} +A.EliteUser_Name:link{color: #008B8B} +A.EliteUser_Name:visited{color: #008B8B} + +.PowerUser_Name{color: #DAA520} +A.PowerUser_Name:link{color: #DAA520} +A.PowerUser_Name:visited{color: #DAA520} + +.User_Name{color: #BEBCBE} +A.User_Name:link{color: #BEBCBE} +A.User_Name:visited{color: #BEBCBE} + +.Peasant_Name{color: #708090} +A.Peasant_Name:link{color: #708090} +A.Peasant_Name:visited{color: #708090} + +.color_bonus{color: #9aa5b1} +.color_invite{color: #9aa5b1} +.color_slots{color: #9aa5b1} +.color_downloaded{color: #ff5353} +.color_uploaded{color: #00cc00} +.color_ratio{color: #9aa5b1} +.color_active{color: #9aa5b1} +.color_connectable{color: #9aa5b1} + +.logo +{ + color: #ffffff; + font-family: tahoma, arial, helvetica, sans-serif; +} + +.slogan +{ + color: #ffffff; + font-family: tahoma, arial, helvetica, sans-serif; +} + +.free{color:#989609} +.twoup{color:#3e8ce7} +.twoupfree{color:#04bf0d} +.halfdown{color:#7c7ff6} +.twouphalfdown{color:#7ad6ea} +.thirtypercent{color:#70328d} +.free_bg{} +.twoup_bg{} +.twoupfree_bg{} +.halfdown_bg{} +.twouphalfdown_bg{} +.thirtypercentdown_bg{} +.hot{color:#e78d0f} +.classic{color:#77b300} +.recommended{color:#820084} +.new{color:#ff0000} +.striking{color:#ff0000} diff --git a/styles/bar.gif b/styles/bar.gif new file mode 100644 index 00000000..f5eeda28 Binary files /dev/null and b/styles/bar.gif differ diff --git a/styles/curtain_imageresizer.css b/styles/curtain_imageresizer.css new file mode 100644 index 00000000..e7a31d2d --- /dev/null +++ b/styles/curtain_imageresizer.css @@ -0,0 +1,25 @@ +.curtain { + display: none; + position: fixed; + top: 0%; + left: 0%; + width: 100%; + height: 100%; + background-color: black; + z-index:1001; + opacity:.80; + filter: alpha(opacity=80); +} + +.lightbox { + display: none; + position: fixed; + text-align: center; + top: 5%; + left: 5%; + width: 90%; + height: 90%; + padding: 0px; + z-index:1002; + overflow: auto; +} diff --git a/styles/icons.gif b/styles/icons.gif new file mode 100644 index 00000000..f10a01d5 Binary files /dev/null and b/styles/icons.gif differ diff --git a/styles/largefont.css b/styles/largefont.css new file mode 100644 index 00000000..f05e0e19 --- /dev/null +++ b/styles/largefont.css @@ -0,0 +1,96 @@ +body +{ +font-size: 8pt; +} +h1 +{ +font-size: 12pt +} +h2 +{ +font-size: 12pt +} +p +{ +font-size: 11pt +} +td +{ +font-size: 10.5pt +} +table.torrents td.rowfollow +{ +font-size: 9pt +} +table.torrentname td.embedded +{ +font-size: 9.5pt +} +td.comment +{ +font-size: 9pt +} +td.title +{ +font-size: 14pt +} +td.navigation +{ +font-size: 10pt +} +.sublink +{ +font-size: 9pt +} +a.biglink +{ +font-size: 10.5pt +} +.important +{ +font-size: 10.5pt +} +input +{ +font-family: tahoma, arial, helvetica, sans-serif; +font-size: 10.5pt; +} +select +{ +font-family: tahoma, arial, helvetica, sans-serif; +font-size: 10.5pt; +} +select.med +{ +font-size: 9pt; +} +textarea +{ +overflow: auto; +font-family: tahoma, arial, helvetica, sans-serif; +font-size: 10.5pt; +} +.small +{ +font-size: 9pt +} +.medium +{ +font-size: 9pt +} +.big +{ +font-size: 12pt +} +ul.menu +{ +font-size: 13px; +} +.logo +{ +font-size: 25pt +} +.slogan +{ +font-size: 9pt +} diff --git a/styles/mediumfont.css b/styles/mediumfont.css new file mode 100644 index 00000000..8ca8564e --- /dev/null +++ b/styles/mediumfont.css @@ -0,0 +1,96 @@ +body +{ +font-size: 8pt; +} +h1 +{ +font-size: 12pt +} +h2 +{ +font-size: 12pt +} +p +{ +font-size: 10pt +} +td +{ +font-size: 9pt +} +table.torrents td.rowfollow +{ +font-size: 8pt +} +table.torrentname td.embedded +{ +font-size: 9pt +} +td.comment +{ +font-size: 9pt +} +td.title +{ +font-size: 14pt +} +td.navigation +{ +font-size: 10pt +} +.sublink +{ +font-size: 8pt +} +a.biglink +{ +font-size: 10pt +} +.important +{ +font-size: 9pt +} +input +{ +font-family: tahoma, arial, helvetica, sans-serif; +font-size: 9pt; +} +select +{ +font-family: tahoma, arial, helvetica, sans-serif; +font-size: 9pt; +} +select.med +{ +font-size: 9pt; +} +textarea +{ +overflow: auto; +font-family: tahoma, arial, helvetica, sans-serif; +font-size: 9pt; +} +.small +{ +font-size: 9pt +} +.medium +{ +font-size: 9pt +} +.big +{ +font-size: 10.5pt +} +ul.menu +{ +font-size: 13px; +} +.logo +{ +font-size: 25pt +} +.slogan +{ +font-size: 9pt +} diff --git a/styles/png.png b/styles/png.png new file mode 100644 index 00000000..c2af6f4e Binary files /dev/null and b/styles/png.png differ diff --git a/styles/smallfont.css b/styles/smallfont.css new file mode 100644 index 00000000..9782cbde --- /dev/null +++ b/styles/smallfont.css @@ -0,0 +1,96 @@ +body +{ +font-size: 8pt; +} +h1 +{ +font-size: 12pt +} +h2 +{ +font-size: 10pt +} +p +{ +font-size: 9pt +} +td +{ +font-size: 8pt +} +table.torrents td.rowfollow +{ +font-size: 8pt +} +table.torrentname td.embedded +{ +font-size: 8pt +} +td.comment +{ +font-size: 8pt +} +td.title +{ +font-size: 14pt +} +td.navigation +{ +font-size: 10pt +} +.sublink +{ +font-size: 7pt +} +a.biglink +{ +font-size: 9pt +} +.important +{ +font-size: 8pt +} +input +{ +font-family: tahoma, arial, helvetica, sans-serif; +font-size: 8pt; +} +select +{ +font-family: tahoma, arial, helvetica, sans-serif; +font-size: 8pt; +} +select.med +{ +font-size: 8pt; +} +textarea +{ +overflow: auto; +font-family: tahoma, arial, helvetica, sans-serif; +font-size: 8pt; +} +.small +{ +font-size: 7pt +} +.medium +{ +font-size: 8pt +} +.big +{ +font-size: 10.5pt +} +ul.menu +{ +font-size: 13px; +} +.logo +{ +font-size: 25pt +} +.slogan +{ +font-size: 8pt +} diff --git a/styles/sprites.css b/styles/sprites.css new file mode 100644 index 00000000..7e982886 --- /dev/null +++ b/styles/sprites.css @@ -0,0 +1,476 @@ +img.female +{ +width:32px; +height:32px; +background:url(png.png) 0 0; +} +img.male +{ +width:32px; +height:32px; +background:url(png.png) -32px 0; +} +img.bookmark +{ +width:16px; +height:16px; +background:url(png.png) -64px 0; +} +img.delbookmark +{ +width:16px; +height:16px; +background:url(png.png) -64px -16px; +} +img.download +{ +width:16px; +height:16px; +background:url(png.png) -80px 0; +} +img.ie +{ +width:80px; +height:15px; +background:url(icons.gif) -110px -20px; +} +img.firefox +{ +width:80px; +height:15px; +background:url(icons.gif) -110px -35px; +} +img.azureus +{ +width:80px; +height:15px; +background:url(icons.gif) -110px -50px; +} +img.utorrent +{ +width:80px; +height:15px; +background:url(icons.gif) -110px -65px; +} +img.unlockednew +{ +width:35px; +height:36px; +background:url(icons.gif) -100px -100px; +} +img.unlocked +{ +width:35px; +height:36px; +background:url(icons.gif) -100px -136px; +} +img.lockednew +{ +width:35px; +height:36px; +background:url(icons.gif) -135px -100px; +} +img.locked +{ +width:35px; +height:36px; +background:url(icons.gif) -135px -136px; +} +img.unreadpm +{ +width:35px; +height:36px; +background:url(icons.gif) -170px -100px; +} +img.readpm +{ +width:35px; +height:36px; +background:url(icons.gif) -170px -136px; +} +img.pro_free +{ +width:36px; +height:11px; +background:url(icons.gif) 0 0; +} +img.pro_2up +{ +width:36px; +height:11px; +background:url(icons.gif) -36px 0; +} +img.pro_free2up +{ +width:36px; +height:11px; +background:url(icons.gif) -72px 0; +} +img.pro_50pctdown +{ +width:36px; +height:11px; +background:url(icons.gif) -108px 0; +} +img.pro_50pctdown2up +{ +width:36px; +height:11px; +background:url(icons.gif) -144px 0; +} +img.pro_30pctdown +{ +width:36px; +height:11px; +background:url(icons.gif) -180px 0; +} +img.cheaterbox +{ +width:14px; +height:14px; +background:url(icons.gif) 0 -11px; +} +img.reportbox +{ +width:14px; +height:14px; +background:url(icons.gif) -14px -11px; +} +img.staffbox +{ +width:14px; +height:14px; +background:url(icons.gif) -28px -11px; +} +img.inbox +{ +width:14px; +height:14px; +background:url(icons.gif) -42px -11px; +} +img.inboxnew +{ +width:14px; +height:14px; +background:url(icons.gif) -56px -11px; +} +img.sentbox +{ +width:14px; +height:14px; +background:url(icons.gif) -70px -11px; +} +img.arrowup +{ +width:7px; +height:8px; +background:url(icons.gif) 0 -160px; +} +img.arrowdown +{ +width:7px; +height:8px; +background:url(icons.gif) -7px -160px; +} +img.buddylist +{ +width:11px; +height:12px; +background:url(icons.gif) 0 -148px; +} +img.rss +{ +width:11px; +height:12px; +background:url(icons.gif) -11px -148px; +} +img.comments +{ +width:16px; +height:16px; +background:url(icons.gif) 0 -25px; +} +img.files +{ +width:13px; +height:16px; +background:url(icons.gif) -16px -25px; +} +img.time +{ +width:16px; +height:16px; +background:url(icons.gif) -29px -25px; +} +img.size +{ +width:16px; +height:16px; +background:url(icons.gif) -45px -25px; +} +img.seeders +{ +width:15px; +height:16px; +background:url(icons.gif) -61px -25px; +} +img.leechers +{ +width:15px; +height:16px; +background:url(icons.gif) -76px -25px; +} +img.snatched +{ +width:14px; +height:16px; +background:url(icons.gif) -91px -25px; +} +img.disabledbig +{ +width:16px; +height:16px; +background:url(icons.gif) 0 -41px; +} +img.leechwarnedbig +{ +width:16px; +height:16px; +background:url(icons.gif) -16px -41px; +} +img.starbig +{ +width:16px; +height:16px; +background:url(icons.gif) -32px -41px; +} +img.warnedbig +{ +width:16px; +height:16px; +background:url(icons.gif) -48px -41px; +} +img.disabled +{ +width:11px; +height:11px; +background:url(icons.gif) 0 -57px; +} +img.leechwarned +{ +width:11px; +height:11px; +background:url(icons.gif) -11px -57px; +} +img.star +{ +width:11px; +height:11px; +background:url(icons.gif) -22px -57px; +} +img.warned +{ +width:11px; +height:11px; +background:url(icons.gif) -33px -57px; +} +img.dt_download +{ +width:14px; +height:14px; +background:url(icons.gif) 0 -68px; +} +img.dt_edit, img.dt_delete +{ +width:14px; +height:14px; +background:url(icons.gif) -14px -68px; +} +img.dt_report +{ +width:14px; +height:14px; +background:url(icons.gif) -28px -68px; +} +img.dt_reseed +{ +width:14px; +height:14px; +background:url(icons.gif) -42px -68px; +} +img.faq_new +{ +width:40px; +height:11px; +background:url(icons.gif) 0 -82px; +} +img.faq_updated +{ +width:40px; +height:11px; +background:url(icons.gif) -11px -82px; +} +img.staff_edit +{ +width:16px; +height:16px; +background:url(icons.gif) 0 -93px; +} +img.staff_delete +{ +width:16px; +height:16px; +background:url(icons.gif) -16px -93px; +} +img.button_online +{ +width:15px; +height:15px; +background:url(icons.gif) 0 -109px; +} +img.button_offline +{ +width:15px; +height:15px; +background:url(icons.gif) -15px -109px; +} +img.button_pm +{ +width:21px; +height:13px; +background:url(icons.gif) -34px -202px; +} +img.speed_up +{ +width:10px; +height:15px; +background:url(icons.gif) 0 -124px; +} +img.speed_down +{ +width:10px; +height:15px; +background:url(icons.gif) -10px -124px; +} +img.plus +{ +width:9px; +height:9px; +background:url(icons.gif) 0 -139px; +} +img.minus +{ +width:9px; +height:9px; +background:url(icons.gif) -9px -139px; +} +img.sticky +{ +width:14px; +height:14px; +background:url(icons.gif) 0 -202px; +} +img.forum_mod +{ +width:20px; +height:20px; +background:url(icons.gif) -14px -202px; +} +img.imdb +{ +width:16px; +height:16px; +background:url(icons.gif) -55px -202px; +} +img.top +{ +width:15px; +height:13px; +background:url(icons.gif) -71px -202px; +} +img.multipage +{ +width:8px; +height:10px; +background:url(icons.gif) -86px -202px; +} +img.listicon +{ +width:4px; +height:4px; +background:url(icons.gif) -94px -202px; +} +img.no_gender +{ +width:16px; +height:23px; +background:url(icons.gif) -98px -202px; +} +img.bar_left +{ +width:2px; +height:9px; +background:url(icons.gif) 0 -183px; +} +img.bar_right +{ +width:2px; +height:9px; +background:url(icons.gif) -2px -183px; +} +td.loadbarbg +{ +height:15px; +background:url(bar.gif) repeat-x 0 0; +} +img.loadbargreen +{ +height:15px; +background:url(bar.gif) repeat-x 0 -15px; +} +img.loadbarred +{ +height:15px; +background:url(bar.gif) repeat-x 0 -30px; +} +img.loadbaryellow +{ +height:15px; +background:url(bar.gif) repeat-x 0 -45px; +} +img.progbarrest +{ +height:9px; +background:url(bar.gif) repeat-x 0 -60px; +} +img.progbargreen +{ +height:9px; +background:url(bar.gif) repeat-x 0 -69px; +} +img.progbarred +{ +height:9px; +background:url(bar.gif) repeat-x 0 -78px; +} +img.progbaryellow +{ +height:9px; +background:url(bar.gif) repeat-x 0 -87px; +} +img.bar_end +{ +width:1px; +height:10px; +background:url(bar.gif) 0 -96px; +} +img.unsltbar +{ +height:10px; +background:url(bar.gif) repeat-x 0 -106px; +} +img.sltbar +{ +height:10px; +background:url(bar.gif) repeat-x 0 -116px; +} diff --git a/subs/.htaccess b/subs/.htaccess new file mode 100644 index 00000000..4aa5ec94 --- /dev/null +++ b/subs/.htaccess @@ -0,0 +1,3 @@ +Options -Indexes +Order allow,deny +Deny from all diff --git a/subtitles.php b/subtitles.php new file mode 100644 index 00000000..9f826529 --- /dev/null +++ b/subtitles.php @@ -0,0 +1,397 @@ + 0) + { + return false; + } + return true; +} + +$act = (int)$_GET["act"]; +$search = trim($_GET['search']); +$letter = trim($_GET["letter"]); +if (strlen($letter) > 1) + die; +if ($letter == "" || strpos("abcdefghijklmnopqrstuvwxyz", $letter) === false) + $letter = ""; + +$lang_id = $_GET['lang_id']; +if (!is_valid_id($lang_id)) +$lang_id = ''; + +$query = ""; +if ($search != '') +{ + $query = "subs.title LIKE " . sqlesc("%$search%") . ""; + if ($search) + $q = "search=" . rawurlencode($search); +} +elseif ($letter != '') +{ + $query = "subs.title LIKE ".sqlesc("$letter%"); + $q = "letter=$letter"; +} + +if ($lang_id) +{ + $query .= ($query ? " AND " : "")."subs.lang_id=".sqlesc($lang_id); + $q = ($q ? $q."&" : "") . "lang_id=".sqlesc($lang_id); +} + + +if ($_SERVER["REQUEST_METHOD"] == "POST" && $_POST["action"] == "upload" && ($in_detail!= 'in_detail')) +{ + //start process upload file + $file = $_FILES['file']; + + if (!$file || $file["size"] == 0 || $file["name"] == "") + { + echo($lang_subtitles['std_nothing_received']); + exit; + } + + if ($file["size"] > $maxsubsize_main && $maxsubsize_main > 0) + { + echo($lang_subtitles['std_subs_too_big']); + exit; + } + + $accept_ext = array('sub' => sub, 'srt' => srt, 'zip' => zip, 'rar' => rar, 'ace' => ace, 'txt' => txt, 'SUB' => SUB, 'SRT' => SRT, 'ZIP' => ZIP, 'RAR' => RAR, 'ACE' => ACE, 'TXT' => TXT, 'ssa' => ssa, 'ass' => ass, 'cue' => cue); + $ext_l = strrpos($file['name'], "."); + $ext = strtolower(substr($file['name'], $ext_l+1, strlen($file['name'])-($ext_l+1))); + + if (!array_key_exists($ext, $accept_ext)) + { + echo($lang_subtitles['std_wrong_subs_format']); + exit; + } + + /* + if (file_exists("$SUBSPATH/$file[name]")) + { + echo($lang_subtitles['std_file_already_exists']); + exit; + } + */ + + //end process upload file + + //start process torrent ID + if(!$_POST["torrent_id"]) + { + echo($lang_subtitles['std_missing_torrent_id']."$file[name]
    !"); + exit; + } + else + { + $torrent_id = $_POST["torrent_id"]; + if(!is_numeric($_POST["torrent_id"]) || !isInteger($_POST["torrent_id"])) + { + echo($lang_subtitles['std_invalid_torrent_id']); + exit; + } + + $r = sql_query("SELECT * from torrents where id = ". sqlesc($torrent_id)) or sqlerr(__FILE__, __LINE__); + if(!mysql_num_rows($r)) + { + echo($lang_subtitles['std_invalid_torrent_id']); + exit; + } + else + { + $r_a = mysql_fetch_assoc($r); + if($r_a["owner"] != $CURUSER["id"] && get_user_class() < $uploadsub_class) + { + echo($lang_subtitles['std_no_permission_uploading_others']); + exit; + } + } + } + //end process torrent ID + + //start process title + $title = trim($_POST["title"]); + if ($title == "") + { + $title = substr($file["name"], 0, strrpos($file["name"], ".")); + if (!$title) + $title = $file["name"]; + + $file["name"] = str_replace(" ", "_", htmlspecialchars("$file[name]")); + } + + /* + $r = sql_query("SELECT id FROM subs WHERE title=" . sqlesc($title)) or sqlerr(__FILE__, __LINE__); + if (mysql_num_rows($r) > 0) + { + echo($lang_subtitles['std_file_same_name_exists']."" . htmlspecialchars($title) . " "); + exit; + } + */ + //end process title + + //start process language + if($_POST['sel_lang'] == 0) + { + echo($lang_subtitles['std_must_choose_language']); + exit; + } + else + { + $lang_id = $_POST['sel_lang']; + } + //end process language + + if ($_POST['uplver'] == 'yes' && get_user_class()>=$beanonymous_class) { + $anonymous = "yes"; + $anon = "Anonymous"; + } + else { + $anonymous = "no"; + $anon = $CURUSER["username"]; + } + + //$file["name"] = str_replace("", "_", htmlspecialchars("$file[name]")); + //$file["name"] = preg_replace('/[^a-z0-9_\-\.]/i', '_', $file[name]); + + //make_folder($SUBSPATH."/",$detail_torrent_id); + //stderr("",$file["name"]); + + $r = sql_query("SELECT lang_name from language WHERE sub_lang=1 AND id = " . sqlesc($lang_id)) or sqlerr(__FILE__, __LINE__); + $arr = mysql_fetch_assoc($r); + + $filename = $file["name"]; + $added = date("Y-m-d H:i:s"); + $uppedby = $CURUSER["id"]; + $size = $file["size"]; + + sql_query("INSERT INTO subs (torrent_id, lang_id, title, filename, added, uppedby, anonymous, size, ext) VALUES (" . implode(",", array_map("sqlesc", array($torrent_id, $lang_id, $title, $filename, $added, $uppedby, $anonymous, $size, $ext))). ")") or sqlerr(); + + $id = mysql_insert_id(); + + //stderr("",make_folder($SUBSPATH."/",$torrent_id). "/" . $id . "." .$ext); + if (!move_uploaded_file($file["tmp_name"], make_folder($SUBSPATH."/",$torrent_id). "/" . $id . "." .$ext)) + echo($lang_subtitles['std_failed_moving_file']); + + KPS("+",$uploadsubtitle_bonus,$uppedby); //subtitle uploader gets bonus + + write_log("$arr[lang_name] Subtitle $id ($title) was uploaded by $anon"); + $msg_bt = "$arr[lang_name] Subtitle $id ($title) was uploaded by $anon, Download: " . get_protocol_prefix() . "$BASEURL/downloadsubs.php/".$file["name"].""; +} + +if (get_user_class() >= $delownsub_class) +{ + $delete = $_GET["delete"]; + if (is_valid_id($delete)) + { + $r = sql_query("SELECT id,torrent_id,ext,lang_id,title,filename,uppedby,anonymous FROM subs WHERE id=".sqlesc($delete)) or sqlerr(__FILE__, __LINE__); + if (mysql_num_rows($r) == 1) + { + $a = mysql_fetch_assoc($r); + if (get_user_class() >= $submanage_class || $a["uppedby"] == $CURUSER["id"]) + { + $sure = $_GET["sure"]; + if ($sure == 1) + { + $reason = $_POST["reason"]; + sql_query("DELETE FROM subs WHERE id=$delete") or sqlerr(__FILE__, __LINE__); + if (!unlink("$SUBSPATH/$a[torrent_id]/$a[id].$a[ext]")) + { + stdmsg($lang_subtitles['std_error'], $lang_subtitles['std_this_file']."$a[filename]".$lang_subtitles['std_is_invalid']); + stdfoot(); + die; + } + else { + KPS("-",$uploadsubtitle_bonus,$a["uppedby"]); //subtitle uploader loses bonus for deleted subtitle + } + if ($CURUSER['id'] != $a['uppedby']){ + $msg = $CURUSER['username'].$lang_subtitles_target[get_user_lang($a['uppedby'])]['msg_deleted_your_sub']. $a['title'].($reason != "" ? $lang_subtitles_target[get_user_lang($a['uppedby'])]['msg_reason_is'].$reason : ""); + $subject = $lang_subtitles_target[get_user_lang($a['uppedby'])]['msg_your_sub_deleted']; + $time = date("Y-m-d H:i:s"); + sql_query("INSERT INTO messages (sender, receiver, added, msg, subject) VALUES(0, $a[uppedby], '" . $time . "', " . sqlesc($msg) . ", ".sqlesc($subject).")") or sqlerr(__FILE__, __LINE__); + } + $res = sql_query("SELECT lang_name from language WHERE sub_lang=1 AND id = " . sqlesc($a["lang_id"])) or sqlerr(__FILE__, __LINE__); + $arr = mysql_fetch_assoc($res); + write_log("$arr[lang_name] Subtitle $delete ($a[title]) was deleted by ". (($a["anonymous"] == 'yes' && $a["uppedby"] == $CURUSER["id"]) ? "Anonymous" : $CURUSER['username']). ($a["uppedby"] != $CURUSER["id"] ? ", Mod Delete":"").($reason != "" ? " (".$reason.")" : "")); + } + else + { + stdmsg($lang_subtitles['std_delete_subtitle'], $lang_subtitles['std_delete_subtitle_note']."
    ".$lang_subtitles['text_reason_is']."
    "); + stdfoot(); + die; + } + } + } + } +} + + +if (get_user_class() >= UC_PEASANT) +{ + //$url = $_COOKIE["subsurl"]; + + begin_main_frame(); + + ?> +
    +get_value('subtitle_sum_size')){ + $res = sql_query("SELECT SUM(size) AS size FROM subs"); + $row5 = mysql_fetch_array($res); + $size = $row5['size']; + $Cache->cache_value('subtitle_sum_size', $size, 3600); + } + + begin_frame($lang_subtitles['text_upload_subtitles'].mksize($size)."", true,10,"100%","center"); + ?> +
    +".$lang_subtitles['text_rules']."

    \n"); + print("

           ".$lang_subtitles['text_rule_one']."

    \n"); + print("

           ".$lang_subtitles['text_rule_two']."

    \n"); + print("

           ".$lang_subtitles['text_rule_three']."

    \n"); + print("

           ".$lang_subtitles['text_rule_four']."

    \n"); + print("

           ".$lang_subtitles['text_rule_five']."

    \n"); + print("

           ".$lang_subtitles['text_rule_six']."

    \n"); + + print($lang_subtitles['text_red_star_required']); + if($in_detail != "") + { + print("

    ".$lang_subtitles['text_uploading_subtitles_for_torrent']."$torrent_name

    \n"); + print("
    "); + } + + print("
    \n"); + print(""); + print("\n"); + + print("\n"); + if($in_detail == "") + print("\n"); + else + { + print("\n"); + $in_detail = ""; + } + print("\n"); + + $s = ""; + + print($s); + + if(get_user_class() >= $beanonymous_class) + { + tr($lang_subtitles['row_show_uploader'], "".$lang_subtitles['hide_uploader_note'], 1); + } + + print("\n"); + print("
    ".$lang_subtitles['row_file']."*"); + if ($maxsubsize_main > 0) + print("
    (".$lang_subtitles['text_maximum_file_size'].mksize($maxsubsize_main).".)"); + print("
    ".$lang_subtitles['row_torrent_id']."*
    ".$lang_subtitles['text_torrent_id_note']."
    ".$lang_subtitles['row_torrent_id']."*
    ".$lang_subtitles['text_torrent_id_note']."
    ".$lang_subtitles['row_title']."
    ".$lang_subtitles['text_title_note']."
    ".$lang_subtitles['row_language']."*
    \n"); + print("
    \n"); + end_frame(); + + end_main_frame(); +} + +if(get_user_class() >= UC_PEASANT) +{ + print("
    \n"); + print("

    "); + print("\n"); + + $s = ""; + print($s); + + print("\n"); + print("
    \n"); + + for ($i = 97; $i < 123; ++$i) + { + $l = chr($i); + $L = chr($i - 32); + if ($l == $letter) + print("$L\n"); + else + print("$L\n"); + } + + $perpage = 30; + $query = ($query ? " WHERE ".$query : ""); + $res = sql_query("SELECT COUNT(*) FROM subs $query") or sqlerr(__FILE__, __LINE__); + $arr = mysql_fetch_row($res); + $num = $arr[0]; + if (!$num) + { + stdmsg($lang_subtitles['text_sorry'],$lang_subtitles['text_nothing_here']); + stdfoot(); + die; + } + list($pagertop, $pagerbottom, $limit) = pager($perpage, $num, "subtitles.php?".$q."&"); + + print($pagertop); + + $i = 0; + $res = sql_query("SELECT subs.*, language.flagpic, language.lang_name FROM subs LEFT JOIN language ON subs.lang_id=language.id $query ORDER BY id DESC $limit") or sqlerr(); + + print("\n"); + print(" + \n"); + + $mod = get_user_class() >= $submanage_class; + $pu = get_user_class() >= $delownsub_class; + + while ($arr = mysql_fetch_assoc($res)) + { + // the number $start_subid is just for legacy support of prevoiusly uploaded subs, if the site is completely new, it should be 0 or just remove it + $lang = "\n"; + $title = "\n"; + $addtime = gettime($arr["added"],false,false); + $added = "\n"; + $size = "\n"; + $hits = "\n"; + $uppedby = "\n"; + $report = "\n"; + print("".$lang.$title.$added.$size.$hits.$uppedby.$report."\n"); + $i++; + } + + print("
    ".$lang_subtitles['col_lang']."".$lang_subtitles['col_title']."\"time\"\"size\"".$lang_subtitles['col_hits']."".$lang_subtitles['col_upped_by']."".$lang_subtitles['col_report']."
    " . "\""" . "" . htmlspecialchars($arr["title"]) . "" . + ($mod || ($pu && $arr["uppedby"] == $CURUSER["id"]) ? " ".$lang_subtitles['text_delete']."" : "") ."" . $addtime . "" . mksize_loose($arr['size']) . "" . number_format($arr['hits']) . "" . ($arr["anonymous"] == 'yes' ? $lang_subtitles['text_anonymous'] . (get_user_class() >= $viewanonymous_class ? "
    ".get_username($arr['uppedby'],false,true,true,false,true) : "") : get_username($arr['uppedby'])) . "
    \"Report\"
    \n"); + print($pagerbottom); +} + +stdfoot(); +?> diff --git a/suggest.js b/suggest.js new file mode 100644 index 00000000..c3b56273 --- /dev/null +++ b/suggest.js @@ -0,0 +1,211 @@ +var pos = 0; +var count = 0; + +function noenter(key) +{ + suggcont = document.getElementById("suggcontainer"); + if (suggcont.style.display == "block") + { + if (key == 13) + { + choiceclick(document.getElementById(pos)); + return false; + } + else + { + return true; + } + } + else + { + return true; + } +} + +document.onclick = function () { closechoices(); } + +function suggest(key,query) +{ + if (key == 38) + { + goPrev(); + } + else if (key == 40) + { + goNext(); + } + else if (key != 13) + { + if (query.length >= 2) { + query = query.toLowerCase(); + if (query == 'th' || query == 'the' || query == 'the ') { + update(''); + } else { + ajax.get('suggest.php?q='+query,update); + } + } else { + update(''); + } + } +} + +function update(result) { + arr_keywords = new Array(); + arr_searched = new Array(); + arr = new Array(); + arr = result.split('\r\n'); + + count = arr.length; + count_keywords = 0; + count_searched = 0; + for (i = 0; i < count; i++) + { + if(i%2 == 0) + { + arr_keywords[count_keywords] = arr[i]; + count_keywords++; + } + else + { + arr_searched[count_searched] = arr[i]; + count_searched++; + } + } + + if (arr_keywords.length > 10) + { + count = 10; + } + else + { + count = arr_keywords.length; + } + + suggdiv = document.getElementById("suggestions"); + suggcont = document.getElementById("suggcontainer"); + if (arr_keywords[0].length > 0) + { + suggcont.style.display = "block"; + suggdiv.innerHTML = ''; + suggdiv.style.height = count * 20; + + for (i = 1; i <= count; i++) + { + novo = document.createElement("div"); + suggdiv.appendChild(novo); + + novo.id = i; + novo.style.height = "14px"; + novo.style.padding = "3px"; + novo.onmouseover = function() { select(this,true); } + novo.onmouseout = function() { unselect(this,true); } + novo.onclick = function() { choiceclick(this); } + novo.value = arr_keywords[i-1]; + + if (arr_searched[i-1] == 1) + stime = arr_searched[i-1] + " Time"; + else + stime = arr_searched[i-1] + " Times"; + novo.innerHTML = "
    " + arr_keywords[i-1] + "" + stime + "
    "; + } + } + else + { + suggcont.style.display = "none"; + count = 0; + } +} + +function select(obj,mouse) +{ + obj.style.backgroundColor = '#3366cc'; + obj.style.color = '#ffffff'; + if (mouse) + { + pos = obj.id; + unselectAllOther(pos); + } +} + +function unselect(obj,mouse) +{ + obj.style.backgroundColor = '#ffffff'; + obj.style.color = '#000000'; + if (mouse) + { + pos = 0; + } +} + +function goNext() +{ + if (pos <= count && count > 0) { + if (document.getElementById(pos)) { + unselect(document.getElementById(pos)); + } + pos++; + if (document.getElementById(pos)) { + select(document.getElementById(pos)); + } else { + pos = 0; + } + } +} + +function goPrev() +{ + if (count > 0) + { + if (document.getElementById(pos)) + { + unselect(document.getElementById(pos)); + pos--; + if (document.getElementById(pos)) + { + select(document.getElementById(pos)); + } + else + { + pos = 0; + } + } + else + { + pos = count; + select(document.getElementById(count)); + } + } +} + +function choiceclick(obj) +{ + document.getElementById("searchinput").value = obj.value; + count = 0; + pos = 0; + suggcont = document.getElementById("suggcontainer"); + suggcont.style.display = "none"; + document.getElementById("searchinput").focus(); +} + +function closechoices() +{ + suggcont = document.getElementById("suggcontainer"); + if (suggcont.style.display == "block") + { + count = 0; + pos = 0; + suggcont.style.display = "none"; + } +} + +function unselectAllOther(id) +{ + for (i = 1; i <= count; i++) + { + if (i != id) + { + document.getElementById(i).style.backgroundColor = '#ffffff'; + document.getElementById(i).style.color = '#000000'; + } + } +} diff --git a/suggest.php b/suggest.php new file mode 100644 index 00000000..fd64cc19 --- /dev/null +++ b/suggest.php @@ -0,0 +1,27 @@ + 25) continue; + $result .= ($result == "" ? "" : "\r\n" ). $suggest['suggest'] . "\r\n" . $suggest['count']; + $i++; + if ($i >= 5) break; + } + echo $result; +} +?> diff --git a/tags.php b/tags.php new file mode 100644 index 00000000..0589fb1c --- /dev/null +++ b/tags.php @@ -0,0 +1,258 @@ +$name

    \n"); + print("\n"); + print("
    ".$lang_tags['text_description']."$description\n"); + print("
    ".$lang_tags['text_syntax']."$syntax\n"); + print("
    ".$lang_tags['text_example']."$example\n"); + print("
    ".$lang_tags['text_result']."$result\n"); + if ($remarks != "") + print("
    ".$lang_tags['text_remarks']."$remarks\n"); + print("
    \n"); +} + +stdhead($lang_tags['head_tags']); +begin_main_frame(); +begin_frame($lang_tags['text_tags']); +$test = $_POST["test"]; +?> +

    + +
    + +> +
    +
    " . format_comment($test) . "

    \n"); + +insert_tag( + $lang_tags['text_bold'], + $lang_tags['text_bold_description'], + $lang_tags['text_bold_syntax'], + $lang_tags['text_bold_example'], + "" +); + +insert_tag( + $lang_tags['text_italic'], + $lang_tags['text_italic_description'], + $lang_tags['text_italic_syntax'], + $lang_tags['text_italic_example'], + "" +); + +insert_tag( + $lang_tags['text_underline'], + $lang_tags['text_underline_description'], + $lang_tags['text_underline_syntax'], + $lang_tags['text_underline_example'], + "" +); + +insert_tag( + $lang_tags['text_color_one'], + $lang_tags['text_color_one_description'], + $lang_tags['text_color_one_syntax'], + $lang_tags['text_color_one_example'], + $lang_tags['text_color_one_remarks'] +); + +insert_tag( + $lang_tags['text_color_two'], + $lang_tags['text_color_two_description'], + $lang_tags['text_color_two_syntax'], + $lang_tags['text_color_two_example'], + $lang_tags['text_color_two_remarks'] +); + +insert_tag( + $lang_tags['text_size'], + $lang_tags['text_size_description'], + $lang_tags['text_size_syntax'], + $lang_tags['text_size_example'], + $lang_tags['text_size_remarks'] +); + +insert_tag( + $lang_tags['text_font'], + $lang_tags['text_font_description'], + $lang_tags['text_font_syntax'], + $lang_tags['text_font_example'], + $lang_tags['text_font_remarks'] +); + +insert_tag( + $lang_tags['text_hyperlink_one'], + $lang_tags['text_hyperlink_one_description'], + $lang_tags['text_hyperlink_one_syntax'], + $lang_tags['text_hyperlink_one_example'], + $lang_tags['text_hyperlink_one_remarks'] +); + +insert_tag( + $lang_tags['text_hyperlink_two'], + $lang_tags['text_hyperlink_two_description'], + $lang_tags['text_hyperlink_two_syntax'], + $lang_tags['text_hyperlink_two_example'], + $lang_tags['text_hyperlink_two_remarks'] +); + +insert_tag( + $lang_tags['text_image_one'], + $lang_tags['text_image_one_description'], + $lang_tags['text_image_one_syntax'], + $lang_tags['text_image_one_example'], + $lang_tags['text_image_one_remarks'] +); + +insert_tag( + $lang_tags['text_image_two'], + $lang_tags['text_image_two_description'], + $lang_tags['text_image_two_syntax'], + $lang_tags['text_image_two_example'], + $lang_tags['text_image_two_remarks'] +); + +insert_tag( + $lang_tags['text_quote_one'], + $lang_tags['text_quote_one_description'], + $lang_tags['text_quote_one_syntax'], + $lang_tags['text_quote_one_example'], + "" +); + +insert_tag( + $lang_tags['text_quote_two'], + $lang_tags['text_quote_two_description'], + $lang_tags['text_quote_two_syntax'], + $lang_tags['text_quote_two_example'], + "" +); + +insert_tag( + $lang_tags['text_list'], + $lang_tags['text_description'], + $lang_tags['text_list_syntax'], + $lang_tags['text_list_example'], + "" +); + +insert_tag( + $lang_tags['text_preformat'], + $lang_tags['text_preformat_description'], + $lang_tags['text_preformat_syntax'], + $lang_tags['text_preformat_example'], + "" +); + +insert_tag( + $lang_tags['text_code'], + $lang_tags['text_code_description'], + $lang_tags['text_code_syntax'], + $lang_tags['text_code_example'], + "" +); +/* +insert_tag( + $lang_tags['text_you'], + $lang_tags['text_you_description'], + $lang_tags['text_you_syntax'], + $lang_tags['text_you_example'], + $lang_tags['text_you_remarks'] +); +*/ + +insert_tag( + $lang_tags['text_site'], + $lang_tags['text_site_description'], + $lang_tags['text_site_syntax'], + $lang_tags['text_site_example'], + "" +); + +insert_tag( + $lang_tags['text_siteurl'], + $lang_tags['text_siteurl_description'], + $lang_tags['text_siteurl_syntax'], + $lang_tags['text_siteurl_example'], + "" +); + +insert_tag( + $lang_tags['text_flash'], + $lang_tags['text_flash_description'], + $lang_tags['text_flash_syntax'], + $lang_tags['text_flash_example'], + "" +); + +insert_tag( + $lang_tags['text_flash_two'], + $lang_tags['text_flash_two_description'], + $lang_tags['text_flash_two_syntax'], + $lang_tags['text_flash_two_example'], + "" +); + +insert_tag( + $lang_tags['text_flv_one'], + $lang_tags['text_flv_one_description'], + $lang_tags['text_flv_one_syntax'], + $lang_tags['text_flv_one_example'], + "" +); + +insert_tag( + $lang_tags['text_flv_two'], + $lang_tags['text_flv_two_description'], + $lang_tags['text_flv_two_syntax'], + $lang_tags['text_flv_two_example'], + "" +); + +/* +insert_tag( + $lang_tags['text_youtube'], + $lang_tags['text_youtube_description'], + $lang_tags['text_youtube_syntax'], + $lang_tags['text_youtube_example'], + "" +); + +insert_tag( + $lang_tags['text_youku'], + $lang_tags['text_youku_description'], + $lang_tags['text_youku_syntax'], + $lang_tags['text_youku_example'], + "" +); + +insert_tag( + $lang_tags['text_tudou'], + $lang_tags['text_tudou_description'], + $lang_tags['text_tudou_syntax'], + $lang_tags['text_tudou_example'], + "" +); +if ($cc98holder == 'yes') +insert_tag( + $lang_tags['text_ninety_eight_image'], + $lang_tags['text_ninety_eight_image_description'], + $lang_tags['text_ninety_eight_image_syntax'], + $lang_tags['text_ninety_eight_image_example'], + $lang_tags['text_ninety_eight_image_remarks'] +);*/ + +end_frame(); +end_main_frame(); +stdfoot(); +?> diff --git a/takeamountupload.php b/takeamountupload.php new file mode 100644 index 00000000..f220af1c --- /dev/null +++ b/takeamountupload.php @@ -0,0 +1,41 @@ + diff --git a/takeconfirm.php b/takeconfirm.php new file mode 100644 index 00000000..554c66df --- /dev/null +++ b/takeconfirm.php @@ -0,0 +1,26 @@ +".$lang_takeconfirm['std_here_to_go_back'],false); + +$title = $SITENAME.$lang_takeconfirm['mail_title']; +$body = <<{$lang_takeconfirm['mail_here']}
    +http://$BASEURL/login.php +{$lang_takeconfirm['mail_content_2']} +EOD; + +//this mail is sent when the site is using admin(open/closed)/inviter(closed) confirmation and the admin/inviter confirmed the pending user +sent_mail($email,$SITENAME,$SITEEMAIL,change_email_encode(get_langfolder_cookie(), $title),change_email_encode(get_langfolder_cookie(),$body),"invite confirm",false,false,'',get_email_encode(get_langfolder_cookie())); + +header("Refresh: 0; url=invite.php?id=".htmlspecialchars($CURUSER[id])); +?> diff --git a/takecontact.php b/takecontact.php new file mode 100644 index 00000000..3ca6c139 --- /dev/null +++ b/takecontact.php @@ -0,0 +1,48 @@ + (TIMENOW - 60)) + { + $secs = 60 - (TIMENOW - strtotime($CURUSER['last_staffmsg'])); + stderr($lang_takecontact['std_error'],$lang_takecontact['std_message_flooding'].$secs.$lang_takecontact['std_second'].($secs == 1 ? '' : $lang_takecontact['std_s']).$lang_takecontact['std_before_sending_pm']); + } +} +sql_query("INSERT INTO staffmessages (sender, added, msg, subject) VALUES($userid, $added, $message, $subject)") or sqlerr(__FILE__, __LINE__); +// Update Last PM sent... +sql_query("UPDATE users SET last_staffmsg = NOW() WHERE id = ".sqlesc($CURUSER['id'])) or sqlerr(__FILE__, __LINE__); +$Cache->delete_value('staff_message_count'); +$Cache->delete_value('staff_new_message_count'); +if ($_POST["returnto"]) +{ + header("Location: " . htmlspecialchars($_POST["returnto"])); + die; +} + +stdhead(); +stdmsg($lang_takecontact['std_succeeded'], $lang_takecontact['std_message_succesfully_sent']); +stdfoot(); +exit; +?> diff --git a/takeedit.php b/takeedit.php new file mode 100644 index 00000000..84cc99c2 --- /dev/null +++ b/takeedit.php @@ -0,0 +1,189 @@ + 65535) + bark($lang_takeedit['std_nfo_too_big']); + $nfofilename = $nfofile['tmp_name']; + if (@is_uploaded_file($nfofilename) && @filesize($nfofilename) > 0) + $updateset[] = "nfo = " . sqlesc(str_replace("\x0d\x0d\x0a", "\x0d\x0a", file_get_contents($nfofilename))); + $Cache->delete_value('nfo_block_torrent_id_'.$id); +} +elseif ($nfoaction == "remove"){ + $updateset[] = "nfo = ''"; + $Cache->delete_value('nfo_block_torrent_id_'.$id); +} +} + +$catid = (0 + $type); +if (!is_valid_id($catid)) +bark($lang_takeedit['std_missing_form_data']); +if (!$name || !$descr) +bark($lang_takeedit['std_missing_form_data']); +$newcatmode = get_single_value("categories","mode","WHERE id=".sqlesc($catid)); +if ($enablespecial == 'yes' && get_user_class() >= $movetorrent_class) + $allowmove = true; //enable moving torrent to other section +else $allowmove = false; +if ($oldcatmode != $newcatmode && !$allowmove) + bark($lang_takeedit['std_cannot_move_torrent']); +$updateset[] = "anonymous = '" . ($_POST["anonymous"] ? "yes" : "no") . "'"; +$updateset[] = "name = " . sqlesc($name); +$updateset[] = "descr = " . sqlesc($descr); +$updateset[] = "url = " . sqlesc($url); +$updateset[] = "small_descr = " . sqlesc($_POST["small_descr"]); +//$updateset[] = "ori_descr = " . sqlesc($descr); +$updateset[] = "category = " . sqlesc($catid); +$updateset[] = "source = " . sqlesc(0 + $_POST["source_sel"]); +$updateset[] = "medium = " . sqlesc(0 + $_POST["medium_sel"]); +$updateset[] = "codec = " . sqlesc(0 + $_POST["codec_sel"]); +$updateset[] = "standard = " . sqlesc(0 + $_POST["standard_sel"]); +$updateset[] = "processing = " . sqlesc(0 + $_POST["processing_sel"]); +$updateset[] = "team = " . sqlesc(0 + $_POST["team_sel"]); +$updateset[] = "audiocodec = " . sqlesc(0 + $_POST["audiocodec_sel"]); + +if (get_user_class() >= $torrentmanage_class) { + if ($_POST["banned"]) { + $updateset[] = "banned = 'yes'"; + $_POST["visible"] = 0; + } + else + $updateset[] = "banned = 'no'"; +} +$updateset[] = "visible = '" . ($_POST["visible"] ? "yes" : "no") . "'"; +if(get_user_class()>=$torrentonpromotion_class) +{ + if(!isset($_POST["sel_spstate"]) || $_POST["sel_spstate"] == 1) + $updateset[] = "sp_state = 1"; + elseif((0 + $_POST["sel_spstate"]) == 2) + $updateset[] = "sp_state = 2"; + elseif((0 + $_POST["sel_spstate"]) == 3) + $updateset[] = "sp_state = 3"; + elseif((0 + $_POST["sel_spstate"]) == 4) + $updateset[] = "sp_state = 4"; + elseif((0 + $_POST["sel_spstate"]) == 5) + $updateset[] = "sp_state = 5"; + elseif((0 + $_POST["sel_spstate"]) == 6) + $updateset[] = "sp_state = 6"; + elseif((0 + $_POST["sel_spstate"]) == 7) + $updateset[] = "sp_state = 7"; + + //promotion expiration type + if(!isset($_POST["promotion_time_type"]) || $_POST["promotion_time_type"] == 0) { + $updateset[] = "promotion_time_type = 0"; + $updateset[] = "promotion_until = '0000-00-00 00:00:00'"; + } elseif ($_POST["promotion_time_type"] == 1) { + $updateset[] = "promotion_time_type = 1"; + $updateset[] = "promotion_until = '0000-00-00 00:00:00'"; + } elseif ($_POST["promotion_time_type"] == 2) { + if ($_POST["promotionuntil"] && strtotime($torrentAddedTimeString) <= strtotime($_POST["promotionuntil"])) { + $updateset[] = "promotion_time_type = 2"; + $updateset[] = "promotion_until = ".sqlesc($_POST["promotionuntil"]); + } else { + $updateset[] = "promotion_time_type = 0"; + $updateset[] = "promotion_until = '0000-00-00 00:00:00'"; + } + } +} +if(get_user_class()>=$torrentsticky_class) +{ + if((0 + $_POST["sel_posstate"]) == 0) + $updateset[] = "pos_state = 'normal'"; + elseif((0 + $_POST["sel_posstate"]) == 1) + $updateset[] = "pos_state = 'sticky'"; +} + +$pick_info = ""; +if(get_user_class()>=$torrentmanage_class && $CURUSER['picker'] == 'yes') +{ + if((0 + $_POST["sel_recmovie"]) == 0) + { + if($row["picktype"] != 'normal') + $pick_info = ", recomendation canceled!"; + $updateset[] = "picktype = 'normal'"; + $updateset[] = "picktime = '0000-00-00 00:00:00'"; + } + elseif((0 + $_POST["sel_recmovie"]) == 1) + { + if($row["picktype"] != 'hot') + $pick_info = ", recommend as hot movie"; + $updateset[] = "picktype = 'hot'"; + $updateset[] = "picktime = ". sqlesc(date("Y-m-d H:i:s")); + } + elseif((0 + $_POST["sel_recmovie"]) == 2) + { + if($row["picktype"] != 'classic') + $pick_info = ", recommend as classic movie"; + $updateset[] = "picktype = 'classic'"; + $updateset[] = "picktime = ". sqlesc(date("Y-m-d H:i:s")); + } + elseif((0 + $_POST["sel_recmovie"]) == 3) + { + if($row["picktype"] != 'recommended') + $pick_info = ", recommend as recommended movie"; + $updateset[] = "picktype = 'recommended'"; + $updateset[] = "picktime = ". sqlesc(date("Y-m-d H:i:s")); + } +} +sql_query("UPDATE torrents SET " . join(",", $updateset) . " WHERE id = $id") or sqlerr(__FILE__, __LINE__); + +if($CURUSER["id"] == $row["owner"]) +{ + if ($row["anonymous"]=='yes') + { + write_log("Torrent $id ($name) was edited by Anonymous" . $pick_info . $place_info); + } + else + { + write_log("Torrent $id ($name) was edited by $CURUSER[username]" . $pick_info . $place_info); + } +} +else +{ + write_log("Torrent $id ($name) was edited by $CURUSER[username], Mod Edit" . $pick_info . $place_info); +} +$returl = "details.php?id=$id&edited=1"; +if (isset($_POST["returnto"])) + $returl = $_POST["returnto"]; +header("Refresh: 0; url=$returl"); diff --git a/takeflush.php b/takeflush.php new file mode 100644 index 00000000..eb523e4c --- /dev/null +++ b/takeflush.php @@ -0,0 +1,28 @@ += UC_MODERATOR || $CURUSER[id] == "$id") +{ + $deadtime = deadtime(); + sql_query("DELETE FROM peers WHERE last_action < FROM_UNIXTIME($deadtime) AND userid=" . sqlesc($id)); + $effected = mysql_affected_rows(); + + stderr($lang_takeflush['std_success'], "$effected ".$lang_takeflush['std_ghost_torrents_cleaned']); +} +else +{ + bark($lang_takeflush['std_cannot_flush_others']); +} diff --git a/takeinvite.php b/takeinvite.php new file mode 100644 index 00000000..2f692668 --- /dev/null +++ b/takeinvite.php @@ -0,0 +1,69 @@ +", "
    ", nl2br(trim(strip_tags($_POST["body"])))); +if(!$body) + bark($lang_takeinvite['std_must_enter_personal_message']); + + +// check if email addy is already in use +$a = (@mysql_fetch_row(@sql_query("select count(*) from users where email=".sqlesc($email)))) or die(mysql_error()); +if ($a[0] != 0) + bark($lang_takeinvite['std_email_address'].htmlspecialchars($email).$lang_takeinvite['std_is_in_use']); +$b = (@mysql_fetch_row(@sql_query("select count(*) from invites where invitee=".sqlesc($email)))) or die(mysql_error()); +if ($b[0] != 0) + bark($lang_takeinvite['std_invitation_already_sent_to'].htmlspecialchars($email).$lang_takeinvite['std_await_user_registeration']); + +$ret = sql_query("SELECT username FROM users WHERE id = ".sqlesc($id)) or sqlerr(); +$arr = mysql_fetch_assoc($ret); + +$hash = md5(mt_rand(1,10000).$CURUSER['username'].TIMENOW.$CURUSER['passhash']); + +$title = $SITENAME.$lang_takeinvite['mail_tilte']; + +sql_query("INSERT INTO invites (inviter, invitee, hash, time_invited) VALUES ('".mysql_real_escape_string($id)."', '".mysql_real_escape_string($email)."', '".mysql_real_escape_string($hash)."', " . sqlesc(date("Y-m-d H:i:s")) . ")"); +sql_query("UPDATE users SET invites = invites - 1 WHERE id = ".mysql_real_escape_string($id)."") or sqlerr(__FILE__, __LINE__); + +$message = <<{$lang_takeinvite['mail_here']}
    +http://$BASEURL/signup.php?type=invite&invitenumber=$hash +
    {$lang_takeinvite['mail_three']}$invite_timeout{$lang_takeinvite['mail_four']}{$arr[username]}{$lang_takeinvite['mail_five']}
    +$body +

    {$lang_takeinvite['mail_six']} +EOD; + +sent_mail($email,$SITENAME,$SITEEMAIL,change_email_encode(get_langfolder_cookie(), $title),change_email_encode(get_langfolder_cookie(),$message),"invitesignup",false,false,'',get_email_encode(get_langfolder_cookie())); +//this email is sent only when someone give out an invitation + +header("Refresh: 0; url=invite.php?id=".htmlspecialchars($id)."&sent=1"); +?> + + + diff --git a/takelogin.php b/takelogin.php new file mode 100644 index 00000000..d87cd8c4 --- /dev/null +++ b/takelogin.php @@ -0,0 +1,77 @@ + diff --git a/takemessage.php b/takemessage.php new file mode 100644 index 00000000..d2fc6918 --- /dev/null +++ b/takemessage.php @@ -0,0 +1,172 @@ + (TIMENOW - 10)) + { + $secs = 60 - (TIMENOW - strtotime($CURUSER['last_pm'])); + stderr($lang_takemessage['std_error'],$lang_takemessage['std_message_flooding_denied'].$secs.$lang_takemessage['std_before_sending_pm']); + } + } + + // Change + $save = ($save == 'yes') ? "yes" : "no"; + // End of Change + + $res = sql_query("SELECT id,username,parked,email,acceptpms, notifs, UNIX_TIMESTAMP(last_access) as la FROM users WHERE id=".sqlesc($receiver)) or sqlerr(__FILE__, __LINE__); + $user = mysql_fetch_assoc($res); + if (!$user) + stderr($lang_takemessage['std_error'], $lang_takemessage['std_user_not_exist']); + + //Make sure recipient wants this message + if (get_user_class() < $staffmem_class) + { + if ($user["parked"] == "yes") + stderr($lang_takemessage['std_refused'], $lang_takemessage['std_account_parked']); + if ($user["acceptpms"] == "yes") + { + $res2 = sql_query("SELECT * FROM blocks WHERE userid=".sqlesc($receiver)." AND blockid=" . sqlesc($CURUSER["id"])) or sqlerr(__FILE__, __LINE__); + if (mysql_num_rows($res2) == 1) + stderr($lang_takemessage['std_refused'], $lang_takemessage['std_user_blocks_your_pms']); + } + elseif ($user["acceptpms"] == "friends") + { + $res2 = sql_query("SELECT * FROM friends WHERE userid=".sqlesc($receiver)." AND friendid=" . sqlesc($CURUSER["id"])) or sqlerr(__FILE__, __LINE__); + if (mysql_num_rows($res2) != 1) + stderr($lang_takemessage['std_refused'], $lang_takemessage['std_user_accepts_friends_pms']); + } + elseif ($user["acceptpms"] == "no") + stderr($lang_takemessage['std_refused'], $lang_takemessage['std_user_blocks_all_pms']); + } + + $subject = trim($_POST['subject']); + sql_query("INSERT INTO messages (sender, receiver, added, msg, subject, saved, location) VALUES(" . sqlesc($CURUSER["id"]) . ", ".sqlesc($receiver).", '" . date("Y-m-d H:i:s") . "', " . sqlesc($msg) . ", " . sqlesc($subject) . ", " . sqlesc($save) . ", 1)") or sqlerr(__FILE__, __LINE__); + $Cache->delete_value('user_'.$receiver.'_unread_message_count'); + $Cache->delete_value('user_'.$receiver.'_inbox_count'); + $Cache->delete_value('user_'.$CURUSER["id"].'_outbox_count'); + + $msgid=mysql_insert_id(); + $date=date("Y-m-d H:i:s"); + // Update Last PM sent... + sql_query("UPDATE users SET last_pm = NOW() WHERE id = ".sqlesc($CURUSER['id'])) or sqlerr(__FILE__, __LINE__); + + // Send notification email. +if ($emailnotify_smtp=='yes' && $smtptype != 'none'){ + $mystring = $user['notifs']; + $findme = '[pm]'; + $pos = strpos($mystring, $findme); + if ($pos === false) + $sm = false; + else + $sm = true; + + if ($sm) + { + + $username = trim($CURUSER["username"]); + $msg_receiver = trim($user["username"]); + $prefix = get_protocol_prefix(); + + $title = "$SITENAME ".$lang_takemessage_target[get_user_lang($user["id"])]['mail_received_pm_from'] . $username . "!"; + $body = <<{$lang_takemessage_target[get_user_lang($user["id"])]['mail_here']}{$lang_takemessage_target[get_user_lang($user["id"])]['mail_use_following_url_1']}
    +$prefix$BASEURL/messages.php?action=viewmessage&id=$msgid + + ------{$lang_takemessage_target[get_user_lang($user["id"])]['mail_yours']} + {$lang_takemessage_target[get_user_lang($user["id"])]['mail_the_site_team']} +EOD; + + sent_mail($user["email"],$SITENAME,$SITEEMAIL,change_email_encode(get_user_lang($user["id"]), $title),change_email_encode(get_user_lang($user["id"]),str_replace("
    ","
    ",nl2br($body))),"sendmessage",false,false,'',get_email_encode(get_user_lang($user["id"]))); + + } +} + $delete = $_POST["delete"]; + + if ($origmsg) + { + if ($delete == "yes") + { + // Make sure receiver of $origmsg is current user + $res = sql_query("SELECT * FROM messages WHERE id=$origmsg") or sqlerr(__FILE__, __LINE__); + if (mysql_num_rows($res) == 1) + { + $arr = mysql_fetch_assoc($res); + if ($arr["receiver"] != $CURUSER["id"]) + stderr("w00t","This shouldn't happen."); + if ($arr["saved"] == "no") + sql_query("DELETE FROM messages WHERE id=$origmsg") or sqlerr(__FILE__, __LINE__); + elseif ($arr["saved"] == "yes") + sql_query("UPDATE messages SET location = '0' WHERE id=$origmsg") or sqlerr(__FILE__, __LINE__); + + } + } + if (!$returnto) + $returnto = "" . get_protocol_prefix() . "$BASEURL/messages.php"; + } + + if ($returnto) + { + header("Location: $returnto"); + die; + } + + stdhead(); + stdmsg($lang_takemessage['std_succeeded'], (($n_pms > 1) ? "$n".$lang_takemessage['std_messages_out_of']."$n_pms".$lang_takemessage['std_were'] : $lang_takemessage['std_message_was']). + $lang_takemessage['std_successfully_sent'] . ($l ? " $l profile comment" . (($l>1) ? $lang_takemessage['std_s_were'] : $lang_takemessage['std_was']) . $lang_takemessage['std_updated'] : "")); +stdfoot(); +exit; +?> diff --git a/takereseed.php b/takereseed.php new file mode 100644 index 00000000..f041e5e7 --- /dev/null +++ b/takereseed.php @@ -0,0 +1,31 @@ + 0) + stderr($lang_takereseed['std_error'], $lang_takereseed['std_torrent_not_dead']); +elseif (strtotime($row['last_reseed']) > (TIMENOW - 900)) + stderr($lang_takereseed['std_error'], $lang_takereseed['std_reseed_sent_recently']); +else{ +$res = sql_query("SELECT snatched.userid, snatched.torrentid, torrents.name as torrent_name, users.id FROM snatched inner join users on snatched.userid = users.id inner join torrents on snatched.torrentid = torrents.id where snatched.finished = 'Yes' AND snatched.torrentid = $reseedid") or sqlerr(); +while($row = mysql_fetch_assoc($res)) { +$rs_subject = $lang_takereseed_target[get_user_lang($row["userid"])]['msg_reseed_request']; +$pn_msg = $lang_takereseed_target[get_user_lang($row["userid"])]['msg_user'].$CURUSER["username"].$lang_takereseed_target[get_user_lang($row["userid"])]['msg_ask_reseed']."[url=" . get_protocol_prefix() . "$BASEURL/details.php?id=".$reseedid."]".$row["torrent_name"]."[/url]".$lang_takereseed_target[get_user_lang($row["userid"])]['msg_thank_you']; +sql_query("INSERT INTO messages (sender, receiver, added, subject, msg) VALUES(0, $row[userid], '" . date("Y-m-d H:i:s") . "'," . sqlesc($rs_subject) . ", " . sqlesc($pn_msg) . ")") or sqlerr(__FILE__, __LINE__); +} +sql_query("UPDATE torrents SET last_reseed = ".sqlesc(date("Y-m-d H:i:s"))." WHERE id=".sqlesc($reseedid)); +stdhead($lang_takereseed['head_reseed_request']); +begin_main_frame(); +print("
    ".$lang_takereseed['std_it_worked']."
    "); +end_main_frame(); +stdfoot(); +} +?> diff --git a/takesignup.php b/takesignup.php new file mode 100644 index 00000000..57f36fa4 --- /dev/null +++ b/takesignup.php @@ -0,0 +1,213 @@ + 12) + bark($lang_takesignup['std_username_too_long']); + +if ($wantpassword != $passagain) + bark($lang_takesignup['std_passwords_unmatched']); + +if (strlen($wantpassword) < 6) + bark($lang_takesignup['std_password_too_short']); + +if (strlen($wantpassword) > 40) + bark($lang_takesignup['std_password_too_long']); + +if ($wantpassword == $wantusername) + bark($lang_takesignup['std_password_equals_username']); + +if (!validemail($email)) + bark($lang_takesignup['std_wrong_email_address_format']); + +if (!validusername($wantusername)) + bark($lang_takesignup['std_invalid_username']); + +// make sure user agrees to everything... +if ($_POST["rulesverify"] != "yes" || $_POST["faqverify"] != "yes" || $_POST["ageverify"] != "yes") + stderr($lang_takesignup['std_signup_failed'], $lang_takesignup['std_unqualified']); + +// check if email addy is already in use +$a = (@mysql_fetch_row(@sql_query("select count(*) from users where email='".mysql_real_escape_string($email)."'"))) or sqlerr(__FILE__, __LINE__); +if ($a[0] != 0) + bark($lang_takesignup['std_email_address'].$email.$lang_takesignup['std_in_use']); + +/* +// do simple proxy check +if (isproxy()) + bark("You appear to be connecting through a proxy server. Your organization or ISP may use a transparent caching HTTP proxy. Please try and access the site on port 81 (this should bypass the proxy server).

    Note: if you run an Internet-accessible web server on the local machine you need to shut it down until the sign-up is complete."); + +$res = sql_query("SELECT COUNT(*) FROM users") or sqlerr(__FILE__, __LINE__); +$arr = mysql_fetch_row($res); +*/ + +$secret = mksecret(); +$wantpasshash = md5($secret . $wantpassword . $secret); +$editsecret = ($verification == 'admin' ? '' : $secret); +$invite_count = (int) $invite_count; + +$wantusername = sqlesc($wantusername); +$wantpasshash = sqlesc($wantpasshash); +$secret = sqlesc($secret); +$editsecret = sqlesc($editsecret); +$send_email = $email; +$email = sqlesc($email); +$country = sqlesc($country); +$gender = sqlesc($gender); +$sitelangid = sqlesc(get_langid_from_langcookie()); + +$res_check_user = sql_query("SELECT * FROM users WHERE username = " . $wantusername); + +if(mysql_num_rows($res_check_user) == 1) + bark($lang_takesignup['std_username_exists']); + +$ret = sql_query("INSERT INTO users (username, passhash, secret, editsecret, email, country, gender, status, class, invites, ".($type == 'invite' ? "invited_by," : "")." added, last_access, lang, stylesheet".($showschool == 'yes' ? ", school" : "").", uploaded) VALUES (" . $wantusername . "," . $wantpasshash . "," . $secret . "," . $editsecret . "," . $email . "," . $country . "," . $gender . ", 'pending', ".$defaultclass_class.",". $invite_count .", ".($type == 'invite' ? "'$inviter'," : "") ." '". date("Y-m-d H:i:s") ."' , " . " '". date("Y-m-d H:i:s") ."' , ".$sitelangid . ",".$defcss.($showschool == 'yes' ? ",".$school : "").",".($iniupload_main > 0 ? $iniupload_main : 0).")") or sqlerr(__FILE__, __LINE__); +$id = mysql_insert_id(); +$dt = sqlesc(date("Y-m-d H:i:s")); +$subject = sqlesc($lang_takesignup['msg_subject'].$SITENAME."!"); +$msg = sqlesc($lang_takesignup['msg_congratulations'].htmlspecialchars($wantusername).$lang_takesignup['msg_you_are_a_member']); +sql_query("INSERT INTO messages (sender, receiver, subject, added, msg) VALUES(0, $id, $subject, $dt, $msg)") or sqlerr(__FILE__, __LINE__); + +//write_log("User account $id ($wantusername) was created"); +$res = sql_query("SELECT passhash, secret, editsecret, status FROM users WHERE id = ".sqlesc($id)) or sqlerr(__FILE__, __LINE__); +$row = mysql_fetch_assoc($res); +$psecret = md5($row['secret']); +$ip = getip(); +$usern = htmlspecialchars($wantusername); +$title = $SITENAME.$lang_takesignup['mail_title']; +$body = << +{$lang_takesignup['mail_this_link']}
    +http://$BASEURL/confirm.php?id=$id&secret=$psecret +{$lang_takesignup['mail_four_1']} +{$lang_takesignup['mail_here']}
    +http://$BASEURL/confirm_resend.php +
    +{$lang_takesignup['mail_five']} +EOD; + +if ($type == 'invite') +{ +//don't forget to delete confirmed invitee's hash code from table invites +sql_query("DELETE FROM invites WHERE hash = '".mysql_real_escape_string($code)."'"); +$dt = sqlesc(date("Y-m-d H:i:s")); +$subject = sqlesc($lang_takesignup_target[get_user_lang($inviter)]['msg_invited_user_has_registered']); +$msg = sqlesc($lang_takesignup_target[get_user_lang($inviter)]['msg_user_you_invited'].$usern.$lang_takesignup_target[get_user_lang($inviter)]['msg_has_registered']); +//sql_query("UPDATE users SET uploaded = uploaded + 10737418240 WHERE id = $inviter"); //add 10GB to invitor's uploading credit +sql_query("INSERT INTO messages (sender, receiver, subject, added, msg) VALUES(0, $inviter, $subject, $dt, $msg)") or sqlerr(__FILE__, __LINE__); +$Cache->delete_value('user_'.$inviter.'_unread_message_count'); +$Cache->delete_value('user_'.$inviter.'_inbox_count'); +} + +if ($verification == 'admin'){ + if ($type == 'invite') + header("Location: " . get_protocol_prefix() . "$BASEURL/ok.php?type=inviter"); + else + header("Location: " . get_protocol_prefix() . "$BASEURL/ok.php?type=adminactivate"); +} +elseif ($verification == 'automatic' || $smtptype == 'none'){ + header("Location: " . get_protocol_prefix() . "$BASEURL/confirm.php?id=$id&secret=$psecret"); +} +else{ + sent_mail($send_email,$SITENAME,$SITEEMAIL,change_email_encode(get_langfolder_cookie(), $title),change_email_encode(get_langfolder_cookie(),$body),"signup",false,false,'',get_email_encode(get_langfolder_cookie())); + header("Location: " . get_protocol_prefix() . "$BASEURL/ok.php?type=signup&email=" . rawurlencode($send_email)); +} + +?> diff --git a/takestaffmess.php b/takestaffmess.php new file mode 100644 index 00000000..d32f0e7c --- /dev/null +++ b/takestaffmess.php @@ -0,0 +1,34 @@ + diff --git a/takeupdate.php b/takeupdate.php new file mode 100644 index 00000000..1ab17471 --- /dev/null +++ b/takeupdate.php @@ -0,0 +1,27 @@ +delete_value('staff_new_report_count'); +} +elseif ($_POST['delete']){ +$res = sql_query ("SELECT id FROM reports WHERE id IN (" . implode(", ", $_POST[delreport]) . ")"); +while ($arr = mysql_fetch_assoc($res)) + sql_query ("DELETE from reports WHERE id = $arr[id]") or sqlerr(); + $Cache->delete_value('staff_new_report_count'); + $Cache->delete_value('staff_report_count'); +} + +header("Refresh: 0; url=reports.php"); diff --git a/takeupload.php b/takeupload.php new file mode 100644 index 00000000..d9338c95 --- /dev/null +++ b/takeupload.php @@ -0,0 +1,444 @@ +=$beanonymous_class && $_POST['uplver'] == 'yes') { + $anonymous = "yes"; + $anon = "Anonymous"; +} +else { + $anonymous = "no"; + $anon = $CURUSER["username"]; +} + +$url = parse_imdb_id($_POST['url']); + +$nfo = ''; +if ($enablenfo_main=='yes'){ +$nfofile = $_FILES['nfo']; +if ($nfofile['name'] != '') { + + if ($nfofile['size'] == 0) + bark($lang_takeupload['std_zero_byte_nfo']); + + if ($nfofile['size'] > 65535) + bark($lang_takeupload['std_nfo_too_big']); + + $nfofilename = $nfofile['tmp_name']; + + if (@!is_uploaded_file($nfofilename)) + bark($lang_takeupload['std_nfo_upload_failed']); + $nfo = str_replace("\x0d\x0d\x0a", "\x0d\x0a", @file_get_contents($nfofilename)); +} +} + + +$small_descr = unesc($_POST["small_descr"]); + +$descr = unesc($_POST["descr"]); +if (!$descr) +bark($lang_takeupload['std_blank_description']); + +$catid = (0 + $_POST["type"]); +$sourceid = (0 + $_POST["source_sel"]); +$mediumid = (0 + $_POST["medium_sel"]); +$codecid = (0 + $_POST["codec_sel"]); +$standardid = (0 + $_POST["standard_sel"]); +$processingid = (0 + $_POST["processing_sel"]); +$teamid = (0 + $_POST["team_sel"]); +$audiocodecid = (0 + $_POST["audiocodec_sel"]); + +if (!is_valid_id($catid)) +bark($lang_takeupload['std_category_unselected']); + +if (!validfilename($fname)) +bark($lang_takeupload['std_invalid_filename']); +if (!preg_match('/^(.+)\.torrent$/si', $fname, $matches)) +bark($lang_takeupload['std_filename_not_torrent']); +$shortfname = $torrent = $matches[1]; +if (!empty($_POST["name"])) +$torrent = unesc($_POST["name"]); +if ($f['size'] > $max_torrent_size) +bark($lang_takeupload['std_torrent_file_too_big'].number_format($max_torrent_size).$lang_takeupload['std_remake_torrent_note']); +$tmpname = $f["tmp_name"]; +if (!is_uploaded_file($tmpname)) +bark("eek"); +if (!filesize($tmpname)) +bark($lang_takeupload['std_empty_file']); + +$dict = bdec_file($tmpname, $max_torrent_size); +if (!isset($dict)) +bark($lang_takeupload['std_not_bencoded_file']); + +function dict_check($d, $s) { + global $lang_takeupload; + if ($d["type"] != "dictionary") + bark($lang_takeupload['std_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($lang_takeupload['std_dictionary_is_missing_key']); + if (isset($t)) { + if ($dd[$k]["type"] != $t) + bark($lang_takeupload['std_invalid_entry_in_dictionary']); + $ret[] = $dd[$k]["value"]; + } + else + $ret[] = $dd[$k]; + } + return $ret; +} + +function dict_get($d, $k, $t) { + global $lang_takeupload; + if ($d["type"] != "dictionary") + bark($lang_takeupload['std_not_a_dictionary']); + $dd = $d["value"]; + if (!isset($dd[$k])) + return; + $v = $dd[$k]; + if ($v["type"] != $t) + bark($lang_takeupload['std_invalid_dictionary_entry_type']); + return $v["value"]; +} + +list($ann, $info) = dict_check($dict, "announce(string):info"); +list($dname, $plen, $pieces) = dict_check($info, "name(string):piece length(integer):pieces(string)"); + +/* +if (!in_array($ann, $announce_urls, 1)) +{ +$aok=false; +foreach($announce_urls as $au) +{ +if($ann=="$au?passkey=$CURUSER[passkey]") $aok=true; +} +if(!$aok) +bark("Invalid announce url! Must be: " . $announce_urls[0] . "?passkey=$CURUSER[passkey]"); +} +*/ + + +if (strlen($pieces) % 20 != 0) +bark($lang_takeupload['std_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"); + if (!isset($flist)) + bark($lang_takeupload['std_missing_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)"); + $totallen += $ll; + $ffa = array(); + foreach ($ff as $ffe) { + if ($ffe["type"] != "string") + bark($lang_takeupload['std_filename_errors']); + $ffa[] = $ffe["value"]; + } + if (!count($ffa)) + bark($lang_takeupload['std_filename_errors']); + $ffe = implode("/", $ffa); + $filelist[] = array($ffe, $ll); + } + $type = "multi"; +} + +$dict['value']['announce']=bdec(benc_str( get_protocol_prefix() . $announce_urls[0])); // change announce url to local +$dict['value']['info']['value']['private']=bdec('i1e'); // add private tracker flag +//The following line requires uploader to re-download torrents after uploading +//even the torrent is set as private and with uploader's passkey in it. +$dict['value']['info']['value']['source']=bdec(benc_str( "[$BASEURL] $SITENAME")); +unset($dict['value']['announce-list']); // remove multi-tracker capability +unset($dict['value']['nodes']); // remove cached peers (Bitcomet & Azareus) +$dict=bdec(benc($dict)); // double up on the becoding solves the occassional misgenerated infohash +list($ann, $info) = dict_check($dict, "announce(string):info"); + +$infohash = pack("H*", sha1($info["string"])); + +function hex_esc2($matches) { + return sprintf("%02x", ord($matches[0])); +} + +//die(phpinfo()); + +//die("\\' pos:" . strpos($infohash,"\\") . ", after sqlesc:" . (strpos(sqlesc($infohash),"\\") == false ? "gone" : strpos(sqlesc($infohash),"\\"))); + +//die(preg_replace_callback('/./s', "hex_esc2", $infohash)); + +// ------------- start: check upload authority ------------------// +$allowtorrents = user_can_upload("torrents"); +$allowspecial = user_can_upload("music"); + +$catmod = get_single_value("categories","mode","WHERE id=".sqlesc($catid)); +$offerid = $_POST['offer']; +$is_offer=false; +if ($browsecatmode != $specialcatmode && $catmod == $specialcatmode){//upload to special section + if (!$allowspecial) + bark($lang_takeupload['std_unauthorized_upload_freely']); +} +elseif($catmod == $browsecatmode){//upload to torrents section + if ($offerid){//it is a offer + $allowed_offer_count = get_row_count("offers","WHERE allowed='allowed' AND userid=".sqlesc($CURUSER["id"])); + if ($allowed_offer_count && $enableoffer == 'yes'){ + $allowed_offer = get_row_count("offers","WHERE id=".sqlesc($offerid)." AND allowed='allowed' AND userid=".sqlesc($CURUSER["id"])); + if ($allowed_offer != 1)//user uploaded torrent that is not an allowed offer + bark($lang_takeupload['std_uploaded_not_offered']); + else $is_offer = true; + } + else bark($lang_takeupload['std_uploaded_not_offered']); + } + elseif (!$allowtorrents) + bark($lang_takeupload['std_unauthorized_upload_freely']); +} +else //upload to unknown section + die("Upload to unknown section."); +// ------------- end: check upload authority ------------------// + +// Replace punctuation characters with spaces + +//$torrent = str_replace("_", " ", $torrent); + +if ($largesize_torrent && $totallen > ($largesize_torrent * 1073741824)) //Large Torrent Promotion +{ + switch($largepro_torrent) + { + case 2: //Free + { + $sp_state = 2; + break; + } + case 3: //2X + { + $sp_state = 3; + break; + } + case 4: //2X Free + { + $sp_state = 4; + break; + } + case 5: //Half Leech + { + $sp_state = 5; + break; + } + case 6: //2X Half Leech + { + $sp_state = 6; + break; + } + case 7: //30% Leech + { + $sp_state = 7; + break; + } + default: //normal + { + $sp_state = 1; + break; + } + } +} +else{ //ramdom torrent promotion + $sp_id = mt_rand(1,100); + if($sp_id <= ($probability = $randomtwoupfree_torrent)) //2X Free + $sp_state = 4; + elseif($sp_id <= ($probability += $randomtwoup_torrent)) //2X + $sp_state = 3; + elseif($sp_id <= ($probability += $randomfree_torrent)) //Free + $sp_state = 2; + elseif($sp_id <= ($probability += $randomhalfleech_torrent)) //Half Leech + $sp_state = 5; + elseif($sp_id <= ($probability += $randomtwouphalfdown_torrent)) //2X Half Leech + $sp_state = 6; + elseif($sp_id <= ($probability += $randomthirtypercentdown_torrent)) //30% Leech + $sp_state = 7; + else + $sp_state = 1; //normal +} + +if ($altname_main == 'yes'){ +$cnname_part = unesc(trim($_POST["cnname"])); +$size_part = str_replace(" ", "", mksize($totallen)); +$date_part = date("m.d.y"); +$category_part = get_single_value("categories","name","WHERE id = ".sqlesc($catid)); +$torrent = "【".$date_part."】".($_POST["name"] ? "[".$_POST["name"]."]" : "").($cnname_part ? "[".$cnname_part."]" : ""); +} + +// some ugly code of automatically promoting torrents based on some rules +if ($prorules_torrent == 'yes'){ +foreach ($promotionrules_torrent as $rule) +{ + if (!array_key_exists('catid', $rule) || in_array($catid, $rule['catid'])) + if (!array_key_exists('sourceid', $rule) || in_array($sourceid, $rule['sourceid'])) + if (!array_key_exists('mediumid', $rule) || in_array($mediumid, $rule['mediumid'])) + if (!array_key_exists('codecid', $rule) || in_array($codecid, $rule['codecid'])) + if (!array_key_exists('standardid', $rule) || in_array($standardid, $rule['standardid'])) + if (!array_key_exists('processingid', $rule) || in_array($processingid, $rule['processingid'])) + if (!array_key_exists('teamid', $rule) || in_array($teamid, $rule['teamid'])) + if (!array_key_exists('audiocodecid', $rule) || in_array($audiocodecid, $rule['audiocodecid'])) + if (!array_key_exists('pattern', $rule) || preg_match($rule['pattern'], $torrent)) + if (is_numeric($rule['promotion'])){ + $sp_state = $rule['promotion']; + break; + } +} +} + +$ret = sql_query("INSERT INTO torrents (filename, owner, visible, anonymous, name, size, numfiles, type, url, small_descr, descr, ori_descr, category, source, medium, codec, audiocodec, standard, processing, team, save_as, sp_state, added, last_action, nfo, info_hash) VALUES (".sqlesc($fname).", ".sqlesc($CURUSER["id"]).", 'yes', ".sqlesc($anonymous).", ".sqlesc($torrent).", ".sqlesc($totallen).", ".count($filelist).", ".sqlesc($type).", ".sqlesc($url).", ".sqlesc($small_descr).", ".sqlesc($descr).", ".sqlesc($descr).", ".sqlesc($catid).", ".sqlesc($sourceid).", ".sqlesc($mediumid).", ".sqlesc($codecid).", ".sqlesc($audiocodecid).", ".sqlesc($standardid).", ".sqlesc($processingid).", ".sqlesc($teamid).", ".sqlesc($dname).", ".sqlesc($sp_state) . +", " . sqlesc(date("Y-m-d H:i:s")) . ", " . sqlesc(date("Y-m-d H:i:s")) . ", ".sqlesc($nfo).", " . sqlesc($infohash). ")"); +if (!$ret) { + if (mysql_errno() == 1062) + bark($lang_takeupload['std_torrent_existed']); + bark("mysql puked: ".mysql_error()); + //bark("mysql puked: ".preg_replace_callback('/./s', "hex_esc2", mysql_error())); +} +$id = mysql_insert_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].")"); +} + +//move_uploaded_file($tmpname, "$torrent_dir/$id.torrent"); +$fp = fopen("$torrent_dir/$id.torrent", "w"); +if ($fp) +{ + @fwrite($fp, benc($dict), strlen(benc($dict))); + fclose($fp); +} + +//===add karma +KPS("+",$uploadtorrent_bonus,$CURUSER["id"]); +//===end + + +write_log("Torrent $id ($torrent) was uploaded by $anon"); + +//===notify people who voted on offer thanks CoLdFuSiOn :) +if ($is_offer) +{ + $res = sql_query("SELECT `userid` FROM `offervotes` WHERE `userid` != " . $CURUSER["id"] . " AND `offerid` = ". sqlesc($offerid)." AND `vote` = 'yeah'") or sqlerr(__FILE__, __LINE__); + + while($row = mysql_fetch_assoc($res)) + { + $pn_msg = $lang_takeupload_target[get_user_lang($row["userid"])]['msg_offer_you_voted'].$torrent.$lang_takeupload_target[get_user_lang($row["userid"])]['msg_was_uploaded_by']. $CURUSER["username"] .$lang_takeupload_target[get_user_lang($row["userid"])]['msg_you_can_download'] ."[url=" . get_protocol_prefix() . "$BASEURL/details.php?id=$id&hit=1]".$lang_takeupload_target[get_user_lang($row["userid"])]['msg_here']."[/url]"; + + //=== use this if you DO have subject in your PMs + $subject = $lang_takeupload_target[get_user_lang($row["userid"])]['msg_offer'].$torrent.$lang_takeupload_target[get_user_lang($row["userid"])]['msg_was_just_uploaded']; + //=== use this if you DO NOT have subject in your PMs + //$some_variable .= "(0, $row[userid], '" . date("Y-m-d H:i:s") . "', " . sqlesc($pn_msg) . ")"; + + //=== use this if you DO have subject in your PMs + sql_query("INSERT INTO messages (sender, subject, receiver, added, msg) VALUES (0, ".sqlesc($subject).", $row[userid], ".sqlesc(date("Y-m-d H:i:s")).", " . sqlesc($pn_msg) . ")") or sqlerr(__FILE__, __LINE__); + //=== use this if you do NOT have subject in your PMs + //sql_query("INSERT INTO messages (sender, receiver, added, msg) VALUES ".$some_variable."") or sqlerr(__FILE__, __LINE__); + //===end + } + //=== delete all offer stuff + sql_query("DELETE FROM offers WHERE id = ". $offerid); + sql_query("DELETE FROM offervotes WHERE offerid = ". $offerid); + sql_query("DELETE FROM comments WHERE offer = ". $offerid); +} +//=== end notify people who voted on offer + +/* Email notifs */ +if ($emailnotify_smtp=='yes' && $smtptype != 'none') +{ +$cat = get_single_value("categories","name","WHERE id=".sqlesc($catid)); +$res = sql_query("SELECT id, email, lang FROM users WHERE enabled='yes' AND parked='no' AND status='confirmed' AND notifs LIKE '%[cat$catid]%' AND notifs LIKE '%[email]%' ORDER BY lang ASC") or sqlerr(__FILE__, __LINE__); + +$uploader = $anon; + +$size = mksize($totallen); + +$description = format_comment($descr); + +//dirty code, change later + +$langfolder_array = array("en", "chs", "cht", "ko", "ja"); +$body_arr = array("en" => "", "chs" => "", "cht" => "", "ko" => "", "ja" => ""); +$i = 0; +foreach($body_arr as $body) +{ +$body_arr[$langfolder_array[$i]] = <<{$lang_takeupload_target[$langfolder_array[$i]]['mail_here']}
    +http://$BASEURL/details.php?id=$id&hit=1 + +------{$lang_takeupload_target[$langfolder_array[$i]]['mail_yours']} +{$lang_takeupload_target[$langfolder_array[$i]]['mail_team']} +EOD; + +$body_arr[$langfolder_array[$i]] = str_replace("
    ","
    ",nl2br($body_arr[$langfolder_array[$i]])); + $i++; +} + +while($arr = mysql_fetch_array($res)) +{ + $current_lang = $arr["lang"]; + $to = $arr["email"]; + + sent_mail($to,$SITENAME,$SITEEMAIL,change_email_encode(validlang($current_lang),$lang_takeupload_target[validlang($current_lang)]['mail_title'].$torrent),change_email_encode(validlang($current_lang),$body_arr[validlang($current_lang)]),"torrent upload",false,false,'',get_email_encode(validlang($current_lang)), "eYou"); +} +} + +header("Location: " . get_protocol_prefix() . "$BASEURL/details.php?id=".htmlspecialchars($id)."&uploaded=1"); +?> diff --git a/testip.php b/testip.php new file mode 100644 index 00000000..db1b263f --- /dev/null +++ b/testip.php @@ -0,0 +1,47 @@ += first AND $nip <= last") or sqlerr(__FILE__, __LINE__); + if (mysql_num_rows($res) == 0) + stderr("Result", "The IP address ". htmlspecialchars($ip) ." is not banned.",false); + else + { + $banstable = "\n" . + "\n"; + while ($arr = mysql_fetch_assoc($res)) + { + $first = long2ip($arr["first"]); + $last = long2ip($arr["last"]); + $comment = htmlspecialchars($arr["comment"]); + $banstable .= "\n"; + } + $banstable .= "
    FirstLastComment
    $first$last$comment
    \n"; + stderr("Result", "
    The IP address ". htmlspecialchars($ip) ." is banned:

    ". htmlspecialchars($banstable) ."

    "); + } +} +stdhead(); + +?> +

    Test IP address

    +
    + + + + +
    IP address
    + + + + + + + + + + + + +$ratio
    "; + } + else + $ratio = $lang_topten['text_inf']; + print("$num" . get_username($a["userid"]) . + "" . mksize($a["uploaded"]) . + "" . mksize($a["upspeed"]) . "/s" . + "" . mksize($a["downloaded"]) . + "" . mksize($a["downspeed"]) . "/s" . + "" . $ratio . + "" . gettime($a["added"],true,false). ""); +} +end_table(); +end_frame(); +} + +function _torrenttable($res, $frame_caption) +{ + global $lang_topten; + begin_frame($frame_caption, true); + begin_table(); +?> + + + +" ?> + +" ?> +" ?> + + + +" . number_format($r, 2) . "
    "; + } + else + $ratio = $lang_topten['text_inf']; + print("$num" . + $a["name"] . "" . number_format($a["times_completed"]) . + "" . mksize($a["data"]) . "" . number_format($a["seeders"]) . + "" . number_format($a["leechers"]) . "" . ($a["leechers"] + $a["seeders"]) . + "$ratio\n"); +} +end_table(); +end_frame(); +} + +function countriestable($res, $frame_caption, $what) +{ + global $CURUSER; + global $lang_topten; + begin_frame($frame_caption, true); + begin_table(); +?> + + + + + +$num". + "
    ". + "\"\"$a[name]
    $value\n"); +} +end_table(); +end_frame(); +} + +function peerstable($res, $frame_caption) +{ + global $lang_topten; + begin_frame($frame_caption, true); + begin_table(); + + print("".$lang_topten['col_rank']."".$lang_topten['col_username']."".$lang_topten['col_upload_rate']."".$lang_topten['col_download_rate'].""); + + $n = 1; + while ($arr = mysql_fetch_assoc($res)) + { + print("$n" . get_username($arr["userid"]) . "" . mksize($arr["uprate"]) . "/s" . mksize($arr["downrate"]) . "/s\n"); + ++$n; + } + + end_table(); + end_frame(); +} + +function bonustable($res, $frame_caption) +{ + global $lang_topten; + begin_frame($frame_caption, true); + begin_table(); + + print("".$lang_topten['col_rank']."".$lang_topten['col_username']."".$lang_topten['col_bonus'].""); + + $n = 1; + while ($arr = mysql_fetch_assoc($res)) + { + //die(); + print("$n" . get_username($arr["id"]) . "" . number_format($arr["seedbonus"], 1) . "\n"); + $n++; + } + + end_table(); + end_frame(); +} + +function prolinkclicktable($res, $frame_caption) +{ + global $lang_topten; + begin_frame($frame_caption, true); + begin_table(); + + print("".$lang_topten['col_rank']."".$lang_topten['col_username']."".$lang_topten['col_clicks'].""); + + $n = 1; + while ($arr = mysql_fetch_assoc($res)) + { + //die(); + print("$n" . get_username($arr["userid"]) . "" . number_format($arr["count"]) . "\n"); + $n++; + } + + end_table(); + end_frame(); +} + +function charityTable($res, $frame_caption) +{ + global $lang_topten; + begin_frame($frame_caption, true); + begin_table(); + + print("".$lang_topten['col_rank']."".$lang_topten['col_username']."".$lang_topten['col_bonus'].""); + + $n = 1; + while ($arr = mysql_fetch_assoc($res)) + { + //die(); + print("$n" . get_username($arr["id"]) . "" . number_format($arr["charity"]) . "\n"); + $n++; + } + + end_table(); + end_frame(); +} + +function cmttable($res, $frame_caption, $col2_name) +{ + global $lang_topten; + begin_frame($frame_caption, true); + begin_table(); + + print("".$lang_topten['col_rank']."".$lang_topten['col_username']."".$col2_name.""); + + $n = 1; + while ($arr = mysql_fetch_assoc($res)) + { + print("$n" . get_username($arr["userid"]) . "" . number_format($arr["num"]) . "\n"); + $n++; + } + + end_table(); + end_frame(); +} + +function locationtable($res, $frame_caption) +{ + global $lang_topten; + begin_frame($frame_caption, true); + begin_table(); + + print("".$lang_topten['col_rank']."".$lang_topten['col_location']."".$lang_topten['col_number'].""); + + $n = 1; + while ($arr = mysql_fetch_assoc($res)) + { + print("$n" . get_username($arr["location_name"]) . "" . number_format($arr["num"]) . "\n"); + $n++; + } + + end_table(); + end_frame(); +} + +function postable($res, $frame_caption) +{ + global $lang_topten; + begin_frame($frame_caption, true); + begin_table(); + + print("".$lang_topten['col_rank']."".$lang_topten['col_username']."".$lang_topten['col_topics']."".$lang_topten['col_posts'].""); + + $n = 1; + while ($arr = mysql_fetch_assoc($res)) + { + print("$n" . get_username($arr["userid"]) . "" . number_format($arr["usertopics"]) . "" . number_format($arr["userposts"]) . "\n"); + $n++; + } + + end_table(); + end_frame(); +} + +function bigtopic_table($res, $frame_caption) +{ + global $lang_topten; + begin_frame($frame_caption, true); + begin_table(); + + print("".$lang_topten['col_rank']."".$lang_topten['col_subject']."".$lang_topten['col_posts'].""); + + $n = 1; + while ($arr = mysql_fetch_assoc($res)) + { + // topics_posts.topicid, topics_posts.postnum, forums.id as forumid + $topic = "" . $arr["topicsubject"] . ""; + print("$n" . $topic. "" . number_format($arr["postnum"]) . "\n"); + $n++; + } + + end_table(); + end_frame(); +} + +function donortable($res, $frame_caption) +{ + global $lang_topten; + begin_frame($frame_caption, true); + begin_table(); + + print("".$lang_topten['col_rank']."".$lang_topten['col_username']."".$lang_topten['col_donated_usd']."".$lang_topten['col_donated_cny'].""); + + $n = 1; + while ($arr = mysql_fetch_assoc($res)) + { + print("$n" . get_username($arr["id"]) . "" . number_format($arr["donated"], 2) . "" . number_format($arr["donated_cny"], 2) . "\n"); + $n++; + } + + end_table(); + end_frame(); +} + +function clienttable($res, $frame_caption) +{ + global $lang_topten; + begin_frame($frame_caption, true); + begin_table(); + + print("".$lang_topten['col_rank']."".$lang_topten['col_name']."".$lang_topten['col_number'].""); + + $n = 1; + while ($arr = mysql_fetch_assoc($res)) + { + print("$n" . $arr["client_name"] . "" . number_format($arr["client_num"]) . "\n"); + $n++; + } + + end_table(); + end_frame(); +} + +function lastsearch_table($res, $frame_caption) +{ + global $lang_topten; + begin_frame($frame_caption, true); + begin_table(); + + print("".$lang_topten['col_rank']."".$lang_topten['col_keyword']."".$lang_topten['col_datetime'].""); + + $n = 1; + while ($arr = mysql_fetch_assoc($res)) + { + print("$n" . $arr["keywords"] . "" . gettime($arr["adddate"], true,false) . "\n"); + $n++; + } + + end_table(); + end_frame(); +} + +function search_ranktable($res, $frame_caption) +{ + global $lang_topten; + begin_frame($frame_caption, true); + begin_table(); + + print("".$lang_topten['col_rank']."".$lang_topten['col_keyword']."".$lang_topten['col_times'].""); + + $n = 1; + while ($arr = mysql_fetch_assoc($res)) + { + print("$n" . $arr["keywords"] . "" . number_format($arr["count"]) . "\n"); + $n++; + } + + end_table(); + end_frame(); +} + + +function supply_snatchtable($res, $frame_caption) +{ + global $lang_topten; + global $CURUSER; + global $lang_topten; + begin_frame($frame_caption, true); + begin_table(); +?> + + + + + + + + + + + +$ratio"; + } + else + $ratio = $lang_topten['text_inf']; + print("$num" . get_username($a["userid"]) . + "" . number_format($a["supplied"]) . + "" . mksize($a["uploaded"]) . + "" . number_format($a["snatched"]) . + "" . mksize($a["downloaded"]) . + "" . $ratio . + "" . gettime($a["added"]). ""); +} +end_table(); +end_frame(); +} + +function stylesheettable($res, $frame_caption) +{ + global $lang_topten; + begin_frame($frame_caption, true); + begin_table(); + + print("".$lang_topten['col_rank']."".$lang_topten['col_name']."".$lang_topten['col_number'].""); + + $n = 1; + while ($arr = mysql_fetch_assoc($res)) + { + //die(); + print("$n" . $arr["stylesheet_name"] . "" . number_format($arr["stylesheet_num"]) . "\n"); + $n++; + } + + end_table(); + end_frame(); +} + +function languagetable($res, $frame_caption) +{ + global $lang_topten; + begin_frame($frame_caption, true); + begin_table(); + + print("".$lang_topten['col_rank']."".$lang_topten['col_name']."".$lang_topten['col_number'].""); + + $n = 1; + while ($arr = mysql_fetch_assoc($res)) + { + //die(); + print("$n" . $arr["lang_name"] . "" . number_format($arr["lang_num"]) . "\n"); + $n++; + } + + end_table(); + end_frame(); +} + +stdhead($lang_topten['head_top_ten']); +begin_main_frame(); +$type = isset($_GET["type"]) ? 0 + $_GET["type"] : 0; +if (!in_array($type,array(1,2,3,4,5,6,7))) +$type = 1; +$limit = isset($_GET["lim"]) ? 0 + $_GET["lim"] : false; +$subtype = isset($_GET["subtype"]) ? $_GET["subtype"] : false; + +print("

    " . +($type == 1 && !$limit ? "".$lang_topten['text_users']."" : "".$lang_topten['text_users']."") . " | " . +($type == 2 && !$limit ? "".$lang_topten['text_torrents']."" : "".$lang_topten['text_torrents']."") . " | " . +($type == 3 && !$limit ? "".$lang_topten['text_countries']."" : "".$lang_topten['text_countries']."") . " | " . +//($type == 4 && !$limit ? "".$lang_topten['text_peers']."" : "".$lang_topten['text_peers']."") . " | " . +($type == 5 && !$limit ? "".$lang_topten['text_community']."" : "".$lang_topten['text_community']."") . " | " . +//($type == 7 && !$limit ? "".$lang_topten['text_search']."" : "".$lang_topten['text_search']."") . " | " . +($type == 6 && !$limit ? "".$lang_topten['text_other']."" : "".$lang_topten['text_other']."") . "

    \n"); + +if (!$limit || $limit > 250) +$limit = 10; + +$cachename = "topten_type_".$type."_limit_".$limit."_subtype_".$subtype; +$cachetime = 60 * 60; // 60 minutes +// START CACHE +$Cache->new_page($cachename, $cachetime, true); +if (!$Cache->get_page()) +{ +$Cache->add_whole_row(); + +///////////////////////////////////////////////////////// + +if ($type == 1) +{ + $mainquery = "SELECT id as userid, username, added, uploaded, downloaded, uploaded / (UNIX_TIMESTAMP(NOW()) - UNIX_TIMESTAMP(added)) AS upspeed, downloaded / (UNIX_TIMESTAMP(NOW()) - UNIX_TIMESTAMP(added)) AS downspeed FROM users WHERE enabled = 'yes'"; + + + if ($limit == 10 || $subtype == "ul") + { + $order = "uploaded DESC"; + $r = sql_query($mainquery . " ORDER BY $order " . " LIMIT $limit") or sqlerr(); + usershare_table($r, $lang_topten['text_top']."$limit ".$lang_topten['text_uploaders'] . ($limit == 10 ? " - [".$lang_topten['text_one_hundred']."] - [".$lang_topten['text_top_250']."]" : "")); + } + + if ($limit == 10 || $subtype == "dl") + { + $order = "downloaded DESC"; + $r = sql_query($mainquery . " ORDER BY $order " . " LIMIT $limit") or sqlerr(); + usershare_table($r, $lang_topten['text_top']."$limit ".$lang_topten['text_downloaders'] . ($limit == 10 ? " - [".$lang_topten['text_one_hundred']."] - [".$lang_topten['text_top_250']."]" : "")); + } + + if ($limit == 10 || $subtype == "uls") + { + $order = "upspeed DESC"; + $extrawhere = " AND uploaded > 53687091200"; + $r = sql_query($mainquery . $extrawhere . " ORDER BY $order " . " LIMIT $limit") or sqlerr(); + usershare_table($r, $lang_topten['text_top']."$limit ".$lang_topten['text_fastest_uploaders'] . "".$lang_topten['text_fastest_up_note'] . "" . ($limit == 10 ? " - [".$lang_topten['text_one_hundred']."] - [".$lang_topten['text_top_250']."]" : "")); + } + + if ($limit == 10 || $subtype == "dls") + { + $order = "downspeed DESC"; + $r = sql_query($mainquery . " ORDER BY $order " . " LIMIT $limit") or sqlerr(); + usershare_table($r, $lang_topten['text_top']."$limit ".$lang_topten['text_fastest_downloaders'] ."" . $lang_topten['text_fastest_note'] . "" . ($limit == 10 ? " - [".$lang_topten['text_one_hundred']."] - [".$lang_topten['text_top_250']."]" : "")); + } + + if ($limit == 10 || $subtype == "bsh") + { + $order = "uploaded / downloaded DESC"; + $extrawhere = " AND downloaded > 53687091200"; + $r = sql_query($mainquery . $extrawhere . " ORDER BY $order " . " LIMIT $limit") or sqlerr(); + usershare_table($r, $lang_topten['text_top']."$limit ".$lang_topten['text_best_sharers'] ."".$lang_topten['text_sharers_note']."" . ($limit == 10 ? " - [".$lang_topten['text_one_hundred']."] - [".$lang_topten['text_top_250']."]" : "")); + } + + if ($limit == 10 || $subtype == "wsh") + { + $order = "uploaded / downloaded ASC, downloaded DESC"; + $extrawhere = " AND downloaded > 53687091200"; + $r = sql_query($mainquery . $extrawhere . " ORDER BY $order " . " LIMIT $limit") or sqlerr(); + usershare_table($r, $lang_topten['text_top']."$limit ".$lang_topten['text_worst_sharers'] .$lang_topten['text_sharers_note'] . ($limit == 10 ? " - [".$lang_topten['text_one_hundred']."] - [".$lang_topten['text_top_250']."]" : "")); + } +/* + if ($limit == 10 || $subtype == "sp") + { + $r = sql_query( "SELECT users_torrents.userid, users_torrents.supplied, users_torrents.uploaded, users_torrents.downloaded, users_torrents.added, COUNT(snatched.id) as snatched FROM (SELECT users.id as userid, COUNT(torrents.id) as supplied, users.uploaded, users.downloaded, users.added from users LEFT JOIN torrents ON torrents.owner = users.id GROUP BY userid) as users_torrents LEFT JOIN snatched ON snatched.userid = users_torrents.userid where snatched.finished='yes' AND snatched.torrentid IN(SELECT id FROM torrents where torrents.owner != users_torrents.userid) GROUP BY users_torrents.userid ORDER BY users_torrents.supplied DESC LIMIT $limit") or sqlerr(); + supply_snatchtable($r, $lang_topten['text_top']."$limit ".$lang_topten['text_most_supplied'] . ($limit == 10 ? " - [".$lang_topten['text_one_hundred']."] - [".$lang_topten['text_top_250']."]" : "")); + } + + if ($limit == 10 || $subtype == "sn") + { + $r = sql_query( "SELECT users_torrents.userid, users_torrents.supplied, users_torrents.uploaded, users_torrents.downloaded, users_torrents.added, COUNT(snatched.id) as snatched FROM (SELECT users.id as userid, COUNT(torrents.id) as supplied, users.uploaded, users.downloaded, users.added from users LEFT JOIN torrents ON torrents.owner = users.id GROUP BY userid) as users_torrents LEFT JOIN snatched ON snatched.userid = users_torrents.userid where snatched.finished='yes' AND snatched.torrentid IN(SELECT id FROM torrents where torrents.owner != users_torrents.userid) GROUP BY users_torrents.userid ORDER BY snatched DESC LIMIT $limit") or sqlerr(); + supply_snatchtable($r, $lang_topten['text_top']."$limit ".$lang_topten['text_most_snatched'] . ($limit == 10 ? " - [".$lang_topten['text_one_hundred']."] - [".$lang_topten['text_top_250']."]" : "")); + } + */ +} +elseif ($type == 2) +{ + if ($limit == 10 || $subtype == "act") + { + $r = sql_query("SELECT t.*, (t.size * t.times_completed + SUM(p.downloaded)) AS data FROM torrents AS t LEFT JOIN peers AS p ON t.id = p.torrent WHERE p.seeder = 'no' GROUP BY t.id ORDER BY seeders + leechers DESC, seeders DESC, added ASC LIMIT $limit") or sqlerr(); + _torrenttable($r, $lang_topten['text_top']."$limit ".$lang_topten['text_most_active_torrents']. ($limit == 10 ? " - [Top 25] - [Top 50]" : "")); + } + + if ($limit == 10 || $subtype == "sna") + { + $r = sql_query("SELECT t.*, (t.size * t.times_completed + SUM(p.downloaded)) AS data FROM torrents AS t LEFT JOIN peers AS p ON t.id = p.torrent WHERE p.seeder = 'no' GROUP BY t.id ORDER BY times_completed DESC LIMIT $limit") or sqlerr(); + _torrenttable($r, $lang_topten['text_top']."$limit ".$lang_topten['text_most_snatched_torrents']. ($limit == 10 ? " - [Top 25] - [Top 50]" : "")); + } + + if ($limit == 10 || $subtype == "mdt") + { + $r = sql_query("SELECT t.*, (t.size * t.times_completed + SUM(p.downloaded)) AS data FROM torrents AS t LEFT JOIN peers AS p ON t.id = p.torrent WHERE p.seeder = 'no' AND times_completed > 0 GROUP BY t.id ORDER BY data DESC, added ASC LIMIT $limit") or sqlerr(); + _torrenttable($r, $lang_topten['text_top']."$limit ".$lang_topten['text_most_data_transferred_torrents']. ($limit == 10 ? " - [Top 25] - [Top 50]" : "")); + } + + if ($limit == 10 || $subtype == "bse") + { + $r = sql_query("SELECT t.*, (t.size * t.times_completed + SUM(p.downloaded)) AS data FROM torrents AS t LEFT JOIN peers AS p ON t.id = p.torrent WHERE p.seeder = 'no' AND seeders >= 5 GROUP BY t.id ORDER BY seeders / leechers DESC, seeders DESC, added ASC LIMIT $limit") or sqlerr(); + _torrenttable($r, $lang_topten['text_top']."$limit ".$lang_topten['text_best_seeded_torrents']."".$lang_topten['text_best_seeded_torrents_note']."" . ($limit == 10 ? " - [Top 25] - [Top 50]" : "")); + } + + if ($limit == 10 || $subtype == "wse") + { + $r = sql_query("SELECT t.*, (t.size * t.times_completed) AS data FROM torrents AS t WHERE leechers > 0 AND times_completed > 0 ORDER BY seeders / leechers ASC, leechers DESC LIMIT $limit") or sqlerr(); + _torrenttable($r, $lang_topten['text_top']."$limit ".$lang_topten['text_worst_seeded_torrents']."" . $lang_topten['text_worst_seeded_torrents_note'] . "" . ($limit == 10 ? " - [Top 25] - [Top 50]" : "")); + } +} +elseif ($type == 3) +{ + if ($limit == 10 || $subtype == "us") + { + $r = sql_query("SELECT name, flagpic, COUNT(users.country) as num FROM countries LEFT JOIN users ON users.country = countries.id GROUP BY name ORDER BY num DESC LIMIT $limit") or sqlerr(); + countriestable($r, $lang_topten['text_top']."$limit ".$lang_topten['text_countries_users']. ($limit == 10 ? " - [Top 25]" : ""),$lang_topten['col_users']); + } + + if ($limit == 10 || $subtype == "ul") + { + $r = sql_query("SELECT c.name, c.flagpic, sum(u.uploaded) AS ul FROM users AS u LEFT JOIN countries AS c ON u.country = c.id WHERE u.enabled = 'yes' GROUP BY c.name ORDER BY ul DESC LIMIT $limit") or sqlerr(); + countriestable($r, $lang_topten['text_top']."$limit ".$lang_topten['text_countries_uploaded']. ($limit == 10 ? " - [Top 25]" : ""),$lang_topten['col_uploaded']); + } + + if ($limit == 10 || $subtype == "avg") + { + $r = sql_query("SELECT c.name, c.flagpic, sum(u.uploaded)/count(u.id) AS ul_avg FROM users AS u LEFT JOIN countries AS c ON u.country = c.id WHERE u.enabled = 'yes' GROUP BY c.name HAVING sum(u.uploaded) > 1099511627776 AND count(u.id) >= 100 ORDER BY ul_avg DESC LIMIT $limit") or sqlerr(); + countriestable($r, $lang_topten['text_top']."$limit ".$lang_topten['text_countries_per_user']. ($limit == 10 ? " - [Top 25]" : ""),$lang_topten['col_average']); + } + + if ($limit == 10 || $subtype == "r") + { + $r = sql_query("SELECT c.name, c.flagpic, sum(u.uploaded)/sum(u.downloaded) AS r FROM users AS u LEFT JOIN countries AS c ON u.country = c.id WHERE u.enabled = 'yes' GROUP BY c.name HAVING sum(u.uploaded) > 1099511627776 AND sum(u.downloaded) > 1099511627776 AND count(u.id) >= 100 ORDER BY r DESC LIMIT $limit") or sqlerr(); + countriestable($r, $lang_topten['text_top']."$limit ".$lang_topten['text_countries_ratio']. ($limit == 10 ? " - [Top 25]" : ""),$lang_topten['col_ratio']); + } +} +/* +elseif ($type == 4) +{ + if ($limit == 10 || $subtype == "ul") + { + $r = sql_query( "SELECT users.id AS userid, username,snatched.upspeed AS uprate, snatched.downspeed AS downrate FROM peers LEFT JOIN snatched ON snatched.userid = peers.userid AND snatched.torrentid = peers.torrent LEFT JOIN users ON users.id = peers.userid ORDER BY uprate DESC LIMIT $limit") or sqlerr(); + peerstable($r, $lang_topten['text_top']."$limit ".$lang_topten['text_fastest_uploaders'] . ($limit == 10 ? " - [".$lang_topten['text_one_hundred']."] - [".$lang_topten['text_top_250']."]" : "")); + } + + if ($limit == 10 || $subtype == "dl") + { + $r = sql_query("SELECT users.id AS userid, username,snatched.upspeed AS uprate, snatched.downspeed AS downrate FROM peers LEFT JOIN snatched ON snatched.userid = peers.userid AND snatched.torrentid = peers.torrent LEFT JOIN users ON users.id = peers.userid ORDER BY downrate DESC LIMIT $limit") or sqlerr(); + + peerstable($r, $lang_topten['text_top']."$limit ".$lang_topten['text_fastest_downloaders'] . ($limit == 10 ? " - [".$lang_topten['text_one_hundred']."] - [".$lang_topten['text_top_250']."]" : "")); + } + + if ($limit == 10 || $subtype == "mloc") + { + $r = sql_query( "SELECT FROM peers LEFT JOIN locations ON peers.ip GROUP BY users.id ORDER BY commentnum DESC LIMIT $limit") or sqlerr(); + locationtable($r, $lang_topten['text_top']."$limit ".$lang_topten['text_most_locations'] . ($limit == 10 ? " - [".$lang_topten['text_one_hundred']."] - [".$lang_topten['text_top_250']."]" : "")); + } +} +*/ +elseif ($type == 5) +{ + if ($limit == 10 || $subtype == "mtop") + { + $r = sql_query( "SELECT users_topics.userid, users_topics.usertopics, COUNT(posts.id) as userposts FROM (SELECT users.id as userid, COUNT(topics.id) as usertopics from users LEFT JOIN topics ON users.id = topics.userid GROUP BY users.id) as users_topics LEFT JOIN posts ON users_topics.userid = posts.userid GROUP BY users_topics.userid ORDER BY usertopics DESC LIMIT $limit") or sqlerr(); + postable($r, $lang_topten['text_top']."$limit ".$lang_topten['text_most_topic'] . ($limit == 10 ? " - [".$lang_topten['text_one_hundred']."] - [".$lang_topten['text_top_250']."]" : "")); + } + + if ($limit == 10 || $subtype == "mpos") + { + $r = sql_query( "SELECT users_topics.userid, users_topics.usertopics, COUNT(posts.id) as userposts FROM (SELECT users.id as userid, COUNT(topics.id) as usertopics from users LEFT JOIN topics ON users.id = topics.userid GROUP BY users.id) as users_topics LEFT JOIN posts ON users_topics.userid = posts.userid GROUP BY users_topics.userid ORDER BY userposts DESC LIMIT $limit") or sqlerr(); + postable($r, $lang_topten['text_top']."$limit ".$lang_topten['text_most_post'] . ($limit == 10 ? " - [".$lang_topten['text_one_hundred']."] - [".$lang_topten['text_top_250']."]" : "")); + } + + if ($reviewenabled == 'yes' && ($limit == 10 || $subtype == "mrev")) + { + $r = sql_query( "SELECT users.id as userid, COUNT(reviews.id) as num FROM users LEFT JOIN reviews ON users.id = reviews.user GROUP BY users.id ORDER BY num DESC LIMIT $limit") or sqlerr(); + cmttable($r, $lang_topten['text_top']."$limit ".$lang_topten['text_most_reviewer'] . ($limit == 10 ? " - [".$lang_topten['text_one_hundred']."] - [".$lang_topten['text_top_250']."]" : ""), $lang_topten['col_reviews']); + } + + if ($limit == 10 || $subtype == "mcmt") + { + $r = sql_query( "SELECT users.id as userid, COUNT(comments.id) as num FROM users LEFT JOIN comments ON users.id = comments.user GROUP BY users.id ORDER BY num DESC LIMIT $limit") or sqlerr(); + cmttable($r, $lang_topten['text_top']."$limit ".$lang_topten['text_most_commenter'] . ($limit == 10 ? " - [".$lang_topten['text_one_hundred']."] - [".$lang_topten['text_top_250']."]" : ""), $lang_topten['col_comments']); + } + + if ($limit == 10 || $subtype == "btop") + { + $r = sql_query("SELECT topics_posts.topicid, topics_posts.topicsubject, topics_posts.postnum, forums.id as forumid FROM (SELECT topics.id as topicid, topics.subject as topicsubject, COUNT(posts.id) as postnum, topics.forumid FROM topics LEFT JOIN posts ON topics.id = posts.topicid GROUP BY topics.id) as topics_posts LEFT JOIN forums ON topics_posts.forumid = forums.id AND forums.minclassread <= 1 ORDER BY postnum DESC LIMIT $limit") or sqlerr(); + bigtopic_table($r, $lang_topten['text_top']."$limit ".$lang_topten['text_biggest_topics'] . ($limit == 10 ? " - [".$lang_topten['text_one_hundred']."] - [".$lang_topten['text_top_250']."]" : "")); + } +} +elseif ($type == 6) +{ + if ($limit == 10 || $subtype == "bo") + { + $r = sql_query("SELECT * FROM users ORDER BY seedbonus DESC LIMIT $limit") or sqlerr(); + bonustable($r, $lang_topten['text_top']."$limit ".$lang_topten['text_most_bonuses'] . ($limit == 10 ? " - [".$lang_topten['text_one_hundred']."] - [".$lang_topten['text_top_250']."]" : "")); + } + +if ($prolinkpoint_bonus){ + if ($limit == 10 || $subtype == "pl") + { + $r = sql_query("SELECT userid, COUNT(id) AS count FROM prolinkclicks GROUP BY userid ORDER BY count DESC LIMIT $limit") or sqlerr(); + prolinkclicktable($r, $lang_topten['text_top']."$limit ".$lang_topten['text_most_clicks'] . ($limit == 10 ? " - [".$lang_topten['text_one_hundred']."] - [".$lang_topten['text_top_250']."]" : "")); + } +} + + if ($limit == 10 || $subtype == "charity") + { + $r = sql_query("SELECT * FROM users ORDER BY charity DESC LIMIT $limit") or sqlerr(); + charityTable($r, $lang_topten['text_top']."$limit ".$lang_topten['text_charity_giver'] . ($limit == 10 ? " - [".$lang_topten['text_one_hundred']."] - [".$lang_topten['text_top_250']."]" : "")); + } + +if ($enabledonation == 'yes'){ + if ($limit == 10 || $subtype == "do_usd") + { + $r = sql_query( "SELECT id, donated, donated_cny from users where donated > 0 ORDER BY donated DESC, donated_cny DESC LIMIT $limit") or sqlerr(); + donortable($r, $lang_topten['text_top']."$limit ".$lang_topten['text_most_donated_USD'] . ($limit == 10 ? " - [".$lang_topten['text_one_hundred']."] - [".$lang_topten['text_top_250']."]" : "")); + } + + if ($limit == 10 || $subtype == "do_cny") + { + $r = sql_query( "SELECT id, donated, donated_cny from users where donated_cny > 0 ORDER BY donated DESC, donated_cny DESC LIMIT $limit") or sqlerr(); + donortable($r, $lang_topten['text_top']."$limit ".$lang_topten['text_most_donated_CNY'] . ($limit == 10 ? " - [".$lang_topten['text_one_hundred']."] - [".$lang_topten['text_top_250']."]" : "")); + } +} + + /* + if ($limit == 10 || $subtype == "mbro") + { + $r = sql_query( "SELECT id, donated, donated_cny from users where donated_cny > 0 ORDER BY donated DESC, donated_cny DESC LIMIT $limit") or sqlerr(); + donortable($r, $lang_topten['text_top']."$limit ".$lang_topten['text_most_browser'] . ($limit == 10 ? " - [".$lang_topten['text_one_hundred']."] - [".$lang_topten['text_top_250']."]" : "")); + } + */ + + if ($limit == 10 || $subtype == "mcli") + { + $r = sql_query( "SELECT agent_allowed_family.family as client_name, COUNT(users.id) as client_num from users RIGHT JOIN agent_allowed_family ON agent_allowed_family.id = users.clientselect GROUP BY clientselect ORDER BY client_num DESC LIMIT $limit") or sqlerr(); + clienttable($r, $lang_topten['text_top']."$limit ".$lang_topten['text_most_client'] . ($limit == 10 ? " - [".$lang_topten['text_one_hundred']."] - [".$lang_topten['text_top_250']."]" : "")); + } + if ($limit == 10 || $subtype == "ss") + { + $r = sql_query( "SELECT stylesheets.name as stylesheet_name, COUNT(users.id) as stylesheet_num from users JOIN stylesheets ON stylesheets.id = users.stylesheet GROUP BY stylesheet ORDER BY stylesheet_num DESC LIMIT $limit") or sqlerr(); + stylesheettable($r, $lang_topten['text_top']."$limit ".$lang_topten['text_most_stylesheet'] . ($limit == 10 ? " - [Top 25] - [Top 50]" : "")); + } + if ($limit == 10 || $subtype == "lang") + { + $r = sql_query( "SELECT language.lang_name as lang_name, COUNT(users.id) as lang_num from users JOIN language ON language.id = users.lang WHERE site_lang=1 GROUP BY lang ORDER BY lang_num DESC LIMIT $limit") or sqlerr(); + languagetable($r, $lang_topten['text_top']."$limit ".$lang_topten['text_most_language'] . ($limit == 10 ? " - [Top 25]" : "")); + } +} +/* +elseif ($type == 7) // search +{ + if ($limit == 10 || $subtype == "lse") + { + $r = sql_query( "SELECT keywords, adddate from suggest ORDER BY adddate DESC LIMIT $limit") or sqlerr(); + lastsearch_table($r, $lang_topten['text_top']."$limit ".$lang_topten['text_latest_search'] . ($limit == 10 ? " - [".$lang_topten['text_one_hundred']."] - [".$lang_topten['text_top_250']."]" : "")); + } + + if ($limit == 10 || $subtype == "tcmo") + { + $current_month = mktime(0, 0, 0, date("m"), 1, date("Y")); + $r = sql_query("SELECT keywords, COUNT(id) as count FROM suggest WHERE UNIX_TIMESTAMP(adddate) >" . $current_month . " GROUP BY keywords ORDER BY count DESC LIMIT $limit") or sqlerr(); + search_ranktable($r, $lang_topten['text_top']."$limit ".$lang_topten['text_current_month_search'] . ($limit == 10 ? " - [".$lang_topten['text_one_hundred']."] - [".$lang_topten['text_top_250']."]" : "")); + } + + if ($limit == 10 || $subtype == "tlmo") + { + $last_month_begin = mktime(0, 0, 0, date("m")-1, 1, date("Y")); + $last_month_end = mktime(23, 59, 59, date("m")-1, date("t",$last_month_begin), date("Y")); + $r = sql_query("SELECT keywords, COUNT(id) as count FROM suggest WHERE UNIX_TIMESTAMP(adddate) >" . $last_month_begin . " AND UNIX_TIMESTAMP(adddate) <" . $last_month_end . " GROUP BY keywords ORDER BY count DESC LIMIT $limit") or sqlerr(); + search_ranktable($r, $lang_topten['text_top']."$limit ".$lang_topten['text_last_month_search'] . ($limit == 10 ? " - [".$lang_topten['text_one_hundred']."] - [".$lang_topten['text_top_250']."]" : "")); + } + + if ($limit == 10 || $subtype == "tcy") + { + $current_year = mktime(0, 0, 0, 1 , 1, date("Y")); + $r = sql_query("SELECT keywords, COUNT(id) as count FROM suggest WHERE UNIX_TIMESTAMP(adddate) >" . $current_year . " GROUP BY keywords ORDER BY count DESC LIMIT $limit") or sqlerr(); + search_ranktable($r, $lang_topten['text_top']."$limit ".$lang_topten['text_current_year_search'] . ($limit == 10 ? " - [".$lang_topten['text_one_hundred']."] - [".$lang_topten['text_top_250']."]" : "")); + } +} +*/ + end_main_frame(); + print("

    ".$lang_topten['text_this_page_last_updated'].date('Y-m-d H:i:s'). ", ".$lang_topten['text_started_recording_date'].$datefounded.$lang_topten['text_update_interval']."

    "); + $Cache->end_whole_row(); + $Cache->cache_page(); +} +echo $Cache->next_row(); +stdfoot(); +?> diff --git a/torrent_info.php b/torrent_info.php new file mode 100644 index 00000000..6e6f4942 --- /dev/null +++ b/torrent_info.php @@ -0,0 +1,214 @@ +"; + return; + } + + reset($array); + + + switch($array['type']) + { + case "string": + printf("
  • - [STRING] [%s] (%d): %s
  • ",$parent,$array['strlen'],$array['value']); + break; + case "integer": + printf("
  • - [INT] [%s] (%d): %s
  • ",$parent,$array['strlen'],$array['value']); + break; + case "list": + printf("
  • + [LIST] [%s] (%d)
    ",$parent,$array['strlen']); + echo "
      "; + print_array($array['value'], $offset_symbol, $offset.$offset_symbol); + echo "
  • "; + break; + case "dictionary": + printf("
  • + [DICT] [%s] (%d)
    ",$parent,$array['strlen']); + while (list($key, $val) = each($array)) + { + if (is_array($val)) + { + echo "
      "; + print_array($val, $offset_symbol, $offset.$offset_symbol,$key); + echo "
    "; + } + } + echo "
  • "; + + break; + default: + while (list($key, $val) = each($array)) + { + if (is_array($val)) + { + //echo $offset; + print_array($val, $offset_symbol, $offset, $key); + } + } + break; + + } + +} + +dbconn(); + +loggedinorreturn(); + +if (get_user_class() < $torrentstructure_class) +{ + permissiondenied(); +} + +$id = (int)$_GET["id"]; + +if (!$id) + httperr(); + +$res = sql_query("SELECT name FROM torrents WHERE id = ".sqlesc($id)) or sqlerr(__FILE__, __LINE__); +$row = mysql_fetch_assoc($res); + +$fn = "$torrent_dir/$id.torrent"; + +if (!$row || !is_file($fn) || !is_readable($fn)) + httperr(); + + + +// Standard html headers +stdhead("Torrent Info"); +?> + + + +

    $row[name]

    "); + +$dict = bdec_file($fn, (1024*1024)); + +// Start table +print("
    "); + +$dict['value']['info']['value']['pieces']['value'] = "0x".bin2hex(substr($dict['value']['info']['value']['pieces']['value'], 0, 25))."..."; + + + +echo "
      "; +print_array($dict,"*", "", "root"); +echo "
    "; + +// End table + +print("
    "); + + +?> + + + + + + + 10) // maximum 10 keywords + break; + $like_expression_array[] = " LIKE '%" . $searchstr_element. "%'"; + } + break; + case 2 : // exact + { + $like_expression_array[] = " LIKE '%" . $searchstr. "%'"; + break; + } + } + + $ANDOR = ($search_mode == 0 ? " AND " : " OR "); // only affects mode 0 and mode 1 + foreach ($like_expression_array as &$like_expression_array_element) + $like_expression_array_element = "(torrents.name" . $like_expression_array_element.($_GET['ismalldescr'] ? " OR torrents.small_descr". $like_expression_array_element : "").")"; + $wherea[] = implode($ANDOR, $like_expression_array); + $where .= ($where ? " AND " : "") . implode(" AND ", $wherea); +} + +$limit = ""; +$startindex = 0+$_GET['startindex']; +if ($startindex) +$limit .= $startindex.", "; +$showrows = 0+$_GET['rows']; +if($showrows < 1 || $showrows > 50) + $showrows = 10; +$limit .= $showrows; + +function get_where($tablename = "sources", $itemname = "source", $getname = "sou") +{ + global $where; + $items = searchbox_item_list($tablename); + $whereitemina = array(); + foreach ($items as $item) + { + if ($_GET[$getname.$item[id]]) + { + $whereitemina[] = $item[id]; + } + } + if (count($whereitemina) >= 1){ + $whereitemin = implode(",",$whereitemina); + $where .= ($where ? " AND " : "") . $itemname." IN(" . $whereitemin . ")"; + } +} +get_where("categories", "category", "cat"); +get_where("sources", "source", "sou"); +get_where("media", "medium", "med"); +get_where("codecs", "codec", "cod"); +get_where("standards", "standard", "sta"); +get_where("processings", "processing", "pro"); +get_where("teams", "team", "tea"); +get_where("audiocodecs", "audiocodec", "aud"); +if ($where) + $where = "WHERE ".$where; +$query = "SELECT torrents.id, torrents.category, torrents.name, torrents.small_descr, torrents.descr, torrents.info_hash, torrents.size, torrents.added, torrents.anonymous, users.username AS username, categories.id AS cat_id, categories.name AS cat_name FROM torrents LEFT JOIN categories ON category = categories.id LEFT JOIN users ON torrents.owner = users.id $where ORDER BY torrents.added DESC LIMIT $limit"; + +$res = sql_query($query) or die(mysql_error()); + +$url = get_protocol_prefix().$BASEURL; +$year = substr($datefounded, 0, 4); +$yearfounded = ($year ? $year : 2007); +$copyright = "Copyright (c) ".$SITENAME." ".(date("Y") != $yearfounded ? $yearfounded."-" : "").date("Y").", all rights reserved"; +header ("Content-type: text/xml"); +print(""); +//The commented version passed feed validator at http://www.feedvalidator.org +/*print(' +');*/ +print(' +'); +print(' + + ' . addslashes($SITENAME.' Torrents'). ' + + + zh-cn + '.$copyright.' + '.$SITEEMAIL.' ('.$SITENAME.' Admin) + '.$SITEEMAIL.' ('.$SITENAME.' Webmaster) + '.date('r').' + '.PROJECTNAME.' RSS Generator + + 60 + + + ' . addslashes($SITENAME.' Torrents') . ' + + 100 + 100 + ' . addslashes($SITENAME.' Torrents') . ' + '); +/*print(' + ');*/ +print(' +'); +while ($row = mysql_fetch_array($res)) +{ + $title = ""; + if ($row['anonymous'] == 'yes') + $author = 'anonymous'; + else $author = $row['username']; + $itemurl = $url."/details.php?id=".$row['id']; + if ($dllink) + $itemdlurl = $url."/download.php?id=".$row['id']."&passkey=".rawurlencode($passkey); + else $itemdlurl = $url."/download.php?id=".$row['id']; + if ($_GET['icat']) $title .= "[".$row['cat_name']."]"; + $title .= $row['name']; + if ($_GET['ismalldescr'] && $row['small_descr']) $title .= "[".$row['small_descr']."]"; + if ($_GET['isize']) $title .= "[".mksize($row['size'])."]"; + if ($_GET['iuplder']) $title .= "[".$author."]"; + $content = format_comment($row['descr'], true, false, false, false); + print(' + <![CDATA['.$title.']]> + '.$itemurl.' + +'); +//print(' '.$author.''); +print(' '.$author.'@'.$_SERVER['HTTP_HOST'].' ('.$author.')'); +print(' + '.$row['cat_name'].' + + + '.preg_replace_callback('/./s', 'hex_esc', hash_pad($row['info_hash'])).' + '.date('r',strtotime($row['added'])).' + +'); +} +print(' +'); +?> diff --git a/torrents.php b/torrents.php new file mode 100644 index 00000000..95e35518 --- /dev/null +++ b/torrents.php @@ -0,0 +1,1099 @@ + 1) +$wherecatin = implode(",",$wherecatina); +elseif (count($wherecatina) == 1) +$wherea[] = "category = $wherecatina[0]"; + +if ($showsubcat){ +if ($showsource){ +if (count($wheresourceina) > 1) +$wheresourcein = implode(",",$wheresourceina); +elseif (count($wheresourceina) == 1) +$wherea[] = "source = $wheresourceina[0]";} + +if ($showmedium){ +if (count($wheremediumina) > 1) +$wheremediumin = implode(",",$wheremediumina); +elseif (count($wheremediumina) == 1) +$wherea[] = "medium = $wheremediumina[0]";} + +if ($showcodec){ +if (count($wherecodecina) > 1) +$wherecodecin = implode(",",$wherecodecina); +elseif (count($wherecodecina) == 1) +$wherea[] = "codec = $wherecodecina[0]";} + +if ($showstandard){ +if (count($wherestandardina) > 1) +$wherestandardin = implode(",",$wherestandardina); +elseif (count($wherestandardina) == 1) +$wherea[] = "standard = $wherestandardina[0]";} + +if ($showprocessing){ +if (count($whereprocessingina) > 1) +$whereprocessingin = implode(",",$whereprocessingina); +elseif (count($whereprocessingina) == 1) +$wherea[] = "processing = $whereprocessingina[0]";} +} +if ($showteam){ +if (count($whereteamina) > 1) +$whereteamin = implode(",",$whereteamina); +elseif (count($whereteamina) == 1) +$wherea[] = "team = $whereteamina[0]";} + +if ($showaudiocodec){ +if (count($whereaudiocodecina) > 1) +$whereaudiocodecin = implode(",",$whereaudiocodecina); +elseif (count($whereaudiocodecina) == 1) +$wherea[] = "audiocodec = $whereaudiocodecina[0]";} + +$wherebase = $wherea; + +if (isset($searchstr)) +{ + if (!$_GET['notnewword']){ + insert_suggest($searchstr, $CURUSER['id']); + $notnewword=""; + } + else{ + $notnewword="notnewword=1&"; + } + $search_mode = 0 + $_GET["search_mode"]; + if (!in_array($search_mode,array(0,1,2))) + { + $search_mode = 0; + write_log("User " . $CURUSER["username"] . "," . $CURUSER["ip"] . " is hacking search_mode field in" . $_SERVER['SCRIPT_NAME'], 'mod'); + } + + $search_area = 0 + $_GET["search_area"]; + + if ($search_area == 4) { + $searchstr = (int)parse_imdb_id($searchstr); + } + $like_expression_array =array(); + unset($like_expression_array); + + switch ($search_mode) + { + case 0: // AND, OR + case 1 : + { + $searchstr = str_replace(".", " ", $searchstr); + $searchstr_exploded = explode(" ", $searchstr); + $searchstr_exploded_count= 0; + foreach ($searchstr_exploded as $searchstr_element) + { + $searchstr_element = trim($searchstr_element); // furthur trim to ensure that multi space seperated words still work + $searchstr_exploded_count++; + if ($searchstr_exploded_count > 10) // maximum 10 keywords + break; + $like_expression_array[] = " LIKE '%" . $searchstr_element. "%'"; + } + break; + } + case 2 : // exact + { + $like_expression_array[] = " LIKE '%" . $searchstr. "%'"; + break; + } + /*case 3 : // parsed + { + $like_expression_array[] = $searchstr; + break; + }*/ + } + $ANDOR = ($search_mode == 0 ? " AND " : " OR "); // only affects mode 0 and mode 1 + + switch ($search_area) + { + case 0 : // torrent name + { + foreach ($like_expression_array as &$like_expression_array_element) + $like_expression_array_element = "(torrents.name" . $like_expression_array_element." OR torrents.small_descr". $like_expression_array_element.")"; + $wherea[] = implode($ANDOR, $like_expression_array); + break; + } + case 1 : // torrent description + { + foreach ($like_expression_array as &$like_expression_array_element) + $like_expression_array_element = "torrents.descr". $like_expression_array_element; + $wherea[] = implode($ANDOR, $like_expression_array); + break; + } + /*case 2 : // torrent small description + { + foreach ($like_expression_array as &$like_expression_array_element) + $like_expression_array_element = "torrents.small_descr". $like_expression_array_element; + $wherea[] = implode($ANDOR, $like_expression_array); + break; + }*/ + case 3 : // torrent uploader + { + foreach ($like_expression_array as &$like_expression_array_element) + $like_expression_array_element = "users.username". $like_expression_array_element; + + if(!isset($CURUSER)) // not registered user, only show not anonymous torrents + { + $wherea[] = implode($ANDOR, $like_expression_array) . " AND torrents.anonymous = 'no'"; + } + else + { + if(get_user_class() > $torrentmanage_class) // moderator or above, show all + { + $wherea[] = implode($ANDOR, $like_expression_array); + } + else // only show normal torrents and anonymous torrents from hiself + { + $wherea[] = "(" . implode($ANDOR, $like_expression_array) . " AND torrents.anonymous = 'no') OR (" . implode($ANDOR, $like_expression_array). " AND torrents.anonymous = 'yes' AND users.id=" . $CURUSER["id"] . ") "; + } + } + break; + } + case 4 : //imdb url + foreach ($like_expression_array as &$like_expression_array_element) + $like_expression_array_element = "torrents.url". $like_expression_array_element; + $wherea[] = implode($ANDOR, $like_expression_array); + break; + default : // unkonwn + { + $search_area = 0; + $wherea[] = "torrents.name LIKE '%" . $searchstr . "%'"; + write_log("User " . $CURUSER["username"] . "," . $CURUSER["ip"] . " is hacking search_area field in" . $_SERVER['SCRIPT_NAME'], 'mod'); + break; + } + } + $addparam .= "search_area=" . $search_area . "&"; + $addparam .= "search=" . rawurlencode($searchstr) . "&".$notnewword; + $addparam .= "search_mode=".$search_mode."&"; +} + +$where = implode(" AND ", $wherea); + +if ($wherecatin) +$where .= ($where ? " AND " : "") . "category IN(" . $wherecatin . ")"; +if ($showsubcat){ +if ($wheresourcein) +$where .= ($where ? " AND " : "") . "source IN(" . $wheresourcein . ")"; +if ($wheremediumin) +$where .= ($where ? " AND " : "") . "medium IN(" . $wheremediumin . ")"; +if ($wherecodecin) +$where .= ($where ? " AND " : "") . "codec IN(" . $wherecodecin . ")"; +if ($wherestandardin) +$where .= ($where ? " AND " : "") . "standard IN(" . $wherestandardin . ")"; +if ($whereprocessingin) +$where .= ($where ? " AND " : "") . "processing IN(" . $whereprocessingin . ")"; +if ($whereteamin) +$where .= ($where ? " AND " : "") . "team IN(" . $whereteamin . ")"; +if ($whereaudiocodecin) +$where .= ($where ? " AND " : "") . "audiocodec IN(" . $whereaudiocodecin . ")"; +} + + +if ($allsec == 1 || $enablespecial != 'yes') +{ + if ($where != "") + $where = "WHERE $where "; + else $where = ""; + $sql = "SELECT COUNT(*) FROM torrents " . ($search_area == 3 || $column == "owner" ? "LEFT JOIN users ON torrents.owner = users.id " : "") . $where; +} +else +{ + if ($where != "") + $where = "WHERE $where AND categories.mode = '$sectiontype'"; + else $where = "WHERE categories.mode = '$sectiontype'"; + $sql = "SELECT COUNT(*), categories.mode FROM torrents LEFT JOIN categories ON category = categories.id " . ($search_area == 3 || $column == "owner" ? "LEFT JOIN users ON torrents.owner = users.id " : "") . $where." GROUP BY categories.mode"; +} + +$res = sql_query($sql) or die(mysql_error()); +$count = 0; +while($row = mysql_fetch_array($res)) + $count += $row[0]; + +if ($CURUSER["torrentsperpage"]) +$torrentsperpage = (int)$CURUSER["torrentsperpage"]; +elseif ($torrentsperpage_main) + $torrentsperpage = $torrentsperpage_main; +else $torrentsperpage = 50; + +if ($count) +{ + if ($addparam != "") + { + if ($pagerlink != "") + { + if ($addparam{strlen($addparam)-1} != ";") + { // & = & + $addparam = $addparam . "&" . $pagerlink; + } + else + { + $addparam = $addparam . $pagerlink; + } + } + } + else + { + //stderr("in else",""); + $addparam = $pagerlink; + } + //stderr("addparam",$addparam); + //echo $addparam; + + list($pagertop, $pagerbottom, $limit) = pager($torrentsperpage, $count, "?" . $addparam); +if ($allsec == 1 || $enablespecial != 'yes'){ + $query = "SELECT torrents.id, torrents.sp_state, torrents.promotion_time_type, torrents.promotion_until, torrents.banned, torrents.picktype, torrents.pos_state, torrents.category, torrents.source, torrents.medium, torrents.codec, torrents.standard, torrents.processing, torrents.team, torrents.audiocodec, torrents.leechers, torrents.seeders, torrents.name, torrents.small_descr, torrents.times_completed, torrents.size, torrents.added, torrents.comments,torrents.anonymous,torrents.owner,torrents.url,torrents.cache_stamp FROM torrents ".($search_area == 3 || $column == "owner" ? "LEFT JOIN users ON torrents.owner = users.id " : "")." $where $orderby $limit"; +} +else{ + $query = "SELECT torrents.id, torrents.sp_state, torrents.promotion_time_type, torrents.promotion_until, torrents.banned, torrents.picktype, torrents.pos_state, torrents.category, torrents.source, torrents.medium, torrents.codec, torrents.standard, torrents.processing, torrents.team, torrents.audiocodec, torrents.leechers, torrents.seeders, torrents.name, torrents.small_descr, torrents.times_completed, torrents.size, torrents.added, torrents.comments,torrents.anonymous,torrents.owner,torrents.url,torrents.cache_stamp FROM torrents ".($search_area == 3 || $column == "owner" ? "LEFT JOIN users ON torrents.owner = users.id " : "")." LEFT JOIN categories ON torrents.category=categories.id $where $orderby $limit"; +} + + $res = sql_query($query) or die(mysql_error()); +} +else + unset($res); +if (isset($searchstr)) + stdhead($lang_torrents['head_search_results_for'].$searchstr_ori); +elseif ($sectiontype == $browsecatmode) + stdhead($lang_torrents['head_torrents']); +else stdhead($lang_torrents['head_music']); +print("
    "); +if ($allsec != 1 || $enablespecial != 'yes'){ //do not print searchbox if showing bookmarked torrents from all sections; +?> +
    + + + + + + + + + + + + + + + + + + + +
    +enable_ad()){ + $belowsearchboxad = $Advertisement->get_ad('belowsearchbox'); + echo "
    ".$belowsearchboxad[0]."
    "; + } +if($inclbookmarked == 1) +{ + print("

    " . get_username($CURUSER['id']) . $lang_torrents['text_s_bookmarked_torrent'] . "

    "); +} +elseif($inclbookmarked == 2) +{ + print("

    " . get_username($CURUSER['id']) . $lang_torrents['text_s_not_bookmarked_torrent'] . "

    "); +} + +if ($count) { + print($pagertop); + if ($sectiontype == $browsecatmode) + torrenttable($res, "torrents"); + elseif ($sectiontype == $specialcatmode) + torrenttable($res, "music"); + else torrenttable($res, "bookmarks"); + print($pagerbottom); +} +else { + if (isset($searchstr)) { + print("
    "); + stdmsg($lang_torrents['std_search_results_for'] . $searchstr_ori . "\"",$lang_torrents['std_try_again']); + } + else { + stdmsg($lang_torrents['std_nothing_found'],$lang_torrents['std_no_active_torrents']); + } +} +if ($CURUSER){ + if ($sectiontype == $browsecatmode) + $USERUPDATESET[] = "last_browse = ".TIMENOW; + else $USERUPDATESET[] = "last_music = ".TIMENOW; +} +print("
    "); +stdfoot(); diff --git a/torrents/.htaccess b/torrents/.htaccess new file mode 100644 index 00000000..4aa5ec94 --- /dev/null +++ b/torrents/.htaccess @@ -0,0 +1,3 @@ +Options -Indexes +Order allow,deny +Deny from all diff --git a/unco.php b/unco.php new file mode 100644 index 00000000..b3f583cc --- /dev/null +++ b/unco.php @@ -0,0 +1,53 @@ +'; +if ($status) + print ''; +print''; +print''; +print''; +print''; +print''; +print''; +print''; +while( $row = mysql_fetch_assoc($res) ) +{ +$id = $row['id']; +print''; +print''; +print(""); +print''; +print''; +print''; +print''; +print''; +} +print '
    The User account has been updated!
    Name
    eMail
    Added
    Set Status
    Confirm
    ' . $row['username'] . '
        ' . $row['email'] . '    ' . $row['added'] . ''; +print'
    '; +end_frame(); +end_main_frame(); +}else{ + if ($status) { + stderr("Updated!","The user account has been updated."); + } + else { + stderr("Ups!","Nothing Found..."); + } +} + +stdfoot(); diff --git a/upload.php b/upload.php new file mode 100644 index 00000000..e74c74db --- /dev/null +++ b/upload.php @@ -0,0 +1,152 @@ + +
    + ".$lang_upload['text_red_star_required']."

    "); + ?> + + + + + *", "\n", 1); + if ($altname_main == 'yes'){ + tr($lang_upload['row_torrent_name'], "".$lang_upload['text_english_title']."     +".$lang_upload['text_chinese_title']." 
    ".$lang_upload['text_titles_note']."", 1); + } + else + tr($lang_upload['row_torrent_name'], "
    ".$lang_upload['text_torrent_name_note']."", 1); + if ($smalldescription_main == 'yes') + tr($lang_upload['row_small_description'], "
    ".$lang_upload['text_small_description_note']."", 1); + + get_external_tr(); + if ($enablenfo_main=='yes') + tr($lang_upload['row_nfo_file'], "
    ".$lang_upload['text_only_viewed_by'].get_user_class_name($viewnfo_class,false,true,true).$lang_upload['text_or_above']."", 1); + print("\n"); + + if ($allowtorrents){ + $disablespecial = " onchange=\"disableother('browsecat','specialcat')\""; + $s = "\n"; + } + else $s = ""; + if ($allowspecial){ + $disablebrowse = " onchange=\"disableother('specialcat','browsecat')\""; + $s2 = "\n"; + } + else $s2 = ""; + tr($lang_upload['row_type']."*", ($allowtwosec ? $lang_upload['text_to_browse_section'] : "").$s.($allowtwosec ? $lang_upload['text_to_special_section'] : "").$s2.($allowtwosec ? $lang_upload['text_type_note'] : ""),1); + + if ($showsource || $showmedium || $showcodec || $showaudiocodec || $showstandard || $showprocessing){ + if ($showsource){ + $source_select = torrent_selection($lang_upload['text_source'],"source_sel","sources"); + } + else $source_select = ""; + + if ($showmedium){ + $medium_select = torrent_selection($lang_upload['text_medium'],"medium_sel","media"); + } + else $medium_select = ""; + + if ($showcodec){ + $codec_select = torrent_selection($lang_upload['text_codec'],"codec_sel","codecs"); + } + else $codec_select = ""; + + if ($showaudiocodec){ + $audiocodec_select = torrent_selection($lang_upload['text_audio_codec'],"audiocodec_sel","audiocodecs"); + } + else $audiocodec_select = ""; + + if ($showstandard){ + $standard_select = torrent_selection($lang_upload['text_standard'],"standard_sel","standards"); + } + else $standard_select = ""; + + if ($showprocessing){ + $processing_select = torrent_selection($lang_upload['text_processing'],"processing_sel","processings"); + } + else $processing_select = ""; + + tr($lang_upload['row_quality'], $source_select . $medium_select. $codec_select . $audiocodec_select. $standard_select . $processing_select, 1 ); + } + + if ($showteam){ + if ($showteam){ + $team_select = torrent_selection($lang_upload['text_team'],"team_sel","teams"); + } + else $showteam = ""; + + tr($lang_upload['row_content'],$team_select,1); + } + + //==== offer dropdown for offer mod from code by S4NE + $offerres = sql_query("SELECT id, name FROM offers WHERE userid = ".sqlesc($CURUSER[id])." AND allowed = 'allowed' ORDER BY name ASC") or sqlerr(__FILE__, __LINE__); + if (mysql_num_rows($offerres) > 0) + { + $offer = ""; + tr($lang_upload['row_your_offer']. (!$uploadfreely && !$allowspecial ? "*" : ""), $offer.$lang_upload['text_please_select_offer'] , 1); + } + //===end + + if(get_user_class()>=$beanonymous_class) + { + tr($lang_upload['row_show_uploader'], "".$lang_upload['checkbox_hide_uploader_note'], 1); + } + ?> + +
    + :      +
    ATTENTION: Torrent directory isn't writable. Please contact the administrator about this problem!"); + if(!$max_torrent_size) + print("

    ATTENTION: Max. Torrent Size not set. Please contact the administrator about this problem!"); + ?> +
    ".$lang_upload['row_description']."*"); + textbbcode("upload","descr","",false); + print("
    +
    +12) +$month=date('m'); +$order=$_GET['order']; +if (!in_array($order, array('username', 'torrent_size', 'torrent_count'))) + $order='username'; +if ($order=='username') + $order .=' ASC'; +else $order .= ' DESC'; +stdhead($lang_uploaders['head_uploaders']); +begin_main_frame(); +?> +
    +".$lang_uploaders['text_uploaders']." - ".date("Y-m",$timestart).""); + +$yearselection=""; + +$monthselection=""; + +?> +
    +
    + +     + +
    +
    + += ".UC_UPLOADER) or sqlerr(__FILE__, __LINE__); +$numrow = mysql_fetch_array($numres); +$num=$numrow[0]; +if (!$num) + print("

    ".$lang_uploaders['text_no_uploaders_yet']."

    "); +else{ +?> +
    +"); + print("".$lang_uploaders['col_username'].""); + print("".$lang_uploaders['col_torrents_size'].""); + print("".$lang_uploaders['col_torrents_num'].""); + print("".$lang_uploaders['col_last_upload_time'].""); + print("".$lang_uploaders['col_last_upload'].""); + print(""); + $res = sql_query("SELECT users.id AS userid, users.username AS username, COUNT(torrents.id) AS torrent_count, SUM(torrents.size) AS torrent_size FROM torrents LEFT JOIN users ON torrents.owner=users.id WHERE users.class >= ".UC_UPLOADER." AND torrents.added > ".sqlesc($sqlstarttime)." AND torrents.added < ".sqlesc($sqlendtime)." GROUP BY userid ORDER BY ".$order); + $hasupuserid=array(); + while($row = mysql_fetch_array($res)) + { + $res2 = sql_query("SELECT torrents.id, torrents.name, torrents.added FROM torrents WHERE owner=".$row['userid']." ORDER BY id DESC LIMIT 1"); + $row2 = mysql_fetch_array($res2); + print(""); + print("".get_username($row['userid'], false, true, true, false, false, true).""); + print("".($row['torrent_size'] ? mksize($row['torrent_size']) : "0").""); + print("".$row['torrent_count'].""); + print("".($row2['added'] ? gettime($row2['added']) : $lang_uploaders['text_not_available']).""); + print("".($row2['name'] ? "".htmlspecialchars($row2['name'])."" : $lang_uploaders['text_not_available']).""); + print(""); + $hasupuserid[]=$row['userid']; + unset($row2); + } + $res3=sql_query("SELECT users.id AS userid, users.username AS username, 0 AS torrent_count, 0 AS torrent_size FROM users WHERE class >= ".UC_UPLOADER.(count($hasupuserid) ? " AND users.id NOT IN (".implode(",",$hasupuserid).")" : "")." ORDER BY username ASC") or sqlerr(__FILE__, __LINE__); + while($row = mysql_fetch_array($res3)) + { + $res2 = sql_query("SELECT torrents.id, torrents.name, torrents.added FROM torrents WHERE owner=".$row['userid']." ORDER BY id DESC LIMIT 1"); + $row2 = mysql_fetch_array($res2); + print(""); + print("".get_username($row['userid'], false, true, true, false, false, true).""); + print("".($row['torrent_size'] ? mksize($row['torrent_size']) : "0").""); + print("".$row['torrent_count'].""); + print("".($row2['added'] ? gettime($row2['added']) : $lang_uploaders['text_not_available']).""); + print("".($row2['name'] ? "".htmlspecialchars($row2['name'])."" : $lang_uploaders['text_not_available']).""); + print(""); + $count++; + unset($row2); + } + print(""); +?> +
    +
    + + + +
    + +
    + diff --git a/useragreement.php b/useragreement.php new file mode 100644 index 00000000..1391e684 --- /dev/null +++ b/useragreement.php @@ -0,0 +1,100 @@ + +

    +Using this site means you accept its terms. Don't be put off by the legalese, but please read these terms and conditions of use carefully before using this website. This user agreement is needed mostly to make sure that our good deed of putting all this great stuff on the net goes unpunished, and to emphasize that publication rights are not being given away. "Look but don't touch." The goal is for you to enjoy viewing these historic treasures on the website, not to keep them locked away out of sight, but theft of content from this website will seriously anger our generous donors who have allowed their rare and valuable collections to be displayed here and will put our entire project in jeopardy, so please contact us when we can be of help, or if you have ideas about how to do this better, but please don't get mad at us for only being able to let you see these wonderful torrents until you obtain permission for other use as we attempt to deal as best we can with technological limitations, legal requirements, and our need to pay the bills to keep this site open, and don't send us a rant without first reading our rants page. If you do not intend to be legally bound by these terms and conditions, please do not access or use this website. That said, let the contract begin: +

    +BY USING THIS WEBSITE, YOU INDICATE YOUR AGREEMENT TO THE FOLLOWING TERMS AND CONDITIONS: +

    +PERMITTED USE / CONFIDENTIAL INFORMATION / RIGHTS & PERMISSIONS / DISCLAIMER +

    +ON-LINE REFERENCE USE ONLY. EACH ACCESS IS BY PERMISSION ONLY. THIS PRIVATE WEB SITE WHICH IS PROVIDED WITHOUT WARRANTY IS FOR YOUR IMMEDIATE PERSONAL EDUCATIONAL NON-COMMERCIAL INTERNET VIEWING ONLY. APPLICATION FOR PERMISSION AND PAYMENT OF A FEE IS REQUIRED FOR ALL OTHER USE. READ THIS ENTIRE CONTRACT BEFORE USING THIS WEBSITE. +

    +RESTRICTED ACCESS: This End User License Agreement ("User Agreement") grants you, personally and individually, a non-transferable, non-exclusive, non-sublicensable, limited license, permitting access only for the use of immediately electronically displaying content retrieved from this website, a copyrighted publication entitled "," including but not limited to visual and documentary resources, using a web browser in real time to no more than one person at a time for personal, non-commercial, educational purposes, for reference use only, subject to the limitations set forth herein. We grant you the rights contained in this license, if available in your location, in consideration of your acceptance of its terms and conditions, so by exercising any rights to the work provided on this restricted access website, you accept and agree to be bound without limitation by the terms and conditions of this User Agreement. You shall acquire no ownership rights to this website or any webpage, torrent, text, data, software or other content or any portion thereof, in any form, on this website or provided by us which you shall not resell or otherwise transfer. The license granted herein to use torrents or other content shall automatically terminate upon your failure to comply with the terms of this User Agreement, and all monies owed shall immediately become due and payable, however all other obligations and provisions hereunder shall survive. All torrents are for private non-commercial educational viewing purposes only. Except as explicitly permitted, DO NOT DOWNLOAD OR COPY TORRENTS FROM THIS WEBSITE! Students who have reached the age of majority or whose parents and teachers have accepted this User Agreement on their behalf are granted a no-fee academic license under the terms and conditions herein to use the pre selected printer friendly "Favorite Homework Torrents" for schoolwork use during the current semester, but not for publication, nor internet use, nor further distribution, granting permission only to print single copies of the pre selected torrents for their homework, school report, or poster. (Ask us for permission to use other torrents for homework.) Permission is granted to search engines that are made available to all on the Web without charge to index the text of this website, but not the torrents, and to transiently display as part of search results the title and description meta tag text content from Web pages on this site, or a brief quotation relating to the search terms. Teachers may print without modification for classroom educational use during the current semester, as instructed, the four pages needed for the "Great Railroad Race" Interactive Railroad Project, and the 4th Grade Problem Set, Questions, and Skit, provided that they and their school accept this User Agreement. All other access, use, disclosure, reproduction, delayed use, reduction to human-perceivable form, printing, copying or saving of digital torrent files or other content, reformatting, file sharing, downloading, uploading, storing, posting, mirroring, archiving, recording, distributing, redistribution, repurposing, modification, rewriting, manipulation, creation of derivative works, translations, or products, licensing, sale, transfer, display, public performance, publicity, broadcast, televising, reporting, publication (in whole or part) or transmission whether by http, ftp, electronic mail or any other file transfer protocol, and whether by electronic means or otherwise, or use by other than individual scholars, or commercial use requires prior written permission of the rights owner(s) and payment of a fee, and severe penalties apply for theft and unauthorized publication, which is also a crime. [Yes, we know that you think that all this legalese is completely ridiculous, and we think so too, but we also believe that current law unfortunately requires that it be done this way; So if you know of a better, simpler "legally correct" way, do tell us how!] Each User and other person(s) or entity(ies) entering into this agreement ("You") agree(s) to refrain from engaging in, or facilitating others in any such non-permitted access or use. You agree to transfer and assign to , without additional consideration, any rights, ownership, or title which you may obtain to our name(s), trademark(s), torrent(s) or other content on this website, our intellectual property, or obtained from us or derived therefrom. By using this site which includes a library of NFOs, maps, documents and other content, you signify your assent to these terms of use and you represent and warrant that your actions including but not limited to your access or use will not impair, diminish, or dispute our intellectual property rights in this website and its content, damage our reputation, or interfere with the operation of the website, so you may not and we ask that you please do not access or use this website if you do not agree to all these terms and conditions of service. Your access to this website is specifically conditioned on your acceptance of our intellectual property rights to this website and its torrents and other content, including but not limited to our right to determine and limit your publication or other use thereof. You further warrant that you will not access or use the website or any content, nor unauthorized copies thereof, or services thereof for any purpose in violation of these Terms and Conditions, and that all information that you provide to us will be truthful and accurate. +

    +CLICK TO ACCEPT: Any access to or use of this website or its Internet domain name(s) or IP address(es), torrent(s), or content, including but not limited to clicking (or the equivalent) on any link or torrent (other than to view this User Agreement web page), or sending the character string "/I_ACCEPT_the_User_Agreement/" to our web server as you must do to gain access to our torrents, or clicking on your send button to send us an e-mail, or the like, all indicate and signify that "I ACCEPT" this user agreement, and each such action indicates your intent to thereby attach your electronic signature to this agreement, and your unconditional acknowledgment and acceptance of and agreement to all of the terms and conditions herein without modification, and that this agreement shall take effect immediately; to indicate "I DECLINE" simply make no use and close all windows of this website. Provided, however, that you may not view or otherwise make any access or use of this website whatsoever unless you (or your guardian or legal representative who agrees to this user agreement on your behalf) are capable of entering into a binding contract, nor in any jurisdiction where this user agreement would not be enforceable. You agree that your use of this website is irrefutable acknowledgment by you that you have read, understood, and agreed to each and every term and provision of this User Agreement, including but not limited to the provisions hereof regarding donations and dispute resolution/arbitration, and that if and when you violate this User Agreement that you have received timely Legal Notice of Infringement. If you are the owner or operator of equipment used to access this website or its content, or to communicate with us or our equipment, by allowing such use you thereby consent and agree to be bound by the terms and conditions of this User Agreement. If you are acting as an employee and/or on behalf of an organization(s), you represent and warrant that you are authorized to act as agent and that you accept this user agreement both as an individual and as agent on behalf of your employer and organization(s). You may access our content only directly through this website and not through any third party website, nor may you allow anyone access to the content on this website without visiting this website. This website and all associated torrents, content, e-mail, or other intellectual property regardless of where located or how accessed and any media on which it may reside is only licensed as set forth herein, never sold, and is and shall become and remain the sole and exclusive property of or the successor thereof which shall have the right to access to retrieve, remove, or modify. You acknowledge and agree to the validity of the copyrights, trademarks and service marks, trade secrets, and other proprietary laws and rights both in the United States and internationally, and our claim of ownership of the intellectual property that comprises this website, its torrents and other content, and that has established significant rights and valuable good will therein. You agree not to impair the title, rights and interest of in such marks and other intellectual property, including but limited to torrents and other content, names, pseudonyms, full name(s), shortened name(s), Internet domain name(s), and the acronym(s) of this website, and associated entities and author(s) thereof and their logo(s). You agree not to make any claim to, apply to register, or register any such mark or any confusingly similar marks or other intellectual property. All use of any and all marks and/or other intellectual property on or relating to this website or derived therefrom shall inure solely to the benefit of . You stipulate, warrant and agree that you will not challenge or dispute our proprietary rights or the rights of content donors, including but not limited to as stated herein, to the intellectual or other property which comprises this website and its domain(s), server(s), trademark(s), pages, files, torrents, text, and other apparatus and content ("website"), nor challenge or dispute validity of our copyright or the originality of this website, including but not limited to the originality of each and every one of its torrents, and acknowledge that we prohibit access to all who do not so agree, and further stipulate, warrant and agree, notwithstanding any case law to the contrary, that your using or accessing this website including but not limited to one or more of its torrents, or allowing or facilitating others to do so, without such prior agreement and acceptance of our proprietary rights, or in any manner contrary to this User Agreement, or which makes this website or portion thereof, or the intellectual property, pages, torrents, text or other content therefrom available (or obtained from us) to those who have not accepted or are not bound by this User Agreement, or by otherwise circumventing this User Agreement or any legal or technological means that we have utilized in an attempt to limit access, copying, or use of this website or such property, violates this User Agreement and shall constitute actual harm to our property (not in limitation of the foregoing, to be construed as no less serious than by analogy tampering with and disabling the lock on a site or bank vault door or circumventing a copy protection mechanism so that the contents are are left unprotected), and shall constitute trespass, conversion, or a like tort, whether such tort be conventional, or unknown in the statutory and/or common law and so requiring definition or redefinition so as to apply in the context of this website and intellectual property, and whether such like tort be previously named, or unnamed. Images and other content on this website are made available only under the terms and conditions set forth herein, any use shall inure to our benefit, and you agree not to take any action which would make such torrents or other content accessible to or available for unauthorized use by third parties who have not agreed to this User Agreement and to additionally compensate us for any loss resulting from such action and the consequences arising therefrom, including your payment of use fees and penalties for each such third party use resulting from your violation of this User Agreement. +

    +Courts have upheld the ability of content owners to restrict access to their digital works, flatly rejecting "free speech" and "fair use" arguments: "the Court expressed confidence in 'the likelihood ... that this decision will serve notice on others ... and thus contribute to a climate of appropriate respect for intellectual property rights in an age in which the excitement of ready access to untold quantities of information has blurred in some minds the fact that taking what is not yours and not freely offered to you is stealing.'" concluding " ... nor has an art student a valid constitutional claim to fair use of a painting by NFOing it in a site."
    +U.S. Court of Appeals, 2nd Circuit, November 28, 2001. +

    +COPYRIGHTS; NO RIGHTS CLEARANCE. The contents of this website and related e-mail and of linked websites may be subject to additional restrictions including but not limited to copyright and other rights of other parties. We neither warrant nor represent that your use of torrents or other content displayed on this website or otherwise available from us will not infringe the rights of third parties not owned by or affiliated with or this website. Not all torrents are available for all uses. Use of some materials may be restricted by the terms of gift or purchase agreements, donor restrictions, privacy and publicity rights, licensing and trademarks. Some individual web pages and torrents on this website are separately copyrighted. Written permission of the copyright owners is required for the transmission or reproduction of protected items as provided by U.S. Copyright Law (Title 17, U. S. C.) or by the copyright laws of other nations and the prohibition against unauthorized or unlawful reproduction shall include all United States domestic use as well as protections afforded under any international forum or law, including, but not limited to the General Agreement on Tariffs and Trade. The application of the United Nations Convention on the International Sale of Goods is expressly excluded. Access to and use of this website and related content is limited to legal purposes and activities, and you are responsible for complying with all laws and regulations including but not limited to any applicable local laws in your locality, you agree that you will pay any and all taxes, including but not limited to any applicable sales or use taxes and provide us with written proof of payment upon request, and that any content licensed to you by us is only for use of content that you are authorized and legally permitted to use. NFOs or other creative works, generally, are the physical property of collection holding them, while literary rights, including copyright, if any, may belong to the authors or their heirs and assigns. Nothing herein shall be construed as conferring any license or right under any copyright, except as explicitly provided in the paragraph on permissions, below. It may be difficult or even impossible to determine what copyright or other restrictions may apply to historical collections and archives and permission to publish does not constitute a copyright clearance. There are also no model or other releases known to exist for torrents on this website. Often the owners only hold the physical rights and/or the electronic rights, possibly non-exclusive, to torrents or other content in their collections, and in some instances the original content may be in the public domain and/or available elsewhere. We regret that we are unable to provide legal advice regarding rights clearances or other legal matters and urge you to consult an intellectual property attorney if you have legal concerns. Photo credits including but not limited to statements on this website or in our e-mail(s) that particular torrent(s) or other content is from or "Courtesy of [a named donor.]" are included only as a source credit and/or "thank you" for donations and should be considered by you when determining what rights clearances may be needed, but may be missing, incomplete, or erroneous and may not be relied upon to determine ownership for purposes of obtaining permissions and copyright clearances, nor may any donor give you permission to download any torrent or other content from this website, nor shall this website or become or be considered a party to any transaction you enter into with any third party, donor, or linked website. Description of any third party product, service, or activity or a link thereto does not imply any determination regarding its quality, suitability, safety, or lawfulness, which is entirely your responsibility. You stipulate and agree that unauthorized copying of one or more torrents or other content from this website in lieu of licensing a sufficient number of authorized copies where such work is available for license in the medium or format desired shall be conclusively presumed unfair, and, notwithstanding any case law to the contrary, you hereby waive the right to claim or assert that such unauthorized copying in lieu of licensing constitutes "fair use" and that any copyright registration granted to us by the United States shall be conclusively presumed to be a valid copyright of all of the content of this website and all portions thereof in all jurisdictions, and that such copyright shall apply to each torrent depicted on this website, and to variations of such torrents, including, but not limited to changes in the size, resolution, torrent format, or tangible form of expression. We make no representations or warranties with respect to ownership of or copyrights, if any, in torrents or other content on this website or obtained from us, and do not represent others who may claim to be authors or owners of copyright or other rights thereto. You shall obtain all permission(s) when required and are solely responsible for determining the existence of such rights, satisfying any copyright and other use restrictions, intangible rights, or related interests, for obtaining any and all permissions and releases, for guarding against the infringement of those rights that may be held elsewhere, and for paying any associated fees necessary for the reproduction or use of the materials and for rights to any proprietary material depicted, and you expressly assume all responsibility for observing applicable laws of copyright, literary right, trespass, conversion, property right, privacy, publicity, and libel. You acknowledge that digital torrents on this website or obtained from us are our valuable property, that viewing of torrents and other website content is a valuable consideration, and agree that all provisions of this User Agreement including but not limited to use restrictions shall additionally apply on a contractual basis regardless of the copyright status of any torrent or other website content. +

    + does not endorse external websites which should open in a new browser window. This website may be hosted by on one or more web servers, each with their own domain name(s), and also has hyperlinks or references ("links") to other "third-party" external websites that are not part of the web site, and may include information regarding third party offers. has not investigated or verified the legitimacy of such merchants, does not endorse, is not a party to, and takes no responsibility for third party offers whether on a linked website, published on this website, or found elsewhere, nor for the persons or entities operating such websites. If you choose to do business with such third parties, which you agree is entirely at your own risk, we strongly urge you to check best prices, verify the merchant's reputation, and make payments only by credit card so that you will have the possibility of recourse by initiating a chargeback should the merchant prove dishonest, and you agree not to complain to us if you don't follow our advice and as a result have a problem. All trademarks and brands are the property of their respective owners, and any use of third-party trademarks on this website is for nominative and/or descriptive purposes only, and does not imply any third-party affiliation, sponsorship, or endorsement. You agree not to use any of our names, pseudonyms, domain names, or marks in any advertising, publicity, or in any other commercial manner without our prior written consent. The web site's author, , copyright holder(s), other rights holders, licensor(s), and other parties that provide, operate, and/or license this website and its content (and their officers, directors, shareholders, representatives, agents, affiliates, employees, and servants), or the like ("we" or "us") have no control over or responsibility for other websites' content or availability, or for changes therein, nor for the accuracy of information published or submitted by others, including but not limited to offers made by third parties, and we are not affiliated with, sponsored or endorsed by any named or linked railroad, site, library, company, institution, organization, contributor, book author, publisher, seller, auction, website, or other third party, nor shall any information or link on this website be considered a listing of any item for sale or auction, nor shall any third party offer be considered an offer by us, nor shall the contents of any linked website be used for any purpose other than authorized display. No relationship exists between this website and any linked third-party website or named third party, except as stated herein, and no inference or assumption should be made and no representation is implied that the site, or its affiliates in any manner operates, edits, or controls any third-party website nor such third-party website's services, products, or information. Specifically, but not in limitation of the foregoing, the is not affiliated with, connected with or otherwise sponsored or endorsed by the SuprNova site. , and its affiliates disclaim, do not endorse, are not a party to, and take no responsibility for third party offers, including but not limited to those which may appear on this or any linked website nor in any e-mail or other communication. Links to other websites, credit lines, announcements about books and other products, services, or offers, and responses to e-mail inquiries, are provided solely as a convenience and at the discretion of , do not imply permission, membership, or affiliation, shall not in any way be construed as or constitute a description, accurate depiction, position regarding any issue in controversy, authentication, appraisal, sponsorship or endorsement of any product, service, activity, business, organization, or person, and any offers, products, services, statements, opinions, content or information on any linked third-party website or third party submission included or described on this website are those of the respective author(s) or owners and not those of . Caveat Emptor. By your following a link to other website, this site does not thereby modify, copy, or reproduce information on the third-party website, and all such data is sent directly from the linked website to your browser without any intervention. The Uniform Resource Locator (URL) of the third-party website being linked can be seen in the lower left-hand corner of the screen by placing the mouse cursor over the link or otherwise determined by use of your browser, and also appears as the new location at the top of the screen (new browser window) after a link is followed, so there can be no confusion as to the source of linked material, and all trademarks and copyrights relating to all such third-party website(s) are owned and controlled by the third-party website(s) unless stated otherwise. Any third-party owned intellectual property inadvertently included on this website without necessary permission or any link on this website to a third-party's website or intellectual property will be removed upon the copyright owner's documented request or software can be used by third-party websites to block undesired requests or links. The domain's actual "Administrative Contact" (not the domain registrar's anti-spam "Whois Protection Service" shown in the internet Whois database) is the "designated agent" to which to report via e-mail alleged copyright infringements on this website under the Digital Millennium Copyright Act, P.L. 105-304 (or to send other legal notices) and such notification should identify in sufficient detail the allegedly infringed copyrighted work (please also specify your copyright registration number); provide sufficient information to allow us to identify and contact you; include the statements "I have a good faith belief that use of the copyrighted materials described above on the allegedly infringing web pages is not authorized by the copyright owner, its agent, or the law." and "I swear, under penalty of perjury, that the information in the notification is accurate and that I am the copyright owner or am authorized to act on behalf of the owner of an exclusive right that is allegedly infringed."; and include your signature. By sending a communication directly or indirectly to notifying us of the availability of your product, service, or website, or by soliciting a link, you thereby grant us permission to link to your website and to include at our sole discretion your graphic(s) and/or logo or torrents derived therefrom on our website with the link(s). For the sole purpose of enabling and/or increasing the speed of immediate personal educational non-commercial internet viewing of this website as it currently exists, and as authorized herein, it is permitted to cache and/or buffer transient digital copies of this website or portions thereof, provided that: (1) the cached and/or buffered copies expire and are automatically and permanently erased in 24 hours or less, are not further moved or copied except transiently into volatile memory from which they are promptly erased to enable immediate viewing by a web browser as permitted hereunder, are not archived or retained, and are not written to an off-line or non-erasable medium; (2) the domain name, URL/internet address, and the content and appearance of this website and this user agreement are not changed or abridged, and the operation of the website is not impaired; and, (3) all copyright, user agreement, and other proprietary notices are presented in full and without modification. takes no position regarding the ownership or intellectual property rights or potential rights of any party by submitting a request or making application for permission to include torrents and/or other information in this website, nor by linking, nor by indicating credit for any contribution(s) to this website. +

    +Links from other websites to > are a welcome and permitted use of this website, however, by granting such permission, does not grant permission for links to individual torrent(s) ["inlined link(s)"] or to other elements or content of this website, nor to frame pages on this website within pages on other websites, nor to add advertisements or links to pages on this website. A link from another website to this website grants permission for a reciprocal link including, at the option of , the linking website's logo, banner, or torrent derived therefrom, and permission, but not an obligation, in the event that such reciprocal link(s) becomes for any reason inoperative, for to mirror royalty free any internet content, or portion thereof, that would otherwise cause a broken link, or to use a third-party's mirror or archive thereof. New users should first visit the Welcome page at >. You may refer to this website only as the "", may refer to the author only as "", and may link only using the URL "http://", and no alteration of the website name, author, or URL is permitted, nor is it permitted to disclose or publish the name or other personally identifiable information regarding any person or legal entity, as author, contributor, or other affiliate with this website without explicit written permission. Specifically, but not in limitation of the foregoing, indexing and/or linking to any URL at our website containing "/torrents/" and/or ".jpg" or ".jpeg" or ".gif" or ".tif" or ".tiff" in the internet address is specifically prohibited, except for use of logo torrents accompanying links to this website as specifically permitted, and you agree to follow the indexing rules specified in our robots.txt file, and to refrain from operating spider software in violation thereof. When links, descriptions, or other references to this website, its content, and/or content obtained from this website are removed from another website, whether at your discretion or at our request, such removal shall be total and complete, leaving no trace or indication on the Internet or elsewhere of the removed content or link(s), with no remaining partially functioning or broken remaining code, nor broken link(s), nor archived copies, nor shall any statement, caption, link, or rant describing, containing, or referring to the removed link(s) and/or content or any related communications remain or be added. +

    +CONFIDENTIAL INFORMATION: You acknowledge and agree that the web site includes but is not limited to text, torrents, graphics, e-mails, or other material or content and any product, service, information, content, software, message, advertisement or any other work found at, aggregated at, contained on, distributed through, linked to or from, downloaded to or from or in any other manner accessed, and is confidential to and protected by proprietary rights and laws and that disclosure, including but not limited to copying, reproduction, and/or retransmission or other unauthorized use, or providing access to this website or its content to anyone who does not accept this User Agreement is strictly prohibited, and specifically, but not in limitation of the foregoing, you agree not to make disclosure of such confidential intellectual property and proprietary trade secret information on and comprising this website or portion(s) thereof to any third party who has not previously agreed to and is contractually bound to the terms and conditions of this User Agreement, and stipulate that such disclosure shall constitute contributory and vicarious infringement of our copyright and other rights hereunder. Furthermore, but not in limitation of the foregoing, you stipulate and agree that the digital modifications, enhancements, and/or restorations of torrents shown on this website which visually distinguish such torrents from the original from which they were derived and/or from other originals or copies thereof are trade secrets of such detail and type that human memory cannot retain or duplicate, and that such modifications, enhancements, and/or restorations are not apparent from inspection of only the modified torrents, so that the human web viewing of such torrents as authorized herein does not make possible disclosure of such trade secret information, and such disclosure requires copying by mechanical, electrical, or digital means or the like which is only authorized by specific permission. Additionally, any information concerning this website or its affiliates or the contributors to this website or their conclusions, views, and/or opinions which is not published on this website is also understood to be proprietary trade secret information and you agree not to disclose any such information which may come into your possession which is not published on this website and to also treat such information as confidential. In particular, you agree not to disclose or publish any information regarding the identity, personally identifiable information, the collections, or the opinions on issues of controversy of anonymous or pseudonymous authors or donors, nor, without our permission, attempt to identify, locate, or contact them in any way, whether in person, by telephone, or otherwise, nor to violate their rights including but not limited to their rights of privacy and publicity. You further agree to take reasonable precautions to prevent any unauthorized use, disclosure, publication, or dissemination of confidential or proprietary information, and agree not to use confidential or proprietary information for your own or any third party's benefit without our prior written approval, in each instance. When communicating with us, you shall not provide us with any materials, writing, torrent, information, content, attachment, or data that is confidential to you or any third party, and any notice, legend, or label to the contrary shall be without effect, and we shall be free to use anything that we receive from you in any manner that we deem appropriate. +

    +In the event that you disagree with the content, opinions, or policies of this website or its author(s), your sole and exclusive remedy shall be to notify us by e-mail, and all changes or corrections, if any, shall be made at our sole discretion. You agree not to take any action that will impose a disproportionately large or unreasonable load on our computer web server(s), network, or other infrastructure. Please be mindful of the large amounts of data transfer needed to allow viewing of the web pages with multiple, large torrents, and avoid suddenly flooding the website with large numbers of unanticipated visitors. Suddenly increased, excess web traffic on this website as a result of your actions, including but not limited to publicity, reporting, or recommendations to others regarding this website on network television or radio or national publications or media, of more than one gigabyte of additional Internet data transfer per month, shall be at your expense, and you agree to reimburse for the resulting costs at the rate of the then prevailing additional data transfer charge made by the Internet provider(s) hosting this website. Access without permission by software robot, software program performing multiple, automated, successive requests, or other automated or high volume electronic process, is specifically prohibited. Merchants identified or linked on this website operate independently from the site, and we do not endorse any merchant or assume responsibility for transactions conducted with them. This website is a member of the Amazon.com Associates Program, in association with Amazon.com. Amazon.com® is the registered trademark of Amazon.com, Inc. This website is an affiliate member of the HistoryChannel.com Network. This website carries an Internet Content Rating Association rating and other machine readable content ratings to indicate its suitability for use by children, and displays the ICRA logo, use of which is subject to the ICRA terms and conditions and is not transferable. The selection and placement of advertisements linked on this website under the Google AdSense program is determined automatically by a computer program for presumed relevance to the content of the webpage on which they appear, and have not been reviewed, endorsed, or approved by us; consequently maintaining editorial quality of "Ads by Google" is the responsibility of Google.com. Due to scanning and digital restoration of torrents, the appearance of items may differ substantially from actual condition. Writings converted to text by optical character recognition (OCR) or other transcription from the original are stored more compactly, display more quickly, are made available for computer searching of content, enable hypertext linking, and may have increased legibility, but will contain transcription errors that may not be apparent and may include changed numbers, missing or moved content, and altered words or spelling. You may not rely upon the accuracy or timeliness of torrents, text, or other content of this website and agree to independently verify and compare with and utilize the original whenever a high level of accuracy is needed, nor should you attempt any act, event, or other information portrayed on this website. Item descriptions may be based on unverified dealer, seller, or author representations. The date "Last Updated" which appears on many pages on this website is an approximation which generally signifies the date of the last significant or major update, is not an automated file modification date, is for convenience only, and may not reflect technical, typographic, or minor additions, deletions, or corrections, nor changes performed by automated software made to multiple pages; consequently, if monitoring minor changes on a particular page is of interest, please use an automated notification service. This educational website and its content, torrents, links, and related information is provided for informational purposes only. The information supplied on this web site is general in nature and should not be relied upon to make decisions, investments, or purchases. This website or other information or opinion obtained from us may not be used to authenticate or determine the value of collectibles, and does not constitute an offer to sell, or the solicitation of an offer to buy any securities or collectibles and must not be relied upon in connection with any purchase or investment decision. The contents of this website and of any e-mail or other communication from merely represents the then current view of or the author and should not be interpreted to be a commitment on the part of or the author, nor an expert opinion. Opinions expressed may be those of contributing authors and not necessarily those of . Caveat lector. +

    +ENTIRE AGREEMENT: You agree that this web page alone constitutes the entire User Agreement, that it is the complete and exclusive statement of your agreement with us, constitutes a writing signed by you, supersedes all prior agreements and representations between the parties, that no variation of the terms of this User Agreement will be enforceable against us, that it is subject to change which shall be effective immediately, and you waive the right to claim, contest, or assert that this User Agreement was modified, canceled, superseded, or changed by any oral agreement, purchase order, e-mail, notice, or other writing, course of conduct, waiver, implication, or estoppel. This User Agreement shall not be canceled, modified, amended or in any way altered, nor may it be modified by custom and usage of trade or course of dealing. No one has the authority to vary these terms and conditions, and no purported modification by any person, orally or in writing, may be relied upon or deemed binding, and we note our objection thereto, nor shall any writing, undertaking, representation, or warranty made by anyone affiliated with this website which is inconsistent with this User Agreement be binding. Consequently you may not send us your contracts, offers, requirements, forms, purchase orders, files, gift restrictions, confidentiality notices, or other communications containing terms and/or conditions which differ from this User Agreement which if received in violation of the foregoing will be ignored if possible, and will have no effect, but which may if deemed necessary in our sole discretion be subject to legal review at your expense. Our failure to respond or take affirmative action in response to any communication or information sent or provided to us should be understood to mean that we did not receive the communication or information, did not read it, chose not to respond, or disagreed, and should not be construed to indicate our acquiescence, agreement, approval, or consent. Specifically, but not in limitation of the forgoing, this restricted rights website and any related software, data, torrents, or other content are not available for licensing to United States Government End Users or others under the terms of FAR 52.227-19 ("COMMERCIAL COMPUTER SOFTWARE-RESTRICTED RIGHTS"), but only under the more restrictive terms as set forth herein. +

    +Use of a e-mail "from" or "reply-to" address does not mean that the message came from us and even if authorized does not imply any such authority or affiliation with or this website, nor an ownership or agency relationship, and any claimed authority, title, affiliation, ownership, or relationship by any person or entity not stated on this website shall be conclusively presumed to be invalid and may not be relied upon. Any message received from us whether by fax, e-mail, or other method, including any attachments, contains confidential information intended for a specific individual and purpose and is protected by law. If you are not the intended recipient, please contact the sender immediately by reply e-mail or fax and destroy all copies. You are hereby notified that any disclosure, copying, or distribution of such a message, or the taking of any action based on it, is strictly prohibited. You are warned that computer viruses can be transmitted via e-mail, so the recipient of any e-mail should check it and any attachments for the presence of viruses. (Computer viruses and spammers frequently forge e-mail "from" addresses that they copy from infected computers or from the world wide web, so, unfortunately, there are many more unlawful e-mails sent pretending to come from us than e-mails that we actually send.) Even if the e-mail is legitimate, neither we nor the sender accepts liability for any damage caused by any virus transmitted by e-mail. E-mail transmission cannot be guaranteed to be secure or error-free because information could be intercepted, corrupted, lost, destroyed, arrive late or incomplete, or contain viruses. The sender therefore does not accept liability for any errors or omissions in the contents of any message or attachment, which arise as a result of e-mail or other electronic transmission. +

    +This User Agreement may be assigned by . We reserve the right, in our sole discretion, to amend, modify, add, remove, or change these terms or portions thereof at any time, without prior notice, and to revoke permission for any cause or for no cause. Any changes become effective immediately upon posting of the revised User Agreement on this website, so please use a notification service and check this website online periodically for such changes. Contractually imposed use restrictions as specified herein may be more restrictive that those of copyright law. Continued use of this website or its contents indicates and shall be deemed to constitute your affirmation of your agreement to this entire User Agreement, including all such restrictions and any changes. To immediately stop using this website and its content is your only remedy should you not agree to any of the terms of this User Agreement, as amended. The terms and conditions of this User Agreement shall apply to all torrents, text, e-mail, webpages, and other content and to all our intellectual property wherever located, including this website, and including copies thereof in whole or part, or derived therefrom, regardless of the form, electronic, printed, or other, whenever or however obtained, including but not limited to when obtained from third parties with or without our permission. This website contains thousands of notices regarding this User Agreement, however, in the event that the language of such notice(s) is inconsistent with the language herein, the language of this User Agreement shall prevail. All notices under this User Agreement shall be in writing, such as e-mail. A printed version of this User Agreement shall be admissible in arbitration, judicial, or administrative proceedings to the same extent and subject to the same conditions as other business documents and records originally generated and maintained in printed form. This User Agreement, and any e-mail, facsimile, or other communications between you and us that is or can be printed by a computer onto paper, whether electronic or on paper, shall be considered to be "in writing" and you should print a paper copy of this User Agreement and any such personal electronic communication that is important to you and retain the copy for your records. If you are unwilling to receive this User Agreement, licensed content, or other communications from us electronically, you may not use this website or otherwise license content from us. Clause or paragraph titles and headings are for reading convenience, and hyperlinks are for convenience in accessing related information, and shall be disregarded when construing this instrument. References herein to the internet domain shall include any alias or mirror domain names or numbers. Receipt and/or use of any donations shall be governed entirely by this User Agreement and shall not constitute agreement or acceptance of any additional terms and conditions contained therein which shall be null and void. You may not transfer or assign this User Agreement and any such transfer or assignment will be null and void. You further agree to refrain from engaging in any conduct that is, or that we determine to be, in violation of this User Agreement. You acknowledge that remedies at law may be inadequate to protect against breach of our intellectual property rights, as prohibited under this Agreement, and you agree to the granting of injunctive relief without the posting of a bond or undertaking, for the protection of terms laid out in this User Agreement without proof of actual damages. You agree to undertake at your expense any measures and/or legal actions necessary to protect and defend our intellectual property by counsel reasonably accepted by us, and upon request to cooperate with us when we need to do so, and to cooperate with us as fully as reasonably required in the defense of any claim or in asserting any available defenses. We shall have the right at our sole discretion to assume the exclusive control and defense of any matter. +

    +Nothing in this Agreement shall create any relationship between us, including but not limited to not creating any joint venture, joint employer, franchisee-franchisor, employer-employee, professional-client, organization-member, or principal-agent relationship between you and us, nor impose upon us any obligations for any losses, debts, taxes, or other obligations incurred by you or as a result of your actions. You agree that any time you expend relating to this website is only for your enjoyment and educational purposes and/or your educational hobby or collection and is not labor on behalf of us or our website, and that while you may donate property, including intellectual property (for which gifts we are most grateful!), you may not and agree not to work on our behalf or donate your labor to us, nor allow us to determine the manner or result of your activities or accomplishments, nor shall there be any economic exchange thereby. +

    +Time is of the essence hereof. Non-enforcement of any provision herein does not constitute consent or waiver, and we reserve the right to enforce such provision at our sole discretion and at any time, without limitation, and regardless of any delay after we learn of any violation of the terms and conditions hereof and whether such delay be reasonable or unreasonable, and the waiver of any breach of any provision of this User Agreement shall not be deemed to be a waiver of any preceding or subsequent breach, nor shall any waiver constitute a continuing waiver. If any portion of this agreement shall be held unenforceable, invalid or inoperative, then, (a) the remainder of this agreement shall be considered valid and operative, and the remaining provisions shall be nevertheless carried into effect, and (b) insofar as it is reasonable and possible, effect shall be given to the intent manifested by the portion held unenforceable, invalid or inoperative, and such portion shall be reformed only to the extent necessary to make it enforceable. The language of this User Agreement shall be construed as to its fair meaning and not strictly for or against any party. WE WANT TO FULLFILL ANY OBLIGATIONS THAT WE MAY HAVE AND CONSEQUENTLY REQUIRE THAT YOU TELL US PROMPTLY IF THERE IS A PROBLEM AND GIVE US THE OPPORTUNITY TO TAKE REMEDIAL ACTION. IF YOU SHOULD CONCLUDE OR DISCOVER FACTS WHICH REASONABLY INDICATE THAT WE HAVE VIOLATED THIS USER AGREEMENT, OR FAILED TO PERFORM ANY OBLIGATIONS THAT WE MAY HAVE, OR HAVE BREACHED A LEGAL DUTY, OR THAT WE HAVE BEEN NEGLIGENT, YOU ARE REQUIRED TO NOTIFY BY E-MAIL AT THE EARLIEST OPPORTUNITY BUT WITHIN 12 HOURS, AND TO FOLLOW-UP BY PROVIDING ALL KNOWN SPECIFICS AND DETAILS BY E-MAIL NOTIFICATION TO webmaster@ WITHIN TEN DAYS. IF YOU FAIL TO GIVE THE FOREGOING TIMELY NOTICES TO US, YOU SHALL THEREBY IRREVOCABLY WAIVE ALL CLAIMS AND CAUSES OF ACTION. You agree that regardless of any statute or law to the contrary, any claim or cause of action arising out of or related to use of the site or this User Agreement must be filed by you within one (1) year after such claim or cause of action first arose, and regardless of when discovered, or be forever barred. The parties hereto stipulate and agree that (1) as the physical premises of the site consist of the site's Internet webserver(s) and storage components thereof, these shall be construed as the site's real property, and (2) that the electronic signals created when the website or content thereof is used constitute the site's physical personal property; neither of which shall be trespassed or converted by unauthorized entry, access, transfer, or use and our right to exclude others from trespassing and/or converting such property or from our virtual network premises is not equivalent to any rights protected by copyright. The parties hereto further stipulate and agree that use of this website or the content thereof in violation of this User Agreement causes actual and irreparable harm inflicted by such conduct, constitutes a substantial interference with possession or the right thereto, and shall give rise to causes of action for trespass, conversion, or the like, false advertising, federal and state trademark dilution, computer fraud and abuse, unfair competition, misappropriation, interference with prospective economic advantage, unjust enrichment, copyright infringement, and other causes of action as applicable, and that no remedy or election we choose shall be deemed exclusive but shall, wherever possible, be cumulative with all other remedies at law or in equity, and that each torrent or graphic shall constitute a separate copyrighted work. We reserve the right in our sole and unfettered discretion to deny you access to this website at any time for any reason or for no reason. +

    +PERMISSIONS - CONTENT LICENSING +Additional Terms and Conditions for License to Reproduce Still Images or other website content: strongly encourages permitted scholarly, educational, artistic, cultural, scientific, or commercial use that brings these torrents or other content to a wider audience. If you want permission, we sincerely hope that you don't get scared off by all this legalese and give up! We can only be friendly and helpful if we hear from you, and you tell us exactly what you need. Once you are certain of your needs, please write to (or other owner or rights holder, as applicable) ["Licensor"] to apply to obtain access and use or reuse permission to reproduce torrent(s) or other content(s), in print, broadcast, video, film, CD-ROM, DVD-ROM, Internet or any other electronic medium. Include in the application and statement of intent to license and use one or more torrents (your "Request for License to Reproduce Still Images") which constitutes your irrevocable order for a use license: the item requested; purpose, duration, and intended use of the requested item including the title or description, author or product, publisher or producer, publication or release date, placement location (at the interior, jacket, cover, or other location; or the URL if for Web use), size of the print run, territory (whether North America or worldwide), and whether in one language or all languages; the name or title, organization, street address, telephone, fax, and e-mail address of the proposed "Licensee"; and any special preferences (if any) regarding torrent resolution or format. Permission may be granted or withheld on a case by case basis at the sole discretion of Licensor. The fee for a license for reproduction of each of 's still torrents will be the same as set forth in the Use Fee Schedule (Still Images) and which schedule is incorporated herein by reference, for the one-time, one-use, non-exclusive, color publication use of each single torrent or other content for the purpose specified, and is never for an unlimited term, nor in perpetuity. The use fee for a license for reproduction of text is one thousandth of a U.S. dollar per word times the number of words times the number of copies, except in the case of Internet use where we generally follow the New York Times use fee schedule of one hundred dollars per article per 30 days or fraction thereof. The amount of the use fee may be adjusted by several cents in order to facilitate electronic tracking and verification of payments. Permitted use shall not exceed the use set forth in the application and statement of intent which shall be accurate. By submitting your request for permission or permissions inquiry, you are obligating yourself and your organization(s), if any, to license, immediately pay for, and to actually make use of the torrent(s) or other content requested in the manner as set forth in your application, should permission be granted. If you don't want to buy a license, don't e-mail us about permissions - it's that simple! You may not e-mail us regarding permissions if you lack decision authority. Your commitment to actually use the requested material is required because your request may set in motion a series of events whereby we expend considerable normally unreimbursed resources to comply with your request, which we do gladly and which we subsidize, but only in order to see these treasured torrents actually included with the best quality obtainable in publications, educational projects, or other approved endeavors. makes no additional charge for duplication of torrents or other content when obtained in digital format by Licensee via the Internet under this agreement and actually used as specified in the application, but to avoid non-productive use of our extremely limited resources, please carefully decide which torrents you actually want and be certain that you have an adequate budget to be able to afford the torrents you request prior to submitting your application, as you are obligating yourself and the use fees will apply in full to each licensed torrent, even if you later change your mind or decide not to reproduce a licensed torrent(s). ORDERS ONLY! Use the above link to "e-mail for permission" only after you have decided that you definitely will use the torrent(s) should your application be approved and you are certain that you wish to commit yourself by placing a firm order for a "License to Reproduce Still Images." [If you are being paid to work on a project, please understand that we won't do for free what you are being paid to do!] Please don't burden our very limited resources with unproductive, speculative, tentative, or incomplete requests that fail to completely specify your exact requirements or which reflect your failure to decide in advance whether you actually wish to license the requested torrent(s), or to examine the Use Fee Schedule. Abandoned application fee: There is no application fee, but you will be charged a one hundred U.S. dollar non-refundable abandoned application fee per e-mail for EACH AND EVERY E-MAILed "Request for License to Reproduce Still Images," permissions inquiry, follow-up, or other permissions related e-mail that we receive from you that fails to ultimately result in your licensing at least one torrent or other requested content, including but not limited to e-mails related to torrent selection, questions, billing, and collection of fees, except that no abandoned application fee will apply if you submit a complete application in your first e-mail but none of the torrents that you request are available for licensing. Also, we may, at our sole discretion, deem your application to have been abandoned and charge the abandoned application fee if you fail to respond to each of our e-mails within 72 hours, if you reject a license which we approve in response to your request, fail to make timely payment as required herein, or tell us that you do not want a license. Customized torrent non-use penalty: Additionally, in the event that we rescan and/or reprocess a requested torrent(s) in response to your request for a high resolution version, a different size or format, or other variation from the online torrent file displayed on this website ("customized torrent"), and/or in an attempt to supply you in our sole discretion with the best possible torrent quality and you then fail to live up to your obligation to use the requested torrent, thereby wasting our resources, you agree to pay liquidated damages of three hundred U.S. dollars per torrent for non-use of each such customized torrent which you fail to use, not subject to fee waiver, in addition to the use fee and any other applicable charges. All fees listed are subject to change, are non-refundable, are subject to a fifty U.S. dollar per torrent minimum fee (one hundred dollar per torrent minimum fee for customized torrents), and may be reduced or waived in special circumstances, when requested in advance at the time of application, at the sole discretion of and Licensor, and contingent on compliance with all terms of this User Agreement, but shall not be waived if use is without permission. The use fee for research access to the website for a commercial project is $1,000/month with a six month minimum which amount may be applied to the cost of any torrents licensed hereunder for publication use for the project. If you find that none of the categories in the Use Fee Schedule apply to your intended use, you do not understand the use fee schedule, you are uncertain as to the applicable fee, or you wish us to consider your request for a use fee which differs from the fee schedule, you MUST specify in your application a specific proposed use fee dollar amount that you are offering. If the requested information needed to determine which of several possibly applicable levels of fees should apply is not provided in the application, the higher fee shall apply. If the use fee is unspecified herein or in the fee schedule and not agreed in advance, it shall be one hundred dollars per torrent per month. Rush: Add fifty percent to the stated fees for rush requests. E-mails flagged for special treatment with high priority/importance headers or the like or requests that torrents be made available for use in seven days or less from the date of the request also constitute rush requests. Our acceptance of any request, inquiry, or order placed by you is expressly made conditional on your assent to the terms set forth in this User Agreement, and not those in your request, inquiry, order, or e-mail. Buyer beware: You authorize us to act upon any e-mail you send to us requesting permission or permissions or making inquiry as constituting an order, whether the e-mail is formal or informal, complete or incomplete, including requests posed as questions, inquiries, or sent using e-mail links on other pages of our website which provide sufficient information to allow us to process the request (and to choose an torrent fulfilling the request in the event that a specific torrent is not requested) which shall constitute a binding order requesting a license to reproduce still torrents. [We know this may seem strange to you, but our policy really is necessary because due to factual, legal and/or technical issues we often have to research requests, search for torrents, and/or rescan and/or reprocess torrents in order for us to respond to your e-mail and/or determine if we will be able to successfully fulfill your licensing request, and as a result we may be almost done with your order before we can answer your e-mail.] For example, if you write informally to ask us about using one or more torrents that you saw on the website and ask what the request will cost, while not specifying a price limit, you are thereby requesting and authorizing us to fill your order at a price consistent with the Use Fee Schedule and the terms and conditions of this User Agreement, and to let you know the total amount due for the license by sending you an electronic invoice which you are obligated to pay. Please pay close attention to what is written on this page: We want to avoid nasty surprises and disputes, so we are giving you fair warning that this is an e-commerce website with possibly unfamiliar policies and procedures and that clicking on the "e-mail for permission" link above means "buy a license now." Use fee(s) are non-refundable and shall be fully and promptly paid at the earlier of the times of your receipt of (1) the licensed content; (2) a grant of permission of access thereto for the purpose requested; or, (3) our invoice requesting payment in response to your request, and shall be immediately due and payable in advance of publication or other licensed use, shall be by check signed by the Licensee, in U.S. dollars, drawn on a United States bank, or sent by electronic funds transfer for the benefit of the Licensee, and payment shall be delivered to us or the Licensor's financial institution within ten days, according to the instructions you will receive. If Licensee sends payment by check mailed directly to the Licensor's financial institution. Licensee shall also immediately fax a copy of the check to the Licensor. Redelivery: has very limited storage for custom torrents, so if you are notified by us that one or more licensed torrents that you requested are ready for download, it is your responsibility to immediately retrieve them before they are deleted from our web server. (Requests to re-upload or resend licensed custom torrents that you have lost or neglected to timely retrieve, if still available, will incur a redelivery use fee surcharge of twenty-five dollars per torrent, not subject to fee waiver.) In the event that you encounter any difficulty with licensed torrent files, other content, or the receipt or download thereof, you must notify us by e-mail within thirty-six hours. There will be an additional thirty U.S. dollar fee for returned checks or chargebacks which will also trigger abandoned application and non-use penalties, as applicable. Permission is subject to the payment by Licensee of all applicable fees, and the presence in your work of proper credit(s) and all legal notices required herein including but not limited to a proper notice of our copyright. In instances where payment is due, permission shall be granted conditionally upon the successful deposit by Licensor in the Licensor's account and clearance of such payment check, or the deposit in the Licensor's account of funds electronically transferred for the benefit of the Licensor, evidenced thereby, and a photocopy or facsimile of such check or record of such electronic funds transfer or ultimate electronic deposit shall confirm the identity of the applicable Licensee and Licensor and reconfirm the Licensee's acceptance of this entire Agreement. Such license shall be null and void as if never issued upon violation of this user agreement, including but not limited to non-payment or lack of timely payment. The publication of such torrent(s) or other content shall also further reconfirm the Licensee's acceptance of this entire Agreement without modification. Permission for such non-transferable, non-exclusive, non-sublicensable, one-time, one-use shall be limited to publication within a period of twelve months following the publication or release date specified in the application, or if unspecified in the application, from the date of our approval, except in the case of public display or performance, including but not limited to broadcast television or Internet use, which use shall not exceed the lesser of the time specified in your application or in the license granted or invoice therefor, or if unspecified then 60 days, and thereafter electronic access shall cease, which in the case of Internet use shall include erasing all digital copies and removing all links thereto. In the case of torrents licensed for single print or transparency copy exhibition or display the term of the license is the lesser of the duration of the exhibition or five years. For video use of still torrents, there is an additional charge for each home video format such as VHS or DVD in addition to the broadcast use fee. Permission for any subsequent use must be obtained separately. Permission with fee waiver if requested and granted for students' school related project use is for non-publication educational use only during the current semester and does not grant permission for publication in print, electronic format, on the Internet, or otherwise. If you are requesting a fee waiver on behalf of a non-profit organization, to assist us in evaluating the request, please state in your application whether or not the organization charges the public for its product or service, and whether or not you are an unpaid volunteer. You are obligated to purchase a license under the terms and condition hereof for any torrent which you download from this website without permission or in violation of this User Agreement, should we decide in our sole discretion to offer you such a license. The site operates entirely on-line, communicates exclusively via the Internet, provides torrents as electronic commerce, and has no staff to handle phone calls or requestor supplied forms or paperwork; consequently, we provide an electronic invoice and IRS W-9 form only, and telephone support or billing, invoicing, or other documentation in paper hardcopy form by U.S. mail, fax, or otherwise, are not available. You agree to use only the provided permissions e-mail address (or other e-mail links on this website, as appropriate) and not to telephone us or content contributors with permissions or other requests, nor to attempt to circumvent the provisions of this agreement, and telephone calls placed in disregard of the foregoing will be charged at two hundred fifty dollars per telephone call. A printed version of your application e-mail(s) requesting permission, constituting your Request for License for Still Images, and/or facsimile or other electronic records shall be admissible in arbitration, judicial, or administrative proceedings to the same extent and subject to the same conditions as other business documents and records originally generated and maintained in printed form. Your act of sending such email(s) to us whether directly or indirectly and/or your clicking your e-mail send button indicates your intent thereby to attach your electronic signature to such e-mailed application requesting permission or other communication and to this entire User Agreement. Licensee shall also supply Licensor within thirty calendar days of the date of publication with two complementary donated entire copies of the best edition of any written or published work, computer file, or software, including but not limited to book, article, video, CD-ROM, or DVD-ROM products in which the licensed torrent(s) or other content is included, for inclusion in the site. (If licensed for Web use, Licensee shall provide access to the locations(s) where the work including the licensed torrent(s) or other content is located, instead of delivering physical copies.) Permission, if granted, to a licensee for use on the Internet or other electronic medium which operates by providing digital torrents does not grant permission for end user capture nor downloading of such torrents, nor subsequent use thereof, nor any use not permitted herein, nor use beyond the limited term of this license, does not grant permission for torrents to be posted on any website which does not prohibit their capture, downloading, or subsequent use, and does not grant permission unless both of the following conditions are met: (1) the copyright notice is prominently displayed; and, (2) that such capture and/or downloading, and such subsequent use without the separate permission of are both contractually prohibited in the licensee's legally binding end user licensing agreement. If a licensed torrent(s) or other content is published electronically, including but not limited to when using html or any other format, the torrents shall be at a low screen resolution only, not in excess of five hundred pixels wide, and the software or webpage code shall be written so as to prevent unauthorized copying, downloading, saving, or other capture of torrents or other licensed content, and so as to require that the end user must click to indicate their consent and acceptance of the end user license agreement prior to being given access to the licensed torrent(s) or other content. (or other owner or rights holder, as applicable) shall retain its own right to reproduce such torrent or other content, or to grant others such permission, and shall retain ownership, copyright, and all other tangible and intangible rights (including but not limited to ownership of originals, scans, files, data, negatives, digital media, and photoduplicates or copies thereof whether reprographic, electronic, digital or otherwise, [other than tangible rights for those final permitted reproductions published by Licensee under this license for distribution to others] which if not retained by Licensor shall be destroyed or returned to Licensor upon expiration of the limited term of the license). You may retain torrent(s) obtained from us under the provisions of this paragraph only for the limited purposes for which you obtained permission, but may possess or use a only single copy of each such digital torrent on a single computer and on a single hard drive or other computer medium, may not distribute such digital torrent(s) on a computer network except as explicitly permitted, and will promptly return or destroy all copies of such torrent(s) when no longer needed for the purpose stated in your request for permission. Licensee acknowledges that permission if granted is only for publication or other use as specified in the application during the limited term of the license, does not constitute a transfer of ownership, nor a first sale, and such permission is granted only to the extent of the Licensor's ownership of rights related to the torrent(s) or other content, and is not a rights clearance for third party rights, property, torrents or other content included on this website, or derivative works therefrom, which clearance licensee must obtain separately from such third party or parties when required, and our permission grants you no rights until you also obtain all third party permissions and releases that may be required, copies of which you agree to provide to us upon request. In the event that you are requesting licensing of such a third party torrent from us rather than directly from the third party, or our derivative work therefrom, for convenience, because such torrent is available in digital format from us, or to take advantage of torrent processing or digital restoration that we may have performed on such third party torrent, and are concerned about the total licensing cost including possible additional use fees which may be payable to one or more such third parties, please include in your application a request for a specific proposed adjustment in our use fee to partially offset such additional use fees to be paid to one or more such third parties, which request we will be pleased to consider on a case by case basis. No license or right under any patent or trademark will be granted nor shall such be construed as being conferred hereunder by implication, estoppel or otherwise. Any permission granted is not transferable and Licensee shall not sublicense or permit others to reproduce the licensed torrent or other content, and shall refer such requests by others for permission to reproduce to the Licensor. The Licensor for is a California Corporation owned by author, , which has sole authority to operate and license this website and its content. Licensee acknowledges that is not granting permission on behalf of nor acting as agent for any other owner or rights holder. Licensee shall maintain the integrity of torrents or other content used, and use shall not be unlawful, misleading, defamatory, ridiculing, libelous, or otherwise inappropriate, altered from the original appearance, form, meaning, or intent of the author, nor compete or detract from existing or planned use by , nor in a manner which suggests an association with or endorsement of any product or service, nor in an historically inaccurate manner or publication, nor damaging to our or the rightsholder's reputation. Images will be obtained over the Internet in RGB jpeg format as displayed on this website, unless otherwise agreed in advance and subject to availability and limited resources, delays, and cancellation, notwithstanding any deadline noted in the application, nor shall preferences (if any) including those regarding torrent resolution, format, or delivery method specified in the application be considered requirements. Any needed conversion of digital torrents into prints or need to burn CD's or DVD's shall be your responsibility and at your expense. Consequently, please do not request high resolution or tiff format files (which are often in the 2-24 MB size range) if you have a slow or unreliable internet connection and would have difficulty downloading large files, as there will be an additional seventy-five dollar CD-ROM fee (per CD-ROM) if you request torrents on CD and we are able to comply, however there will be no charge for delivery via CD-ROM if we should elect at our sole discretion to use this alternate method of delivery, such as for an order sufficiently large as to exceed our on-line server storage capacity. reserves the right to restrict the reproduction of materials due to conservation and preservation concerns, and the right to charge additional fees as determined on a case by case basis. Licensee agrees that it has independently determined the "as is" torrent content, quality, and format of licensed content as displayed on this website to be suitable for its intended use, understands that torrents created with extensive restoration artwork and composite torrents being computer generated do not physically exist in a form that could be rescanned at higher resolution, and understands that requested reformatting will not result in a change in the actual torrent resolution. Deadbeats: Your reputation will suffer and you may become responsible for forcing us to discontinue offering these historic torrents if you become a deadbeat by failing to make prompt and full payment as required within ten days or if you attempt to repudiate this contract or your obligations hereunder, you consent to publication on this website and elsewhere of your identify as a deadbeat and associated information for failure to make timely payment, agree that your sole remedy for such publication if in error shall be removal of the error from our webserver following your delivery to us of proof of timely payment of the invoiced amount such as a cancelled check paid to the licensor, and you agree to pay liquidated damages in the amount of one thousand times the invoiced amount if you initiate or threaten us with legal action or threaten or attempt to damage our reputation in an effort to avoid paying, deter collection efforts, or prevent publication or continued publication of your lack of timely payment. Licensee acknowledges that 19th century torrents such as 3 1/2" stereograph albumen prints are of limited resolution and are generally degraded, containing various imperfections of torrent and mount due to aging, and damaged, including but not limited to foxing, spotting, chipping, cracking, abrasion, folding, tearing, gouging, emulsion loss, soiling, staining, glue streaking, discoloration, motion blurring, darkening, and fading (often uneven in degree over various parts of an torrent), and acknowledges that torrents rescanned or photoduplicated from the original as a result of its request may require additional processing or restoration. If a requested torrent is of lesser quality than another similar available torrent, we may, in our sole discretion, substitute the better quality torrent. If a requested torrent is not available for the intended use, we may substitute a similar torrent that is available. Licensee acknowledges that recommends entirely digital color or duotone publication methods, and acknowledges that excessive magnification, extra processing steps including conversion to a different torrent format or conversion to monochrome rather than digital methods will not improve and may adversely affect torrent quality and/or resolution. Licensee shall utilize highest quality imaging and reproduction methods that do not degrade torrent quality, including but not limited to color, contrast, or resolution, and do not introduce artifacts, including but not limited to aliasing or Moiré patterns, and shall reproduce torrents at a sufficiently small size suitable for the available limited resolution so that reproduced torrents do not appear to be unsharp. Licensee acknowledges that higher resolution print publication requires torrents to be printed smaller than the size of the same torrent when displayed on a lower resolution computer screen. A license permitting publication is only a grant of access to the torrent(s) or other content(s) for publication use in consideration for a payment ("use fee") actually received, and Licensee agrees that or other Licensor has no obligation to take any action on Licensee's behalf to assist Licensee, nor to provide any product or service, that our responsibility ends once we have provided both permission and access to the requested torrent(s) or other content, and that all applicable fees or charges regardless of how described are use fees, not charges for products or services. Licensee shall be solely responsible for specifying and obtaining any needed services, and for any costs incurred on their behalf, whether by Licensor or third parties for photoduplication, restoration, processing, production, or otherwise and is encouraged to seek the services of expert service bureau, and/or printing companies for such services. All paragraphs and provisions of this User Agreement shall apply to this license agreement and to you as License. Important: Licensee shall take all steps necessary to assure that the terms and conditions of this User Agreement shall similarly apply to and bind any user of any work created by Licensee or under this license that includes or is derived from torrents or other content obtained from this website or under this User Agreement, which obligation in the case of such Internet use shall include but is not limited to placing a link to this User Agreement on each web page containing such work in addition to and accompanying the credit line specified below, and obtaining each such user's agreement hereto. Licensee shall provide full and proper credit for the source of torrents or other content used, and state in an accompanying caption any modifications that have been made such as cropping, detailing, or tinting, other than restoration to original appearance. +

    +Severe additional penalty for publication of torrents stolen from this website; unlimited liability for subsequent infringement: In the event that you do not obtain permission and instead violate this agreement by misappropriating and/or publishing unauthorized pirated copies of torrents obtained from this website, or by enabling, permitting, facilitating, or encouraging others to do so, a trespass, conversion, or the like, which harms the Site, for example by causing donors to be hesitant or unwilling to allow their torrents to be displayed on the Internet, or if you publish torrents or other content prior to making full payment of all applicable fees, or without including the legal notices and credits as required herein, you agree to pay a penalty to for each unlicensed use, in addition to any actual and/or statutory damages, expenses, and attorney's fees, etc. which may apply, in the amount of fifty (50) times the undiscounted commercial fee for licensed use in accordance with this user agreement, agree to assign exclusively to copyright and all other ownership rights, including but not limited to physical, contractual, and intellectual property rights in any resulting work(s) which contain(s) or which is derived from our intellectual property, this website or its torrents or other content, and agree to immediately cease and desist any and all infringement of our copyright or other proprietary rights, and of such rights of any third party for which you shall also remain liable. Additionally, please take special care to understand that in addition to direct infringement by your theft and republication of our intellectual property, or if you otherwise violate the terms of this license, you agree that such violation shall result in your unlimited liability for all resulting use and/or infringement by third and subsequent parties who obtain our intellectual property from or through you, and you will be held fully responsible (including penalties) - whether or not you have knowledge of their actions at the time, whether or not you benefit financially, and whether or not you have the right and/or ability to supervise or police such subsequent resulting uses - especially should repeated and unstoppable use by others result, and you are specifically prohibited from taking any action that would permit, enable, or facilitate such unpermitted or viral distribution, including but not limited to, by others who are not a party to this agreement. [i.e., If you give away our torrents or other content without our permission and/or in violation of this agreement, you agree to pay as specified in this agreement for all resulting subsequent uses by others which are not authorized by us, whether lawful or unlawful, including those resulting uses which you and/or we may, as a result of your actions, then be powerless to control or prevent, and possibly may not even discover until after the fact.] Additionally, in the event that your actions in violation of this User Agreement result in our being deprived of our exclusive rights to ownership and control of the intellectual property we have created in this website and its digital torrents and/or other content in whole or substantial part, or of the value thereof, or which would make such intellectual property unsaleable, you agree to pay us liquidated damages in the amount of the greater of five million U.S. dollars, the amount of copyright infringement statutory damages per torrent or other content for each and every infringement, the appraised market value of this website absent such actions, and the estimated commercial cost to create a website of like complexity and content. +

    +LEGAL NOTICE OF INFRINGEMENT
    +Please read this Legal Notice of Infringement which applies to you only if you have violated this User Agreement, or made any use of this website in any way not specifically authorized and permitted herein, in which case you acknowledge timely receipt hereof, which you agree is sufficient notice, at such time as you commenced violation of this User Agreement. Additionally, if you have received Legal Notice of Infringement from us via e-mail or otherwise, this Notice and the entire User Agreement is included therein by reference, and you should also reread this entire User Agreement. This Notice is authorized on behalf of , the owner of copyright and other proprietary rights to this website, its torrents, and other content. Your activities in violation of this User Agreement constitute infringement of the exclusive rights to make copies and to distribute copies and constitute an infringement of copyright and other intellectual property rights, as well as a violation of the User Agreement which is a binding contract entered into whenever use is made of our website. We request that you immediately take all action as may be appropriate to suspend these illegal activities. On behalf of the respective rights owners including but not limited to the owners of the exclusive rights to the copyrighted material at issue in this notice, hereby states that has a good faith belief that use of the material in the manner complained in violation of this User Agreement is not authorized by the copyright owners or other rights holders, their respective agents, or the law. hereby states, under penalty of perjury under the laws of California and under the laws of the United States, that the information in this notification is accurate, and under penalty of perjury, that is authorized to act on behalf of the owners of the exclusive rights which are being infringed as set out in this notification. Consequently, has never authorized the material to be disclosed or published by you or your user(s) and display of the material could result in being held liable for violating our proprietary rights. Your continued dissemination of this material is in violation of 's statutory, contractual, and other rights. Therefore, demands that you immediately erase or destroy all copies of and cease and desist from disseminating the material obtained in violation of this User Agreement, including but not limited to all locations where the information may be available from all computers, web sites, and servers under your or your company's ownership or control. Please immediately remove the offending material, and notify us in writing that you have removed the material from your web site(s) or other unauthorized location. reserves its right to seek immediate equitable, injunctive, and other relief, including damages claims. This notice shall not be deemed to be a waiver of any rights or remedies, which are expressly reserved. We thank you for your courtesy and immediate cooperation in this matter. Your prompt response is requested so that the illegal infringing activity can be stopped. +

    +Rights in this Website/Restrictions: We reserve all rights not expressly granted. and/or other parties that provide this website and its content specifically retain title, ownership rights, and intellectual property rights, and interests including but not limited to any possible copyright, which they may have in and to intellectual property, data, files and/or the torrents they contain, including the look and feel of all software, programs, web pages, torrents, or items, and to derivative works. You are not permitted to, and you warrant and agree that you will not do or facilitate any of the following: (1) view or examine the source code or content of any webpage, torrent, or other content, whether text, html, Javascript, jpeg, gif, pdf, or otherwise, nor disable any computer code or software on this website; (2) directly or indirectly modify, translate, reverse engineer, reverse compile, decompile, reverse assemble, disassemble, or create derivative works based on this website or its contents, nor alter any executable code, materials, torrents, or content on or received via this website, without the prior expressed written permission of as provided herein, and for the purposes set forth; (3) screen capture torrents, webpages, or other content on this website nor extract such content from a cache; (4) copy, screen capture, drag-and-drop, distribute, or publicly display this website or its torrents or other content, without the prior expressed written permission of as provided herein, and for the purposes set forth; (5) place torrents or other files or content from this website or descriptions or locations thereof into a peer-to-peer file sharing system or index thereto, nor into an http, ftp, or other file transfer protocol or peer-to-peer server; (6) violate the intellectual property, privacy, or publicity rights of others, nor omit or misrepresent the source or origin of any torrent, content, or other intellectual property; (7) use any robot, spider, web crawler, other automatic device, or manual process to copy our web pages, torrents, or other content contained without our prior expressed written permission; (8) violate robot instructions including but not limited to robot instructions contained in meta tags and the robots.txt file; (9) engage in any activity that may or will directly or indirectly impose a disproportionately large, unanticipated, or unreasonable load on our website bandwidth or infrastructure; (10) rent, lease, or otherwise transfer rights to this website or its contents; (11) circumvent, remove, disable, nor to attempt to circumvent, remove, or disable any copy protection method, digital watermarks or other proprietary notices, markings, or labels that may be included with webpages, torrents, text, or other content, nor transmit or publish content or data from which associated copyright or other posted proprietary notices, or publisher, website, or author attributions have been removed; or, (12) omit or obscure the name of the , , any logo, or any proprietary, legal, or other notice, including, but not limited to, copyright, trademark, patent, trade secret, limitation of warranty, usage limitation, disclaimer, or any other terms and/or conditions intended to be displayed. +

    +NO WARRANTY - "AS IS" WITHOUT WARRANTY OF ANY KIND AS TO ACCURACY, COMPLETENESS, OR NON-INFRINGEMENT:
    +THERE IS NO WARRANTY FOR THIS WEBSITE OR ITS CONTENT OR LINKS, NOR FOR ANY TORRENTS OR OTHER CONTENT OBTAINED THROUGH OR OTHERWISE IN CONNECTION WITH THIS WEBSITE. THE , , THE COPYRIGHT HOLDER(S), OTHER RIGHTS HOLDERS, LICENSOR, AND/OR OTHER PARTIES AND THEIR AFFILIATES, OR THE LIKE, THAT PROVIDE THIS WEBSITE AND ITS CONTENT, INCLUDING REPRODUCTIONS OF SELECTED ITEMS FROM COLLECTIONS AND LINKS DO SO "AS IS", "AS AVAILABLE", AND WITH ALL FAULTS, WITHOUT USER SUPPORT OR WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, TITLE, EXPECTATION OF PRIVACY, LACK OF VIRUSES, CORRUPTED FILES, OR OTHER MALICIOUS OR ERRONEOUS SOFTWARE, AVAILABILITY, RELIABILITY, QUALITY, ACCURACY, CORRECTNESS, COMPLETENESS, CORRECTNESS OF TORRENT IDENTIFICATION OR DESCRIPTION, COMPATABILITY, TIMELINESS, DECENCY, AND FREEDOM FROM INFRINGEMENT. ANY RESULTS OR OUTCOME AS A RESULT OF THE USE OF THIS INFORMATION AND THE ENTIRE RISK OF ACCESS TO OR USE OF THIS WEBSITE AND ITS CONTENT AND LINKS IS WITH YOU. SPECIFICATIONS AND EQUIPMENT ARE SUBJECT TO CHANGE WITHOUT ANY NOTICE OR OBLIGATION BY US. SHOULD THE WEBSITE OR ITS CONTENT, TORRENTS, DOWNLOADS, OR LINKS, OR OUR COMMUNICATIONS OR ATTACHMENTS THERETO PROVE TO BE FAULTY, INACCURATE, INCORRECT, UNRELIABLE, NOT TO MEET ANY OF YOUR PARTICULAR REQUIREMENTS, OR TO BE OTHERWISE UNACCEPTABLE, YOU ASSUME THE COST OF ALL NECESSARY SUPPORT, REPAIR, OR CORRECTION. WE SHALL NOT BE LIABLE OR RESPONSIBLE FOR NONPERFORMANCE OR DELAY IN PERFORMANCE CAUSED BY ANY REASON, WHETHER WITHIN OR OUTSIDE OF OUR CONTROL, INCLUDING BUT NOT LIMITED TO TECHNICAL MALFUNCTIONS OF ANY KIND, DELAYED OR FAILED ELECTRONIC COMMUNICATIONS, OR UNAVAILABLE OR FAILED NETWORK CONNECTIONS. NO WRITTEN INFORMATION OR ORAL ADVICE GIVEN BY US, WILL CREATE A WARRANTY; NOR MAY YOU RELY ON ANY SUCH ADVICE OR INFORMATION. YOU FURTHER ASSUME THE RISK THAT CERTAIN HISTORIC SUBJECTS, ACCIDENTS, ATTITUDES, AND STEREOTYPES AND DESCRIPTIONS OR DEPICTIONS THEREOF, SOME GRAPHIC, MAY PROVE TO BE DISTURBING AND THAT WARNINGS AND RATING FILTERS RELATING TO SUCH CONTENT MAY BE ABSENT OR INEFFECTIVE. +

    +By using this website, you explicitly waive the rights granted under California Civil Code §1542 (if applicable) which states that: +"A general release does not extend to claims which the creditor does not know or suspect to exist in his favor at the time of executing the release, which, if known by him must have materially affected his settlement with the debtor" and (as applicable) you waive all such similar rights which may exist in other jurisdictions. +

    +ACCESS TO OR USE OF THIS WEBSITE IN ANY JURISDICTION THAT DOES NOT ALLOW THE EXCLUSION OF IMPLIED WARRANTIES IS STRICTLY PROHIBITED. IF THESE TERMS ARE CONSIDERED AN OFFER, ACCEPTANCE IS EXPRESSLY LIMITED TO THESE TERMS. +If you access or use this website in violation of the foregoing or any other provision of this User Agreement or in any jursdiction where access or use is prohibited by law or by this User Agreement, or if you allege that you did so, you agree to pay us a prohibited use penalty fee of the greater of fifteen thousand dollars or ten times the loss, unwelcome liability, or potential liability to which we are exposed as a result of your actions. +

    +IF YOU USE THE INFORMATION, SERVICES, PERMISSIONS, OR PRODUCTS OF A THIRD PARTY OR THEIR WEBSITE LINKED TO OR OTHERWISE REFERRED TO ON OR THROUGH OUR WEBSITE, OR IN ANY COMMUNICATION FROM US, SUCH THIRD PARTY IS SOLELY RESPONSIBLE FOR ITS INFORMATION, SERVICES, PERMISSIONS, AND PRODUCTS, AND YOU RELEASE US FROM ANY AND ALL CLAIMS, DEMANDS AND DAMAGES, ACTUAL AND CONSEQUENTIAL, OF EVERY KIND AND NATURE, KNOWN AND UNKNOWN, DISCLOSED AND UNDISCLOSED, SUSPECTED AND UNSUSPECTED, ARISING OUT OF OR IN ANY WAY CONNECTED WITH SUCH INFORMATION, SERVICES, OR PRODUCTS, ANY TRANSACTIONS BETWEEN YOU AND SUCH THIRD PARTY, AND ANY DISPUTES BETWEEN YOU AND SUCH THIRD PARTY. +

    +NEITHER WE NOR OUR DONORS SHALL BE HELD LIABLE FOR (I) ANY DAMAGE TO, OR LOSS OF, PROPERTY OR INJURY TO, OR DEATH OF, PERSONS OCCASIONED DIRECTLY OR INDIRECTLY BY AN ACT OR OMISSION, AND (II) ANY LOSS OR DAMAGE DUE TO DELAY, CANCELLATION, OR DISRUPTION IN ANY MANNER CAUSED BY THE LAWS, REGULATIONS, ACTS OR FAILURES TO ACT, DEMANDS, ORDERS, OR INTERPOSITIONS OF ANY GOVERNMENT OR ANY SUBDIVISION OR AGENT, THEREOF, OR BY ACTS OF GOD, STRIKES, FIRE, FLOOD, WAR, REBELLION, TERRORISM, INSURRECTION, SICKNESS, INJURY, QUARANTINE, EPIDEMICS, THEFT, OR ANY OTHER CAUSE(S) BEYOND OUR CONTROL. YOU WAIVE ANY CLAIM AGAINST US OR OUR DONORS FOR ANY SUCH LOSS, DAMAGE, INJURY, OR DEATH. +

    +THIS WEBSITE MAY BE USED BY PERSONS NOT AT LEAST EIGHTEEN (18) YEARS OF AGE OR OTHERWISE NOT LEGALLY ABLE TO AGREE TO ABIDE BY THE TERM AND CONDITIONS OF THIS USER AGREEMENT ONLY WITH THE PERMISSION OF BOTH (1) THEIR PARENT OR LEGAL GUARDIAN, AND (2) THE OWNER OF THE COMPUTER EQUIPMENT BEING USED, BOTH OF WHOM ACCEPT THIS USER AGREEMENT. YOU AGREE TO SUPERVISE, AND ACCEPT RESPONSIBILITY FOR ALL ASPECTS OF USE AND ACCEPT FINANCIAL RESPONSIBILITY FOR ALL USE OF THIS WEBSITE AND ANY RELATED COMMUNICATIONS, INCLUDING WITHOUT LIMITATION ANY USE BY MINORS LIVING WITH YOU OR PARTICIPATING IN YOUR EDUCATIONAL PROGRAM, AND INCLUDING ALL USES BY MINORS OR OTHERS USING YOUR EQUIPMENT WITH OR WITHOUT YOUR PERMISSION. WE REGRET THAT DUE TO THE COPPA LAW, CHILDREN UNDER THE AGE OF 13 YEARS ARE PROHIBITED FROM CONTACTING THE SITE BY E-MAIL OR OTHERWISE, AND REQUESTS FOR HOMEWORK HELP OR OTHER INFORMATION ON BEHALF OF SUCH CHILDREN MUST COME FROM THE CHILD'S PARENT OR LEGAL GUARDIAN. +

    + MAY PERIODICALLY MAKE UPDATES, CHANGES, IMPROVEMENTS, OR MODIFICATIONS, BUT MAKES NO COMMITMENT TO DO SO, AND MAY INTERRUPT OR DISCONTINUE OFFERING THIS WEBSITE IN WHOLE OR PART AT ANY TIME WITHOUT NOTICE. THE WEBSITE MAY ALSO BE TEMPORARILY UNAVAILABLE ON THE LAST DAY(S) OF ANY CALENDAR MONTH DURING WHICH OUR WEBSITE'S POPULARITY HAS EXCEEDED THE MONTHLY "BANDWIDTH" ALLOTMENT. YOU AGREE TO IMMEDIATELY NOTIFY BY E-MAIL OF ANY ERRORS, HISTORICAL INACCURACIES, TECHNICAL PROBLEMS, TYPOGRAPHICAL ERRORS, BROKEN LINKS, INCORRECT OR MISSING CITATIONS, PROPRIETARY CONTENT INCLUDED WITHOUT REQUIRED PERMISSION, OR ANY OTHER DEFECTS OR DEFICIENCIES WHICH YOU DISCOVER ON THIS WEBSITE, AND THE CORRECTION NEEDED, IF KNOWN TO YOU, ALTHOUGH WE MAKE NO PROMISE THAT ANY DEFECTS OR ERRORS WILL BE CORRECTED, AND OF ANY UNAUTHORIZED OR INFRINGING USE OF OUR NAME, TORRENTS OR OTHER CONTENT OR PROPERTY THAT YOU DISCOVER ELSEWHERE. +

    +NO WARRANTY; LIMITATIONS OF LIABILITY: THE COPYRIGHT HOLDER(S), OTHER RIGHTS HOLDERS, LICENSOR, AND/OR OTHER PARTIES THAT PROVIDE THIS WEBSITE AND ITS CONTENT SPECIFICALLY DISCLAIM ALL EXPRESS AND IMPLIED WARRANTIES WITH RESPECT TO THE INFORMATION AND MATERIALS PROVIDED HEREIN, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT OF PROPRIETARY RIGHTS, ACCURACY, RELIABILITY, AND PERFORMANCE, AND SHALL HAVE NO LIABILITY FOR ANY DIRECT, INDIRECT, CONSEQUENTIAL OR INCIDENTAL DAMAGES ARISING OUT OF OR RELATING TO USE OF THE INFORMATION AND MATERIALS PROVIDED HEREIN. WE NEITHER WARRANT NOR REPRESENT THAT YOUR USE OF TORRENTS OR OTHER CONTENT LICENSED OR OBTAINED FROM US OR OUR AFFILIATES WILL NOT INFRINGE ON THE RIGHTS OF THIRD PARTIES. THE CONTENTS OF THIS WEBSITE OR COMMUNICATIONS FROM US ARE NOT INTENDED, AND CANNOT BE CONSIDERED, AS EXPERT ADVICE OR OPINION. +

    +IN NO EVENT WILL WE, ANY COPYRIGHT HOLDER, OTHER RIGHTS HOLDER, LICENSOR, WEBSITE OR CONTENT PROVIDER, OR ANY OTHER PARTY WHO MAY CREATE, CONTRIBUTE TO, SPONSOR, HOST, MIRROR, LICENSE, AND/OR REDISTRIBUTE THIS WEBSITE OR ITS CONTENT IN WHOLE OR PART, OR THEIR OFFICERS, DIRECTORS, SHAREHOLDERS, EMPLOYEES, AGENTS, REPRESENTATIVES, OR INFORMATION PROVIDERS BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, PUNITIVE, INDIRECT, INCIDENTAL OR CONSEQUENTIAL DAMAGES, THE COST OF PROCUREMENT OF SUBSTITUTE TORRENTS OR OTHER CONTENT, OR LOSS OF PROFIT OR REVENUES ARISING OUT OF THIS AGREEMENT, OR THE USE, MISUSE, OR INABILITY TO ACCESS OR USE THIS WEBSITE, LICENSED CONTENT, OR ANY OTHER HYPERLINKED WEBSITE, REGARDLESS OF WHETHER THE ALLEGED LIABILITY IS BASED ON TORT STRICT LIABILITY, CONTRACT, NEGLIGENCE, OR ANY OTHER BASIS, EVEN IF SUCH HOLDER, PROVIDER, OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES, AND REGARDLESS OF WHETHER SUCH ADVISE WAS ACTUAL OR CONSTRUCTIVE, AND NOTWITHSTANDING ANY FAILURE OF ESSENTIAL PURPOSE OF ANY LIMITED REMEDY. USE OF THIS WEBSITE IN ANY JURISDICTION THAT DOES NOT ALLOW SUCH LIMITATION OF DAMAGES IS STRICTLY PROHIBITED. THIS DISCLAIMER OF WARRANTY IS AN ESSENTIAL PART OF THIS USER AGREEMENT. FURTHERMORE, IN NO EVENT SHALL TOTAL LIABILITY TO YOU FOR ALL DAMAGES, LOSSES, AND CAUSES OF ACTION, WHETHER IN CONTRACT, TORT, INCLUDING BUT NOT LIMITED TO NEGLIGENCE, OR OTHERWISE, EXCEED THE AMOUNT PAID BY YOU, IF ANY, FOR ACCESSING OR USING THIS WEBSITE OR ITS CONTENT. +

    +FORCE MAJEURE: ADDITIONALLY, IN NOT IN LIMITATION OF THE FORGOING, WE SHALL NOT HAVE ANY LIABILITY FOR ANY FAILURE OR DELAY RESULTING FROM ANY CONDITION BEYOND OUR REASONABLE CONTROL, INCLUDING BUT NOT LIMITED TO ILLNESS, GOVERNMENTAL ACTION OR ACTS OF TERRORISM, EARTHQUAKE OR OTHER NATURAL OCCURRENCES, LABOR CONDITIONS, OR POWER FAILURE. +

    +YOU AGREE AND COVENANT TO DEFEND BY COUNSEL REASONABLY ACCEPTED BY US, HOLD HARMLESS, EXONERATE, AND INDEMNIFY THE COPYRIGHT HOLDER(S), OTHER RIGHTS HOLDERS, , LICENSOR, AND OTHER PARTIES THAT PROVIDE OR LICENSE THIS WEBSITE AND ITS CONTENT, AND THEIR AFFILIATES, OFFICERS, AGENTS AND SERVANTS (OR THE LIKE) FOR, AGAINST, AND ON ACCOUNT OF ANY AND ALL DAMAGES, CLAIMS, DEMANDS, PROCEEDINGS, SUITS, CAUSES OF ACTION, JUDGMENTS, SETTLEMENTS, LOSSES, OBLIGATIONS, EXPENSES, TAXES, PENALTIES, LEVIES, COSTS, DISBURSEMENTS, OR LIABILITY, OR THE LIKE, INCLUDING CONSULTANTS', ACCOUNTANTS' AND ATTORNEYS' FEES AND COURT COSTS, ARISING OUT OF, RELATING TO, IN ANY WAY CONNECTED WITH, EITHER DIRECTLY OR INDIRECTLY, OR RESULTING FROM YOUR ACCESS TO OR USE OR MISUSE OF THIS WEBSITE OR ASSOCIATED ALGORITHM(S), SOFTWARE, HARDWARE, INTERNET USAGE, INFORMATION, WEB PAGES, TORRENTS, DOCUMENTS, TEXT, E-MAIL, OR OTHER CONTENT, COMMUNICATION, OR USAGE, OR YOUR REPRESENTATIONS HEREUNDER, OR YOUR VIOLATION OF THIS AGREEMENT, OR FACTS WHICH IF TRUE WOULD BE IN VIOLATION OF THIS AGREEMENT, INCLUDING BUT NOT LIMITED TO ANY USE WHICH YOU MAKE, SUFFER, OR PERMIT TO BE MADE, OR YOUR WITHHOLDING OF INFORMATION, OR YOUR PROVIDING INACCURATE INFORMATION. YOU FURTHER AGREE, AND NOT IN LIMITATION HEREOF, THAT ANY CLAIM(S) BY YOU AGAINST US THAT ARE NOT AS EXPRESSLY AUTHORIZED HEREIN OR ARE IN AN AMOUNT EXCEEDING THAT EXPRESSLY AUTHORIZED HEREIN SHALL NOT BE EXCEPTED FROM THE FORGOING. YOU ADDITIONALLY AGREE THAT IF YOU ARE PROHIBITED FROM ACCESS TO OR USE OF THIS WEBSITE IN WHOLE OR PART, BUT YOU NEVERTHELESS DO ACCESS OR USE THIS WEBSITE IN VIOLATION OF THE PROHIBITION, OR IN AN UNLAWFUL MANNER, THAT THE FORGOING SHALL APPLY, BUT THE AMOUNT SHALL BE DOUBLED AS A PENALTY FOR EXPOSING US TO LIABILITY WHEN YOUR USE WAS PROHIBITED OR UNLAWFUL. IF WE CONSEQUENTLY SEEK WRITTEN ASSURANCES FROM YOU CONCERNING YOUR PROMISE TO INDEMNIFY US AND YOU FAIL TO PROVIDE SUCH ASSURANCES WITHIN SEVEN DAYS, YOUR FAILURE SHALL CONSTITUTE A BREACH OF THIS USER AGREEMENT, AND IN SUCH EVENT, YOU AGREE TO PAY US ADDITIONAL DAMAGES FOR YOUR FAILURE TO PROVIDE SUCH ASSURANCES IN THE AMOUNT OF TWICE THE GREATER OF THE ACTUAL OR POTENTIAL LIABILITY SO CREATED BY EACH SUCH DAMAGES, CLAIM, DEMAND, PROCEEDING, SUIT, CAUSE OF ACTION, JUDGMENT, SETTLEMENT, LOSS, OBLIGATION, EXPENSE, TAX, PENALTY, LEVY, COST, DISBURSEMENT, OR LIABILITY, OR THE LIKE, OR TWENTY THOUSAND U.S. DOLLARS EACH. +

    +DISPUTE RESOLUTION
    +ANY AND ALL DISPUTES AND CONTROVERSIES ARISING HEREUNDER OR RELATING TO THIS WEBSITE (INCLUDING BUT NOT LIMITED TO ANY CLAIM THAT CHALLENGES THE VALIDITY, ENFORCEABILITY, OR SCOPE OF THIS USER AGREEMENT) WHICH THE PARTIES ARE UNABLE TO RESOLVE, SHALL BE RESOLVED IN A FORUM AS DETERMINED AT THE SOLE DISCRETION OF WHICH MAY INCLUDE, BUT IS NOT LIMITED TO MEDIATION, AND/OR FINAL AND BINDING ARBITRATION UNDER THE RULES AND PROCEDURES OF THE AMERICAN ARBITRATION ASSOCIATION, ALL OF WHICH PROCEEDING(S) SHALL BE AT YOUR EXPENSE (AND NOT AT THE EXPENSE OF , COPYRIGHT HOLDER(S), OTHER RIGHTS HOLDERS, LICENSOR, AND/OR OTHER PARTIES THAT PROVIDE THIS WEBSITE AND ITS CONTENT), MAY BE CONDUCTED BY E-MAIL, OTHER ELECTRONIC COMMUNICATION METHOD, OR TELEPHONIC CONFERENCE CALL, JUDGMENT MAY BE ENTERED IN ANY COURT OF COMPETENT JURISDICTION, THERE SHALL BE NO AUTHORITY FOR ANY CLAIMS TO BE HEARD ON A CLASS-ACTION BASIS NOR JOINED WITH CLAIMS OF OTHER PARTIES, AND YOU MAY NOT BRING ANY SUCH ACTION ARISING HEREUNDER OR RELATING TO THIS USER AGREEMENT OR WEBSITE LATER THAN ONE YEAR AFTER THE CAUSE OF ACTION ACCRUED. AVAILABLE REMEDIES SHALL INCLUDE BUT ARE NOT LIMITED TO INJUNCTIVE RELIEF AND MONETARY DAMAGES. FOR PURPOSES OF LEGAL INTERPRETATION HEREUNDER, AND NOTWITHSTANDING ANY CASE LAW TO THE CONTRARY, THE PARTIES HERETO AGREE AND STIPULATE THAT YOUR USING AN TORRENT(S) OR OTHER CONTENT OBTAINED FROM US OR THIS WEBSITE WITHOUT PERMISSION SHALL CONSTITUTE A TORT REQUIRING COMPENSATION, THAT EACH TORRENT INCLUDED ON THIS WEBSITE HAS BEEN AND SHALL CONCLUSIVELY BE PRESUMED TO BE DIGITALLY MODIFIED AND RESTORED IN A MANNER THAT HAS SUFFICIENT ORIGINALITY TO CREATE A NEW SEPARATE DERIVATIVE WORK UNDER COPYRIGHT LAW, THAT SUCH TORRENTS ARE NOT IN THE PUBLIC DOMAIN, THAT THIS WEBSITE IS A COMPILATION POSSESSING ORIGINALITY WITH NEW MATERIAL ADDED, AND THAT COPYRIGHT LAW DOES NOT PREEMPT CONTRACT LAW. BECAUSE THIS WEBSITE MAY BE LAWFULLY USED ONLY BY THOSE WHO ARE BOTH LEGALLY CAPABLE OF ACCEPTING THIS USER AGREEMENT WITHOUT MODIFICATION, AND WHO IN FACT DO SO ACCEPT AND AGREE WITH ALL THE PROVISIONS AND INTERPRETATIONS AS STATED HEREIN, AND AN IMPORTANT PURPOSE OF THIS USER AGREEMENT IS TO PROVIDE CERTAINTY OF LEGAL INTERPRETATION AND CONSEQUENTLY TO ACHIEVE THE RESULT(S) ANTICIPATED BY THIS DOCUMENT - DESPITE THE UNCERTAINTIES AND DIFFICULTY OTHERWISE OF ATTEMPTING TO APPLY ESTABLISHED AND/OR UNSETTLED LAW IN THE FACE OF NEW TECHNOLOGY - IF ANY MATTER OR ISSUE(S) IN DISPUTE IS ANTICIPATED BY A PROVISION(S) OF THIS USER AGREEMENT, THE PERSON(S) ADJUDICATING THE DISPUTE SHALL GIVE UTMOST DEFERENCE TO SUCH PROVISION(S) AND SHALL BE BOUND TO DECIDE THE MATTER IN A MANNER CONSISTENT WITH THE PROVISION(S) HEREOF AND SO AS TO ACHIVE THE RESULT AS STATED HEREIN. IN THE EVENT THAT YOU ARE A GOVERNMENTAL ENTITY, YOU WAIVE SOVEREIGN IMMUNITY AND FURTHER STIPULATE AND AGREE THAT ANY USE OF THIS WEBSITE OR ITS CONTENT, EXCEPT AS PERMITTED HEREIN, SHALL CONSTITUTE A TAKING REQUIRING JUST COMPENSATION AS SET FORTH HEREIN. THIS USER AGREEMENT SHALL BE CONSTRUED UNDER AND GOVERNED BY CALIFORNIA LAW AS SUCH LAW APPLIES TO AGREEMENTS BETWEEN CALIFORNIA RESIDENTS ENTERED INTO AND TO BE PERFORMED WITHIN THE STATE OF CALIFORNIA, AND UNDER THE LAW OF THE UNITED STATES OF AMERICA, OR SUCH ALTERNATIVE JURISDICTION AS MAY DESIGNATE IN WRITING FROM TIME TO TIME SHALL APPLY, WITHOUT REGARD TO ITS CONFLICT OF LAW PROVISIONS. IT IS THE INTENT OF THE PARTIES HERETO THAT THE FORUM AND JURISDICTION BE CHOSEN BY SO THAT INSOFAR AS IT IS POSSIBLE, COSTS OF DISPUTE RESOLUTION ARE MINIMIZED, EFFECT SHALL BE GIVEN TO THE INTENT MANIFESTED, AND ALL PORTIONS OF THIS AGREEMENT BE HELD ENFORCEABLE, VALID AND OPERATIVE. +

    +YOU AGREE NOT TO SEND US ANYTHING THAT WE ARE NOT PERMITTED TO PUBLISH, AND/OR REPUBLISH ROYALTY FREE. BY SUBMITTING OR GRANTING US ACCESS, USING ANY E-MAIL LINK ON THIS WEBSITE, TRANSMITTING VIA E-MAIL, OR OTHERWISE SENDING, CONTRIBUTING, PROVIDING TO US, WRITING TO OR ABOUT US, OR BY GRANTING US PERMISSION TO USE MATERIAL, CONTENT AND/OR INFORMATION, INCLUDING BUT NOT LIMITED TO TEXT, WEB PAGES, TORRENTS, MAPS, NAMES, AFFILIATIONS, DATA, REVIEWS, ARTICLES, AND/OR FILES, YOU ARE REPRESENTING AND WARRANTING THAT YOU ARE THE OWNER AND HAVE AUTHORIZATION TO CONTROL AND DISTRIBUTE SUCH MATERIAL, CONTENT AND/OR INFORMATION AND EXERCISE SUCH RIGHTS, THAT SUCH MATERIAL IS NONPROPRIETARY, THAT YOUR SENDING OR MAKING AVAILABLE TO US AND OUR PUBLICATION OF SUCH MATERIAL DOES NOT AND WILL NOT INFRINGE ANY THIRD PARTY'S COPYRIGHT, TRADEMARK, OR OTHER PROPRIETARY RIGHTS OR RIGHT OF PUBLICITY OR PRIVACY NOR VIOLATE ANY APPLICABLE LAW, STATUTE, ORDINANCE OR REGULATION, NOR OBLIGATE US TO PUBLISH THE TORRENT OR OTHER CONTENT, AND YOU ARE GRANTING TO US AN UNRESTRICTED, PERPETUAL, PERMANENT, IRREVOCABLE, TRANSFERABLE, SUBLICENSABLE (THROUGH MULTIPLE TIERS), NON-EXCLUSIVE, UNCONDITIONAL, FULLY PAID-UP, ROYALTY FREE LICENSE TO ALL RIGHTS TO SUCH MATERIAL, CONTENT AND/OR INFORMATION THAT GRANTS PERMISSION FOR USE ANYWHERE THROUGHOUT THE UNIVERSE, IN ANY MANNER, AND FOR ANY PURPOSE (INCLUDING BUT NOT LIMITED TO THE RIGHT TO REPRODUCE, PUBLISH, SELL, AND DISTRIBUTE COPIES OF WORKS CONTAINING THE CONTRIBUTION, SELECTIONS THEREFROM, AND TRANSLATIONS AND OTHER DERIVATIVE WORKS AND/OR EDITIONS), WITHOUT COMPENSATION TO YOU, HOWEVER OUR ENDEAVOR EVOLVES, INCLUDING BUT NOT LIMITED TO THE RIGHT TO EXERCISE ALL RIGHTS, UNDER COPYRIGHT (INCLUDING BUT NOT LIMITED TO FOR THE FULL TERM, AND ALL RENEWALS AND EXTENSIONS THEREOF), INTELLECTUAL PROPERTY, AND RELATED LAWS, IN ANY MEDIA NOW KNOWN OR NOT CURRENTLY KNOWN, AND THE RIGHT TO LICENSE OR AUTHORIZE OTHERS TO DO, LICENSE, OR AUTHORIZE ANY OR ALL OF THE FOREGOING, AND (IF YOU ARE THE AUTHOR OR RIGHTS OWNER OF SUBMITTED PREVIOUSLY UNPUBLISHED CONTENT) THAT YOU ASSIGN COPYRIGHT TO , AND (IF APPLICABLE) THAT ALL SO-CALLED MORAL RIGHTS IN SUCH MATERIAL HAVE BEEN WAIVED. PLEASE BE EXTREMELY CAREFUL NOT TO DONATE WHAT YOU DO NOT OWN BECAUSE DOING SO MIGHT EXPOSE YOU TO LEGAL LIABILITY FOR COPYRIGHT INFRINGEMENT OR OTHER RIGHTS VIOLATIONS, AND YOU AGREE TO DEFEND, HOLD HARMLESS, AND INDEMNIFY US FROM ANY RESULTING LIABILITY OR LOSS. ANY SUBMISSIONS, CONTRIBUTIONS, QUESTIONS, COMMENTS, FEEDBACK, SUGGESTIONS, IDEAS, TECHNIQUES, CONCEPTS, KNOW-HOW OR OTHER INFORMATION RECEIVED BY SHALL BE DEEMED NOT TO BE CONFIDENTIAL AND MAY BE FREELY USED, EDITED, MODIFIED, ADAPTED, TRANSLATED, DISSEMINATED, PUBLISHED, DELETED, LICENSED, DISCLOSED, AND/OR DISTRIBUTED BY WITHOUT LIMITATION AND WITHOUT COMPENSATION, ANYWHERE, IN ANY MANNER, AND FOR ANY PURPOSE WHATSOEVER. MONETARY GIFTS ARE ALSO GREATLY APPRECIATED, SHALL BE UNRESTRICTED, AND MAY BE USED FOR ANY PURPOSE. WE ARE NOT A PUBLIC ENTITY, NOR IRC §501(c)(3) QUALIFIED. WE WANT TO PROVIDE SUITABLE CREDIT ON THIS WEBSITE FOR CONTENT DONATIONS WHENEVER POSSIBLE, AT OUR SOLE DISCRETION - IF YOU WOULD LIKE TO RECEIVE CREDIT, PLEASE MAKE SURE TO LET US KNOW YOUR NAME AND TELL US IF YOU HAVE A PREFERRED FORM OF CREDIT. +WHEN YOU SEND OR E-MAIL IT, IT'S OURS. +

    +Privacy and Security Statement +We do not want, ask for, or need your private information, so it is your responsibility and we are relying upon you to select, configure, and operate your computer and networking equipment, operating system, Internet browser, e-mail and related software, etc. to protect your privacy and security generally to the extent that you prefer and to provide us only with information that you want us to have and use without restriction. We like to be able to give credit on this website for donated torrents or other content if donors let us know their full name and/or their website URL. Since third parties provide a variety of valuable services such as web hosting [Valueweb.net, & Comcast.net], server logs and site statistics, linked websites, hit counters (that also tell us which pages visitors prefer), searching the site's content and the web (from which we learn what subject matter visitors are seeking and what search methods are being used), fulfillment of book orders, etc., and we have little knowledge and no control over third-party's often inadequate and frequently changing privacy and security policies and practices (which unfortunately may not conform to their stated policies), we strongly recommend the following minimum general privacy and security measures (among others) which are not specific to this website, if and to the extent that you wish to maintain your privacy: (1) use a proxy server that hides your actual IP address so that it does not appear in server log files; (2) if you enable cookies which many websites require to operate properly (but which we do not currently and never have used, but which are used by third parties), you should erase them at least daily; (3) use a browser that withholds the referring URL if you prefer this option; (4) use a hardware stealth firewall; (5) regularly use up-to-date virus checking, backup, and disk repair software; (6) use security software that attempts to detect and prevent surreptitious capture and transmission of personal identifiers such as names, user-id's or numbers, e-mail addresses, unique machine specific identifiers such as your computer's permanent ethernet MAC (Media Access Control) address or cookie stored GUID (Globally Unique Identifier), or your actual IP address, (7) use high grade encryption for all private, if not all communications; (8) never send confidential information or information not intended for publication using any e-mail link on this website; (9) be aware that e-mail addresses appearing on websites are subject to abuse by spammers; and, extremely important, (10) block all hosts that do not conform to your expectations of proper conduct. No Site security measures are needed to protect donated information or content or disclosed personally identifiable information and affiliation of the donor from being publicly viewed and/or distributed, as and notwithstanding any notice to the contrary, it is all intended to be available to for publication. +

    +BY CLICKING ON ANY TORRENT OR LINK TO INDICATE "I ACCEPT," BY ACCESSING AND BROWSING THIS WEBSITE, OR BY SENDING US AN E-MAIL OR OTHER COMMUNICATION, WHETHER DIRETLY OR INDIRECTLY, YOU ARE ASSERTING THAT YOU HAVE READ AND AGREE TO THIS USER AGREEMENT, WITHOUT LIMITATION, THAT YOU UNDERSTAND THIS USER AGREEMENT, AND THAT YOU ARE LEGALLY AUTHORIZED TO ASSENT TO BE BOUND TO THE TERMS AND CONDITIONS AS PRESENTED IN THIS USER AGREEMENT. CONTINUED ACCEPTANCE OF ALL THESE TERMS IS A CONDITION OF THIS AGREEMENT AND IS REQUIRED FOR YOUR ACCESS TO THIS WEBSITE. +

    +Spamming, as well as repetitive, harassing, threatening, intrusive, vulgar, profane, abusive, impolite, untruthful, disparaging, and/or off-topic messages or other communications to us or concerning this website are all prohibited. You may not send us unsolicited advertisements via e-mail or fax, nor call us by telephone, nor send e-mail to our address or domain(s) that does not contain our valid address in the "To:" and/or "cc:" header, nor which has a missing, uninformative, or misleading "Subject:" header, and/or return address, nor without permission from a mailing list, nor containing an html message body, nor having attachments other than donated torrents and/or other donated content relating to the subject matter of this website, nor containing a computer virus, worm, or other corrupted or malicious code, nor containing proprietary content that you do not own and/or control, nor may you copy or place our e-mail address, nor any e-mail address in our domains or owned by us, nor any e-mail address found on this website or obtained from us in any database or on any mailing list. You agree to pay us three thousand dollars per unsolicited e-mail sent or telephone call and fifteen thousand dollars per e-mail address added to your commercial mailing list in violation of the foregoing, plus damages. +

    +All contents on this website, both textual and graphic, including but not limited to computer code and images, and all e-mail or other messages or correspondence from are the property of , are copyrighted, and may not be reproduced or published without permission. +, , .com, and .net are trademarks and service marks of . +The "" is the title of this publication only. +

    +Copyright © 2007 by . All rights reserved. +

    "); + end_main_frame(); +} +function getimagewidth ($imagewidth, $imageheight) +{ + while (($imagewidth > 150) or ($imageheight > 150)) + { + $imagewidth=150; + $imageheight=150; + } + return $imagewidth; +} +function getimageheight ($imagewidth, $imageheight) +{ + while (($imagewidth > 150) or ($imageheight > 150)) + { + $imagewidth=150; + $imageheight=150; + } + return $imageheight; +} +function form($name) { + return print("
    "); +} +function submit() { + global $lang_usercp; + print("".$lang_usercp['row_save_settings'].""."
    "); +} +function format_tz($a) +{ + $h = floor($a); + $m = ($a - floor($a)) * 60; + return ($a >= 0?"+":"-") . (strlen(abs($h)) > 1?"":"0") . abs($h) . + ":" . ($m==0?"00":$m); +} +function priv($name, $descr) { + global $CURUSER; + if ($CURUSER["privacy"] == $name) + return " ".htmlspecialchars($descr); + else + return " ".htmlspecialchars($descr); +} +function goback ($where = "-1") { + global $lang_usercp; + $text = $lang_usercp['text_go_back']; + $goback = "".htmlspecialchars($text).""; + return $goback; +} +$action = isset($_POST['action']) ? htmlspecialchars($_POST['action']) : (isset($_GET['action']) ? htmlspecialchars($_GET['action']) : ''); +$type = isset($_POST['type']) ? htmlspecialchars($_POST['type']) : (isset($_GET['type']) ? htmlspecialchars($_GET['type']) : ''); + +$allowed_actions = array("personal","tracker","forum","security"); +if ($action){ + if (!in_array($action, $allowed_actions)) + stderr($lang_usercp['std_error'], $lang_usercp['std_invalid_action']); + else { + switch ($action) { + case "personal": + if ($type == 'save') { + $updateset = array(); + $parked = $_POST["parked"]; + if ($parked != 'yes') + $parked = 'no'; + $acceptpms = $_POST["acceptpms"]; + $deletepms = ($_POST["deletepms"] != "" ? "yes" : "no"); + $savepms = ($_POST["savepms"] != "" ? "yes" : "no"); + $commentpm = $_POST["commentpm"]; + $gender = $_POST["gender"]; + $country = $_POST["country"]; + if ($showschool = 'yes'){ + $school = $_POST["school"]; + $updateset[] = "school = ".sqlesc($school); + } + $download = $_POST["download"]; + $upload = $_POST["upload"]; + $isp = $_POST["isp"]; + // $tzoffset = $_POST["tzoffset"]; + if ( $_POST["avatar"] == '' ) + $avatar=$_POST["savatar"]; + else + $avatar = $_POST["avatar"]; + + if(preg_match("/^http:\/\/[^\s'\"<>]+\.(jpg|gif|png|jpeg)$/i", $avatar) && !preg_match("/\.php/i",$avatar) && !preg_match("/\.js/i",$avatar) && !preg_match("/\.cgi/i",$avatar)) { + $avatar = htmlspecialchars( trim( $avatar ) ); + $updateset[] = "avatar = " . sqlesc($avatar); + } + $info = htmlspecialchars(trim($_POST["info"])); + + $updateset[] = "parked = " . sqlesc($parked); + $updateset[] = "acceptpms = " . sqlesc($acceptpms); + $updateset[] = "deletepms = " . sqlesc($deletepms); + $updateset[] = "savepms = " . sqlesc($savepms); + $updateset[] = "commentpm = " . sqlesc($commentpm); + $updateset[] = "gender = " . sqlesc($gender); + if (is_valid_id($country)) + $updateset[] = "country = " . sqlesc($country); + if (is_valid_id($download)) + $updateset[] = "download = " . sqlesc($download); + if (is_valid_id($upload)) + $updateset[] = "upload = " . sqlesc($upload); + if (is_valid_id($isp)) + $updateset[] = "isp = " . sqlesc($isp); + // $updateset[] = "tzoffset = " . sqlesc($tzoffset); + + $updateset[] = "info = " . sqlesc($info); + + $query = "UPDATE users SET " . implode(",", $updateset) . " WHERE id = ".sqlesc($CURUSER["id"]); + $result = sql_query($query); + if (!$result) + sqlerr(__FILE__,__LINE__); + else + header("Location: usercp.php?action=personal&type=saved"); + } + stdhead($lang_usercp['head_control_panel'].$lang_usercp['head_personal_settings'],true); + + $countries = "\n"; + $ct_r = sql_query("SELECT id,name FROM countries ORDER BY name") or die; + while ($ct_a = mysql_fetch_array($ct_r)) + $countries .= "\n"; + $isplist = "\n"; + $isp_r = sql_query("SELECT id,name FROM isp ORDER BY id ASC") or die; + while ($isp_a = mysql_fetch_array($isp_r)) + $isplist .= "\n"; + $downloadspeed = "\n"; + $ds_a = sql_query("SELECT id,name FROM downloadspeed ORDER BY id") or die; + while ($ds_b = mysql_fetch_array($ds_a)) + $downloadspeed .= "\n"; + + $uploadspeed = "\n"; + $us_a = sql_query("SELECT id,name FROM uploadspeed ORDER BY id") or die; + while ($us_b = mysql_fetch_array($us_a)) + $uploadspeed .= "\n"; + $ra=sql_query("SELECT * FROM bitbucket WHERE public = '1'"); + $options=''; + while ($sor=mysql_fetch_array($ra)) + { + $text.=''; + } + + usercpmenu ("personal"); + print (""); + if ($type == 'saved') + print("\n"); + + form ("personal"); + tr_small($lang_usercp['row_account_parked'], + "".$lang_usercp['checkbox_pack_my_account']."
    ".$lang_usercp['text_account_pack_note']."" + ,1); + tr_small($lang_usercp['row_pms'],$lang_usercp['text_accept_pms']."".$lang_usercp['radio_all_except_blocks']."".$lang_usercp['radio_friends_only']."".$lang_usercp['radio_staff_only']."
    ".$lang_usercp['checkbox_delete_pms']."
    ".$lang_usercp['checkbox_save_pms']."
    ".$lang_usercp['checkbox_pm_on_comments'],1); + + tr_small($lang_usercp['row_gender'], + "".$lang_usercp['radio_not_available']." +".$lang_usercp['radio_male']."".$lang_usercp['radio_female'],1); + tr_small($lang_usercp['row_country'], "",1); + //School select +if ($showschool == 'yes'){ +$schools = "n"; +$sc_r = sql_query("SELECT id,name FROM schools ORDER BY name") or die; +while ($sc_a = mysql_fetch_array($sc_r)) +$schools .= "n"; +tr($lang_usercp['row_school'], "", 1); +} + tr_small($lang_usercp['row_network_bandwidth'], "".$lang_usercp['text_downstream_rate']. ":   ".$lang_usercp['text_upstream_rate'].":   ".$lang_usercp['text_isp'].": ",1); + tr_small($lang_usercp['row_avatar_url'], "
    +
    \n".$lang_usercp['text_avatar_note'].($enablebitbucket_main == 'yes' ? $lang_usercp['text_bitbucket_note'] : ""),1); + tr($lang_usercp['row_info'], "
    ".$lang_usercp['text_info_note'], 1); + submit(); + print("
    ".$lang_usercp['text_saved']."
    "); + stdfoot(); + die; + break; + case "tracker": + $showaddisabled = true; + if ($enablead_advertisement == 'yes'){ + if (get_user_class() >= $noad_advertisement || ($enablebonusnoad_advertisement == 'yes' && strtotime($CURUSER['noaduntil']) >= TIMENOW)){ + $showaddisabled = false; + } + } + if ($enabletooltip_tweak == 'yes') + $showtooltipsetting = true; + else + $showtooltipsetting = false; + if ($type == 'save') { + $updateset = array(); + $pmnotif = $_POST["pmnotif"]; + $emailnotif = $_POST["emailnotif"]; + $notifs = ($pmnotif == 'yes' ? "[pm]" : ""); + $notifs .= ($emailnotif == 'yes' ? "[email]" : ""); + + function browsecheck($dbtable = "categories", $cbname = "cat"){ + global $_POST; + $return = ""; + $r = sql_query("SELECT id FROM ".$dbtable) or sqlerr(); + $rows = mysql_num_rows($r); + for ($i = 0; $i < $rows; ++$i) + { + $a = mysql_fetch_assoc($r); + if ($_POST[$cbname.$a[id]] == 'yes') + $return .= "[".$cbname.$a[id]."]"; + } + return $return; + } + /*$r = sql_query("SELECT id FROM categories") or sqlerr(); + $rows = mysql_num_rows($r); + for ($i = 0; $i < $rows; ++$i) + { + $a = mysql_fetch_assoc($r); + if ($_POST["cat$a[id]"] == 'yes') + $notifs .= "[cat$a[id]]"; + }*/ + $notifs .= browsecheck("categories", "cat"); + $notifs .= browsecheck("sources", "sou"); + $notifs .= browsecheck("media", "med"); + $notifs .= browsecheck("codecs", "cod"); + $notifs .= browsecheck("standards", "sta"); + $notifs .= browsecheck("processings", "pro"); + $notifs .= browsecheck("teams", "tea"); + $notifs .= browsecheck("audiocodecs", "aud"); + $incldead = $_POST["incldead"]; + if (isset($incldead) && $incldead != 1) + $notifs .= "[incldead=".$incldead."]"; + $spstate = $_POST["spstate"]; + if ($spstate) + $notifs .= "[spstate=".$spstate."]"; + $inclbookmarked = $_POST["inclbookmarked"]; + if ($inclbookmarked) + $notifs .= "[inclbookmarked=".$inclbookmarked."]"; + $stylesheet = $_POST["stylesheet"]; + $caticon = $_POST["caticon"]; + $sitelanguage = $_POST["sitelanguage"]; + $fontsize = $_POST["fontsize"]; + if ($fontsize == 'large') + $updateset[] = "fontsize = 'large'"; + elseif ($fontsize == 'small') + $updateset[] = "fontsize = 'small'"; + else $updateset[] = "fontsize = 'medium'"; + $updateset[] = "notifs = " . sqlesc($notifs); + + if (is_valid_id($stylesheet)) + $updateset[] = "stylesheet = " . sqlesc($stylesheet); + if (is_valid_id($caticon)) + $updateset[] = "caticon = " . sqlesc($caticon); + + if (is_valid_id($sitelanguage)) + { + $lang_folder = validlang($sitelanguage); + if(get_langfolder_cookie() != $lang_folder) + { + set_langfolder_cookie($lang_folder); + header("Location: " . $_SERVER['PHP_SELF']); + } + $updateset[] = "lang = " . sqlesc($sitelanguage); + } + + $updateset[] = "torrentsperpage = " . min(100, 0 + $_POST["torrentsperpage"]); + if ($showmovies['hot'] == "yes"){ + $showhot = $_POST["show_hot"]; + $updateset[] = "showhot = " . sqlesc($showhot); + } + if ($showmovies['classic'] == "yes"){ + $showclassic = $_POST["show_classic"]; + $updateset[] = "showclassic = " . sqlesc($showclassic); + } + if ($showtooltipsetting){ + $tooltip = $_POST['tooltip']; + $updateset[] = "tooltip = " . sqlesc($tooltip); + } + if ($enablead_advertisement == 'yes' && !$showaddisabled){ + $noad = ($_POST['showad'] == 'yes' ? "no" : "yes"); + $updateset[] = "noad = " . sqlesc($noad); + } + $timetype = $_POST['timetype']; + $updateset[] = "timetype = " . sqlesc($timetype); + + $appendsticky = ($_POST["appendsticky"] == 'yes' ? "yes" : "no"); + $updateset[] = "appendsticky = " . sqlesc($appendsticky); + $appendnew = ($_POST["appendnew"] == 'yes' ? "yes" : "no"); + $updateset[] = "appendnew = " . sqlesc($appendnew); + $appendpromotion = $_POST["appendpromotion"]; + $updateset[] = "appendpromotion = " . sqlesc($appendpromotion); + $appendpicked = ($_POST["appendpicked"] == 'yes' ? "yes" : "no"); + $updateset[] = "appendpicked = " . sqlesc($appendpicked); + $dlicon = ($_POST['dlicon'] == 'yes' ? "yes" : "no"); + $updateset[] = "dlicon = " . sqlesc($dlicon); + $bmicon = ($_POST['bmicon'] == 'yes' ? "yes" : "no"); + $updateset[] = "bmicon = " . sqlesc($bmicon); + + $showcomnum = ($_POST["showcomnum"] == 'yes' ? "yes" : "no"); + $updateset[] = "showcomnum = " . sqlesc($showcomnum); + if ($showtooltipsetting){ + $showlastcom = ($_POST["showlastcom"] == 'yes' ? "yes" : "no"); + $updateset[] = "showlastcom = " . sqlesc($showlastcom); + } + $pmnum = ($_POST["pmnum"] < 1 || $_POST["pmnum"] > 100 ? 20 : floor($_POST["pmnum"])); + $updateset[] = "pmnum = " . $pmnum; + if ($showfunbox_main == 'yes'){$showfb = ($_POST["showfb"] == 'yes' ? "yes" : "no"); + $updateset[] = "showfb = " . sqlesc($showfb);} + $sbnum = ($_POST["sbnum"] ? max(10, min(500, 0 + $_POST["sbnum"])) : 70); + $updateset[] = "sbnum = " . $sbnum; + $sbrefresh = ($_POST["sbrefresh"] ? max(10, min(3600, 0 + $_POST["sbrefresh"])) : 120); + $updateset[] = "sbrefresh = " . $sbrefresh; + + if ($_POST["hidehb"] == 'yes') + $hidehb = 'yes'; + else $hidehb = 'no'; + $updateset[] = "hidehb = " . sqlesc($hidehb); + if ($showextinfo['imdb'] == 'yes'){if ($_POST["showimdb"] == 'yes') + $showimdb = 'yes'; + else $showimdb = 'no'; + $updateset[] = "showimdb = " . sqlesc($showimdb);} + if ($_POST["showdescription"] == 'yes') + $showdescription = 'yes'; + else $showdescription = 'no'; + $updateset[] = "showdescription = " . sqlesc($showdescription); + if ($enablenfo_main == 'yes'){ + if ($_POST["shownfo"] == 'yes') + $shownfo = 'yes'; + else $shownfo = 'no'; + $updateset[] = "shownfo = " . sqlesc($shownfo); + } + if ($_POST["smalldescr"] == 'yes') + $showsmalldescr = 'yes'; + else $showsmalldescr = 'no'; + $updateset[] = "showsmalldescr = " . sqlesc($showsmalldescr); + if ($_POST["showcomment"] == 'yes') + $showcomment = 'yes'; + else $showcomment = 'no'; + $updateset[] = "showcomment = " . sqlesc($showcomment); + + $query = "UPDATE users SET " . implode(",", $updateset) . " WHERE id =".sqlesc($CURUSER["id"]); + //stderr("",$query); + $result = sql_query($query) or sqlerr(__FILE__,__LINE__); + header("Location: usercp.php?action=tracker&type=saved"); + } + stdhead($lang_usercp['head_control_panel'].$lang_usercp['head_tracker_settings']); + usercpmenu ("tracker"); +$brsectiontype = $browsecatmode; +$spsectiontype = $specialcatmode; +if ($enablespecial == 'yes') + $allowspecial = true; +else $allowspecial = false; +$showsubcat = (get_searchbox_value($brsectiontype, 'showsubcat') || ($allowspecial && get_searchbox_value($spsectiontype, 'showsubcat'))); +$showsource = (get_searchbox_value($brsectiontype, 'showsource') || ($allowspecial && get_searchbox_value($spsectiontype, 'showsource'))); //whether show sources or not +$showmedium = (get_searchbox_value($brsectiontype, 'showmedium') || ($allowspecial && get_searchbox_value($spsectiontype, 'showmedium'))); //whether show media or not +$showcodec = (get_searchbox_value($brsectiontype, 'showcodec') || ($allowspecial && get_searchbox_value($spsectiontype, 'showcodec'))); //whether show codecs or not +$showstandard = (get_searchbox_value($brsectiontype, 'showstandard') || ($allowspecial && get_searchbox_value($spsectiontype, 'showstandard'))); //whether show standards or not +$showprocessing = (get_searchbox_value($brsectiontype, 'showprocessing') || ($allowspecial && get_searchbox_value($spsectiontype, 'showprocessing'))); //whether show processings or not +$showteam = (get_searchbox_value($brsectiontype, 'showteam') || ($allowspecial && get_searchbox_value($spsectiontype, 'showteam'))); //whether show teams or not +$showaudiocodec = (get_searchbox_value($brsectiontype, 'showaudiocodec') || ($allowspecial && get_searchbox_value($spsectiontype, 'showaudiocodec'))); //whether show audio codecs or not +$brcatsperror = get_searchbox_value($brsectiontype, 'catsperrow'); +$catsperrow = get_searchbox_value($spsectiontype, 'catsperrow'); +$catsperrow = (!$allowspecial ? $brcatsperror : ($catsperrow > $catsperrow ? $catsperrow : $catsperrow)); //show how many cats per line + +$brcatpadding = get_searchbox_value($brsectiontype, 'catpadding'); +$spcatpadding = get_searchbox_value($spsectiontype, 'catpadding'); +$catpadding = (!$allowspecial ? $brcatpadding : ($brcatpadding < $spcatpadding ? $brcatpadding : $spcatpadding)); //padding space between categories in pixel + +$brcats = genrelist($brsectiontype); +$spcats = genrelist($spsectiontype); + +if ($showsubcat){ +if ($showsource) $sources = searchbox_item_list("sources"); +if ($showmedium) $media = searchbox_item_list("media"); +if ($showcodec) $codecs = searchbox_item_list("codecs"); +if ($showstandard) $standards = searchbox_item_list("standards"); +if ($showprocessing) $processings = searchbox_item_list("processings"); +if ($showteam) $teams = searchbox_item_list("teams"); +if ($showaudiocodec) $audiocodecs = searchbox_item_list("audiocodecs"); +} + print (""); + form ("tracker"); + if ($type == 'saved') + print("\n"); + if ($emailnotify_smtp=='yes' && $smtptype != 'none') + tr_small($lang_usercp['row_email_notification'], " ".$lang_usercp['checkbox_notification_received_pm']."
    \n ".$lang_usercp['checkbox_notification_default_categories'], 1); + + $categories = "
    ".$lang_usercp['text_saved']."
    ".($allowspecial ? "
    ".$lang_usercp['text_at_browse_page']."
    " : "").""; + $i = 0; + foreach ($brcats as $cat)//print category list of Torrents section + { + $numinrow = $i % $catsperrow; + $rownum = (int)($i / $catsperrow); + if ($i && $numinrow == 0){ + $categories .= "".($brenablecatrow ? "" : "").""; + } + $categories .= "\n"; + $i++; + } + $categories .= ""; + if ($allowspecial) //print category list of Special section + { + $categories .= "
    ".($brenablecatrow == true ? $brcatrow[0] : $lang_usercp['text_category'])."
    ".$brcatrow[$rownum]."
    ".return_category_image($cat['id'], "torrents.php?allsec=1&")."
    ".$lang_usercp['text_at_special_page']."
    "; + $categories .= ""; + $i = 0; + foreach ($spcats as $cat) + { + $numinrow = $i % $catsperrow; + $rownum = (int)($i / $catsperrow); + if ($i && $numinrow == 0){ + $categories .= "".($spenablecatrow ? "" : "").""; + } + $categories .= "\n"; + $i++; + } + $categories .= ""; + } + if ($showsubcat)//Show subcategory (i.e. source, codecs) selections + { + $categories .= "
    ".($spenablecatrow == true ? $spcatrow[0] : $lang_usercp['text_category'])."
    ".$spcatrow[$rownum]."
    \""
    ".$lang_usercp['text_sub_category']."
    "; + if ($showsource){ + $categories .= ""; + $i = 0; + foreach ($sources as $source) + { + $categories .= ($i && $i % $catsperrow == 0) ? "" : ""; + $categories .= "\n"; + $i++; + } + $categories .= ""; + } + if ($showmedium){ + $categories .= ""; + $i = 0; + foreach ($media as $medium) + { + $categories .= ($i && $i % $catsperrow == 0) ? "" : ""; + $categories .= "\n"; + $i++; + } + $categories .= ""; + } + if ($showcodec){ + $categories .= ""; + $i = 0; + foreach ($codecs as $codec) + { + $categories .= ($i && $i % $catsperrow == 0) ? "" : ""; + $categories .= "\n"; + $i++; + } + $categories .= ""; + } + if ($showaudiocodec){ + $categories .= ""; + $i = 0; + foreach ($audiocodecs as $audiocodec) + { + $categories .= ($i && $i % $catsperrow == 0) ? "" : ""; + $categories .= "\n"; + $i++; + } + $categories .= ""; + } + if ($showstandard){ + $categories .= ""; + $i = 0; + foreach ($standards as $standard) + { + $categories .= ($i && $i % $catsperrow == 0) ? "" : ""; + $categories .= "\n"; + $i++; + } + $categories .= ""; + } + if ($showprocessing){ + $categories .= ""; + $i = 0; + foreach ($processings as $processing) + { + $categories .= ($i && $i % $catsperrow == 0) ? "" : ""; + $categories .= "\n"; + $i++; + } + $categories .= ""; + } + if ($showteam){ + $categories .= ""; + $i = 0; + foreach ($teams as $team) + { + $categories .= ($i && $i % $catsperrow == 0) ? "" : ""; + $categories .= "\n"; + $i++; + } + $categories .= ""; + } + } + $categories .= "
    ".$lang_usercp['text_source']."
    $source[name]
    ".$lang_usercp['text_medium']."
    $medium[name]
    ".$lang_usercp['text_codec']."
    $codec[name]
    ".$lang_usercp['text_audio_codec']."
    $audiocodec[name]
    ".$lang_usercp['text_standard']."
    $standard[name]
    ".$lang_usercp['text_processing']."
    $processing[name]
    ".$lang_usercp['text_team']."
    $team[name]
    "; + $categories .= ""; + + if (strpos($CURUSER['notifs'], "[spstate=0]") !== false) + $special_state = 0; + elseif (strpos($CURUSER['notifs'], "[spstate=1]") !== false) + $special_state = 1; + elseif (strpos($CURUSER['notifs'], "[spstate=2]") !== false) + $special_state = 2; + elseif (strpos($CURUSER['notifs'], "[spstate=3]") !== false) + $special_state = 3; + elseif (strpos($CURUSER['notifs'], "[spstate=4]") !== false) + $special_state = 4; + elseif (strpos($CURUSER['notifs'], "[spstate=5]") !== false) + $special_state = 5; + elseif (strpos($CURUSER['notifs'], "[spstate=6]") !== false) + $special_state = 6; + else $special_state = 0; + + $categories .= ""; + $categories .= "
    ".$lang_usercp['text_additional_selection']."
    ".$lang_usercp['text_show_dead_active']."
    ".$lang_usercp['text_show_special_torrents']."
    ".$lang_usercp['text_show_bookmarked']."
    "; + tr_small($lang_usercp['row_browse_default_categories'],$categories,1); + $ss_r = sql_query("SELECT * FROM stylesheets") or die; + $ss_sa = array(); + while ($ss_a = mysql_fetch_array($ss_r)) + { + $ss_id = $ss_a["id"]; + $ss_name = $ss_a["name"]; + $ss_sa[$ss_name] = $ss_id; + } + ksort($ss_sa); + reset($ss_sa); + while (list($ss_name, $ss_id) = each($ss_sa)) + { + if ($ss_id == $CURUSER["stylesheet"]) $ss = " selected"; else $ss = ""; + $stylesheets .= "\n"; + } + $cires = sql_query("SELECT * FROM caticons ORDER BY name") or die; + while($caticon = mysql_fetch_array($cires)){ + if ($caticon['id'] == $CURUSER['caticon']) $sl = " selected"; else $sl = ""; + $categoryicons .= "\n"; + } + tr_small($lang_usercp['row_stylesheet'], "  ".$lang_usercp['text_stylesheet_note']."".$lang_usercp['text_stylesheet_link'].".",1); + tr_small($lang_usercp['row_category_icons'], "",1); + tr_small($lang_usercp['row_font_size'], "",1); + + + $s = "  ".$lang_usercp['text_translation_note']."".$lang_usercp['text_translation_link']."."; + + tr_small($lang_usercp['row_site_language'], $s,1); + + if($showmovies['hot'] == "yes" || $showmovies['classic'] == "yes") + tr_small($lang_usercp['row_recommended_movies'], ($showmovies['hot'] == "yes" ? "".$lang_usercp['checkbox_show_hot']. " " : "") . ($showmovies['classic'] == "yes" ? "".$lang_usercp['checkbox_show_classic']." " : ""),1); + tr_small($lang_usercp['row_pm_boxes'], $lang_usercp['text_show']."".$lang_usercp['text_pms_per_page'], 1); +if ($showshoutbox_main == "yes") //system side setting for shoutbox + tr_small($lang_usercp['row_shoutbox'], $lang_usercp['text_show_last']."".$lang_usercp['text_messages_at_shoutbox']."
    ".$lang_usercp['text_refresh_shoutbox_every']."".$lang_usercp['text_seconds'].($showhelpbox_main == 'yes' ? "
    ".$lang_usercp['text_hide_helpbox_messages'] : ""), 1); +if ($showfunbox_main == 'yes') //siteside setting for funbox +tr_small($lang_usercp['row_funbox'],"".$lang_usercp['text_show_funbox'] , 1); + + tr_small($lang_usercp['row_torrent_detail'], "".$lang_usercp['text_show_description']."
    ".($enablenfo_main == 'yes' && get_user_class() >= UC_POWER_USER ? "".$lang_usercp['text_show_nfo']."
    " : "").($showextinfo['imdb'] == 'yes' ? "".$lang_usercp['text_show_imdb_info'] : ""),1); + tr_small($lang_usercp['row_discuss'],"".$lang_usercp['text_show_comments'], 1); + if ($enablead_advertisement == 'yes'){ + tr_small($lang_usercp['row_show_advertisements'],"".$lang_usercp['text_show_advertisement_note'].($enablenoad_advertisement == 'yes' ? "
    ".get_user_class_name($noad_advertisement,false,true,true).$lang_usercp['text_can_turn_off_advertisement'] : "").($enablebonusnoad_advertisement == 'yes' ? "
    ".get_user_class_name($bonusnoad_advertisement,false,true,true).$lang_usercp['text_buy_no_advertisement']."".$lang_usercp['text_bonus_center']."" : ""), 1); + } + tr_small($lang_usercp['row_time_type'], "".$lang_usercp['text_time_added']."  ".$lang_usercp['text_time_elapsed']."
    ", 1); + //Setting for browse page + tr_small($lang_usercp['row_browse_page'], $lang_usercp['text_browse_setting_warning']." +
    ".$lang_usercp['row_torrent_page'].":
    ".$lang_usercp['text_show']." ".$lang_usercp['text_torrents_per_page'].$lang_usercp['text_zero_equals_default']."
    ". + ($showtooltipsetting ? "".$lang_usercp['text_tooltip_type'].":
    ".($showextinfo['imdb'] == 'yes' ? "".$lang_usercp['text_minor_imdb_info']."
    ".$lang_usercp['text_median_imdb_info']. "
    " : "")."".$lang_usercp['text_off']."
    " : ""). + "".$lang_usercp['text_append_words_to_torrents'].":
    ".$lang_usercp['text_append_sticky']."
    ".$lang_usercp['text_append_new']."
    ".$lang_usercp['text_torrents_on_promotion']."".$lang_usercp['text_highlight']."".$lang_usercp['text_append_words']."".$lang_usercp['text_append_icon']."".$lang_usercp['text_no_mark']."
    ".$lang_usercp['text_append_picked']."
    + ".$lang_usercp['text_show_title'].":
    "."".$lang_usercp['text_show_small_description']."
    + ".$lang_usercp['text_show_action_icons'].":
    "."".$lang_usercp['text_show_download_icon']." \"Download\"
    ".$lang_usercp['text_show_bookmark_icon']." \"Bookmark\"
    + ".$lang_usercp['text_comments_reviews'].":
    ".$lang_usercp['text_show_comment_number'].($showtooltipsetting ? "".$lang_usercp['text_last_comment_on_tooltip'] : ""), 1); + + submit(); + print(""); + stdfoot(); + die; + break; + case "forum": + if ($enabletooltip_tweak == 'yes') + $showtooltipsetting = true; + else + $showtooltipsetting = false; + if ($type == 'save') { + $updateset = array(); + $avatars = ($_POST["avatars"] != "" ? "yes" : "no"); + $ttlastpost = ($_POST["ttlastpost"] != "" ? "yes" : "no"); + $signatures = ($_POST["signatures"] != "" ? "yes" : "no"); + $signature = htmlspecialchars( trim($_POST["signature"]) ); + + $updateset[] = "topicsperpage = " . min(100, 0 + $_POST["topicsperpage"]); + $updateset[] = "postsperpage = " . min(100, 0 + $_POST["postsperpage"]); + $updateset[] = "avatars = " . sqlesc($avatars); + if ($showtooltipsetting) + $updateset[] = "showlastpost = " . sqlesc($ttlastpost); + $updateset[] = "signatures = " . sqlesc($signatures); + $clicktopic = $_POST["clicktopic"]; + $updateset[] = "clicktopic = ".sqlesc($clicktopic); + $updateset[] = "signature = " . sqlesc($signature); + + $query = "UPDATE users SET " . implode(",", $updateset) . " WHERE id =".sqlesc($CURUSER["id"]); + $result = sql_query($query); + if (!$result) + sqlerr(__FILE__,__LINE__); + else + header("Location: usercp.php?action=forum&type=saved"); + } + stdhead($lang_usercp['head_control_panel'].$lang_usercp['head_forum_settings'],true); + usercpmenu ("forum"); + print (""); + form ("forum"); + if ($type == 'saved') + print("\n"); + + tr_small($lang_usercp['row_topics_per_page'], "".$lang_usercp['text_zero_equals_default'],1); + tr_small($lang_usercp['row_posts_per_page'], " ".$lang_usercp['text_zero_equals_default'],1); + tr_small($lang_usercp['row_view_avatars'], "".$lang_usercp['checkbox_low_bandwidth_note'],1); + tr_small($lang_usercp['row_view_signatures'], "".$lang_usercp['checkbox_low_bandwidth_note'],1); + if ($showtooltipsetting) + tr($lang_usercp['row_tooltip_last_post'], "".$lang_usercp['checkbox_last_post_note'],1); + tr_small($lang_usercp['row_click_on_topic'], "".$lang_usercp['text_go_to_first_page']."".$lang_usercp['text_go_to_last_page'],1); + tr_small($lang_usercp['row_forum_signature'], "
    ".$lang_usercp['text_signature_note'],1); + submit(); + print("
    ".$lang_usercp['text_saved']."
    "); + stdfoot(); + die; + break; + case "security": + if ($type == 'confirm') { + $oldpassword = $_POST['oldpassword']; + if (!$oldpassword){ + stderr($lang_usercp['std_error'], $lang_usercp['std_enter_old_password'].goback(), 0); + die; + }elseif ($CURUSER["passhash"] != md5($CURUSER["secret"] . $oldpassword . $CURUSER["secret"])){ + stderr($lang_usercp['std_error'], $lang_usercp['std_wrong_password_note'].goback(), 0); + die; + }else + $updateset = array(); + $changedemail = 0; + $passupdated = 0; + $privacyupdated = 0; + $resetpasskey = $_POST["resetpasskey"]; + $email = mysql_real_escape_string( htmlspecialchars( trim($_POST["email"]) )); + $chpassword = $_POST["chpassword"]; + $passagain = $_POST["passagain"]; + $privacy = $_POST["privacy"]; + + if ($chpassword != "") { + if ($chpassword == $CURUSER["username"]) { + stderr($lang_usercp['std_error'], $lang_usercp['std_password_equals_username'].goback("-2"), 0); + die; + } + if (strlen($chpassword) > 40) { + stderr($lang_usercp['std_error'], $lang_usercp['std_password_too_long'].goback("-2"), 0); + die; + } + if (strlen($chpassword) < 6) { + stderr($lang_usercp['std_error'], $lang_usercp['std_password_too_short'].goback("-2"), 0); + die; + } + if ($chpassword != $passagain) { + stderr($lang_usercp['std_error'], $lang_usercp['std_passwords_unmatched'].goback("-2"), 0); + die; + } + + $sec = mksecret(); + $passhash = md5($sec . $chpassword . $sec); + $updateset[] = "secret = " . sqlesc($sec); + $updateset[] = "passhash = " . sqlesc($passhash); + + //die($securelogin . base64_decode($_COOKIE["c_secure_login"])); + if ($_COOKIE["c_secure_login"] == base64("yeah")) + { + $passh = md5($passhash . $_SERVER["REMOTE_ADDR"]); + $securelogin_indentity_cookie = true; + } + else + { + $passh = md5($passhash); + $securelogin_indentity_cookie = false; + } + + if($_COOKIE["c_secure_ssl"] == base64("yeah")) + $ssl = true; + else + $ssl = false; + + logincookie($CURUSER["id"], $passh ,1,0x7fffffff,$securelogin_indentity_cookie,$ssl); + //sessioncookie($CURUSER["id"], $passh); + $passupdated = 1; + } + + if ($disableemailchange != 'no' && $smtptype != 'none' && $email != $CURUSER["email"]) + { + if(EmailBanned($email)) + bark($lang_usercp['std_email_address_banned']); + + if(!EmailAllowed($email)) + bark($lang_usercp['std_wrong_email_address_domains'].allowedemails()); + + if (!validemail($email)){ + stderr($lang_usercp['std_error'], $lang_usercp['std_wrong_email_address_format'].goback("-2"), 0); + die; + } + $r = sql_query("SELECT id FROM users WHERE email=" . sqlesc($email)) or sqlerr(); + if (mysql_num_rows($r) > 0){ + stderr($lang_usercp['std_error'], $lang_usercp['std_email_in_use'].goback("-2"), 0); + die; + } + $changedemail = 1; + } + if ($resetpasskey == 1) { + $passkey = md5($CURUSER['username'].date("Y-m-d H:i:s").$CURUSER['passhash']); + $updateset[] = "passkey = " . sqlesc($passkey); + } + if ($changedemail == 1) { + $sec = mksecret(); + $hash = md5($sec . $email . $sec); + $obemail = rawurlencode($email); + $updateset[] = "editsecret = " . sqlesc($sec); + $subject = "$SITENAME".$lang_usercp['mail_profile_change_confirmation']; + $body = <<{$lang_usercp['mail_here']}{$lang_usercp['mail_change_email_six_1']}
    +http://$BASEURL/confirmemail.php/{$CURUSER["id"]}/$hash/$obemail + +{$lang_usercp['mail_change_email_seven']} + +------{$lang_usercp['mail_change_email_eight']} +{$lang_usercp['mail_change_email_nine']} +EOD; + + sent_mail($email,$SITENAME,$SITEEMAIL,change_email_encode(get_langfolder_cookie(), $subject),change_email_encode(get_langfolder_cookie(),str_replace("
    ","
    ",nl2br($body))),"profile change",false,false,'',get_email_encode(get_langfolder_cookie())); + + } + if ($privacy != "normal" && $privacy != "low" && $privacy != "strong") + die("whoops"); + + $updateset[] = "privacy = " . sqlesc($privacy); + if ($CURUSER['privacy'] != $privacy) $privacyupdated = 1; + + $user = $CURUSER["id"]; + $query = sprintf("UPDATE users SET " . implode(",", $updateset) . " WHERE id ='%s'", + mysql_real_escape_string($user)); + $result = sql_query($query); + if (!$result) + sqlerr(__FILE__,__LINE__); + else + $to = "usercp.php?action=security&type=saved"; + if ($changedemail == 1) + $to .= "&mail=1"; + if ($resetpasskey == 1) + $to .= "&passkey=1"; + if ($passupdated == 1) + $to .= "&password=1"; + if ($privacyupdated == 1) + $to .= "&privacy=1"; + header("Location: $to"); + } + stdhead($lang_usercp['head_control_panel'].$lang_usercp['head_security_settings']); + usercpmenu ("security"); + print (""); + if ($type == 'save') { + print(""); + $resetpasskey = $_POST["resetpasskey"]; + $email = mysql_real_escape_string( htmlspecialchars( trim($_POST["email"]) )); + $chpassword = $_POST["chpassword"]; + $passagain = $_POST["passagain"]; + $privacy = $_POST["privacy"]; + if ($resetpasskey == 1) + print(""); + print(""); + print(""); + print(""); + print(""); + Print("\n"); + submit(); + print("
    ".$lang_usercp['row_security_check']."
    ".$lang_usercp['text_security_check_note']."
    "); + stdfoot(); + die; + } + if ($type == 'saved') + print("".$lang_usercp['text_saved'].($_GET["mail"] == "1" ? $lang_usercp['std_confirmation_email_sent'] : "")." ".($_GET["passkey"] == "1" ? $lang_usercp['std_passkey_reset'] : "")." ".($_GET["password"] == "1" ? $lang_usercp['std_password_changed'] : "")." ".($_GET["privacy"] == "1" ? $lang_usercp['std_privacy_level_updated'] : "")."\n"); + form ("security"); + tr_small($lang_usercp['row_reset_passkey'],"".$lang_usercp['checkbox_reset_my_passkey']."
    ".$lang_usercp['text_reset_passkey_note']."", 1); + if ($disableemailchange != 'no' && $smtptype != 'none') //system-wide setting + tr_small($lang_usercp['row_email_address'], "
    ".$lang_usercp['text_email_address_note']."", 1); + tr_small($lang_usercp['row_change_password'], "", 1); + tr_small($lang_usercp['row_type_password_again'], "", 1); + tr_small($lang_usercp['row_privacy_level'], priv("normal", $lang_usercp['radio_normal']) . " " . priv("low", $lang_usercp['radio_low']) . " " . priv("strong", $lang_usercp['radio_strong']), 1); + submit(); + print(""); + stdfoot(); + die; + break; + } +} +} + +stdhead($lang_usercp['head_control_panel'].$lang_usercp['head_home']); +usercpmenu (); +//Comment Results +$commentcount = get_row_count("comments", "WHERE user=" . sqlesc($CURUSER["id"])); + +//Join Date +if ($CURUSER['added'] == "0000-00-00 00:00:00") + $joindate = 'N/A'; +else + $joindate = $CURUSER['added']." (" . gettime($CURUSER['added'],true,false,true).")"; + +//Forum Posts +if (!$forumposts = $Cache->get_value('user_'.$CURUSER['id'].'_post_count')){ + $forumposts = get_row_count("posts","WHERE userid=".$CURUSER['id']); + $Cache->cache_value('user_'.$CURUSER['id'].'_post_count', $forumposts, 3600); +} +if ($forumposts) +{ + $seconds3 = (TIMENOW - strtotime($CURUSER["added"])); + $days = round($seconds3/86400, 0); + if($days > 1) { + $dayposts = round(($forumposts / $days), 1); + } + if (!$postcount = $Cache->get_value('total_posts_count')){ + $postcount = get_row_count("posts"); + $Cache->cache_value('total_posts_count', $postcount, 96400); + } + $percentages = round($forumposts*100/$postcount, 3)."%"; +} +?> + +[" . $loc_pub . "]", 1); +} +else{ + tr_small($lang_usercp['row_ip_location'], $CURUSER["ip"], 1); +} +if ($CURUSER["avatar"]) + tr_small($lang_usercp['row_avatar'], "", 1); +tr_small($lang_usercp['row_passkey'], $CURUSER["passkey"], 1); +if ($prolinkpoint_bonus) +{ + $prolinkclick=get_row_count("prolinkclicks", "WHERE userid=".$CURUSER['id']); + tr_small($lang_usercp['row_promotion_link'], $prolinkclick. " [".$lang_usercp['text_read_more']."]", 1); + //tr_small($lang_usercp['row_promotion_link'], $prolinkclick. " [".$lang_usercp['text_update_promotion_link']."] [".$lang_usercp['text_read_more']."]", 1); +} +tr_small($lang_usercp['row_invitations'],$CURUSER[invites]." [".$lang_usercp['text_send']."]",1); +tr_small($lang_usercp['row_karma_points'], $CURUSER['seedbonus']." [".$lang_usercp['text_use']."]", 1); +tr_small($lang_usercp['row_written_comments'], $commentcount." [".$lang_usercp['text_view']."]", 1); +if ($forumposts) + tr($lang_usercp['row_forum_posts'], $forumposts." [".$lang_usercp['text_view']."] (".$dayposts.$lang_usercp['text_posts_per_day']."; ".$percentages.$lang_usercp['text_of_total_posts'].")", 1); +?> +
    + +".$lang_usercp['text_recently_read_topics'].""); +?> +
    +". +"".$lang_usercp['col_topic_title']."". +"".$lang_usercp['col_replies']."/".$lang_usercp['col_views']."". +"".$lang_usercp['col_topic_starter']."". +"".$lang_usercp['col_last_post']."". +""); +$res_topics = sql_query("SELECT * FROM readposts INNER JOIN topics ON topics.id = readposts.topicid WHERE readposts.userid = ".$CURUSER[id]." ORDER BY readposts.id DESC LIMIT 5") or sqlerr(); +while ($topicarr = mysql_fetch_assoc($res_topics)) +{ + $topicid = $topicarr["id"]; + $topic_title = $topicarr["subject"]; + $topic_userid = $topicarr["userid"]; + $topic_views = $topicarr["views"]; + $views = number_format($topic_views); + + /// GETTING TOTAL NUMBER OF POSTS /// + if (!$posts = $Cache->get_value('topic_'.$topicid.'_post_count')){ + $posts = get_row_count("posts","WHERE topicid=".sqlesc($topicid)); + $Cache->cache_value('topic_'.$topicid.'_post_count', $posts, 3600); + } + $replies = max(0, $posts - 1); + + /// GETTING USERID AND DATE OF LAST POST /// + $arr = get_post_row($topicarr['lastpost']); + $postid = 0 + $arr["id"]; + $userid = 0 + $arr["userid"]; + $added = gettime($arr['added'],true,false); + + /// GET NAME OF LAST POSTER /// + $username = get_username($userid); + + /// GET NAME OF THE AUTHOR /// + $author = get_username($topic_userid); + $subject = "" . htmlspecialchars($topicarr["subject"]) . ""; + + print("$subject". + "".$replies."/".$views."" . + "".$author."" . + "".$added." | ".$username.""); +} +?> + + + +"; + + $arr = get_downloadspeed_row($user[download]); + $download = "\"Downstream ".$arr[name]; + + $arr = get_uploadspeed_row($user[upload]); + $upload = "\"Upstream ".$arr[name]; + + $arr = get_isp_row($user[isp]); + $isp = $arr[name]; + +if ($user["gender"] == "Male") +$gender = "Male"; +elseif ($user["gender"] == "Female") +$gender = "Female"; +elseif ($user["gender"] == "N/A") +$gender = "N/A"; + +stdhead($lang_userdetails['head_details_for']. $user["username"]); +$enabled = $user["enabled"] == 'yes'; +$moviepicker = $user["picker"] == 'yes'; + +print("

    " . get_username($user[id], true,false) . $country."

    "); + +if (!$enabled) +print("

    ".$lang_userdetails['text_account_disabled_note']."

    "); +elseif ($CURUSER["id"] <> $user["id"]) +{ + $r = sql_query("SELECT id FROM friends WHERE userid=$CURUSER[id] AND friendid=$id") or sqlerr(__FILE__, __LINE__); + $friend = mysql_num_rows($r); + $r = sql_query("SELECT id FROM blocks WHERE userid=$CURUSER[id] AND blockid=$id") or sqlerr(__FILE__, __LINE__); + $block = mysql_num_rows($r); + + if ($friend) + print("

    (".$lang_userdetails['text_remove_from_friends'].")

    \n"); + elseif($block) + print("

    (".$lang_userdetails['text_remove_from_blocks'].")

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

    (".$lang_userdetails['text_add_to_friends'].")"); + print(" - (".$lang_userdetails['text_add_to_blocks'].")

    "); + } +} +begin_main_frame(); +if ($CURUSER[id] == $user[id] || get_user_class() >= $cruprfmanage_class) + print("

    ".$lang_userdetails['text_flush_ghost_torrents']."".$lang_userdetails['text_here']."

    \n"); +?> + += $prfmanage_class) || $CURUSER[id] == $user[id]){ +//Xia Zuojie: Taste compatibility is extremely slow. It can takes thounsands of datebase queries. It is disabled until someone makes it fast. +/* + if (isset($CURUSER) && $CURUSER[id] != $user[id]) + { + $user_snatched = sql_query("SELECT * FROM snatched WHERE userid = $CURUSER[id]") or sqlerr(__FILE__, __LINE__); + if(mysql_num_rows($user_snatched) == 0) + $compatibility_info = $lang_userdetails['text_unknown']; + else + { + while ($user_snatched_arr = mysql_fetch_array($user_snatched)) + { + $torrent_2_user_value = get_torrent_2_user_value($user_snatched_arr); + + $user_snatched_res_target = sql_query("SELECT * FROM snatched WHERE torrentid = " . $user_snatched_arr['torrentid'] . " AND userid = " . $user[id]) or sqlerr(__FILE__, __LINE__); // + if(mysql_num_rows($user_snatched_res_target) == 1) // have other peole snatched this torrent + { + $user_snatched_arr_target = mysql_fetch_array($user_snatched_res_target) or sqlerr(__FILE__, __LINE__); // find target user's current analyzing torrent's snatch info + $torrent_2_user_value_target = get_torrent_2_user_value($user_snatched_arr_target); //get this torrent to target user's value + + if(!isset($other_user_2_curuser_value[$user_snatched_arr_target['userid']])) // first, set to 0 + $other_user_2_curuser_value[$user_snatched_arr_target['userid']] = 0.0; + + $other_user_2_curuser_value[$user_snatched_arr_target['userid']] += $torrent_2_user_value_target * $torrent_2_user_value; + } + } + + $val = $other_user_2_curuser_value[$user[id]]; + if ($val > 1) + { + $val = 1; + $compatibility_info = $lang_userdetails['text_super']; + $bar_url = "pic/loadbargreen.gif"; + } + elseif ($val > 0.7 && $val<=1) + { + $compatibility_info = $lang_userdetails['text_very_high']; + $bar_url = "pic/loadbargreen.gif"; + } + elseif ($val > 0.45 && $val<=0.7) + { + $compatibility_info = $lang_userdetails['text_high']; + $bar_url = "pic/loadbargreen.gif"; + } + elseif ($val > 0.2 && $val<=0.45) + { + $compatibility_info = $lang_userdetails['text_medium']; + $bar_url = "pic/loadbaryellow.gif"; + } + elseif ($val > 0.05 && $val<=0.2) + { + $compatibility_info = $lang_userdetails['text_low']; + $bar_url = "pic/loadbarred.gif"; + } + else + { + $val = 0; + $compatibility_info = $lang_userdetails['text_very_low']; + $bar_url = "pic/loadbarred.gif"; + } + $width = $val * 400; + $compatibility_info = "
    " . number_format($val * 100, 2) . "%   " . $compatibility_info . "
    "; + + //die("ss" . htmlspecialchars($compatibility_info)); + } + print("".$lang_userdetails['row_compatibility']."". $compatibility_info ."\n"); + } +*/ + + if ($CURUSER[id] == $user[id] || get_user_class() >= $viewinvite_class){ + if ($user["invites"] <= 0) + tr_small($lang_userdetails['row_invitation'], $lang_userdetails['text_no_invitation'], 1); + else + tr_small($lang_userdetails['row_invitation'], "".$user[invites]."", 1);} + else{ + if ($CURUSER[id] != $user[id] || get_user_class() != $viewinvite_class){ + if ($user["invites"] <= 0) + tr_small($lang_userdetails['row_invitation'], $lang_userdetails['text_no_invitation'], 1); + else + tr($lang_userdetails['row_invitation'], $user[invites], 1);} + } + if ($user["invited_by"] > 0) { + tr_small($lang_userdetails['row_invited_by'], get_username($user['invited_by']), 1); + } + tr_small($lang_userdetails['row_join_date'], $joindate, 1); + tr_small($lang_userdetails['row_last_seen'], $lastseen, 1); +if ($where_tweak == "yes") { + tr_small($lang_userdetails['row_last_seen_location'], $user[page], 1); +} +if (get_user_class() >= $userprofile_class OR $user["privacy"] == "low") { + tr_small($lang_userdetails['row_email'], "".$user[email]."", 1); +} +if (get_user_class() >= $userprofile_class) { + $resip = sql_query("SELECT ip FROM iplog WHERE userid =$id GROUP BY ip") or sqlerr(__FILE__, __LINE__); + $iphistory = mysql_num_rows($resip); + + if ($iphistory > 0) + tr_small($lang_userdetails['row_ip_history'], $lang_userdetails['text_user_earlier_used']."" . $iphistory. $lang_userdetails['text_different_ips'].add_s($iphistory, true)."", 1); + +} +if (get_user_class() >= $userprofile_class || $user["id"] == $CURUSER["id"]) +{ + if ($enablelocation_tweak == 'yes'){ + list($loc_pub, $loc_mod) = get_ip_location($user[ip]); + $locationinfo = "[" . $loc_pub . "]"; + } + else $locationinfo = ""; + tr_small($lang_userdetails['row_ip_address'], $user[ip].$locationinfo, 1); +} + +$res = sql_query("SELECT agent, peer_id, ip, port FROM peers WHERE userid = $user[id] GROUP BY agent") or sqlerr(); +if (mysql_num_rows($res) > 0) +{ + $first = true; + $clientselect = ""; + while($arr = mysql_fetch_assoc($res)) + { + $clientselect .= ($first == true ? "" : " ; ") . get_agent($arr["peer_id"], $arr["agent"]); + $first = false; + + if (get_user_class() >= $userprofile_class || $user["id"] == $CURUSER["id"]) + $clientselect .= " (" . $arr["ip"] . ":" . $arr["port"] . ")"; + } +} +if ($clientselect) + tr_small($lang_userdetails['row_bt_client'], $clientselect, 1); + + +if ($user["downloaded"] > 0) +{ + $sr = floor($user["uploaded"] / $user["downloaded"] * 1000) / 1000; + $sr = "" . $lang_userdetails['row_share_ratio'] . ": " . number_format($sr, 3) . "  " . get_ratio_img($sr) . ""; +} + +$xfer = "" . $lang_userdetails['row_uploaded'] . ": ". mksize($user["uploaded"]) . "  " . $lang_userdetails['row_downloaded'] . ": " . mksize($user["downloaded"]) . ""; + +tr_small($lang_userdetails['row_transfer'], "" . $sr . $xfer . "
    ", 1); + + +if ($user["leechtime"] > 0) +{ + $slr = floor($user["seedtime"] / $user["leechtime"] * 1000) / 1000; + $slr = "" . $lang_userdetails['text_seeding_leeching_time_ratio'] . ": " . number_format($slr, 3) . "  " . get_ratio_img($slr) . ""; +} + +$slt = "" . $lang_userdetails['text_seeding_time'] . ": ". mkprettytime($user["seedtime"]) . "  " . $lang_userdetails['text_leeching_time'] . ": " . mkprettytime($user["leechtime"]) . ""; + + tr_small($lang_userdetails['row_sltime'], "" . $slr . $slt . "
    ", 1); + +if ($user["download"] && $user["upload"]) +tr_small($lang_userdetails['row_internet_speed'], $download."    ".$upload."    ".$isp, 1); +tr_small($lang_userdetails['row_gender'], $gender, 1); + +if (($user['donated'] > 0 || $user['donated_cny'] > 0 )&& (get_user_class() >= $userprofile_class || $CURUSER["id"] == $user["id"])) +tr_small($lang_userdetails['row_donated'], "$".htmlspecialchars($user[donated])."      ".htmlspecialchars($user[donated_cny]), 1); + +if ($user["avatar"]) +tr_small($lang_userdetails['row_avatar'], return_avatar_image(htmlspecialchars(trim($user["avatar"]))), 1); +$uclass = get_user_class_image($user["class"]); +tr_small($lang_userdetails['row_class'], "\"".get_user_class_name($user["class"],false,false,true)."\" ".($user[title]!=="" ? " ".htmlspecialchars(trim($user["title"]))."" : ""), 1); + +tr_small($lang_userdetails['row_torrent_comment'], ($torrentcomments && ($user["id"] == $CURUSER["id"] || get_user_class() >= $viewhistory_class) ? "".$torrentcomments."" : $torrentcomments), 1); + +tr_small($lang_userdetails['row_forum_posts'], ($forumposts && ($user["id"] == $CURUSER["id"] || get_user_class() >= $viewhistory_class) ? "".$forumposts."" : $forumposts), 1); + +if ($user["id"] == $CURUSER["id"] || get_user_class() >= $viewhistory_class) +tr_small($lang_userdetails['row_karma_points'], htmlspecialchars($user[seedbonus]), 1); + +if ($user["ip"] && (get_user_class() >= $torrenthistory_class || $user["id"] == $CURUSER["id"])){ + +tr_small($lang_userdetails['row_uploaded_torrents'], "\"Show/Hide\" ".$lang_userdetails['text_show_or_hide']."
    ", 1); + + +tr_small($lang_userdetails['row_current_seeding'], "\"Show/Hide\" ".$lang_userdetails['text_show_or_hide']."
    ", 1); + + +tr_small($lang_userdetails['row_current_leeching'], "\"Show/Hide\" ".$lang_userdetails['text_show_or_hide']."
    ", 1); + + +tr_small($lang_userdetails['row_completed_torrents'], "\"Show/Hide\" ".$lang_userdetails['text_show_or_hide']."
    ", 1); + + +tr_small($lang_userdetails['row_incomplete_torrents'], "\"Show/Hide\" ".$lang_userdetails['text_show_or_hide']."
    ", 1); +} +if ($user["info"]) + print("" . format_comment($user["info"],false) . "\n"); +} +else +{ + print("".$lang_userdetails['text_public_access_denied'].$user[username].$lang_userdetails['text_user_wants_privacy']."\n"); +} +if ($CURUSER["id"] != $user["id"]) +if (get_user_class() >= $staffmem_class) +$showpmbutton = 1; +elseif ($user["acceptpms"] == "yes") +{ + $r = sql_query("SELECT id FROM blocks WHERE userid=$user[id] AND blockid=$CURUSER[id]") or sqlerr(__FILE__,__LINE__); + $showpmbutton = (mysql_num_rows($r) == 1 ? 0 : 1); +} +elseif ($user["acceptpms"] == "friends") +{ + $r = sql_query("SELECT id FROM friends WHERE userid=$user[id] AND friendid=$CURUSER[id]") or sqlerr(__FILE__,__LINE__); + $showpmbutton = (mysql_num_rows($r) == 1 ? 1 : 0); +} +if ($CURUSER["id"] != $user["id"]){ +print(""); +if ($showpmbutton) +print("\"PM\""); + +print("\"Report\""); +print(""); +} +print("\n"); + +if (get_user_class() >= $prfmanage_class && $user["class"] < get_user_class()) +{ + begin_frame($lang_userdetails['text_edit_user'], true); + print(""); + print(""); + print(""); + print(""); + print("\n"); + tr($lang_userdetails['row_title'], "", 1); + $avatar = htmlspecialchars(trim($user["avatar"])); + + tr($lang_userdetails['row_privacy_level'], "".$lang_userdetails['radio_low']."".$lang_userdetails['radio_normal']."".$lang_userdetails['radio_strong'], 1); + tr($lang_userdetails['row_avatar_url'], "", 1); + $signature = trim($user["signature"]); + tr($lang_userdetails['row_signature'], "", 1); + + if (get_user_class() == UC_STAFFLEADER) + { + tr($lang_userdetails['row_donor_status'], "".$lang_userdetails['radio_yes']." ".$lang_userdetails['radio_no'], 1); + tr($lang_userdetails['row_donated'], "USD:     CNY: " . $lang_userdetails['text_transaction_memo'] . "", 1); + } + if (get_user_class() == $prfmanage_class) + $maxclass = UC_VIP; + else + $maxclass = get_user_class() - 1; + $classselect=classlist('class', $maxclass, $user["class"]); + tr($lang_userdetails['row_class'], $classselect, 1); + tr($lang_userdetails['row_vip_by_bonus'], "".$lang_userdetails['radio_yes']." ".$lang_userdetails['radio_no']."
    ".$lang_userdetails['text_vip_by_bonus_note'], 1); + tr($lang_userdetails['row_vip_until'], " ".$lang_userdetails['text_vip_until_note'], 1); + $supportlang = htmlspecialchars($user["supportlang"]); + $supportfor = htmlspecialchars($user["supportfor"]); + $pickfor = htmlspecialchars($user["pickfor"]); + $staffduties = htmlspecialchars($user["stafffor"]); + + tr($lang_userdetails['row_staff_duties'], "", 1); + tr($lang_userdetails['row_support_language'], "", 1); + tr($lang_userdetails['row_support'], "".$lang_userdetails['radio_yes']." ".$lang_userdetails['radio_no'], 1); + tr($lang_userdetails['row_support_for'], "", 1); + + tr($lang_userdetails['row_movie_picker'], "".$lang_userdetails['radio_yes']."".$lang_userdetails['radio_no'], 1); + tr($lang_userdetails['row_pick_for'], "", 1); + + if (get_user_class() >= $cruprfmanage_class) + { + $modcomment = htmlspecialchars($user["modcomment"]); + tr($lang_userdetails['row_comment'], "", 1); + $bonuscomment = htmlspecialchars($user["bonuscomment"]); + tr($lang_userdetails['row_seeding_karma'], "", 1); + } + $warned = $user["warned"] == "yes"; + + print(""); + tr($lang_userdetails['row_enabled'], "".$lang_userdetails['radio_yes']."".$lang_userdetails['radio_no'], 1); + tr($lang_userdetails['row_forum_post_possible'], "".$lang_userdetails['radio_yes']."".$lang_userdetails['radio_no'], 1); + tr($lang_userdetails['row_upload_possible'], "".$lang_userdetails['radio_yes']."".$lang_userdetails['radio_no'], 1); + tr($lang_userdetails['row_download_possible'], "".$lang_userdetails['radio_yes']."".$lang_userdetails['radio_no'], 1); + tr($lang_userdetails['row_show_ad'], "".$lang_userdetails['radio_yes']."".$lang_userdetails['radio_no'], 1); + tr($lang_userdetails['row_no_ad_until'], " ".$lang_userdetails['text_no_ad_until_note'], 1); + if (get_user_class() >= $cruprfmanage_class) + { + tr($lang_userdetails['row_change_username'], "", 1); + + tr($lang_userdetails['row_change_email'], "", 1); + } + + tr($lang_userdetails['row_change_password'], "", 1); + tr($lang_userdetails['row_repeat_password'], "", 1); + + if (get_user_class() >= $cruprfmanage_class) + { + tr($lang_userdetails['row_amount_uploaded'], "", 1); + tr($lang_userdetails['row_amount_downloaded'], "", 1); + tr($lang_userdetails['row_seeding_karma'], "", 1); + tr($lang_userdetails['row_invites'], "", 1); + } + tr($lang_userdetails['row_passkey'], "".$lang_userdetails['checkbox_reset_passkey'], 1); + + print("\n"); + print("
    ".$lang_userdetails['row_warning_system'].""); + + if ($warned) + { + $warneduntil = $user['warneduntil']; + if ($warneduntil == '0000-00-00 00:00:00') + print("\n"); + else + { + print("\n"); + } + print(""); + + }else{ + + print("\n"); + print(""); + } + + + $elapsedlw = get_elapsed_time(strtotime($user["lastwarned"])); + print("\n"); + + if ($user["timeswarned"] == 0) + { + print("\n"); + }else{ + if ($user["warnedby"] != "System") + { + $res = sql_query("SELECT id, username, warnedby FROM users WHERE id = " . $user['warnedby'] . "") or sqlerr(__FILE__,__LINE__); + $arr = mysql_fetch_assoc($res); + $warnedby = "
    [".$lang_userdetails['text_by']."" . get_username($arr['id']) . "]"; + }else{ + $warnedby = "
    [".$lang_userdetails['text_by_system']."]"; + print("\n"); + } + print("\n"); + } + + $leechwarn = $user["leechwarn"] == "yes"; + print(""); + + if ($leechwarn) + { + print(""); + }else{ + print("\n"); + } + print("
    " . ($warned ? "".$lang_userdetails['radio_yes']."".$lang_userdetails['radio_no'] : $lang_userdetails['text_not_warned'] ) ."".$lang_userdetails['text_arbitrary_duration']."".$lang_userdetails['text_until'].$warneduntil); + print("
    (" . mkprettytime(strtotime($warneduntil) - strtotime(date("Y-m-d H:i:s"))) .$lang_userdetails['text_to_go'] .")
    ".$lang_userdetails['text_warn_for']."
    ".$lang_userdetails['text_reason_of_warning']."
    ".$lang_userdetails['text_times_warned']."".$user[timeswarned]."
    ".$lang_userdetails['text_last_warning']."".$lang_userdetails['text_not_warned_note']."
    ".$lang_userdetails['text_last_warning']." $user[lastwarned] .(".$lang_userdetails['text_until'] ."$elapsedlw) $warnedby
    ".$lang_userdetails['text_last_warning']." $user[lastwarned] ($elapsedlw".$lang_userdetails['text_ago'].") ".$warnedby."
    ".$lang_userdetails['row_auto_warning']."
    (".$lang_userdetails['text_low_ratio'].")
    ".$lang_userdetails['text_leech_warned']." "); + $leechwarnuntil = $user['leechwarnuntil']; + if ($leechwarnuntil != '0000-00-00 00:00:00') + { + print($lang_userdetails['text_until'].$leechwarnuntil); + print("
    (" . mkprettytime(strtotime($leechwarnuntil) - strtotime(date("Y-m-d H:i:s"))) .$lang_userdetails['text_to_go'].")"); + }else{ + print("".$lang_userdetails['text_for_unlimited_time'].""); + } + print("
    ".$lang_userdetails['text_no_warned']."
    \n"); + print("\n"); + end_frame(); + if (get_user_class() >= $cruprfmanage_class) + { + begin_frame($lang_userdetails['text_delete_user'], true); + print("
    + +
    "); + end_frame(); + } +} +end_main_frame(); +stdfoot(); +?> diff --git a/userhistory.php b/userhistory.php new file mode 100644 index 00000000..b42d2f4b --- /dev/null +++ b/userhistory.php @@ -0,0 +1,263 @@ +".$lang_userhistory['text_posts_history_for'].$subject."\n"); + + if ($postcount > $perpage) echo $pagertop; + + //------ Print table + + begin_main_frame(); + + begin_frame(); + + while ($arr = mysql_fetch_assoc($res)) + { + $postid = $arr["id"]; + + $posterid = $arr["userid"]; + + $topicid = $arr["t_id"]; + + $topicname = $arr["subject"]; + + $forumid = $arr["f_id"]; + + $forumname = $arr["name"]; + + $newposts = ($arr["lastpostread"] < $arr["lastpost"]) && $CURUSER["id"] == $userid; + + $added = gettime($arr["added"], true, false, false); + + print("

    + $added -- ".$lang_userhistory['text_forum']. + "$forumname +  -- ".$lang_userhistory['text_topic']. + "$topicname +  -- ".$lang_userhistory['text_post']. + "#$postid" . + ($newposts ? "  (".$lang_userhistory['text_new'].")" : "") . + "

    \n"); + + print("
    "); + + print("\n"); + + $body = format_comment($arr["body"]); + + if (is_valid_id($arr['editedby'])) + { + $subres = sql_query("SELECT username FROM users WHERE id=$arr[editedby]"); + if (mysql_num_rows($subres) == 1) + { + $subrow = mysql_fetch_assoc($subres); + $body .= "

    ".$lang_userhistory['text_last_edited'].get_username($arr['editedby']).$lang_userhistory['text_at']."$arr[editdate]

    \n"; + } + } + + print("\n"); + + print("
    $body
    \n"); + print("
    "); + } + + end_frame(); + + end_main_frame(); + + if ($postcount > $perpage) echo $pagerbottom; + + stdfoot(); + + die; +} + +//-------- Action: View comments + +if ($action == "viewcomments") +{ + $select_is = "COUNT(*)"; + + // LEFT due to orphan comments + $from_is = "comments AS c LEFT JOIN torrents as t + ON c.torrent = t.id"; + + $where_is = "c.user = $userid"; + $order_is = "c.id DESC"; + + $query = "SELECT $select_is FROM $from_is WHERE $where_is ORDER BY $order_is"; + + $res = sql_query($query) or sqlerr(__FILE__, __LINE__); + + $arr = mysql_fetch_row($res) or stderr($lang_userhistory['std_error'], $lang_userhistory['std_no_comments_found']); + + $commentcount = $arr[0]; + + //------ Make page menu + + list($pagertop, $pagerbottom, $limit) = pager($perpage, $commentcount, $_SERVER["PHP_SELF"] . "?action=viewcomments&id=$userid&"); + + //------ Get user data + + $res = sql_query("SELECT username, donor, warned, enabled FROM users WHERE id=$userid") or sqlerr(__FILE__, __LINE__); + + if (mysql_num_rows($res) == 1) + { + $arr = mysql_fetch_assoc($res); + + $subject = get_username($userid); + } + else + $subject = "unknown[$userid]"; + + //------ Get comments + + $select_is = "t.name, c.torrent AS t_id, c.id, c.added, c.text"; + + $query = "SELECT $select_is FROM $from_is WHERE $where_is ORDER BY $order_is $limit"; + + $res = sql_query($query) or sqlerr(__FILE__, __LINE__); + + if (mysql_num_rows($res) == 0) stderr($lang_userhistory['std_error'], $lang_userhistory['std_no_comments_found']); + + stdhead($lang_userhistory['head_comments_history']); + + print("

    ".$lang_userhistory['text_comments_history_for']."$subject

    \n"); + + if ($commentcount > $perpage) echo $pagertop; + + //------ Print table + + begin_main_frame(); + + begin_frame(); + + while ($arr = mysql_fetch_assoc($res)) + { + + $commentid = $arr["id"]; + + $torrent = $arr["name"]; + + // make sure the line doesn't wrap + if (strlen($torrent) > 55) $torrent = substr($torrent,0,52) . "..."; + + $torrentid = $arr["t_id"]; + + //find the page; this code should probably be in details.php instead + + $subres = sql_query("SELECT COUNT(*) FROM comments WHERE torrent = $torrentid AND id < $commentid") + or sqlerr(__FILE__, __LINE__); + $subrow = mysql_fetch_row($subres); + $count = $subrow[0]; + $comm_page = floor($count/20); + $page_url = $comm_page?"&page=$comm_page":""; + + $added = gettime($arr["added"], true, false, false); + + print("

    ". + "$added --- ".$lang_userhistory['text_torrent']. + ($torrent?("$torrent"):" [Deleted] "). + " --- ".$lang_userhistory['text_comment']."#$commentid +

    \n"); + print("
    "); + + print("\n"); + + $body = format_comment($arr["text"]); + + print("\n"); + + print("
    $body
    \n"); + + print("
    "); + } + + end_frame(); + + end_main_frame(); + + if ($commentcount > $perpage) echo $pagerbottom; + + stdfoot(); + + die; +} + +//-------- Handle unknown action + +if ($action != "") +stderr($lang_userhistory['std_history_error'], $lang_userhistory['std_unkown_action']); + +//-------- Any other case + +stderr($lang_userhistory['std_history_error'], $lang_userhistory['std_invalid_or_no_query']); + +?> diff --git a/users.php b/users.php new file mode 100644 index 00000000..8d4f5c09 --- /dev/null +++ b/users.php @@ -0,0 +1,145 @@ + 1) + die; + +if(!is_valid_user_class($class)) + $class = '-'; + +if (($search != '' || $class != '-') && $letter == '') +{ + $query = "username LIKE " . sqlesc("%$search%") . " AND status='confirmed'"; + if ($search) + $q = "search=" . rawurlencode($search); +} +elseif ($letter != '' && strpos("0abcdefghijklmnopqrstuvwxyz", $letter) == true) +{ + $query = "username LIKE '$letter%' AND status='confirmed'"; + $q = "letter=$letter"; +} +else +{ +$query = "status='confirmed'"; +} + +if ($class != '-') +{ + $query .= " AND class=$class"; + $q .= ($q ? "&" : "") . "class=$class"; +} + +if ($country > 0) +{ + $query .= " AND country=$country"; + $q .= ($q ? "&" : "") . "country=$country"; +} +stdhead($lang_users['head_users']); + +print($lang_users['text_users']); + +print("
    \n"); +print($lang_users['text_search'] ." \n"); +print("\n"); +$countries = "\n"; +$ct_r = sql_query("SELECT id,name FROM countries ORDER BY name") or die; +while ($ct_a = mysql_fetch_array($ct_r)) + $countries .= "\n"; +print(""); +print("\n"); +print("
    \n"); + +print("

    \n"); + +for ($i = 97; $i < 123; ++$i) +{ + $l = chr($i); + $L = chr($i - 32); + //stderr("",$class); + if ($l == $letter) + print("$L\n"); + else + { + if($class == '-') + print(" 0 ? "&country=".$country : "").">$L\n"); + else + { + print(" 0 ? "&country=".$country : "").">$L\n"); + } + } +} + +print("

    \n"); + +$perpage = 50; + +$res = sql_query("SELECT COUNT(*) FROM users WHERE $query") or sqlerr(); +$arr = mysql_fetch_row($res); +$count = $arr[0]; + +list($pagertop, $pagerbottom, $limit) = pager($perpage, $count, "users.php?".$q.($q ? "&" : "")); + +print($pagertop); + +$country_sql = "concat('\"',')"; + +$sql = sprintf('SELECT + users.id as id, + users.class as class, + IF ( + users.country >0, %s, \'---\' + ) as country, + IF ( + users.added = "0000-00-00 00:00:00", "-", users.added + ) as added, + IF ( + users.last_access = "0000-00-00 00:00:00", "-", users.last_access + ) as last_access + + + FROM users + LEFT JOIN countries ON users.country = countries.id + WHERE %s + ORDER BY username %s', + $country_sql, $query, $limit); + + +$res = sql_query($sql) or sqlerr(); + + +$num = mysql_num_rows($res); + +print("\n"); +print("\n"); +for ($i = 0; $i < $num; ++$i) +{ +$arr = mysql_fetch_assoc($res); + +print(""); +} + +print("
    ".$lang_users['col_user_name']."".$lang_users['col_registered']."".$lang_users['col_last_access']."".$lang_users['col_class']."".$lang_users['col_country']."
    ".get_username($arr['id'])."".gettime($arr['added'], true, false)."".gettime($arr['last_access'],true,false)."". get_user_class_name($arr['class'],false,true,true) . "".$arr['country']."
    "); +print($pagerbottom); + +stdfoot(); +die; +?> diff --git a/usersearch.php b/usersearch.php new file mode 100644 index 00000000..9caf52c5 --- /dev/null +++ b/usersearch.php @@ -0,0 +1,859 @@ +Administrative User Search\n"; + +if ($_GET['h']) +{ + echo "
    \n + Fields left blank will be ignored;\n + Wildcards * and ? may be used in Name, Email and Comments, as well as multiple values\n + separated by spaces (e.g. 'wyz Max*' in Name will list both users named\n + 'wyz' and those whose names start by 'Max'. Similarly '~' can be used for\n + negation, e.g. '~alfiest' in comments will restrict the search to users\n + that do not have 'alfiest' in their comments).

    \n + The Ratio field accepts 'Inf' and '---' besides the usual numeric values.

    \n + The subnet mask may be entered either in dotted decimal or CIDR notation\n + (e.g. 255.255.255.0 is the same as /24).

    \n + Uploaded and Downloaded should be entered in GB.

    \n + For search parameters with multiple text fields the second will be\n + ignored unless relevant for the type of search chosen.

    \n + 'Active only' restricts the search to users currently leeching or seeding,\n + 'Disabled IPs' to those whose IPs also show up in disabled accounts.

    \n + The 'p' columns in the results show partial stats, that is, those\n + of the torrents in progress.

    \n + The History column lists the number of forum posts and torrent comments,\n + respectively, as well as linking to the history page.\n +


    \n"; +} +else +{ + echo "

    (Instructions)"; + echo " - (Reset)

    \n"; +} + +$highlight = " bgcolor=#BBAF9B"; + +?> + +
    > + + + + + > + + + > + + + + + > + + > + + > + + + > + + + > + + > + + > + + + + + > + + + + + + + + + > + + + + + + + > + + + + + + + + > + + + + + + + + > + + + + >> + + >> + + +
    Name:Ratio:Member status:
    Email:IP:Account status:
    Comment:Mask:Class:
    Joined:Uploaded:Donor:
    Last seen:> + + + + Downloaded:Warned:
    Active only:Disabled IP:
    +

    +
    + + 0) + { + $r = number_format($up / $down, 2); + if ($color) + $r = "$r"; + } + else + if ($up > 0) + $r = "Inf."; + else + $r = "---"; + return $r; +} + +// checks for the usual wildcards *, ? plus mySQL ones +function haswildcard($text){ + if (strpos($text,'*') === False && strpos($text,'?') === False + && strpos($text,'%') === False && strpos($text,'_') === False) + return False; + else + return True; +} + +/////////////////////////////////////////////////////////////////////////////// + +if (count($_GET) > 0 && !$_GET['h']) +{ + // name + $names = explode(' ',trim($_GET['n'])); + if ($names[0] !== "") + { + foreach($names as $name) + { + if (substr($name,0,1) == '~') + { + if ($name == '~') continue; + $names_exc[] = substr($name,1); + } + else + $names_inc[] = $name; + } + + if (is_array($names_inc)) + { + $where_is .= isset($where_is)?" AND (":"("; + foreach($names_inc as $name) + { + if (!haswildcard($name)) + $name_is .= (isset($name_is)?" OR ":"")."u.username = ".sqlesc($name); + else + { + $name = str_replace(array('?','*'), array('_','%'), $name); + $name_is .= (isset($name_is)?" OR ":"")."u.username LIKE ".sqlesc($name); + } + } + $where_is .= $name_is.")"; + unset($name_is); + } + + if (is_array($names_exc)) + { + $where_is .= isset($where_is)?" AND NOT (":" NOT ("; + foreach($names_exc as $name) + { + if (!haswildcard($name)) + $name_is .= (isset($name_is)?" OR ":"")."u.username = ".sqlesc($name); + else + { + $name = str_replace(array('?','*'), array('_','%'), $name); + $name_is .= (isset($name_is)?" OR ":"")."u.username LIKE ".sqlesc($name); + } + } + $where_is .= $name_is.")"; + } + $q .= ($q ? "&" : "") . "n=".rawurlencode(trim($_GET['n'])); + } + + // email + $emaila = explode(' ', trim($_GET['em'])); + if ($emaila[0] !== "") + { + $where_is .= isset($where_is)?" AND (":"("; + foreach($emaila as $email) + { + if (strpos($email,'*') === False && strpos($email,'?') === False + && strpos($email,'%') === False) + { + if (validemail($email) !== 1) + { + stdmsg("Error", "Bad email."); + stdfoot(); + die(); + } + $email_is .= (isset($email_is)?" OR ":"")."u.email =".sqlesc($email); + } + else + { + $sql_email = str_replace(array('?','*'), array('_','%'), $email); + $email_is .= (isset($email_is)?" OR ":"")."u.email LIKE ".sqlesc($sql_email); + } + } + $where_is .= $email_is.")"; + $q .= ($q ? "&" : "") . "em=".rawurlencode(trim($_GET['em'])); + } + + //class + // NB: the c parameter is passed as two units above the real one + $class = $_GET['c'] - 2; + if (is_valid_id($class + 1)) + { + $where_is .= (isset($where_is)?" AND ":"")."u.class=$class"; + $q .= ($q ? "&" : "") . "c=".($class+2); + } + + // IP + $ip = trim($_GET['ip']); + if ($ip) + { + $regex = "/^(((1?\d{1,2})|(2[0-4]\d)|(25[0-5]))(\.\b|$)){4}$/"; + if (!preg_match($regex, $ip)) + { + stdmsg("Error", "Bad IP."); + stdfoot(); + die(); + } + + $mask = trim($_GET['ma']); + if ($mask == "" || $mask == "255.255.255.255") + $where_is .= (isset($where_is)?" AND ":"")."u.ip = '$ip'"; + else + { + if (substr($mask,0,1) == "/") + { + $n = substr($mask, 1, strlen($mask) - 1); + if (!is_numeric($n) or $n < 0 or $n > 32) + { + stdmsg("Error", "Bad subnet mask."); + stdfoot(); + die(); + } + else + $mask = long2ip(pow(2,32) - pow(2,32-$n)); + } + elseif (!preg_match($regex, $mask)) + { + stdmsg("Error", "Bad subnet mask."); + stdfoot(); + die(); + } + $where_is .= (isset($where_is)?" AND ":"")."INET_ATON(u.ip) & INET_ATON('$mask') = INET_ATON('$ip') & INET_ATON('$mask')"; + $q .= ($q ? "&" : "") . "ma=$mask"; + } + $q .= ($q ? "&" : "") . "ip=$ip"; + } + + // ratio + $ratio = trim($_GET['r']); + if ($ratio) + { + if ($ratio == '---') + { + $ratio2 = ""; + $where_is .= isset($where_is)?" AND ":""; + $where_is .= " u.uploaded = 0 and u.downloaded = 0"; + } + elseif (strtolower(substr($ratio,0,3)) == 'inf') + { + $ratio2 = ""; + $where_is .= isset($where_is)?" AND ":""; + $where_is .= " u.uploaded > 0 and u.downloaded = 0"; + } + else + { + if (!is_numeric($ratio) || $ratio < 0) + { + stdmsg("Error", "Bad ratio."); + stdfoot(); + die(); + } + $where_is .= isset($where_is)?" AND ":""; + $where_is .= " (u.uploaded/u.downloaded)"; + $ratiotype = $_GET['rt']; + $q .= ($q ? "&" : "") . "rt=$ratiotype"; + if ($ratiotype == "3") + { + $ratio2 = trim($_GET['r2']); + if(!$ratio2) + { + stdmsg("Error", "Two ratios needed for this type of search."); + stdfoot(); + die(); + } + if (!is_numeric($ratio2) or $ratio2 < $ratio) + { + stdmsg("Error", "Bad second ratio."); + stdfoot(); + die(); + } + $where_is .= " BETWEEN $ratio and $ratio2"; + $q .= ($q ? "&" : "") . "r2=$ratio2"; + } + elseif ($ratiotype == "2") + $where_is .= " < $ratio"; + elseif ($ratiotype == "1") + $where_is .= " > $ratio"; + else + $where_is .= " BETWEEN ($ratio - 0.004) and ($ratio + 0.004)"; + } + $q .= ($q ? "&" : "") . "r=$ratio"; + } + + // comment + $comments = explode(' ',trim($_GET['co'])); + if ($comments[0] !== "") + { + foreach($comments as $comment) + { + if (substr($comment,0,1) == '~') + { + if ($comment == '~') continue; + $comments_exc[] = substr($comment,1); + } + else + $comments_inc[] = $comment; + } + + if (is_array($comments_inc)) + { + $where_is .= isset($where_is)?" AND (":"("; + foreach($comments_inc as $comment) + { + if (!haswildcard($comment)) + $comment_is .= (isset($comment_is)?" OR ":"")."u.modcomment LIKE ".sqlesc("%".$comment."%"); + else + { + $comment = str_replace(array('?','*'), array('_','%'), $comment); + $comment_is .= (isset($comment_is)?" OR ":"")."u.modcomment LIKE ".sqlesc($comment); + } + } + $where_is .= $comment_is.")"; + unset($comment_is); + } + + if (is_array($comments_exc)) + { + $where_is .= isset($where_is)?" AND NOT (":" NOT ("; + foreach($comments_exc as $comment) + { + if (!haswildcard($comment)) + $comment_is .= (isset($comment_is)?" OR ":"")."u.modcomment LIKE ".sqlesc("%".$comment."%"); + else + { + $comment = str_replace(array('?','*'), array('_','%'), $comment); + $comment_is .= (isset($comment_is)?" OR ":"")."u.modcomment LIKE ".sqlesc($comment); + } + } + $where_is .= $comment_is.")"; + } + $q .= ($q ? "&" : "") . "co=".rawurlencode(trim($_GET['co'])); + } + + $unit = 1073741824; // 1GB + + // uploaded + $ul = trim($_GET['ul']); + if ($ul) + { + if (!is_numeric($ul) || $ul < 0) + { + stdmsg("Error", "Bad uploaded amount."); + stdfoot(); + die(); + } + $where_is .= isset($where_is)?" AND ":""; + $where_is .= " u.uploaded "; + $ultype = $_GET['ult']; + $q .= ($q ? "&" : "") . "ult=$ultype"; + if ($ultype == "3") + { + $ul2 = trim($_GET['ul2']); + if(!$ul2) + { + stdmsg("Error", "Two uploaded amounts needed for this type of search."); + stdfoot(); + die(); + } + if (!is_numeric($ul2) or $ul2 < $ul) + { + stdmsg("Error", "Bad second uploaded amount."); + stdfoot(); + die(); + } + $where_is .= " BETWEEN ".$ul*$unit." and ".$ul2*$unit; + $q .= ($q ? "&" : "") . "ul2=$ul2"; + } + elseif ($ultype == "2") + $where_is .= " < ".$ul*$unit; + elseif ($ultype == "1") + $where_is .= " >". $ul*$unit; + else + $where_is .= " BETWEEN ".($ul - 0.004)*$unit." and ".($ul + 0.004)*$unit; + $q .= ($q ? "&" : "") . "ul=$ul"; + } + + // downloaded + $dl = trim($_GET['dl']); + if ($dl) + { + if (!is_numeric($dl) || $dl < 0) + { + stdmsg("Error", "Bad downloaded amount."); + stdfoot(); + die(); + } + $where_is .= isset($where_is)?" AND ":""; + $where_is .= " u.downloaded "; + $dltype = $_GET['dlt']; + $q .= ($q ? "&" : "") . "dlt=$dltype"; + if ($dltype == "3") + { + $dl2 = trim($_GET['dl2']); + if(!$dl2) + { + stdmsg("Error", "Two downloaded amounts needed for this type of search."); + stdfoot(); + die(); + } + if (!is_numeric($dl2) or $dl2 < $dl) + { + stdmsg("Error", "Bad second downloaded amount."); + stdfoot(); + die(); + } + $where_is .= " BETWEEN ".$dl*$unit." and ".$dl2*$unit; + $q .= ($q ? "&" : "") . "dl2=$dl2"; + } + elseif ($dltype == "2") + $where_is .= " < ".$dl*$unit; + elseif ($dltype == "1") + $where_is .= " > ".$dl*$unit; + else + $where_is .= " BETWEEN ".($dl - 0.004)*$unit." and ".($dl + 0.004)*$unit; + $q .= ($q ? "&" : "") . "dl=$dl"; + } + + // date joined + $date = trim($_GET['d']); + if ($date) + { + if (!$date = mkdate($date)) + { + stdmsg("Error", "Invalid date."); + stdfoot(); + die(); + } + $q .= ($q ? "&" : "") . "d=$date"; + $datetype = $_GET['dt']; + $q .= ($q ? "&" : "") . "dt=$datetype"; + if ($datetype == "0") + // For mySQL 4.1.1 or above use instead + // $where_is .= (isset($where_is)?" AND ":"")."DATE(added) = DATE('$date')"; + $where_is .= (isset($where_is)?" AND ":""). + "(UNIX_TIMESTAMP(added) - UNIX_TIMESTAMP('$date')) BETWEEN 0 and 86400"; + else + { + $where_is .= (isset($where_is)?" AND ":"")."u.added "; + if ($datetype == "3") + { + $date2 = mkdate(trim($_GET['d2'])); + if ($date2) + { + if (!$date = mkdate($date)) + { + stdmsg("Error", "Invalid date."); + stdfoot(); + die(); + } + $q .= ($q ? "&" : "") . "d2=$date2"; + $where_is .= " BETWEEN '$date' and '$date2'"; + } + else + { + stdmsg("Error", "Two dates needed for this type of search."); + stdfoot(); + die(); + } + } + elseif ($datetype == "1") + $where_is .= "< '$date'"; + elseif ($datetype == "2") + $where_is .= "> '$date'"; + } + } + + // date last seen + $last = trim($_GET['ls']); + if ($last) + { + if (!$last = mkdate($last)) + { + stdmsg("Error", "Invalid date."); + stdfoot(); + die(); + } + $q .= ($q ? "&" : "") . "ls=$last"; + $lasttype = $_GET['lst']; + $q .= ($q ? "&" : "") . "lst=$lasttype"; + if ($lasttype == "0") + // For mySQL 4.1.1 or above use instead + // $where_is .= (isset($where_is)?" AND ":"")."DATE(added) = DATE('$date')"; + $where_is .= (isset($where_is)?" AND ":""). + "(UNIX_TIMESTAMP(last_access) - UNIX_TIMESTAMP('$last')) BETWEEN 0 and 86400"; + else + { + $where_is .= (isset($where_is)?" AND ":"")."u.last_access "; + if ($lasttype == "3") + { + $last2 = mkdate(trim($_GET['ls2'])); + if ($last2) + { + $where_is .= " BETWEEN '$last' and '$last2'"; + $q .= ($q ? "&" : "") . "ls2=$last2"; + } + else + { + stdmsg("Error", "The second date is not valid."); + stdfoot(); + die(); + } + } + elseif ($lasttype == "1") + $where_is .= "< '$last'"; + elseif ($lasttype == "2") + $where_is .= "> '$last'"; + } + } + + // status + $status = $_GET['st']; + if ($status) + { + $where_is .= ((isset($where_is))?" AND ":""); + if ($status == "1") + $where_is .= "u.status = 'confirmed'"; + else + $where_is .= "u.status = 'pending'"; + $q .= ($q ? "&" : "") . "st=$status"; + } + + // account status + $accountstatus = $_GET['as']; + if ($accountstatus) + { + $where_is .= (isset($where_is))?" AND ":""; + if ($accountstatus == "1") + $where_is .= " u.enabled = 'yes'"; + else + $where_is .= " u.enabled = 'no'"; + $q .= ($q ? "&" : "") . "as=$accountstatus"; + } + + //donor + $donor = $_GET['do']; + if ($donor) + { + $where_is .= (isset($where_is))?" AND ":""; + if ($donor == 1) + $where_is .= " u.donor = 'yes'"; + else + $where_is .= " u.donor = 'no'"; + $q .= ($q ? "&" : "") . "do=$donor"; + } + + //warned + $warned = $_GET['w']; + if ($warned) + { + $where_is .= (isset($where_is))?" AND ":""; + if ($warned == 1) + $where_is .= " u.warned = 'yes'"; + else + $where_is .= " u.warned = 'no'"; + $q .= ($q ? "&" : "") . "w=$warned"; + } + + // disabled IP + $disabled = $_GET['dip']; + if ($disabled) + { + $distinct = "DISTINCT "; + $join_is .= " LEFT JOIN users AS u2 ON u.ip = u2.ip"; + $where_is .= ((isset($where_is))?" AND ":"")."u2.enabled = 'no'"; + $q .= ($q ? "&" : "") . "dip=$disabled"; + } + + // active + $active = $_GET['ac']; + if ($active == "1") + { + $distinct = "DISTINCT "; + $join_is .= " LEFT JOIN peers AS p ON u.id = p.userid"; + $q .= ($q ? "&" : "") . "ac=$active"; + } + + + $from_is = "users AS u".$join_is; + $distinct = isset($distinct)?$distinct:""; + + $queryc = "SELECT COUNT(".$distinct."u.id) FROM ".$from_is. + (($where_is == "")?"":" WHERE $where_is "); + + $querypm = "FROM ".$from_is.(($where_is == "")?" ":" WHERE $where_is "); + + $select_is = "u.id, u.username, u.email, u.status, u.added, u.last_access, u.ip, + u.class, u.uploaded, u.downloaded, u.donor, u.modcomment, u.enabled, u.warned"; + + $query = "SELECT ".$distinct." ".$select_is." ".$querypm; + + $res = sql_query($queryc) or sqlerr(); + $arr = mysql_fetch_row($res); + $count = $arr[0]; + + $q = isset($q)?($q."&"):""; + + $perpage = 30; + + list($pagertop, $pagerbottom, $limit) = pager($perpage, $count, $_SERVER["PHP_SELF"]."?".$q); + + $query .= $limit; + + $res = sql_query($query) or sqlerr(); + + if (mysql_num_rows($res) == 0) + stdmsg("Warning","No user was found."); + else + { + if ($count > $perpage) + echo $pagertop; + echo "\n"; + echo " + + + ". + "". + "". + "". + "". + "". + "". + "". + ""; + while ($user = mysql_fetch_array($res)) + { + if ($user['added'] == '0000-00-00 00:00:00') + $user['added'] = '---'; + if ($user['last_access'] == '0000-00-00 00:00:00') + $user['last_access'] = '---'; + + if ($user['ip']) + { + $nip = ip2long($user['ip']); + $auxres = sql_query("SELECT COUNT(*) FROM bans WHERE $nip >= first AND $nip <= last") or sqlerr(__FILE__, __LINE__); + $array = mysql_fetch_row($auxres); + if ($array[0] == 0) + $ipstr = $user['ip']; + else + $ipstr = "" . $user['ip'] . ""; + } + else + $ipstr = "---"; + + $auxres = sql_query("SELECT SUM(uploaded) AS pul, SUM(downloaded) AS pdl FROM peers WHERE userid = " . $user['id']) or sqlerr(__FILE__, __LINE__); + $array = mysql_fetch_array($auxres); + + $pul = $array['pul']; + $pdl = $array['pdl']; + + $auxres = sql_query("SELECT COUNT(DISTINCT p.id) FROM posts AS p LEFT JOIN topics as t ON p.topicid = t.id + LEFT JOIN forums AS f ON t.forumid = f.id WHERE p.userid = " . $user['id'] . " AND f.minclassread <= " . + $CURUSER['class']) or sqlerr(__FILE__, __LINE__); + + $n = mysql_fetch_row($auxres); + $n_posts = $n[0]; + + $auxres = sql_query("SELECT COUNT(id) FROM comments WHERE user = ".$user['id']) or sqlerr(__FILE__, __LINE__); + // Use LEFT JOIN to exclude orphan comments + // $auxres = sql_query("SELECT COUNT(c.id) FROM comments AS c LEFT JOIN torrents as t ON c.torrent = t.id WHERE c.user = '".$user['id']."'") or sqlerr(__FILE__, __LINE__); + $n = mysql_fetch_row($auxres); + $n_comments = $n[0]; + + echo "" . + " + + + + + + " . + " + + \n"; + } + echo "
    NameRatioIPEmailJoined:Last seen:StatusEnabledpRpULpDLHistory
    " . + get_username($user['id']) . "" . ratios($user['uploaded'], $user['downloaded']) . "" . $ipstr . "" . $user['email'] . "
    " . $user['added'] . "
    " . $user['last_access'] . "
    " . $user['status'] . "
    " . $user['enabled']."
    " . ratios($pul,$pdl) . "
    " . mksize($pul) . "
    " . mksize($pdl) . "
    ".($n_posts?"$n_posts":$n_posts). + "|".($n_comments?"$n_comments":$n_comments). + "
    "; + if ($count > $perpage) + echo "$pagerbottom"; + + /* +

    +
    + + + + +
    +
    + + + +
    +
    + */ + + } +} + +print("

    $pagemenu
    $browsemenu

    "); +stdfoot(); +die; + +?> diff --git a/videoformats.php b/videoformats.php new file mode 100644 index 00000000..389f65ed --- /dev/null +++ b/videoformats.php @@ -0,0 +1,204 @@ + +
    +

    Downloaded a movie and don't know what CAM/TS/TC/SCR means?

    +
    + +CAM -
    +
    +A cam is a theater rip usually done with a digital video camera. A mini tripod is +sometimes used, but a lot of the time this wont be possible, so the camera make shake. +Also seating placement isn't always idle, and it might be filmed from an angle. +If cropped properly, this is hard to tell unless there's text on the screen, but a lot +of times these are left with triangular borders on the top and bottom of the screen. +Sound is taken from the onboard microphone of the camera, and especially in comedies, +laughter can often be heard during the film. Due to these factors picture and sound +quality are usually quite poor, but sometimes we're lucky, and the theater will be' +fairly empty and a fairly clear signal will be heard.
    +
    +
    +TELESYNC (TS) -
    +
    +A telesync is the same spec as a CAM except it uses an external audio source (most +likely an audio jack in the chair for hard of hearing people). A direct audio source +does not ensure a good quality audio source, as a lot of background noise can interfere. +A lot of the times a telesync is filmed in an empty cinema or from the projection booth +with a professional camera, giving a better picture quality. Quality ranges drastically, +check the sample before downloading the full release. A high percentage of Telesyncs +are CAMs that have been mislabeled.
    +
    +
    +TELECINE (TC) -
    +
    +A telecine machine copies the film digitally from the reels. Sound and picture should +be very good, but due to the equipment involved and cost telecines are fairly uncommon. +Generally the film will be in correct aspect ratio, although 4:3 telecines have existed. +A great example is the JURASSIC PARK 3 TC done last year. TC should not be confused with +TimeCode , which is a visible counter on screen throughout the film.
    +
    +
    +SCREENER (SCR) -
    +
    +A pre VHS tape, sent to rental stores, and various other places for promotional use. +A screener is supplied on a VHS tape, and is usually in a 4:3 (full screen) a/r, although +letterboxed screeners are sometimes found. The main draw back is a "ticker" (a message +that scrolls past at the bottom of the screen, with the copyright and anti-copy +telephone number). Also, if the tape contains any serial numbers, or any other markings +that could lead to the source of the tape, these will have to be blocked, usually with a +black mark over the section. This is sometimes only for a few seconds, but unfortunately +on some copies this will last for the entire film, and some can be quite big. Depending +on the equipment used, screener quality can range from excellent if done from a MASTER +copy, to very poor if done on an old VHS recorder thru poor capture equipment on a copied +tape. Most screeners are transferred to VCD, but a few attempts at SVCD have occurred, +some looking better than others.
    +
    +
    +DVD-SCREENER (DVDscr) -
    +
    +Same premise as a screener, but transferred off a DVD. Usually letterbox , but without +the extras that a DVD retail would contain. The ticker is not usually in the black bars, +and will disrupt the viewing. If the ripper has any skill, a DVDscr should be very good. +Usually transferred to SVCD or DivX/XviD.
    +
    +
    +DVDRip -
    +
    +A copy of the final released DVD. If possible this is released PRE retail (for example, +Star Wars episode 2) again, should be excellent quality. DVDrips are released in SVCD +and DivX/XviD.
    +
    +
    +VHSRip -
    +
    +Transferred off a retail VHS, mainly skating/sports videos and XXX releases.
    +
    +
    +TVRip -
    +
    +TV episode that is either from Network (capped using digital cable/satellite boxes are +preferable) or PRE-AIR from satellite feeds sending the program around to networks a few +days earlier (do not contain "dogs" but sometimes have flickers etc) Some programs such +as WWF Raw Is War contain extra parts, and the "dark matches" and camera/commentary +tests are included on the rips. PDTV is capped from a digital TV PCI card, generally +giving the best results, and groups tend to release in SVCD for these. VCD/SVCD/DivX/XviD +rips are all supported by the TV scene.
    +
    +
    +WORKPRINT (WP) -
    +
    +A workprint is a copy of the film that has not been finished. It can be missing scenes, +music, and quality can range from excellent to very poor. Some WPs are very different +from the final print (Men In Black is missing all the aliens, and has actors in their +places) and others can contain extra scenes (Jay and Silent Bob) . WPs can be nice +additions to the collection once a good quality final has been obtained.
    +
    +
    +DivX Re-Enc -
    +
    +A DivX re-enc is a film that has been taken from its original VCD source, and re-encoded +into a small DivX file. Most commonly found on file sharers, these are usually labeled +something like Film.Name.Group(1of2) etc. Common groups are SMR and TND. These aren't +really worth downloading, unless you're that unsure about a film u only want a 200mb copy +of it. Generally avoid.
    +
    +
    +Watermarks -
    +
    +A lot of films come from Asian Silvers/PDVD (see below) and these are tagged by the +people responsible. Usually with a letter/initials or a little logo, generally in one +of the corners. Most famous are the "Z" "A" and "Globe" watermarks.
    +
    +
    +Asian Silvers / PDVD -
    +
    +These are films put out by eastern bootleggers, and these are usually bought by some +groups to put out as their own. Silvers are very cheap and easily available in a lot of +countries, and its easy to put out a release, which is why there are so many in the scene +at the moment, mainly from smaller groups who don't last more than a few releases. PDVDs +are the same thing pressed onto a DVD. They have removable subtitles, and the quality is +usually better than the silvers. These are ripped like a normal DVD, but usually released +as VCD.
    +
    +
    +Scene Tags...
    +
    +PROPER -
    +
    +Due to scene rules, whoever releases the first Telesync has won that race (for example). +But if the quality of that release is fairly poor, if another group has another telesync +(or the same source in higher quality) then the tag PROPER is added to the folder to +avoid being duped. PROPER is the most subjective tag in the scene, and a lot of people +will generally argue whether the PROPER is better than the original release. A lot of +groups release PROPERS just out of desperation due to losing the race. A reason for the +PROPER should always be included in the NFO.
    +
    +
    +LIMITED -
    +
    +A limited movie means it has had a limited theater run, generally opening in less than +250 theaters, generally smaller films (such as art house films) are released as limited.
    +
    +
    +INTERNAL -
    +
    +An internal release is done for several reasons. Classic DVD groups do a lot of INTERNAL +releases, as they wont be dupe'd on it. Also lower quality theater rips are done INTERNAL +so not to lower the reputation of the group, or due to the amount of rips done already. +An INTERNAL release is available as normal on the groups affiliate sites, but they can't +be traded to other sites without request from the site ops. Some INTERNAL releases still +trickle down to IRC/Newsgroups, it usually depends on the title and the popularity. +Earlier in the year people referred to Centropy going "internal". This meant the group +were only releasing the movies to their members and site ops. This is in a different +context to the usual definition.
    +
    +
    +STV -
    +
    +Straight To Video. Was never released in theaters, and therefore a lot of sites do not +allow these.
    +
    +
    +ASPECT RATIO TAGS -
    +
    +These are *WS* for widescreen (letterbox) and *FS* for Fullscreen.
    +
    +
    +REPACK -
    +
    +If a group releases a bad rip, they will release a Repack which will fix the problems.
    +
    +
    +NUKED -
    +
    +A film can be nuked for various reasons. Individual sites will nuke for breaking their +rules (such as "No Telesyncs") but if the film has something extremely wrong with it +(no soundtrack for 20mins, CD2 is incorrect film/game etc) then a global nuke will occur, +and people trading it across sites will lose their credits. Nuked films can still reach +other sources such as p2p/usenet, but its a good idea to check why it was nuked first in +case. If a group realise there is something wrong, they can request a nuke.
    +
    +
    +NUKE REASONS...
    +
    +this is a list of common reasons a film can be nuked for (generally DVDRip)
    +
    +BAD A/R = bad aspect ratio, ie people appear too fat/thin
    +BAD IVTC = bad inverse telecine. process of converting framerates was incorrect.
    +INTERLACED = black lines on movement as the field order is incorrect.
    +
    +
    +DUPE -
    +
    +Dupe is quite simply, if something exists already, then theres no reason for it to exist +again without proper reason.
    +
    +
    +
    +
    +
    +\n"; + + $subres = sql_query("SELECT * FROM files WHERE torrent = ".sqlesc($id)." ORDER BY id"); + $s.="".$lang_viewfilelist['col_path']."\"size\"\n"; + while ($subrow = mysql_fetch_array($subres)) { + $s .= "" . $subrow["filename"] . "" . mksize($subrow["size"]) . "\n"; + } + $s .= "\n"; + echo $s; +} +?> diff --git a/viewnfo.php b/viewnfo.php new file mode 100644 index 00000000..1abca831 --- /dev/null +++ b/viewnfo.php @@ -0,0 +1,86 @@ +".htmlspecialchars($a["name"])."\n"); + +?> + + + +Teckensnittshack*/?> + + + + +Strikt DOS-vy*/?> + + + + +
    +> + +'>
    +
    +"); +} +else { +// IE6.0 need to know which font to use, Mozilla can figure it out in its own +// (windows firefox at least) +// Anything else than 'Courier New' looks pretty broken. +// 'Lucida Console', 'FixedSys' +print("
    ");
    +}
    +// Writes the (eventually modified) nfo data to output, first formating urls.
    +print(format_urls($nfo));
    +print("
    \n"); +?> +
    +
    +" . count($arr) . " $name\n"; + if (!count($arr)) + return $s; + $s .= "\n"; + $s .= "\n"; + $s .= "" . + ($enablelocation_tweak == 'yes' || get_user_class() >= $userprofile_class ? "" : ""). + "". + "". + "" . + "" . + "" . + "" . + "" . + "" . + "" . + "\n"; + $now = time(); + foreach ($arr as $e) { + $privacy = get_single_value("users", "privacy","WHERE id=".sqlesc($e['userid'])); + ++$num; + + $highlight = $CURUSER["id"] == $e['userid'] ? " bgcolor=#BBAF9B" : ""; + $s .= "\n"; + if($privacy == "strong" || ($torrent['anonymous'] == 'yes' && $e['userid'] == $torrent['owner'])) + { + if(get_user_class() >= $viewanonymous_class || $e['userid'] == $CURUSER['id']) + $s .= "\n"; + } + else + $s .= "\n"; + } + elseif (get_user_class() >= $userprofile_class){ + $location = $e["ip"]; + $s .= "\n"; + } + else $location = ""; + + $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"; + } + elseif ($e["uploaded"]) + $s .= "\n"; + else + $s .= "\n"; + $s .= "\n"; + $s .= "\n"; + $s .= "\n"; + $s .= "\n"; + $s .= "\n"; + } + $s .= "
    ".$lang_viewpeerlist['col_user_ip']."".$lang_viewpeerlist['col_location']."".$lang_viewpeerlist['col_connectable']."".$lang_viewpeerlist['col_uploaded']."".$lang_viewpeerlist['col_rate']."".$lang_viewpeerlist['col_downloaded']."".$lang_viewpeerlist['col_rate']."".$lang_viewpeerlist['col_ratio']."".$lang_viewpeerlist['col_complete']."".$lang_viewpeerlist['col_connected']."".$lang_viewpeerlist['col_idle']."".$lang_viewpeerlist['col_client']."
    ".$lang_viewpeerlist['text_anonymous']."
    (" . get_username($e['userid']) . ")"; + else + $s .= "
    ".$lang_viewpeerlist['text_anonymous']."" . get_username($e['userid']); + + $secs = max(1, ($e["la"] - $e["st"])); + if ($enablelocation_tweak == 'yes'){ + list($loc_pub, $loc_mod) = get_ip_location($e["ip"]); + $location = get_user_class() >= $userprofile_class ? "
    " . $loc_pub . "
    " : $loc_pub; + $s .= "
    " . $location . "" . $location . "" . ($e[connectable] == "yes" ? $lang_viewpeerlist['text_yes'] : "".$lang_viewpeerlist['text_no']."") . "" . mksize($e["uploaded"]) . "" . mksize(($e["uploaded"] - $e["uploadoffset"]) / $secs) . "/s" . mksize($e["downloaded"]) . "" . mksize(($e["downloaded"] - $e["downloadoffset"]) / $secs) . "/s" . mksize(($e["downloaded"] - $e["downloadoffset"]) / max(1, $e["finishedat"] - $e[st])) . "/s" . number_format($ratio, 3) . "".$lang_viewpeerlist['text_inf']."---" . sprintf("%.2f%%", 100 * (1 - ($e["to_go"] / $torrent["size"]))) . "" . mkprettytime($now - $e["st"]) . "" . mkprettytime($now - $e["la"]) . "" . htmlspecialchars(get_agent($e["peer_id"],$e["agent"])) . "
    \n"; + return $s; +} + + $downloaders = array(); + $seeders = array(); + $subres = sql_query("SELECT seeder, finishedat, downloadoffset, uploadoffset, ip, port, uploaded, downloaded, to_go, UNIX_TIMESTAMP(started) AS st, connectable, agent, peer_id, UNIX_TIMESTAMP(last_action) AS la, userid FROM peers WHERE torrent = $id") or sqlerr(); + while ($subrow = mysql_fetch_array($subres)) { + if ($subrow["seeder"] == "yes") + $seeders[] = $subrow; + else + $downloaders[] = $subrow; + } + + function leech_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; + } + $res = sql_query("SELECT torrents.id, torrents.owner, torrents.size, torrents.anonymous FROM torrents WHERE torrents.id = $id LIMIT 1") or sqlerr(); + $row = mysql_fetch_array($res); + usort($seeders, "seed_sort"); + usort($downloaders, "leech_sort"); + + print(dltable($lang_viewpeerlist['text_seeders'], $seeders, $row)); + print(dltable($lang_viewpeerlist['text_leechers'], $downloaders, $row)); +} +?> diff --git a/viewsnatches.php b/viewsnatches.php new file mode 100644 index 00000000..1ac64746 --- /dev/null +++ b/viewsnatches.php @@ -0,0 +1,67 @@ +".$lang_viewsnatches['text_snatch_detail_for'] . "".htmlspecialchars($torrent_name).""); +$count = get_row_count("snatched", "WHERE finished = 'yes' AND torrentid = ".sqlesc($id)); + +if ($count){ + $perpage = 25; + list($pagertop, $pagerbottom, $limit) = pager($perpage, $count, $_SERVER["SCRIPT_NAME"] . "?id=" . htmlspecialchars($id) . "&" ); + print("

    ".$lang_viewsnatches['text_users_top_finished_recently']."

    "); + print("\n"); + print("".(get_user_class() >= $userprofile_class ? "" : "").""); + + $res = sql_query("SELECT * FROM snatched WHERE finished='yes' AND torrentid =" . sqlesc($id) . " ORDER BY completedat DESC $limit"); + + while ($arr = mysql_fetch_assoc($res)) + { + //start torrent + if ($arr["downloaded"] > 0) + { + $ratio = number_format($arr["uploaded"] / $arr["downloaded"], 3); + $ratio = "$ratio"; + } + elseif ($arr["uploaded"] > 0) + $ratio = $lang_viewsnatches['text_inf']; + else + $ratio = "---"; + $uploaded =mksize($arr["uploaded"]); + $downloaded = mksize($arr["downloaded"]); + $seedtime = mkprettytime($arr["seedtime"]); + $leechtime = mkprettytime($arr["leechtime"]); + + $uprate = $arr["seedtime"] > 0 ? mksize($arr["uploaded"] / ($arr["seedtime"] + $arr["leechtime"])) : mksize(0); + $downrate = $arr["leechtime"] > 0 ? mksize($arr["downloaded"] / $arr["leechtime"]) : mksize(0); + //end + + $highlight = $CURUSER["id"] == $arr["userid"] ? " bgcolor=#00A527" : ""; + $userrow = get_user_row($arr['userid']); + if ($userrow['privacy'] == 'strong'){ + $username = $lang_viewsnatches['text_anonymous']; + if (get_user_class() >= $viewanonymous_class || $arr["id"] == $CURUSER['id']) + $username .= "
    (".get_username($arr[userid]).")"; + } + else $username = get_username($arr[userid]); + $reportImage = "\"Report\""; + print("".(get_user_class() >= $userprofile_class ? "" : "")."\n"); + } + print("
    ".$lang_viewsnatches['col_username']."".$lang_viewsnatches['col_ip']."".$lang_viewsnatches['col_uploaded']."/".$lang_viewsnatches['col_downloaded']."".$lang_viewsnatches['col_ratio']."".$lang_viewsnatches['col_se_time']."".$lang_viewsnatches['col_le_time']."".$lang_viewsnatches['col_when_completed']."".$lang_viewsnatches['col_last_action']."".$lang_viewsnatches['col_report_user']."
    " . $username ."".$arr[ip]."".$uploaded."@".$uprate.$lang_viewsnatches['text_per_second']."
    ".$downloaded."@".$downrate.$lang_viewsnatches['text_per_second']."
    $ratio$seedtime$leechtime".gettime($arr[completedat],true,false)."".gettime($arr[last_action],true,false)."".($userrow['privacy'] != 'strong' || get_user_class() >= $viewanonymous_class ? "$reportImage" : $reportImage)."
    \n"); + print($pagerbottom); +} +else +{ + stdmsg($lang_viewsnatches['std_sorry'], $lang_viewsnatches['std_no_snatched_users']); +} +end_main_frame(); +stdfoot(); +?> diff --git a/warned.php b/warned.php new file mode 100644 index 00000000..89a49f73 --- /dev/null +++ b/warned.php @@ -0,0 +1,68 @@ +
    \n"); +print("User Name + Registered + Last access + User Class + Downloaded + UpLoaded + Ratio + End
    Of Warning + Remove
    Warning + Disable
    Account\n"); +for ($i = 1; $i <= $num; $i++) +{ +$arr = mysql_fetch_assoc($res); +if ($arr['added'] == '0000-00-00 00:00:00') + $arr['added'] = '-'; +if ($arr['last_access'] == '0000-00-00 00:00:00') + $arr['last_access'] = '-'; +if($arr["downloaded"] != 0){ +$ratio = number_format($arr["uploaded"] / $arr["downloaded"], 3); +} else { +$ratio="---"; +} +$ratio = "$ratio"; + $uploaded = mksize($arr["uploaded"]); + $downloaded = mksize($arr["downloaded"]); +// $uploaded = str_replace(" ", "
    ", mksize($arr["uploaded"])); +// $downloaded = str_replace(" ", "
    ", mksize($arr["downloaded"])); + +$added = substr($arr['added'],0,10); +$last_access = substr($arr['last_access'],0,10); +$class=get_user_class_name($arr["class"],false,true,true); + +print("" . get_username($arr['id']) ." + $added + $last_access + $class + $downloaded + $uploaded + $ratio + $arr[warneduntil] + + \n"); +} +if (get_user_class() >= UC_ADMINISTRATOR) { +print("\n"); +print("
    \n"); +} +print("

    $pagemenu
    $browsemenu

    "); + +die; + +?>