diff --git a/AutoIndex.conf.php b/AutoIndex.conf.php new file mode 100644 index 0000000..c921e39 --- /dev/null +++ b/AutoIndex.conf.php @@ -0,0 +1,32 @@ + \ No newline at end of file diff --git a/LICENSE b/LICENSE index d159169..deea646 100644 --- a/LICENSE +++ b/LICENSE @@ -1,295 +1,92 @@ - GNU GENERAL PUBLIC LICENSE - Version 2, June 1991 +GNU General Public License - Copyright (C) 1989, 1991 Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. +Version 2, June 1991 +Copyright (C) 1989, 1991 Free Software Foundation, Inc. +59 Temple Place - Suite 330, Boston, MA 02111-1307, USA - Preamble +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 Lesser General Public License instead.) You can apply it to -your programs, too. +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. +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. +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. +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. +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. +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. +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. +The precise terms and conditions for copying, distribution and modification follow. - GNU GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION +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". +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. +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. +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. +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: +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. - a) You must cause the modified files to carry prominent notices - stating that you changed the files and the date of any change. +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. - 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. +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. - 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.) +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. -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. +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. -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. +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. -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. +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. - 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: +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. - 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, +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. - 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, +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. - 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.) +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. -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. +This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. -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. +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. - 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. +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. - 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. +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. - 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. +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. - 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. +NO WARRANTY -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. +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. -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. +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. -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. +END OF TERMS AND CONDITIONS - 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. +How to Apply These Terms to Your New Programs - 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. +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) @@ -303,37 +100,22 @@ the "copyright" line and a pointer to where the full notice is found. 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., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - + 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: - +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. -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: - +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 Lesser General -Public License instead of this License. +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. \ No newline at end of file diff --git a/access.log b/access.log new file mode 100644 index 0000000..35d1505 --- /dev/null +++ b/access.log @@ -0,0 +1 @@ +https://github.com/BeitDina/AutoIndex/invitations \ No newline at end of file diff --git a/blank.html b/blank.html new file mode 100644 index 0000000..b60bcc6 --- /dev/null +++ b/blank.html @@ -0,0 +1,33 @@ + + + + + +

blank.html - Needed for Internet Explorer's hidden IFrame

+ + diff --git a/change_log.html b/change_log.html new file mode 100644 index 0000000..28b6b5a --- /dev/null +++ b/change_log.html @@ -0,0 +1,182 @@ + + + + AutoIndex PHP Script: Change Log + + + + + + + + + + + + + + + +

+ AutoIndex PHP Script, + by Justin Hagstrom, Florin C. Bodin +

+
+ Change Log  +
+
+

+ Legend: +
(+) Added feature +
(!) Security bug fixed +
(-) Bug fixed +
(*) Improved/changed feature +
( ) Non-code change +

+

+ Version 2.2.5 by FlorinCB aka orynider (2019-Sept-17) +
(*) Added language flags feature +
( ) Added language flags to flag/language/ folder. +
(*) Added SwiftBlue template for smartphones.
+

+

+ + Version 2.2.4 (2007-Nov-09) +
(!) Fixed DOS bug +
( ) Added Vista icon set +

+

+ Version 2.2.3 (2007-Nov-05) +
(!) Fixed XSS bug +

+ +

+ Version 2.2.2 (2007-Jul-24) +
(!) Fixed XSS bug in search feature + +

+

+ Version 2.2.1 (2007-Jan-06) +
(*) Improved handling of passwords with .htaccess +
(*) Improved default stylesheet +
( ) Added Danish translation +
( ) Updated Dutch translation +

+ +

+ Version 2.2.0 (2006-Jan-02) +
(+) Added a pagination feature +
(+) Language is selected based on the user's browser's default +
(+) Added support for PHP 5.1.x and higher +
( ) Added Greek and Japanese translations + +

+

+ Version 2.1.2 (2005-Aug-11) +
(-) Fixed bug when editing descriptions of filenames that have special characters +
( ) Added Czech and Slovak translations + +

+

+ Version 2.1.1 (2005-Jul-06) +
(!) Fixed bug with search box +
( ) Added Swedish translation +

+ +

+ Version 2.1.0 (2005-Feb-14) +
(+) Added a .htaccess parser +
(+) Added an FTP browser +
(+) Added moderator and banned account levels +
(+) Added a feature to let moderators/admins change their own password + +

+

+ + Version 2.0.7 (2005-Jan-14) +
(-) Fixed file_description feature +

+

+ Version 2.0.6 (2005-Jan-04) +
(+) Admins are able to copy files from other servers (similar to "wget") +
( ) Added Thai and Arabic translations + +

+ +

+ Version 2.0.5 (2004-Sep-02) +
(+) When force_download is on, the MIME-type sent depends on the file extension +
(*) Using hidden_files to only show certain files no longer restricts directories +

+

+ + Version 2.0.4 (2004-Aug-17) +
(*) When reconfiguring the script, the current settings are selected instead of the defaults +
( ) Added Polish translation + +

+

+ Version 2.0.3 (2004-Jul-26) +
(*) Nested if-statements can be used in the template files +
(*) Folders do not have to be empty to be deleted +

+

+ Version 2.0.2 (2004-Jul-13) +
(*) All output is XHTML 1.1 compliant +
(*) The do_every template command now does not include the last file listed + +

+

+ Version 2.0.1 (2004-Jul-05) +
(+) Added directory cache feature +
(*) Added include command to the template system +
(-) Fixed search page bug when download_count was on +

+

+ + + Version 2.0.0 (2004-Jun-24) +

+

+ Complete rewrite from version 1.0: +

+
  • + Now uses PHP 5. PHP version 5.0 or higher is required. +
  • + + All the features of version 1, plus: +
    (+) Has a template system for all HTML output +
    (+) Tar archives of directories can be downloaded +
    (+) Each user account can have its own home directory +
    (*) Passwords are stored as a sha-1 hash rather than md5 (this is slightly more secure) +
+ +
+ \ No newline at end of file diff --git a/classes/Accounts.php b/classes/Accounts.php new file mode 100644 index 0000000..f2d5575 --- /dev/null +++ b/classes/Accounts.php @@ -0,0 +1,233 @@ + + * @version 1.0.2 (July 21, 2004) + * @package AutoIndex + */ +class Accounts implements Iterator +{ + /** + * @var array The list of valid accounts taken from the stored file + */ + private $userlist; + + /** + * @var int The size of the $userlist array + */ + private $list_count; + + //begin implementation of Iterator + /** + * @var int $i is used to keep track of the current pointer inside the array when implementing Iterator + */ + private $i; + + /** + * @return User The current element in the array + */ + public function current() + { + if ($this -> i < $this -> list_count) + { + return $this -> userlist[$this -> i]; + } + return false; + } + + /** + * Increments the internal array pointer, then returns the user at that + * new position. + * + * @return User The current position of the pointer in the array + */ + public function next() + { + $this -> i++; + return $this -> current(); + } + + /** + * Sets the internal array pointer to 0. + */ + public function rewind() + { + $this -> i = 0; + } + + /** + * @return bool True if $i is a valid array index + */ + public function valid() + { + return ($this -> i < $this -> list_count); + } + + /** + * @return int Returns $i, the key of the array + */ + public function key() + { + return $this -> i; + } + //end implementation of Iterator + + /** + * Reads the user_list file, and fills the $contents array with the + * valid users. + */ + public function __construct() + { + global $config; + $file = @file($config -> __get('user_list')); + if ($file === false) + { + throw new ExceptionDisplay('Cannot open user account file.'); + } + $this -> userlist = array(); + foreach ($file as $line_num => $line) + { + $line = rtrim($line, "\r\n"); + if (ConfigData::line_is_comment($line)) + { + continue; + } + $parts = explode("\t", $line); + if (count($parts) !== 4) + { + throw new ExceptionDisplay('Incorrect format for user accounts file on line ' + . ($line_num + 1)); + } + $this -> userlist[] = new User($parts[0], $parts[1], $parts[2], $parts[3]); + } + $this -> list_count = count($this -> userlist); + $this -> i = 0; + } + + /** + * @param string $name Username to find the level of + * @return int The level of the user + */ + public function get_level($name) + { + foreach ($this as $look) + { + if (strcasecmp($look -> username, $name) !== 0) + { + continue; + } + $lev = (int)$look -> level; + if ($lev < BANNED || $lev > ADMIN) + { + throw new ExceptionDisplay('Invalid level for user ' + . Url::html_output($name) . '.'); + } + return $lev; + } + throw new ExceptionDisplay('User ' . Url::html_output($name) + . ' does not exist.'); + } + + /** + * @param string $name Username to find the home directory for + * @return string The home directory of $name + */ + public function get_home_dir($name) + { + foreach ($this as $look) + { + if (strcasecmp($look -> username, $name) === 0) + { + return $look -> home_dir; + } + } + throw new ExceptionDisplay('User ' . Url::html_output($name) + . ' does not exist.'); + } + + /** + * Returns $name with the character case the same as it is in the accounts + * file. + * + * @param string $name Username to find the stored case of + * @return string + */ + public function get_stored_case($name) + { + foreach ($this as $look) + { + if (strcasecmp($look -> username, $name) === 0) + { + return $look -> username; + } + } + throw new ExceptionDisplay('User ' . Url::html_output($name) + . ' does not exist.'); + } + + /** + * @param User $user The user to determine if it is valid or not + * @return bool True if the username and password are correct + */ + public function is_valid_user(User $user) + { + foreach ($this as $look) + { + if ($look -> equals($user)) + { + return true; + } + } + return false; + } + + /** + * @param string $name Username to find if it exists or not + * @return bool True if a user exists with the username $name + */ + public function user_exists($name) + { + foreach ($this as $look) + { + if (strcasecmp($look -> username, $name) === 0) + { + return true; + } + } + return false; + } +} + +?> \ No newline at end of file diff --git a/classes/Admin.php b/classes/Admin.php new file mode 100644 index 0000000..3098577 --- /dev/null +++ b/classes/Admin.php @@ -0,0 +1,990 @@ + + * @version 1.1.1 (August 10, 2005) + * @package AutoIndex + */ +class Admin +{ + /** + * @var int The level of the logged in user + */ + private $level; + + /** + * @var string The name of the logged in user + */ + private $username; + + /** + * @param string $path The path of the directory to create + * @return bool True on success, false on failure + */ + public static function mkdir_recursive($path) + { + $path = Item::make_sure_slash($path); + if (@is_dir($path)) + { + return true; + } + if (!self::mkdir_recursive(dirname($path))) + { + return false; + } + return @mkdir($path, 0755); + } + + /** + * Deletes a directory and all its contents. + * + * @param string $path The path of the directory to delete + * @return bool True on success, false on failure + */ + private static function rmdir_recursive($path) + { + $path = Item::make_sure_slash($path); + $list = @scandir($path); + if ($list === false) + { + return false; + } + foreach ($list as $file) + { + if ($file == '' || $file == '.' || $file == '..') + { + continue; + } + $dir = "$path$file/"; + @is_dir($dir) ? self::rmdir_recursive($dir) : @unlink($dir); + } + return @rmdir($path); + } + + /** + * Copies a remote file to the local server. + * + * @param string $protocol Either ftp:// or http:// + * @param string $url The rest of the URL after the protocol + */ + private static function copy_remote_file($protocol, $url) + { + if ($protocol == '' || $url == '') + { + throw new ExceptionDisplay('Please go back and enter a file to copy.'); + } + global $dir; + $local_file = $dir . Item::get_basename($url); + if (@file_exists($local_file)) + { + throw new ExceptionDisplay('The file already exists in this directory.'); + } + $remote = $protocol . $url; + $r = @fopen($remote, 'rb'); + if ($r === false) + { + throw new ExceptionDisplay('Cannot open remote file for reading: ' + . Url::html_output($remote) . ''); + } + $l = @fopen($local_file, 'wb'); + if ($l === false) + { + throw new ExceptionDisplay('Cannot open local file for writing.'); + } + while (true) + { + $temp = fread($r, 8192); + if ($temp === '') + { + break; + } + fwrite($l, $temp); + } + fclose($l); + fclose($r); + } + + /** + * @param string $filename The path to the file that stores the info + * @param string $old_name The old name of the file or folder to update inside of $filename + * @param string $new_name The new name of the file or folder + */ + private static function update_file_info($filename, $old_name, $new_name) + { + if (!@is_file($filename)) + { + throw new ExceptionDisplay('The file ' + . Url::html_output($filename) . ' does not exist.'); + } + $text = @file_get_contents($filename); + if ($text === false) + { + throw new ExceptionDisplay('Cannot open file ' + . Url::html_output($filename) . ' for reading.'); + } + $h = @fopen($filename, 'wb'); + if ($h === false) + { + throw new ExceptionDisplay('Cannot open file ' + . Url::html_output($filename) . ' for writing.'); + } + fwrite($h, preg_replace('/^' . preg_quote($old_name, '/') + . '/m', $new_name, $text)); + fclose($h); + } + + /** + * Validates a potential new password. + * + * @param string $pass1 The new password + * @param string $pass2 The new password typed again + */ + private static function validate_new_password($pass1, $pass2) + { + if ($pass1 != $pass2) + { + throw new ExceptionDisplay('Passwords do not match.'); + } + if (strlen($pass1) < 6) + { + throw new ExceptionDisplay('Password must be at least 6 characters long.'); + } + } + + /** + * Changes a user's password. + * + * @param string $username The username + * @param string $old_pass The user's old password + * @param string $new_pass1 The new password + * @param string $new_pass2 The new password typed again + */ + private static function change_password($username, $old_pass, $new_pass1, $new_pass2) + { + self::validate_new_password($new_pass1, $new_pass2); + $accounts = new Accounts(); + if (!$accounts -> user_exists($username)) + { + throw new ExceptionDisplay('Cannot change password: username does not exist.'); + } + if (!$accounts -> is_valid_user(new User($username, sha1($old_pass)))) + { + throw new ExceptionDisplay('Incorrect old password.'); + } + global $config; + $h = @fopen($config -> __get('user_list'), 'wb'); + if ($h === false) + { + throw new ExceptionDisplay("Could not open file $user_list for writing." + . ' Make sure PHP has write permission to this file.'); + } + foreach ($accounts as $this_user) + { + if (strcasecmp($this_user -> username, $username) === 0) + { + $this_user = new User($username, sha1($new_pass1), $this_user -> level, $this_user -> home_dir); + } + fwrite($h, $this_user -> __toString()); + } + fclose($h); + $_SESSION['password'] = sha1($new_pass1); + throw new ExceptionDisplay('Password successfully changed.'); + } + + /** + * Changes a user's level. + * + * @param string $username The username + * @param int $new_level The user's new level + */ + private static function change_user_level($username, $new_level) + { + if ($new_level < BANNED || $new_level > ADMIN) + { + throw new ExceptionDisplay('Invalid user level.'); + } + $accounts = new Accounts(); + if (!$accounts -> user_exists($username)) + { + throw new ExceptionDisplay('Cannot change level: username does not exist.'); + } + global $config; + $h = @fopen($config -> __get('user_list'), 'wb'); + if ($h === false) + { + throw new ExceptionDisplay("Could not open file $user_list for writing." + . ' Make sure PHP has write permission to this file.'); + } + foreach ($accounts as $this_user) + { + if (strcasecmp($this_user -> username, $username) === 0) + { + $this_user = new User($username, $this_user -> sha1_pass, $new_level, $this_user -> home_dir); + } + fwrite($h, $this_user -> __toString()); + } + fclose($h); + throw new ExceptionDisplay('User level successfully changed.'); + } + + /** + * @param string $username The name of the new user to create + * @param string $pass1 The raw password + * @param string $pass2 The raw password repeated again for verification + * @param int $level The level of the user (use GUEST USER ADMIN constants) + * @param string $home_dir The home directory of the user, or blank for the default + */ + private static function add_user($username, $pass1, $pass2, $level, $home_dir = '') + { + self::validate_new_password($pass1, $pass2); + $username_reg_exp = '/^[A-Za-z0-9_-]+$/'; + if (!preg_match($username_reg_exp, $username)) + { + throw new ExceptionDisplay('The username must only contain alpha-numeric characters, underscores, or dashes.' + . '
It must match the regular expression: ' + . Url::html_output($username_reg_exp) . ''); + } + if ($home_dir != '') + { + $home_dir = Item::make_sure_slash($home_dir); + if (!@is_dir($home_dir)) + { + throw new ExceptionDisplay('The user\'s home directory is not valid directory.'); + } + } + $list = new Accounts(); + if ($list -> user_exists($username)) + { + throw new ExceptionDisplay('This username already exists.'); + } + global $config; + $h = @fopen($config -> __get('user_list'), 'ab'); + if ($h === false) + { + throw new ExceptionDisplay('User list file could not be opened for writing.'); + } + $new_user = new User($username, sha1($pass1), $level, $home_dir); + fwrite($h, $new_user -> __toString()); + fclose($h); + throw new ExceptionDisplay('User successfully added.'); + } + + /** + * @param string $username Deletes user with the name $username + */ + private static function del_user($username) + { + $accounts = new Accounts(); + if (!$accounts -> user_exists($username)) + { + throw new ExceptionDisplay('Cannot delete user: username does not exist.'); + } + global $config; + $h = @fopen($config -> __get('user_list'), 'wb'); + if ($h === false) + { + throw new ExceptionDisplay("Could not open file $user_list for writing." + . ' Make sure PHP has write permission to this file.'); + } + foreach ($accounts as $this_user) + { + if (strcasecmp($this_user -> username, $username) !== 0) + { + fwrite($h, $this_user -> __toString()); + } + } + fclose($h); + throw new ExceptionDisplay('User successfully removed.'); + } + + /** + * @param User $current_user This user is checked to make sure it really is an admin + */ + public function __construct(User $current_user) + { + if (!($current_user instanceof UserLoggedIn)) + { + throw new ExceptionDisplay('You must be logged in to access this section.'); + } + $this -> level = $current_user -> level; + $this -> username = $current_user -> username; + } + + /** + * @param string $action + */ + public function action($action) + { + //This is a list of the actions moderators can do (otherwise, the user must be an admin) + $mod_actions = array('edit_description', 'change_password', 'ftp'); + + if (in_array(strtolower($action), $mod_actions)) + { + if ($this -> level < MODERATOR) + { + throw new ExceptionDisplay('You must be a moderator to access this section.'); + } + } + else if ($this -> level < ADMIN) + { + throw new ExceptionDisplay('You must be an administrator to access this section.'); + } + switch (strtolower($action)) + { + case 'config': + { + /** Include the config generator file. */ + if (!@include_once(CONFIG_GENERATOR)) + { + throw new ExceptionDisplay('Error including file ' + . CONFIG_GENERATOR . ''); + } + die(); + } + case 'rename': + { + if (!isset($_GET['filename'])) + { + throw new ExceptionDisplay('No filenames specified.'); + } + global $dir; + $old = $dir . Url::clean_input($_GET['filename']); + if (!@file_exists($old)) + { + header('HTTP/1.0 404 Not Found'); + throw new ExceptionDisplay('Specified file could not be found.'); + } + if (isset($_GET['new_name'])) + { + $new = $dir . Url::clean_input($_GET['new_name']); + if ($old == $new) + { + throw new ExceptionDisplay('Filename unchanged.'); + } + if (@file_exists($new)) + { + throw new ExceptionDisplay('Cannot overwrite existing file.'); + } + if (@rename($old, $new)) + { + global $config; + if (DOWNLOAD_COUNT) + { + self::update_file_info($config -> __get('download_count'), $old, $new); + } + if (DESCRIPTION_FILE) + { + self::update_file_info($config -> __get('description_file'), $old, $new); + } + throw new ExceptionDisplay('File renamed successfully.'); + } + throw new ExceptionDisplay('Error renaming file.'); + } + global $words, $subdir; + throw new ExceptionDisplay('

' . $words -> __get('renaming') + . ' ' . Url::html_output($_GET['filename']) + . '

' . $words -> __get('new filename') + . ':
(' + . $words -> __get('you can also move the file by specifying a path') + . ')

' + . '' + . '' + . '

'); + } + case 'delete': + { + if (!isset($_GET['filename'])) + { + throw new ExceptionDisplay('No filename specified.'); + } + if (isset($_GET['sure'])) + { + global $dir; + $to_delete = $dir . Url::clean_input($_GET['filename']); + if (!@file_exists($to_delete)) + { + header('HTTP/1.0 404 Not Found'); + throw new ExceptionDisplay('Specified file could not be found.'); + } + if (@is_dir($to_delete)) + { + if (self::rmdir_recursive($to_delete)) + { + throw new ExceptionDisplay('Folder successfully deleted.'); + } + throw new ExceptionDisplay('Error deleting folder.'); + } + if (@unlink($to_delete)) + { + throw new ExceptionDisplay('File successfully deleted.'); + } + throw new ExceptionDisplay('Error deleting file.'); + } + global $words, $subdir; + throw new ExceptionDisplay('

' + . $words -> __get('are you sure you want to delete the file') + . ' ' . Url::html_output($_GET['filename']) . '?

' + . '

' + . '' + . '

'); + } + case 'add_user': + { + if (isset($_POST['username'], $_POST['pass1'], $_POST['pass2'], $_POST['level'], $_POST['home_dir'])) + { + self::add_user($_POST['username'], $_POST['pass1'], + $_POST['pass2'], (int)$_POST['level'], $_POST['home_dir']); + } + global $words; + throw new ExceptionDisplay($words -> __get('add user') + . ':

' + . $words -> __get('username') . ':
' + . $words -> __get('password') . ':
' + . $words -> __get('password') . ':
' + . $words -> __get('level') . ':

Home Directory: ' + . '
(leave blank to use the default base directory)

'); + } + case 'change_password': + { + if (isset($_POST['pass1'], $_POST['pass2'], $_POST['old_pass'])) + { + self::change_password($this -> username, $_POST['old_pass'], + $_POST['pass1'], $_POST['pass2']); + } + throw new ExceptionDisplay('
+

Old password: +
New password: +
New password:

+

'); + } + case 'change_user_level': + { + if (isset($_POST['username'], $_POST['level'])) + { + self::change_user_level($_POST['username'], (int)$_POST['level']); + } + $accounts = new Accounts(); + $out = '
+

Select user:

Select new level:

+

'); + } + case 'del_user': + { + if (isset($_POST['username'])) + { + if (isset($_POST['sure'])) + { + self::del_user($_POST['username']); + } + global $words; + throw new ExceptionDisplay('

' + . $words -> __get('are you sure you want to remove the user') + . ' '.$_POST['username'] . '?

' + . '
' + . '

'); + } + global $words; + $accounts = new Accounts(); + $out = '

' . $words -> __get('select user to remove') + . ':

'); + } + case 'edit_description': + { + if (isset($_GET['filename'])) + { + global $dir; + $filename = $dir . $_GET['filename']; + if (isset($_GET['description'])) + { + global $descriptions, $config; + if (DESCRIPTION_FILE && $descriptions -> is_set($filename)) + //if it's already set, update the old description + { + //update the new description on disk + $h = @fopen($config -> __get('description_file'), 'wb'); + if ($h === false) + { + throw new ExceptionDisplay('Could not open description file for writing.' + . ' Make sure PHP has write permission to this file.'); + } + foreach ($descriptions as $file => $info) + { + fwrite($h, "$file\t" . (($file == $filename) ? $_GET['description'] : $info) . "\n"); + } + fclose($h); + + //update the new description in memory + $descriptions -> set($filename, $_GET['description']); + } + else if ($_GET['description'] != '') + //if it's not set, add it to the end + { + $h = @fopen($config -> __get('description_file'), 'ab'); + if ($h === false) + { + throw new ExceptionDisplay('Could not open description file for writing.' + . ' Make sure PHP has write permission to this file.'); + } + fwrite($h, "$filename\t" . $_GET['description'] . "\n"); + fclose($h); + + //read the description file with the updated data + $descriptions = new ConfigData($config -> __get('description_file')); + } + } + else + { + global $words, $subdir, $descriptions; + $current_desc = (DESCRIPTION_FILE && $descriptions -> is_set($filename) ? $descriptions -> __get($filename) : ''); + throw new ExceptionDisplay('

' + . $words -> __get('enter the new description for the file') + . ' ' . Url::html_output($_GET['filename']) + . ':

' + . '

'); + } + } + else + { + throw new ExceptionDisplay('No filename specified.'); + } + break; + } + case 'edit_hidden': + { + if (!HIDDEN_FILES) + { + throw new ExceptionDisplay('The file hiding system is not in use. To enable it, reconfigure the script.'); + } + global $hidden_list; + if (isset($_GET['add']) && $_GET['add'] != '') + { + global $config; + $h = @fopen($config -> __get('hidden_files'), 'ab'); + if ($h === false) + { + throw new ExceptionDisplay('Unable to open hidden files list for writing.'); + } + fwrite($h, $_GET['add'] . "\n"); + fclose($h); + throw new ExceptionDisplay('Hidden file added.'); + } + if (isset($_GET['remove'])) + { + global $config; + $h = @fopen($config -> __get('hidden_files'), 'wb'); + if ($h === false) + { + throw new ExceptionDisplay('Unable to open hidden files list for writing.'); + } + foreach ($hidden_list as $hid) + { + if ($hid != $_GET['remove']) + { + fwrite($h, $hid . "\n"); + } + } + fclose($h); + throw new ExceptionDisplay('Hidden file removed.'); + } + global $words; + $str = '

' . $words -> __get('add a new hidden file') . ':

' + . '

You can also use wildcards (?, *, +) for each entry.
' + . 'If you want to do the opposite of "hidden files" - show only certain files - ' + . 'put a colon in front of those entries.

' + . '

'; + + $str .= '

' . $words -> __get('remove a hidden file') + . ':

'; + throw new ExceptionDisplay($str); + } + case 'edit_banned': + { + if (!BANNED_LIST) + { + throw new ExceptionDisplay('The banning system is not in use. To enable it, reconfigure the script.'); + } + if (isset($_GET['add']) && $_GET['add'] != '') + { + global $config; + $h = @fopen($config -> __get('banned_list'), 'ab'); + if ($h === false) + { + throw new ExceptionDisplay('Unable to open banned_list for writing.'); + } + fwrite($h, $_GET['add'] . "\n"); + fclose($h); + throw new ExceptionDisplay('Ban added.'); + } + if (isset($_GET['remove'])) + { + global $b_list, $config; + $h = @fopen($config -> __get('banned_list'), 'wb'); + if ($h === false) + { + throw new ExceptionDisplay('Unable to open banned_list for writing.'); + } + foreach ($b_list as $ban) + { + if ($ban != $_GET['remove']) + { + fwrite($h, $ban . "\n"); + } + } + fclose($h); + throw new ExceptionDisplay('Ban removed.'); + } + global $b_list, $words; + $str = '

' . $words -> __get('add a new ban') . ':

' + . '

'; + + $str .= '

' + . $words -> __get('remove a ban') . ':

'; + throw new ExceptionDisplay($str); + } + case 'stats': + { + if (!LOG_FILE) + { + throw new ExceptionDisplay('The logging system has not been enabled.'); + } + $stats = new Stats(); + $stats -> display(); + break; + } + case 'view_log': + { + if (!LOG_FILE) + { + throw new ExceptionDisplay('The logging system has not been enabled.'); + } + global $log; + if (isset($_GET['num'])) + { + $log -> display((int)$_GET['num']); + } + global $words; + throw new ExceptionDisplay($words -> __get('how many entries would you like to view') + . '?
' + . '
'); + } + case 'create_dir': + { + if (isset($_GET['name'])) + { + global $dir; + if (!self::mkdir_recursive($dir . $_GET['name'])) + { + throw new ExceptionDisplay('Error creating new folder.'); + } + } + else + { + global $words, $subdir; + throw new ExceptionDisplay('

' . $words -> __get('enter the new name') + . ':

' + . '

'); + } + break; + } + case 'copy_url': + { + if (isset($_GET['protocol'], $_GET['copy_file'])) + { + self::copy_remote_file(rawurldecode($_GET['protocol']), rawurldecode($_GET['copy_file'])); + throw new ExceptionDisplay('Copy was successful.'); + } + global $dir; + $text = ' + +
+

Enter the name of the remote file you would like to copy:

+
+

+ + http:// +
ftp:// +

+

+

'; + echo new Display($text); + die(); + } + case 'ftp': + { + if (isset($_POST['host'], $_POST['port'], $_POST['directory'], + $_POST['ftp_username'], $_POST['ftp_password'])) + { + if ($_POST['host'] == '') + { + throw new ExceptionDisplay('Please go back and enter a hostname.'); + } + if ($_POST['ftp_username'] == '' && $_POST['ftp_password'] == '') + //anonymous login + { + $_POST['ftp_username'] = 'anonymous'; + $_POST['ftp_password'] = 'autoindex@sourceforge.net'; + } + if ($_POST['directory'] == '') + { + $_POST['directory'] = './'; + } + if ($_POST['port'] == '') + { + $_POST['port'] = 21; + } + $_SESSION['ftp'] = array( + 'host' => $_POST['host'], + 'port' => (int)$_POST['port'], + 'directory' => Item::make_sure_slash($_POST['directory']), + 'username' => $_POST['ftp_username'], + 'password' => $_POST['ftp_password'], + 'passive' => isset($_POST['passive']) + ); + } + if (isset($_GET['set_dir'])) + { + $_SESSION['ftp']['directory'] = $_GET['set_dir']; + } + global $subdir; + if (isset($_GET['ftp_logout'])) + { + unset($_SESSION['ftp']); + $text = '

Logout successful. Go back.

'; + } + else if (isset($_SESSION['ftp'])) + { + try + { + $ftp = new Ftp($_SESSION['ftp']['host'], $_SESSION['ftp']['port'], + $_SESSION['ftp']['passive'], $_SESSION['ftp']['directory'], + $_SESSION['ftp']['username'], $_SESSION['ftp']['password']); + } + catch (ExceptionFatal $e) + { + unset($_SESSION['ftp']); + throw $e; + } + if (isset($_GET['filename']) && $_GET['filename'] != '') + //transfer local to FTP + { + global $dir; + $name = rawurldecode($_GET['filename']); + $ftp -> put_file($dir . $name, Item::get_basename($name)); + throw new ExceptionDisplay('File successfully transferred to FTP server.'); + } + if (isset($_GET['transfer']) && $_GET['transfer'] != '') + //transfer FTP to local + { + global $dir; + $name = rawurldecode($_GET['transfer']); + $ftp -> get_file($dir . Item::get_basename($name), $name); + throw new ExceptionDisplay('File successfully transferred from FTP server.'); + } + global $words; + $text = '

Logout of FTP server +
Back to index.

'; + } + else + { + $text = '
+
+

FTP server: + port +
Passive Mode

+

Username: +
Password: + (Leave these blank to login anonymously) +

Directory: +

+

Back to index.

'; + } + echo new Display($text); + die(); + } + default: + { + throw new ExceptionDisplay('Invalid admin action.'); + } + } + } + + /** + * @return string The HTML text that makes up the admin panel + */ + public function __toString() + { + global $words, $subdir; + $str = ''; + + //only ADMIN accounts + if ($this -> level >= ADMIN) $str = ' +

+ ' + . $words -> __get('reconfigure script') . ' +

+

+ ' + . $words -> __get('edit list of hidden files') . ' +
' + . $words -> __get('edit ban list') . ' +

+

+ ' . $words -> __get('create new directory in this folder') + . '
' . $words -> __get('copy url') . ' +

+

+ ' + . $words -> __get('view entries from log file') . ' +
' + . $words -> __get('view statistics from log file') . ' +

+

+ ' + . $words -> __get('add new user') . ' +
' + . $words -> __get('delete user') . ' +
+ Change a user\'s level +

'; + //MODERATOR and ADMIN accounts + if ($this -> level >= MODERATOR) $str .= ' +

+ + Change your password +

+

+ FTP browser +

'; + return $str; + } +} + +?> diff --git a/classes/ConfigData.php b/classes/ConfigData.php new file mode 100644 index 0000000..9cbd50b --- /dev/null +++ b/classes/ConfigData.php @@ -0,0 +1,233 @@ + + * @version 1.0.2 (January 13, 2005) + * @package AutoIndex + */ +class ConfigData implements Iterator +{ + /** + * @var array A list of all the settings + */ + private $config; + + /** + * @var string The name of the file to read the settings from + */ + private $filename; + + //begin implementation of Iterator + /** + * @var bool + */ + private $valid; + + /** + * @return string + */ + public function current() + { + return current($this -> config); + } + + /** + * Increments the internal array pointer, and returns the new value. + * + * @return string + */ + public function next() + { + $t = next($this -> config); + if ($t === false) + { + $this -> valid = false; + } + return $t; + } + + /** + * Sets the internal array pointer to the beginning. + */ + public function rewind() + { + reset($this -> config); + } + + /** + * @return bool + */ + public function valid() + { + return $this -> valid; + } + + /** + * @return string + */ + public function key() + { + return key($this -> config); + } + //end implementation of Iterator + + /** + * @param string $line The line to test + * @return bool True if $line starts with characters that mean it is a comment + */ + public static function line_is_comment($line) + { + $line = trim($line); + return (($line == '') || preg_match('@^(//|<\?|\?>|/\*|\*/|#)@', $line)); + } + + /** + * @param string $file The filename to read the data from + */ + public function __construct($file) + { + if ($file === false) + { + return; + } + $this -> valid = true; + $this -> filename = $file; + $contents = @file($file); + if ($contents === false) + { + throw new ExceptionFatal('Error reading file ' + . Url::html_output($file) . ''); + } + foreach ($contents as $i => $line) + { + $line = rtrim($line, "\r\n"); + if (self::line_is_comment($line)) + { + continue; + } + $parts = explode("\t", $line, 2); + if (count($parts) !== 2 || $parts[0] == '' || $parts[1] == '') + { + throw new ExceptionFatal('Incorrect format for file ' + . Url::html_output($file) . ' on line ' . ($i + 1) + . '.
Format is "variable name[tab]value"'); + } + if (isset($this -> config[$parts[0]])) + { + throw new ExceptionFatal('Error in ' + . Url::html_output($file) . ' on line ' . ($i + 1) + . '.
' . Url::html_output($parts[0]) + . ' is already defined.'); + } + $this -> config[$parts[0]] = $parts[1]; + } + } + + /** + * $config[$key] will be set to $info. + * + * @param string $key + * @param string $info + */ + public function set($key, $info) + { + $this -> config[$key] = $info; + } + + /** + * This will look for the key $item, and add one to the $info (assuming + * it is an integer). + * + * @param string $item The key to look for + */ + public function add_one($item) + { + if ($this -> is_set($item)) + { + $h = @fopen($this -> filename, 'wb'); + if ($h === false) + { + throw new ExceptionFatal('Could not open file ' + . Url::html_output($this -> filename) + . ' for writing. Make sure PHP has write permission to this file.'); + } + foreach ($this as $current_item => $count) + { + fwrite($h, "$current_item\t" + . (($current_item == $item) ? ((int)$count + 1) : $count) + . "\n"); + } + } + else + { + $h = @fopen($this -> filename, 'ab'); + if ($h === false) + { + throw new ExceptionFatal('Could not open file ' + . $this -> filename . ' for writing.' + . ' Make sure PHP has write permission to this file.'); + } + fwrite($h, "$item\t1\n"); + } + fclose($h); + } + + /** + * @param string $name The key to look for + * @return bool True if $name is set + */ + public function is_set($name) + { + return isset($this -> config[$name]); + } + + /** + * @param string $name The key to look for + * @return string The value $name points to + */ + public function __get($name) + { + if (isset($this -> config[$name])) + { + return $this -> config[$name]; + } + throw new ExceptionFatal('Setting ' . Url::html_output($name) + . ' is missing in file ' + . Url::html_output($this -> filename) . '.'); + } +} + +?> \ No newline at end of file diff --git a/classes/DirItem.php b/classes/DirItem.php new file mode 100644 index 0000000..ab5a830 --- /dev/null +++ b/classes/DirItem.php @@ -0,0 +1,2681 @@ + + * @version 1.0.1 (June 30, 2004) + * @package AutoIndex + */ +class DirItem extends Item +{ + /** + * @var DirectoryList The list of this directory's contents + */ + private $temp_list; + + /** + * @return string Always returns 'dir', since this is a directory, not a file + */ + public function file_ext() + { + return 'dir'; + } + + /** + * @return int The total size in bytes of the folder (recursive) + */ + private function dir_size() + { + if (!isset($this -> temp_list)) + { + $this -> temp_list = new DirectoryList($this -> parent_dir . $this -> filename); + } + return $this -> temp_list -> size_recursive(); + } + + /** + * @return int The total number of files in the folder (recursive) + */ + public function num_subfiles() + { + if (!isset($this -> temp_list)) + { + $this -> temp_list = new DirectoryList($this -> parent_dir . $this -> filename); + } + return $this -> temp_list -> num_files(); + } + + /** + * @param string $path + * @return string The parent directory of $path + */ + public static function get_parent_dir($path) + { + $path = str_replace('\\', '/', $path); + while (preg_match('#/$#', $path)) + //remove all slashes from the end + { + $path = substr($path, 0, -1); + } + $pos = strrpos($path, '/'); + if ($pos === false) + { + return ''; + } + $path = substr($path, 0, $pos + 1); + return (($path === false) ? '' : $path); + } + + /** + * @param string $parent_dir + * @param string $filename + */ + public function __construct($parent_dir, $filename) + { + $filename = self::make_sure_slash($filename); + parent::__construct($parent_dir, $filename); + global $config, $subdir; + $this -> downloads = ' '; + if ($filename == '../') + //link to parent directory + { + if ($subdir != '') + { + global $words; + $this -> is_parent_dir = true; + $this -> filename = $words -> __get('parent directory'); + $this -> icon = (ICON_PATH ? $config -> __get('icon_path') . 'back.png' : ''); + $this -> size = new Size(true); + $this -> link = Url::html_output($_SERVER['PHP_SELF']) . '?dir=' . Url::translate_uri(self::get_parent_dir($subdir)); + $this -> parent_dir = $this -> new_icon = ''; + $this -> a_time = $this -> m_time = false; + } + else + { + $this -> is_parent_dir = $this -> filename = false; + } + } + else + { + //regular folder + $file = $this -> parent_dir . $filename; + + if (!@is_dir($file)) + { + throw new ExceptionDisplay('Directory ' . Url::html_output($this -> parent_dir . $filename) . ' does not exist.'); + } + + $this -> filename = $filename = substr($filename, 0, -1); //str_replace('', '/', $filename); + $mb_strlen = mb_strlen($filename); + $this -> icon = $config -> __get('icon_path') . 'dir.png'; + + if (($mb_strlen > 0) && ($mb_strlen < 6)) + { + $decoded_lang_name = self::decode_country_name($filename, 'language'); + if (!empty($decoded_lang_name)) + { + $this -> icon = FLAG_PATH ? $config -> __get('flag_path') . $filename . '.png' : $config -> __get('icon_path') . $filename . '.png'; + } + global $descriptions; + $this -> description = $decoded_lang_name; + } + $this -> link = Url::html_output($_SERVER['PHP_SELF']) . '?dir=' . Url::translate_uri(substr($this -> parent_dir, strlen($config -> __get('base_dir'))) . $filename); + + } + } + + /** + * function decode_lang from mx_traslator phpBB3 Extension + * + * $mx_user_lang = decode_country_name($lang['USER_LANG'], 'country'); + * + * @param unknown_type $file_dir + * @param unknown_type $lang_country = 'country' or 'language' + * @param array $langs_countries + * @return unknown + */ + private function decode_country_name($file_dir, $lang_country = 'country', $langs_countries = false) + { + /* known languages */ + switch ($file_dir) + { + case 'aa': + $lang_name = 'AFAR'; + $country_name = 'AFAR'; //Ethiopia + break; + + case 'aae': + $lang_name = 'AFRICAN-AMERICAN_ENGLISH'; + $country_name = 'UNITED_STATES'; + break; + + case 'ab': + $lang_name = 'ABKHAZIAN'; + $country_name = 'ABKHAZIA'; + break; + + case 'ad': + $lang_name = 'ANGOLA'; + $country_name = 'ANGOLA'; + break; + + case 'ae': + $lang_name = 'AVESTAN'; + $country_name = 'UNITED_ARAB_EMIRATES'; //Persia + break; + + case 'af': + $country_name = 'AFGHANISTAN'; // langs: pashto and dari + $lang_name = 'AFRIKAANS'; // speakers: 6,855,082 - 13,4% + break; + + case 'ag': + $lang_name = 'ENGLISH-CREOLE'; + $country_name = 'ANTIGUA_&_BARBUDA'; + break; + + case 'ai': + $lang_name = 'Anguilla'; + $country_name = 'ANGUILLA'; + break; + + case 'aj': + $lang_name = 'AROMANIAN'; + $country_name = 'Aromaya'; + break; + + case 'ak': + $lang_name = 'AKAN'; + $country_name = ''; + break; + + case 'al': + $lang_name = 'ALBANIAN'; + $country_name = 'ALBANIA'; + break; + + + case 'am': + $lang_name = 'AMHARIC'; + //$lang_name = 'armenian'; + $country_name = 'ARMENIA'; + break; + + case 'an': + $lang_name = 'ARAGONESE'; // + //$country_name = 'Andorra'; + $country_name = 'NETHERLAND_ANTILLES'; + break; + + case 'ao': + $lang_name = 'ANGOLIAN'; + $country_name = 'ANGOLA'; + break; + + case 'ap': + $lang_name = 'ANGIKA'; + $country_name = 'ANGA'; //India + break; + + case 'ar': + $lang_name = 'ARABIC'; + $country_name = 'ARGENTINA'; + break; + + case 'arq': + $lang_name = 'ALGERIAN_ARABIC'; //known as Darja or Dziria in Algeria + $country_name = 'ALGERIA'; + break; + + case 'ary': + $lang_name = 'MOROCCAN_ARABIC'; //known as Moroccan Arabic or Moroccan Darija or Algerian Saharan Arabic + $country_name = 'MOROCCO'; + break; + + //jrb – Judeo-Arabic + //yhd – Judeo-Iraqi Arabic + //aju – Judeo-Moroccan Arabic + //yud – Judeo-Tripolitanian Arabic + //ajt – Judeo-Tunisian Arabic + //jye – Judeo-Yemeni Arabic + case 'jrb': + $lang_name = 'JUDEO-ARABIC'; + $country_name = 'JUDEA'; + break; + + case 'kab': + $lang_name = 'KABYLE'; //known as Kabyle (Tamazight) + $country_name = 'ALGERIA'; + break; + + case 'aq': + $lang_name = ''; + $country_name = 'ANTARCTICA'; + break; + + case 'as': + $lang_name = 'ASSAMESE'; + $country_name = 'AMERICAN_SAMOA'; + break; + + case 'at': + $lang_name = 'GERMAN'; + $country_name = 'AUSTRIA'; + break; + + case 'av': + $lang_name = 'AVARIC'; + $country_name = ''; + break; + + case 'av-da': + case 'av_da': + case 'av_DA': + $lang_name = 'AVARIAN_KHANATE'; + $country_name = 'Daghestanian'; + break; + + case 'ay': + $lang_name = 'AYMARA'; + $country_name = ''; + break; + + case 'aw': + $lang_name = 'ARUBA'; + $country_name = 'ARUBA'; + break; + + case 'au': + $lang_name = 'en-au'; // + $country_name = 'AUSTRALIA'; + break; + + case 'az': + $lang_name = 'AZERBAIJANI'; + $country_name = 'AZERBAIJAN'; + break; + + case 'ax': + $lang_name = 'FINNISH'; + $country_name = 'ÅLAND_ISLANDS'; //The Åland Islands or Åland (Swedish: Åland, IPA: [ˈoːland]; Finnish: Ahvenanmaa) is an archipelago province at the entrance to the Gulf of Bothnia in the Baltic Sea belonging to Finland. + break; + + case 'ba': + $lang_name = 'BASHKIR'; //Baskortostán (Rusia) + $country_name = 'BOSNIA_&_HERZEGOVINA'; //Bosnian, Croatian, Serbian + break; + + //Bavarian (also known as Bavarian Austrian or Austro-Bavarian; Boarisch [ˈbɔɑrɪʃ] or Bairisch; + //German: Bairisch [ˈbaɪʁɪʃ] (About this soundlisten); Hungarian: bajor. + case 'bar': + $lang_name = 'BAVARIAN'; + $country_name = 'BAVARIA'; //Germany + break; + + case 'bb': + $lang_name = 'Barbados'; + $country_name = 'BARBADOS'; + break; + + case 'bd': + $lang_name = 'Bangladesh'; + $country_name = 'BANGLADESH'; + break; + + case 'be': + $lang_name = 'BELARUSIAN'; + $country_name = 'BELGIUM'; + break; + + case 'bf': + $lang_name = 'Burkina Faso'; + $country_name = 'BURKINA_FASO'; + break; + + case 'bg': + $lang_name = 'BULGARIAN'; + $country_name = 'BULGARIA'; + break; + + case 'bh': + $lang_name = 'BHOJPURI'; // Bihar (India) + $country_name = 'BAHRAIN'; // Mamlakat al-Ba?rayn (arabic) + break; + + case 'bi': + $lang_name = 'BISLAMA'; + $country_name = 'BURUNDI'; + break; + + + case 'bj': + $lang_name = 'BENIN'; + $country_name = 'BENIN'; + break; + + case 'bl': + $lang_name = 'BONAIRE'; + $country_name = 'BONAIRE'; + break; + + case 'bm': + $lang_name = 'BAMBARA'; + $country_name = 'Bermuda'; + break; + + case 'bn': + $country_name = 'BRUNEI'; + $lang_name = 'BENGALI'; + + break; + + case 'bo': + $lang_name = 'TIBETAN'; + $country_name = 'BOLIVIA'; + break; + + case 'br': + $lang_name = 'BRETON'; + $country_name = 'BRAZIL'; //pt + break; + + case 'bs': + $lang_name = 'BOSNIAN'; + $country_name = 'BAHAMAS'; + break; + + case 'bt': + $lang_name = 'Bhutan'; + $country_name = 'Bhutan'; + break; + + case 'bw': + $lang_name = 'Botswana'; + $country_name = 'BOTSWANA'; + break; + + case 'bz': + $lang_name = 'BELIZE'; + $country_name = 'BELIZE'; + break; + + case 'by': + $lang_name = 'BELARUSIAN'; + $country_name = 'Belarus'; + break; + + case 'en-CM': + case 'en_cm': + $lang_name = 'CAMEROONIAN_PIDGIN_ENGLISH'; + $country_name = 'Cameroon'; + break; + + case 'wes': + $lang_name = 'CAMEROONIAN'; //Kamtok + $country_name = 'CAMEROON'; //Wes Cos + break; + + case 'cm': + $lang_name = 'CAMEROON'; + $country_name = 'CAMEROON'; + break; + + case 'ca': + $lang_name = 'CATALAN'; + $country_name = 'CANADA'; + break; + + case 'cc': + $lang_name = 'COA_A_COCOS'; //COA A Cocos dialect of Betawi Malay [ente (you) and ane (me)] and AU-English + $country_name = 'COCOS_ISLANDS'; //CC Cocos (Keeling) Islands + break; + + case 'cd': + $lang_name = 'Congo Democratic Republic'; + $country_name = 'CONGO_DEMOCRATIC_REPUBLIC'; + break; + + //нохчийн мотт + case 'ce': + $lang_name = 'CHECHEN'; + $country_name = 'Chechenya'; + break; + + case 'cf': + $lang_name = 'Central African Republic'; + $country_name = 'CENTRAL_AFRICAN_REPUBLIC'; + break; + + case 'cg': + $lang_name = 'CONGO'; + $country_name = 'CONGO'; + break; + + case 'ch': + $lang_name = 'CHAMORRO'; //Finu' Chamoru + $country_name = 'SWITZERLAND'; + break; + + case 'ci': + $lang_name = 'Cote D-Ivoire'; + $country_name = 'COTE_D-IVOIRE'; + break; + + case 'ck': + $lang_name = ''; + $country_name = 'COOK_ISLANDS'; //CK Cook Islands + break; + + case 'cl': + $lang_name = 'Chile'; + $country_name = 'CHILE'; + break; + + case 'cn': + //Chinese Macrolanguage + case 'zh': //639-1: zh + case 'chi': //639-2/B: chi + case 'zho': //639-2/T and 639-3: zho + $lang_name = 'CHINESE'; + $country_name = 'CHINA'; + break; + //Chinese Individual Languages + // 中文 + // Fujian Province, Republic of China + case 'cn-fj': + // 閩東話 + case 'cdo': //Chinese Min Dong + $lang_name = 'CHINESE_DONG'; + $country_name = 'CHINA'; + break; + //1. Bingzhou spoken in central Shanxi (the ancient Bing Province), including Taiyuan. + //2. Lüliang spoken in western Shanxi (including Lüliang) and northern Shaanxi. + //3. Shangdang spoken in the area of Changzhi (ancient Shangdang) in southeastern Shanxi. + //4. Wutai spoken in parts of northern Shanxi (including Wutai County) and central Inner Mongolia. + //5. Da–Bao spoken in parts of northern Shanxi and central Inner Mongolia, including Baotou. + //6. Zhang-Hu spoken in Zhangjiakou in northwestern Hebei and parts of central Inner Mongolia, including Hohhot. + //7. Han-Xin spoken in southeastern Shanxi, southern Hebei (including Handan) and northern Henan (including Xinxiang). + //8. Zhi-Yan spoken in Zhidan County and Yanchuan County in northern Shaanxi. + // 晋语 / 晉語 + case 'cjy': //Chinese Jinyu 晉 + $lang_name = 'CHINA_JINYU'; + $country_name = 'CHINA'; + break; + // Cantonese is spoken in Hong Kong + // 官話 + case 'cmn': //Chinese Mandarin 普通话 (Pǔ tōng huà) literally translates into “common tongue.” + $lang_name = 'CHINESE_MANDARIN'; + $country_name = 'CHINA'; + break; + // Mandarin is spoken in Mainland China and Taiwan + // 閩語 / 闽语 + //semantic shift has occurred in Min or the rest of Chinese: + //*tiaŋB 鼎 "wok". The Min form preserves the original meaning "cooking pot". + //*dzhənA "rice field". scholars identify the Min word with chéng 塍 (MC zying) "raised path between fields", but Norman argues that it is cognate with céng 層 (MC dzong) "additional layer or floor". + //*tšhioC 厝 "house". the Min word is cognate with shù 戍 (MC syuH) "to guard". + //*tshyiC 喙 "mouth". In Min this form has displaced the common Chinese term kǒu 口. It is believed to be cognate with huì 喙 (MC xjwojH) "beak, bill, snout; to pant". + //Austroasiatic origin for some Min words: + //*-dəŋA "shaman" compared with Vietnamese đồng (/ɗoŋ2/) "to shamanize, to communicate with spirits" and Mon doŋ "to dance (as if) under demonic possession". + //*kiɑnB 囝 "son" appears to be related to Vietnamese con (/kɔn/) and Mon kon "child". + + // Southern Min: + // Datian Min; + // Hokkien 話; Hokkien-Taiwanese 閩台泉漳語 - Philippine Hokkien 咱儂話. + // Teochew; + // Zhenan Min; + // Zhongshan Min, etc. + + //Pu-Xian Min (Hinghwa); Putian dialect: Xianyou dialect. + + //Northern Min: Jian'ou dialect; Jianyang dialect; Chong'an dialect; Songxi dialect; Zhenghe dialect; + + //Shao-Jiang Min: Shaowu dialect, Jiangle dialect, Guangze dialect, Shunchang dialect; + //http://www.shanxigov.cn/ + //Central Min: Sanming dialect; Shaxian dialect; Yong'an dialect, + + //Leizhou Min : Leizhou Min. + + //Abbreviation + //Simplified Chinese: 闽 + //Traditional Chinese: 閩 + //Literal meaning: Min [River] + + //莆仙片 + case 'cpx': //Chinese Pu-Xian Min, Sing-iú-uā / 仙游話, (Xianyou dialect) http://www.putian.gov.cn/ + $lang_name = 'CHINESE_PU-XIAN'; + $country_name = 'CHINA'; + break; + // 徽語 + case 'czh': //Chinese HuiZhou 惠州 http://www.huizhou.gov.cn/ | Song dynasty + $lang_name = 'CHINESE_HUIZHOU'; + $country_name = 'CHINA'; + break; + // 閩中片 + case 'czo': //Chinese Min Zhong 閩中語 | 闽中语 http://zx.cq.gov.cn/ | Zhong-Xian | Zhong 忠县 + $lang_name = 'CHINESE_ZHONG'; + $country_name = 'CHINA'; + break; + // 東干話 SanMing: http://www.sm.gov.cn/ | Sha River (沙溪) + case 'dng': //Ding Chinese + $lang_name = 'DING_CHINESE'; + $country_name = 'CHINA'; + break; + // 贛語 + case 'gan': //Gan Chinese + $lang_name = 'GAN_CHINESE'; + $country_name = 'CHINA'; + break; + // 客家話 + case 'hak': //Chinese Hakka + $lang_name = 'CHINESE_HAKKA'; + $country_name = 'CHINA'; + break; + + case 'hsn': //Xiang Chinese 湘語/湘语 + $lang_name = 'XIANG_CHINESE'; + $country_name = 'CHINA'; + break; + // 文言 + case 'lzh': //Literary Chinese + $lang_name = 'LITERARY_CHINESE'; + $country_name = 'CHINA'; + break; + // 閩北片 + case 'mnp': //Min Bei Chinese + $lang_name = 'MIN_BEI_CHINESE'; + $country_name = 'CHINA'; + break; + // 閩南語 + case 'nan': //Min Nan Chinese + $lang_name = 'MIN_NAN_CHINESE'; + $country_name = 'CHINA'; + break; + // 吴语 + case 'wuu': //Wu Chinese + $lang_name = 'WU_CHINESE'; + $country_name = 'CHINA'; + break; + // 粵語 + case 'yue': //Yue or Cartonese Chinese + $lang_name = 'YUE_CHINESE'; + $country_name = 'CHINA'; + break; + + case 'co': + $lang_name = 'CORSICAN'; // Corsica + $country_name = 'COLUMBIA'; + break; + //Eeyou Istchee ᐄᔨᔨᐤ ᐊᔅᒌ + case 'cr': + $lang_name = 'CREE'; + $country_name = 'COSTA_RICA'; + break; + + case 'cs': + $lang_name = 'CZECH'; + $country_name = 'CZECH_REPUBLIC'; + break; + + case 'cu': + $lang_name = 'SLAVONIC'; + $country_name = 'CUBA'; //langs: + break; + + case 'cv': + $country_name = 'CAPE_VERDE'; + $lang_name = 'CHUVASH'; + break; + + case 'cx': + $lang_name = ''; // Malaysian Chinese origin and European Australians + $country_name = 'CHRISTMAS_ISLAND'; + break; + + case 'cy': + $lang_name = 'CYPRUS'; + $country_name = 'CYPRUS'; + break; + + case 'cz': + $lang_name = 'CZECH'; + $country_name = 'CZECH_REPUBLIC'; + break; + + case 'cw': + $lang_name = 'PAPIAMENTU'; // Papiamentu (Portuguese-based Creole), Dutch, English + $country_name = 'CURAÇÃO'; // Ilha da Curação (Island of Healing) + break; + + case 'da': + $lang_name = 'DANISH'; + $country_name = 'DENMARK'; + break; + + //Geman (Deutsch) + /* deu – German + gmh – Middle High German + goh – Old High German + gct – Colonia Tovar German + bar – Bavarian + cim – Cimbrian + geh – Hutterite German + ksh – Kölsch + nds – Low German + sli – Lower Silesian + ltz – Luxembourgish + vmf – Mainfränkisch + mhn – Mòcheno + pfl – Palatinate German + pdc – Pennsylvania German + pdt – Plautdietsch + swg – Swabian German + gsw – Swiss German + uln – Unserdeutsch + sxu – Upper Saxon + wae – Walser German + wep – Westphalian + hrx – Riograndenser Hunsrückisch + yec – Yenish */ + + + //Germany 84,900,000 75,101,421 (91.8%) 5,600,000 (6.9%) De facto sole nationwide official language + case 'de': + case 'de-DE': + case 'de_de': + case 'deu': + $lang_name = 'GERMAN'; + $country_name = 'GERMANY'; + break; + //Belgium 11,420,163 73,000 (0.6%) 2,472,746 (22%) De jure official language in the German speaking community + case 'de_be': + case 'de-BE': + $lang_name = 'BELGIUM_GERMAN'; + $country_name = 'BELGIUM'; + break; + //Austria 8,838,171 8,040,960 (93%) 516,000 (6%) De jure sole nationwide official language + case 'de_at': + case 'de-AT': + $lang_name = 'AUSTRIAN_GERMAN'; + $country_name = 'AUSTRIA'; + break; + // Switzerland 8,508,904 5,329,393 (64.6%) 395,000 (5%) Co-official language at federal level; de jure sole official language in 17, co-official in 4 cantons (out of 26) + case 'de_sw': + case 'de-SW': + $lang_name = 'SWISS_GERMAN'; + $country_name = 'SWITZERLAND'; + break; + + //Luxembourg 602,000 11,000 (2%) 380,000 (67.5%) De jure nationwide co-official language + case 'de_lu': + case 'de-LU': + case 'ltz': + $lang_name = 'LUXEMBOURG_GERMAN'; + $country_name = 'LUXEMBOURG'; + break; + //Liechtenstein 37,370 32,075 (85.8%) 5,200 (13.9%) De jure sole nationwide official language + //Alemannic, or rarely Alemmanish + case 'de_li': + case 'de-LI': + $lang_name = 'LIECHTENSTEIN_GERMAN'; + $country_name = 'LIECHTENSTEIN'; + break; + case 'gsw': + $lang_name = 'Alemannic_German'; + $country_name = 'SWITZERLAND'; + break; + //mostly spoken on Lifou Island, Loyalty Islands, New Caledonia. + case 'dhv': + $lang_name = 'DREHU'; + $country_name = 'NEW_CALEDONIA'; + break; + + case 'dk': + $lang_name = 'DANISH'; + $country_name = 'DENMARK'; + break; + + //acf – Saint Lucian / Dominican Creole French + case 'acf': + $lang_name = 'DOMINICAN_CREOLE_FRENCH'; //ROSEAU + $country_name = 'DOMINICA'; + break; + + case 'en_dm': + case 'en-DM': + $lang_name = 'DOMINICA_ENGLISH'; + $country_name = 'DOMINICA'; + break; + + case 'do': + case 'en_do': + case 'en-DO': + $lang_name = 'SPANISH'; //Santo Domingo + $country_name = 'DOMINICAN_REPUBLIC'; + break; + + case 'dj': + case 'aa-DJ': + case 'aa_dj': + $lang_name = 'DJIBOUTI'; //Yibuti, Afar + $country_name = 'REPUBLIC_OF_DJIBOUTI'; //République de Djibouti + break; + + case 'dv': + $lang_name = 'DIVEHI'; //Maldivian + $country_name = 'MALDIVIA'; + break; + + //Berbera Taghelmustă (limba oamenilor albaștri), zisă și Tuaregă, este vorbită în Sahara occidentală. + //Berbera Tamazigtă este vorbită în masivul Atlas din Maroc, la sud de orașul Meknes. + //Berbera Zenatică zisă și Rifană, este vorbită în masivul Rif din Maroc, în nord-estul țării. + //Berbera Șenuană zisă și Telică, este vorbită în masivul Tell din Algeria, în nordul țării. + //Berbera Cabilică este vorbită în jurul masivelor Mitigea și Ores din Algeria, în nordul țării. + //Berbera Șauiană este vorbită în jurul orașului Batna din Algeria. + //Berbera Tahelhită, zisă și Șlănuană (în limba franceză Chleuh) este vorbită în jurul masivului Tubkal din Maroc, în sud-vestul țării. + //Berbera Tamașekă, zisă și Sahariană, este vorbită în Sahara de nord, în Algeria, Libia și Egipt. + //Berber: Tacawit (@ city Batna from Chaoui, Algery), Shawiya (Shauian) + case 'shy': + $lang_name = 'SHAWIYA_BERBER'; + $country_name = 'ALGERIA'; + break; + + case 'dz': + $lang_name = 'DZONGKHA'; + $country_name = 'ALGERIA'; //http://www.el-mouradia.dz/ + break; + + case 'ec': + $country_name = 'ECUADOR'; + $lang_name = 'ECUADOR'; + break; + + case 'eg': + $country_name = 'EGYPT'; + $lang_name = 'EGYPT'; + break; + + case 'eh': + $lang_name = 'WESTERN_SAHARA'; + $country_name = 'WESTERN_SAHARA'; + break; + + case 'ee': + //Kɔsiɖagbe (Sunday) + //Dzoɖagbe (Monday) + //Braɖagbe, Blaɖagbe (Tuesday) + //Kuɖagbe (Wednesday) + //Yawoɖagbe (Thursday) + //Fiɖagbe (Friday) + //Memliɖagbe (Saturday) + $lang_name = 'EWE'; //Èʋegbe Native to Ghana, Togo + $country_name = 'ESTONIA'; + break; + + //Greek Language: + //ell – Modern Greek + //grc – Ancient Greek + //cpg – Cappadocian Greek + //gmy – Mycenaean Greek + //pnt – Pontic + //tsd – Tsakonian + //yej – Yevanic + + case 'el': + $lang_name = 'GREEK'; + $country_name = 'GREECE'; + break; + + case 'cpg': + $lang_name = 'CAPPADOCIAN_GREEK'; + $country_name = 'GREECE'; + break; + case 'gmy': + $lang_name = 'MYCENAEAN_GREEK'; + $country_name = 'GREECE'; + break; + case 'pnt': + $lang_name = 'PONTIC'; + $country_name = 'GREECE'; + break; + case 'tsd': + $lang_name = 'TSAKONIAN'; + $country_name = 'GREECE'; + break; + //Albanian: Janina or Janinë, Aromanian: Ianina, Enina, Turkish: Yanya; + case 'yej': + $lang_name = 'YEVANIC'; + $country_name = 'GREECE'; + break; + + case 'en_uk': + case 'en-UK': + case 'uk': + $lang_name = 'BRITISH_ENGLISH'; //used in United Kingdom + $country_name = 'GREAT_BRITAIN'; + break; + + case 'en_fj': + case 'en-FJ': + $lang_name = 'FIJIAN_ENGLISH'; + $country_name = 'FIJI'; + break; + + case 'GibE': + case 'en_gb': + case 'en-GB': + case 'gb': + $lang_name = 'GIBRALTARIAN _ENGLISH'; //used in Gibraltar + $country_name = 'GIBRALTAR'; + break; + + case 'en_us': + case 'en-US': + $lang_name = 'AMERICAN_ENGLISH'; + $country_name = 'UNITED_STATES_OF_AMERICA'; + break; + + case 'en_ie': + case 'en-IE': + case 'USEng': + $lang_name = 'HIBERNO_ENGLISH'; //Irish English + $country_name = 'IRELAND'; + break; + + case 'en_il': + case 'en-IL': + case 'ILEng': + case 'heblish': + case 'engbrew': + $lang_name = 'ISRAELY_ENGLISH'; + $country_name = 'ISRAEL'; + break; + + case 'en_ca': + case 'en-CA': + case 'CanE': + $lang_name = 'CANADIAN_ENGLISH'; + $country_name = 'CANADA'; + break; + + case 'en_ck': + $lang_name = 'COOK_ISLANDS_ENGLISH'; + $country_name = 'COOK_ISLANDS'; //CK Cook Islands + break; + + case 'en_in': + case 'en-IN': + $lang_name = 'INDIAN_ENGLISH'; + $country_name = 'REPUBLIC_OF_INDIA'; + break; + + case 'en_ai': + case 'en-AI': + $lang_name = 'ANGUILLAN_ENGLISH'; + $country_name = 'ANGUILLA'; + break; + + case 'en_au': + case 'en-AU': + case 'AuE': + $lang_name = 'AUSTRALIAN_ENGLISH'; + $country_name = 'AUSTRALIA'; + break; + + case 'en_nz': + case 'en-NZ': + case 'NZE': + $lang_name = 'NEW_ZEALAND_ENGLISH'; + $country_name = 'NEW_ZEALAND'; + break; + + //New England English + case 'en_ne': + $lang_name = 'NEW_ENGLAND_ENGLISH'; + $country_name = 'NEW_ENGLAND'; + break; + + // + case 'en_bm': + $lang_name = 'BERMUDIAN ENGLISH.'; + $country_name = 'BERMUDA'; + break; + + case 'en_nu': + $lang_name = 'NIUEAN_ENGLISH'; //Niuean (official) 46% (a Polynesian language closely related to Tongan and Samoan) + $country_name = 'NIUE'; // Niuean: Niuē + break; + + case 'en_ms': + $lang_name = 'MONTSERRAT_ENGLISH'; + $country_name = 'MONTSERRAT'; + break; + + case 'en_pn': + $lang_name = 'PITCAIRN_ISLAND_ENGLISH'; + $country_name = 'PITCAIRN_ISLAND'; + break; + + case 'en_sh': + $lang_name = 'ST_HELENA_ENGLISH'; + $country_name = 'ST_HELENA'; + break; + + case 'en_tc': + $lang_name = 'TURKS_&_CAICOS_IS_ENGLISH'; + $country_name = 'TURKS_&_CAICOS_IS'; + break; + + case 'en_vg': + $lang_name = 'VIRGIN_ISLANDS_ENGLISH'; + $country_name = 'VIRGIN_ISLANDS_(BRIT)'; + break; + + case 'eo': + $lang_name = 'ESPERANTO'; //created in the late 19th century by L. L. Zamenhof, a Polish-Jewish ophthalmologist. In 1887 + $country_name = 'EUROPE'; + break; + + case 'er': + $lang_name = 'ERITREA'; + $country_name = 'ERITREA'; + break; + + //See: + // http://www.webapps-online.com/online-tools/languages-and-locales + // https://www.ibm.com/support/knowledgecenter/ko/SSS28S_3.0.0/com.ibm.help.forms.doc/locale_spec/i_xfdl_r_locale_quick_reference.html + case 'es': + //Spanish Main + $lang_name = 'SPANISH'; + $country_name = 'SPAIN'; + break; + case 'es_MX': + case 'es_mx': + //Spanish (Mexico) (es-MX) + $lang_name = 'SPANISH_MEXICO'; + $country_name = 'MEXICO'; + break; + case 'es_US': + case 'es_us': + $lang_name = 'SPANISH_UNITED_STATES'; + $country_name = 'UNITED_STATES'; + break; + case 'es_419': + //Spanish Latin America and the Caribbean + $lang_name = 'SPANISH_CARIBBEAN'; + $country_name = 'CARIBBE'; + break; + case 'es_ar': + // Spanish Argentina + $lang_name = 'SPANISH_ARGENTINIAN'; + $country_name = 'ARGENTINA'; + break; + case 'es_BO': + case 'es_bo': + $lang_name = 'SPANISH_BOLIVIAN'; + $country_name = 'BOLIVIA'; + break; + case 'es_BR': + case 'es_br': + $lang_name = 'SPANISH_BRAZILIAN'; + $country_name = 'BRAZIL'; + break; + case 'es_cl': + // Spanish Chile + $lang_name = 'SPANISH_CHILEAN'; + $country_name = 'CHILE'; + break; + case 'es_CO': + case 'es_co': + // Spanish (Colombia) (es-CO) + $lang_name = 'SPANISH_COLOMBIAN'; + $country_name = 'COLOMBIA'; + break; + case 'es_CR': + case 'es_cr': + $lang_name = 'SPANISH_COSTA_RICA'; + $country_name = 'COSTA_RICA'; + break; + case 'es_DO': + case 'es_do': + //Spanish (Dominican Republic) (es-DO) + $lang_name = 'SPANISH_DOMINICAN_REPUBLIC'; + $country_name = 'DOMINICAN_REPUBLIC'; + break; + case 'es_ec': + // Spanish (Ecuador) (es-EC) + $lang_name = 'SPANISH'; + $country_name = 'SPAIN'; + break; + case 'es_es': + case 'es_ES': + // Spanish Spain + $lang_name = 'SPANISH'; + $country_name = 'SPAIN'; + break; + case 'es_ES_tradnl': + case 'es_es_tradnl': + $lang_name = 'SPANISH_NL'; + $country_name = 'NL'; + break; + case 'es_EU': + case 'es_eu': + $lang_name = 'SPANISH_EUROPE'; + $country_name = 'EUROPE'; + break; + case 'es_gt': + case 'es_GT': + // Spanish (Guatemala) (es-GT) + $lang_name = 'SPANISH'; + $country_name = 'SPAIN'; + break; + case 'es_HN': + case 'es_hn': + //Spanish (Honduras) (es-HN) + $lang_name = 'SPANISH'; + $country_name = 'SPAIN'; + break; + case 'es_la': + case 'es_LA': + // Spanish Lao + $lang_name = 'SPANISH'; + $country_name = 'SPAIN'; + break; + case 'es_NI': + case 'es_ni': + // Spanish (Nicaragua) (es-NI) + $lang_name = 'SPANISH_NICARAGUAN'; + $country_name = 'NICARAGUA'; + break; + case 'es_PA': + case 'es_pa': + //Spanish (Panama) (es-PA) + $lang_name = 'SPANISH_PANAMIAN'; + $country_name = 'PANAMA'; + break; + case 'es_pe': + case 'es_PE': + //Spanish (Peru) (es-PE) + $lang_name = 'SPANISH_PERU'; + $country_name = 'PERU'; + break; + case 'es_PR': + case 'es_pr': + //Spanish (Puerto Rico) (es-PR) + $lang_name = 'SPANISH_PUERTO_RICO'; + $country_name = 'PUERTO_RICO'; + break; + case 'es_PY': + case 'es_py': + //Spanish (Paraguay) (es-PY) + $lang_name = 'SPANISH_PARAGUAY'; + $country_name = 'PARAGUAY'; + break; + case 'es_SV': + case 'es_sv': + //Spanish (El Salvador) (es-SV) + $lang_name = 'SPANISH_EL_SALVADOR'; + $country_name = 'EL_SALVADOR'; + break; + case 'es_US': + case 'es_us': + // Spanish (United States) (es-US) + $lang_name = 'SPANISH_UNITED_STATES'; + $country_name = 'UNITED_STATES'; + break; + case 'es_UY': + case 'es_uy': + //Spanish (Uruguay) (es-UY) + $lang_name = 'SPANISH_URUGUAY'; + $country_name = 'URUGUAY'; + break; + case 'es_ve': + case 'es_VE': + // Spanish (Venezuela) (es-VE) + $lang_name = 'SPANISH_VENEZUELA'; + $country_name = 'BOLIVARIAN_REPUBLIC_OF_VENEZUELA'; + break; + case 'es_xl': + case 'es_XL': + // Spanish Latin America + $lang_name = 'SPANISH_LATIN_AMERICA'; + $country_name = 'LATIN_AMERICA'; + break; + + case 'et': + $lang_name = 'ESTONIAN'; + $country_name = 'ESTONIA'; + break; + + case 'eu': + $lang_name = 'BASQUE'; + $country_name = ''; + break; + + case 'fa': + $lang_name = 'PERSIAN'; + $country_name = ''; + break; + + //for Fulah (also spelled Fula) the ISO 639-1 code is ff. + //fub – Adamawa Fulfulde + //fui – Bagirmi Fulfulde + //fue – Borgu Fulfulde + //fuq – Central-Eastern Niger Fulfulde + //ffm – Maasina Fulfulde + //fuv – Nigerian Fulfulde + //fuc – Pulaar + //fuf – Pular + //fuh – Western Niger Fulfulde + + case 'fub': + $lang_name = 'ADAMAWA_FULFULDE'; + $country_name = ''; + break; + + case 'fui': + $lang_name = 'BAGIRMI_FULFULDE'; + $country_name = ''; + break; + + case 'fue': + $lang_name = 'BORGU_FULFULDE'; + $country_name = ''; + break; + + case 'fuq': + $lang_name = 'CENTRAL-EASTERN_NIGER_FULFULDE'; + $country_name = ''; + break; + + case 'ffm': + $lang_name = 'MAASINA_FULFULDE'; + $country_name = ''; + break; + + case 'fuv': + $lang_name = 'NIGERIAN_FULFULDE'; + $country_name = ''; + break; + + case 'fuc': + $lang_name = 'PULAAR'; + $country_name = 'SENEGAMBIA_CONFEDERATION'; //sn //gm + break; + + case 'fuf': + $lang_name = 'PULAR'; + $country_name = ''; + break; + + case 'fuh': + $lang_name = 'WESTERN_NIGER_FULFULDE'; + $country_name = ''; + break; + + case 'ff': + $lang_name = 'FULAH'; + $country_name = ''; + break; + + case 'fi': + case 'fin': + $lang_name = 'FINNISH'; + $country_name = 'FINLAND'; + break; + + case 'fkv': + $lang_name = 'KVEN'; + $country_name = 'NORWAY'; + break; + + case 'fit': + $lang_name = 'KVEN'; + $country_name = 'SWEDEN'; + break; + + case 'fj': + $lang_name = 'FIJIAN'; + $country_name = 'FIJI'; + break; + + case 'fk': + $lang_name = 'FALKLANDIAN'; + $country_name = 'FALKLAND_ISLANDS'; + break; + + case 'fm': + $lang_name = 'MICRONESIA'; + $country_name = 'MICRONESIA'; + break; + + case 'fo': + $lang_name = 'FAROESE'; + $country_name = 'FAROE_ISLANDS'; + break; + + //Metropolitan French (French: France Métropolitaine or la Métropole) + case 'fr': + case 'fr_me': + $lang_name = 'FRENCH'; + $country_name = 'FRANCE'; + break; + //Acadian French + case 'fr_ac': + $lang_name = 'ACADIAN_FRENCH'; + $country_name = 'ACADIA'; + break; + + case 'fr_dm': + case 'fr-DM': + $lang_name = 'DOMINICA_FRENCH'; + $country_name = 'DOMINICA'; + break; + + //al-dîzāyīr + case 'fr_dz': + $lang_name = 'ALGERIAN_FRENCH'; + $country_name = 'ALGERIA'; + break; + //Aostan French (French: français valdôtain) + //Seventy: septante[a] [sɛp.tɑ̃t] + //Eighty: huitante[b] [ɥi.tɑ̃t] + //Ninety: nonante[c] [nɔ.nɑ̃t] + case 'fr_ao': + $lang_name = 'AOSTAN_FRENCH'; + $country_name = 'ITALY'; + break; + //Belgian French + case 'fr_bl': + $lang_name = 'BELGIAN_FRENCH'; + $country_name = 'BELGIUM'; + break; + //Cambodian French - French Indochina + case 'fr_cb': + $lang_name = 'CAMBODIAN_FRENCH'; + $country_name = 'CAMBODIA'; + break; + //Cajun French - Le Français Cajun - New Orleans + case 'fr_cj': + $lang_name = 'CAJUN_FRENCH'; + $country_name = 'UNITED_STATES'; + break; + //Canadian French (French: Français Canadien) + //Official language in Canada, New Brunswick, Northwest Territories, Nunavut, Quebec, Yukon, + //Official language in United States, Maine (de facto), New Hampshire + case 'fr_ca': + case 'fr-CA': + $lang_name = 'CANADIAN_FRENCH'; + $country_name = 'CANADA'; + break; + //Guianese French + case 'gcr': + case 'fr_gu': + $lang_name = 'GUIANESE_FRENCH'; + $country_name = 'FRENCH_GUIANA'; + break; + //Guianese English + case 'gyn': + case 'en_gy': + $lang_name = 'GUYANESE_CREOLE'; + $country_name = 'ENGLISH_GUIANA'; + break; + //Haitian French + case 'fr-HT': + case 'fr_ht': + $lang_name = 'HAITIAN_FRENCH'; + $country_name = 'HAITI'; //UNITED_STATES + break; + //Haitian English + case 'en-HT': + case 'en_ht': + $lang_name = 'HAITIAN_CREOLE'; + $country_name = 'HAITI'; //UNITED_STATES + break; + //Indian French + case 'fr_id': + $lang_name = 'INDIAN_FRENCH'; + $country_name = 'INDIA'; + break; + case 'en_id': + $lang_name = 'INDIAN_ENGLISH'; + $country_name = 'INDIA'; + break; + //Jersey Legal French - Anglo-Norman French + case 'xno': + case 'fr_je': + $lang_name = 'JERSEY_LEGAL_FRENCH'; + $country_name = 'UNITED_STATES'; + break; + + case 'fr_kh': + $lang_name = 'CAMBODIAN_FRENCH'; + $country_name = 'CAMBODIA'; + break; + + //Lao French + case 'fr_la': + $lang_name = 'LAO_FRENCH'; + $country_name = 'LAOS'; + break; + //Louisiana French (French: Français de la Louisiane, Louisiana Creole: Françé la Lwizyàn) + case 'frc': + case 'fr_lu': + $lang_name = 'LOUISIANIAN_FRENCH'; + $country_name = 'LOUISIANA'; + break; + //Louisiana Creole + case 'lou': + $lang_name = 'LOUISIANA_CREOLE'; + $country_name = 'LOUISIANA'; + break; + //Meridional French (French: Français Méridional, also referred to as Francitan) + case 'fr_mr': + $lang_name = 'MERIDIONAL_FRENCH'; + $country_name = 'OCCITANIA'; + break; + //Missouri French + case 'fr_mi': + $lang_name = 'MISSOURI_FRENCH'; + $country_name = 'MISSOURI‎'; + break; + //New Caledonian French vs New Caledonian Pidgin French + case 'fr_nc': + $lang_name = 'NEW_CALEDONIAN_FRENCH'; + $country_name = 'NEW_CALEDONIA'; + break; + //Newfoundland French (French: Français Terre-Neuvien), + case 'fr_nf': + $lang_name = 'NEWFOUNDLAND_FRENCH'; + $country_name = 'CANADA'; + break; + //New England French + case 'fr_ne': + $lang_name = 'NEW_ENGLAND_FRENCH'; + $country_name = 'NEW_ENGLAND'; + break; + //Quebec French (French: français québécois; also known as Québécois French or simply Québécois) + case 'fr_qb': + $lang_name = 'QUEBEC_FRENCH'; + $country_name = 'CANADA'; + break; + //Swiss French + case 'fr_sw': + $lang_name = 'SWISS_FRENCH'; + $country_name = 'SWITZERLAND'; + break; + //French Southern and Antarctic Lands + case 'fr_tf': + case 'tf': + $lang_name = 'FRENCH_SOUTHERN_TERRITORIES'; // + $country_name = 'SOUTHERN_TERRITORIES'; //Terres australes françaises + break; + //Vietnamese French + case 'fr_vt': + $lang_name = 'VIETNAMESE_FRENCH'; + $country_name = 'VIETNAM'; + break; + //West Indian French + case 'fr_if': + $lang_name = 'WEST_INDIAN_FRENCH'; + $country_name = 'INDIA'; + break; + + case 'fr_wf': + $country_name = 'TERRITORY_OF_THE_WALLIS_AND_FUTUNA_ISLANDS'; + $lang_name = 'WALLISIAN_FRENCH'; + break; + + case 'fy': + $lang_name = 'WESTERN_FRISIAN'; + $country_name = 'FRYSK'; + break; + + case 'ga': + $lang_name = 'IRISH'; + $country_name = 'GABON'; + break; + + case 'GenAm': + $lang_name = 'General American'; + $country_name = 'UNITED_STATES'; + break; + + //gcf – Guadeloupean Creole + case 'gcf': + $lang_name = 'GUADELOUPEAN_CREOLE_FRENCH'; + $country_name = 'GUADELOUPE'; + break; + + case 'gd': + $lang_name = 'SCOTTISH'; + $country_name = 'GRENADA'; + break; + + case 'ge': + $lang_name = 'GEORGIAN'; + $country_name = 'GEORGIA'; + break; + + case 'gi': + $lang_name = 'LLANITO'; //Llanito or Yanito + $country_name = 'GIBRALTAR'; + break; + + case 'gg': + $lang_name = 'GUERNESIAIS'; //English, Guernésiais, Sercquiais, Auregnais + $country_name = 'GUERNSEY'; + break; + + case 'gh': + $lang_name = 'Ghana'; + $country_name = 'GHANA'; + break; + + case 'ell': + $lang_name = 'MODERN_GREEK'; + $country_name = 'GREECE'; + break; + + case 'gr': + case 'gre': + $lang_name = 'MODERN_GREEK'; + $country_name = 'GREECE'; + break; + + case 'grc': + $lang_name = 'ANCIENT_GREEK'; + $country_name = 'GREECE'; + break; + + //Galician is spoken by some 2.4 million people, mainly in Galicia, + //an autonomous community located in northwestern Spain. + case 'gl': + $lang_name = 'GALICIAN'; //Galicia + $country_name = 'GREENLAND'; + break; + + case 'gm': + $lang_name = 'Gambia'; + $country_name = 'GAMBIA'; + break; + + //grn is the ISO 639-3 language code for Guarani. Its ISO 639-1 code is gn. + // nhd – Chiripá + // gui – Eastern Bolivian Guaraní + // gun – Mbyá Guaraní + // gug – Paraguayan Guaraní + // gnw – Western Bolivian Guaraní + case 'gn': + $lang_name = 'GUARANI'; + $country_name = 'GUINEA'; + break; + //Nhandéva is also known as Chiripá. + //The Spanish spelling, Ñandeva, is used in the Paraguayan Chaco + // to refer to the local variety of Eastern Bolivian, a subdialect of Avá. + case 'nhd': + $lang_name = 'Chiripa'; + $country_name = 'PARAGUAY'; + break; + case 'gui': + $lang_name = 'EASTERN_BOLIVIAN_GUARANI'; + $country_name = 'BOLIVIA'; + break; + case 'gun': + $lang_name = 'MBYA_GUARANI'; + $country_name = 'PARAGUAY'; + break; + case 'gug': + $lang_name = 'PARAGUAYAN_GUARANI'; + $country_name = 'PARAGUAY'; + break; + case 'gnw': + $lang_name = 'WESTERN_BOLIVIAN_GUARANI'; + $country_name = 'BOLIVIA'; + break; + + case 'gs': + $lang_name = 'ENGLISH'; + $country_name = 'SOUTH_GEORGIA_AND_THE_SOUTH_SANDWICH_ISLANDS'; + break; + + case 'gt': + $lang_name = 'Guatemala'; + $country_name = 'GUATEMALA'; + break; + + case 'gq': + $lang_name = 'Equatorial Guinea'; + $country_name = 'EQUATORIAL_GUINEA'; + break; + + case 'gu': + $lang_name = 'GUJARATI'; + $country_name = 'GUAM'; + break; + + case 'gv': + $lang_name = 'manx'; + $country_name = ''; + break; + + case 'gw': + $lang_name = 'Guinea Bissau'; + $country_name = 'GUINEA_BISSAU'; + break; + + case 'gy': + $lang_name = 'Guyana'; + $country_name = 'GUYANA'; + break; + + case 'ha': + $country_name = ''; + $lang_name = 'HAUSA'; + break; + + //heb – Modern Hebrew + //hbo – Classical Hebrew (liturgical) + //smp – Samaritan Hebrew (liturgical) + //obm – Moabite (extinct) + //xdm – Edomite (extinct) + case 'he': + case 'heb': + $country_name = 'ISRAEL'; + $lang_name = 'HEBREW'; + break; + case 'hbo': + $country_name = 'ISRAEL'; + $lang_name = 'CLASSICAL_HEBREW'; + break; + case 'sam': + $country_name = 'SAMARIA'; + $lang_name = 'SAMARITAN_ARAMEIC'; + break; + case 'smp': + $country_name = 'SAMARIA'; + $lang_name = 'SAMARITAN_HEBREW'; + break; + case 'obm': + $country_name = 'MOAB'; + $lang_name = 'MOABITE'; + break; + case 'xdm': + $country_name = 'EDOMITE'; + $lang_name = 'EDOM'; + break; + case 'hi': + $lang_name = 'hindi'; + $country_name = ''; + break; + + case 'ho': + $lang_name = 'hiri_motu'; + $country_name = ''; + break; + + case 'hk': + $lang_name = 'Hong Kong'; + $country_name = 'HONG_KONG'; + break; + + case 'hn': + $country_name = 'Honduras'; + $lang_name = 'HONDURAS'; + break; + + case 'hr': + $lang_name = 'croatian'; + $country_name = 'CROATIA'; + break; + + case 'ht': + $lang_name = 'haitian'; + $country_name = 'HAITI'; + break; + + case 'ho': + $lang_name = 'hiri_motu'; + $country_name = ''; + break; + + case 'hu': + $lang_name = 'hungarian'; + $country_name = 'HUNGARY'; + break; + + case 'hy': + case 'hy-am': + $lang_name = 'ARMENIAN'; + $country_name = ''; + break; + + case 'hy-AT': + case 'hy_at': + $lang_name = 'ARMENIAN-ARTSAKH'; + $country_name = 'REPUBLIC_OF_ARTSAKH'; + break; + + case 'hz': + $lang_name = 'HERERO'; + $country_name = ''; + break; + + case 'ia': + $lang_name = 'INTERLINGUA'; + $country_name = ''; + break; + + case 'ic': + $lang_name = ''; + $country_name = 'CANARY_ISLANDS'; + break; + + case 'id': + $lang_name = 'INDONESIAN'; + $country_name = 'INDONESIA'; + break; + + case 'ie': + $lang_name = 'interlingue'; + $country_name = 'IRELAND'; + break; + + case 'ig': + $lang_name = 'igbo'; + $country_name = ''; + break; + + case 'ii': + $lang_name = 'sichuan_yi'; + $country_name = ''; + break; + + case 'ik': + $lang_name = 'inupiaq'; + $country_name = ''; + break; + + //Mostly spoken on Ouvéa Island or Uvea Island of the Loyalty Islands, New Caledonia. + case 'iai': + $lang_name = 'IAAI'; + $country_name = 'NEW_CALEDONIA'; + break; + + case 'il': + $lang_name = 'ibrit'; + $country_name = 'ISRAEL'; + break; + + case 'im': + $lang_name = 'Isle of Man'; + $country_name = 'ISLE_OF_MAN'; + break; + + case 'in': + $lang_name = 'India'; + $country_name = 'INDIA'; + break; + + + case 'ir': + $lang_name = 'Iran'; + $country_name = 'IRAN'; + break; + + case 'is': + $lang_name = 'Iceland'; + $country_name = 'ICELAND'; + break; + + case 'it': + $lang_name = 'ITALIAN'; + $country_name = 'ITALY'; + break; + + case 'iq': + $lang_name = 'Iraq'; + $country_name = 'IRAQ'; + break; + + case 'je': + $lang_name = 'jerriais'; //Jèrriais + $country_name = 'JERSEY'; //Bailiwick of Jersey + break; + + case 'jm': + $lang_name = 'Jamaica'; + $country_name = 'JAMAICA'; + break; + + case 'jo': + $lang_name = 'Jordan'; + $country_name = 'JORDAN'; + break; + + case 'jp': + $lang_name = 'japanese'; + $country_name = 'JAPAN'; + break; + + case 'jv': + $lang_name = 'javanese'; + $country_name = ''; + break; + + case 'kh': + $lang_name = 'KH'; + $country_name = 'CAMBODIA'; + break; + + case 'ke': + $lang_name = 'Kenya'; + $country_name = 'KENYA'; + break; + + case 'ki': + $lang_name = 'Kiribati'; + $country_name = 'KIRIBATI'; + break; + + //Bantu languages + //zdj – Ngazidja Comorian + case 'zdj': + $lang_name = 'Ngazidja Comorian'; + $country_name = 'COMOROS'; + break; + //wni – Ndzwani Comorian (Anjouani) dialect + case 'wni': + $lang_name = 'Ndzwani Comorian'; + $country_name = 'COMOROS'; + break; + //swb – Maore Comorian dialect + case 'swb': + $lang_name = 'Maore Comorian'; + $country_name = 'COMOROS'; + break; + //wlc – Mwali Comorian dialect + case 'wlc': + $lang_name = 'Mwali Comorian'; + $country_name = 'COMOROS'; + break; + + case 'km': + $lang_name = 'KHMER'; + $country_name = 'COMOROS'; + break; + + case 'kn': + $lang_name = 'kannada'; + $country_name = 'ST_KITTS-NEVIS'; + break; + + case 'ko': + case 'kp': + $lang_name = 'korean'; + // kor – Modern Korean + // jje – Jeju + // okm – Middle Korean + // oko – Old Korean + // oko – Proto Korean + // okm Middle Korean + // oko Old Korean + $country_name = 'Korea North'; + break; + + case 'kr': + $lang_name = 'korean'; + $country_name = 'KOREA_SOUTH'; + break; + + case 'kn': + $lang_name = 'St Kitts-Nevis'; + $country_name = 'ST_KITTS-NEVIS'; + break; + + case 'ks': + $lang_name = 'kashmiri'; //Kashmir + $country_name = 'KOREA_SOUTH'; + break; + + case 'ky': + $lang_name = 'Cayman Islands'; + $country_name = 'CAYMAN_ISLANDS'; + break; + + case 'kz': + $lang_name = 'Kazakhstan'; + $country_name = 'KAZAKHSTAN'; + break; + + case 'kw': + //endonim: Kernewek + $lang_name = 'Cornish'; + $country_name = 'KUWAIT'; + break; + + case 'kg': + $lang_name = 'Kyrgyzstan'; + $country_name = 'KYRGYZSTAN'; + break; + + case 'la': + $lang_name = 'Laos'; + $country_name = 'LAOS'; + break; + + case 'lk': + $lang_name = 'Sri Lanka'; + $country_name = 'SRI_LANKA'; + break; + + case 'lv': + $lang_name = 'Latvia'; + $country_name = 'LATVIA'; + break; + + case 'lb': + $lang_name = 'LUXEMBOURGISH'; + $country_name = 'LEBANON'; + break; + + case 'lc': + $lang_name = 'St Lucia'; + $country_name = 'ST_LUCIA'; + break; + + case 'ls': + $lang_name = 'Lesotho'; + $country_name = 'LESOTHO'; + break; + + case 'lo': + $lang_name = 'LAO'; + $country_name = 'LAOS'; + break; + + case 'lr': + $lang_name = 'Liberia'; + $country_name = 'LIBERIA'; + break; + + case 'ly': + $lang_name = 'Libya'; + $country_name = 'Libya'; + break; + + case 'li': + $lang_name = 'LIMBURGISH'; + $country_name = 'LIECHTENSTEIN'; + break; + + case 'lt': + $country_name = 'Lithuania'; + $lang_name = 'LITHUANIA'; + break; + + case 'lu': + $lang_name = 'LUXEMBOURGISH'; + $country_name = 'LUXEMBOURG'; + break; + + case 'ma': + $lang_name = 'Morocco'; + $country_name = 'MOROCCO'; + break; + + case 'mc': + $country_name = 'MONACO'; + $lang_name = 'Monaco'; + break; + + case 'md': + $country_name = 'MOLDOVA'; + $lang_name = 'romanian'; + break; + + case 'me': + $lang_name = 'MONTENEGRIN'; //Serbo-Croatian, Cyrillic, Latin + $country_name = 'MONTENEGRO'; //Црна Гора + break; + + case 'mf': + $lang_name = 'FRENCH'; // + $country_name = 'SAINT_MARTIN_(FRENCH_PART)'; + break; + + case 'mg': + $lang_name = 'Madagascar'; + $country_name = 'MADAGASCAR'; + break; + + case 'mh': + $lang_name = 'Marshall Islands'; + $country_name = 'MARSHALL_ISLANDS'; + break; + + case 'mi': + $lang_name = 'MAORI'; + $country_name = 'Maori'; + break; + + //Mi'kmaq hieroglyphic writing was a writing system and memory aid used by the Mi'kmaq, + //a First Nations people of the east coast of Canada, Mostly spoken in Nova Scotia and Newfoundland. + case 'mic': + $lang_name = 'MIKMAQ'; + $country_name = 'CANADA'; + break; + + case 'mk': + $lang_name = 'Macedonia'; + $country_name = 'MACEDONIA'; + break; + + case 'mr': + $lang_name = 'Mauritania'; + $country_name = 'Mauritania'; + break; + + case 'mu': + $lang_name = 'Mauritius'; + $country_name = 'MAURITIUS'; + break; + + case 'mo': + $lang_name = 'Macau'; + $country_name = 'MACAU'; + break; + + case 'mn': + $lang_name = 'Mongolia'; + $country_name = 'MONGOLIA'; + break; + + case 'ms': + $lang_name = 'Montserrat'; + $country_name = 'MONTSERRAT'; + break; + + case 'mz': + $lang_name = 'Mozambique'; + $country_name = 'MOZAMBIQUE'; + break; + + case 'mm': + $lang_name = 'Myanmar'; + $country_name = 'MYANMAR'; + break; + + case 'mp': + $lang_name = 'chamorro'; //Carolinian + $country_name = 'NORTHERN_MARIANA_ISLANDS'; + break; + + case 'mw': + $country_name = 'Malawi'; + $lang_name = 'MALAWI'; + break; + + case 'my': + $lang_name = 'Myanmar'; + $country_name = 'MALAYSIA'; + break; + + case 'mv': + $lang_name = 'Maldives'; + $country_name = 'MALDIVES'; + break; + + case 'ml': + $lang_name = 'Mali'; + $country_name = 'MALI'; + break; + + case 'mt': + $lang_name = 'Malta'; + $country_name = 'MALTA'; + break; + + case 'mx': + $lang_name = 'Mexico'; + $country_name = 'MEXICO'; + break; + + case 'mq': + $lang_name = 'antillean-creole'; // Antillean Creole (Créole Martiniquais) + $country_name = 'MARTINIQUE'; + break; + + case 'na': + $lang_name = 'Nambia'; + $country_name = 'NAMBIA'; + break; + + case 'ni': + $lang_name = 'Nicaragua'; + $country_name = 'NICARAGUA'; + break; + + //Barber: Targuí, tuareg + case 'ne': + $lang_name = 'Niger'; + $country_name = 'NIGER'; + break; + + //Mostly spoken on Maré Island of the Loyalty Islands, New Caledonia. + case 'nen': + $lang_name = 'NENGONE'; + $country_name = 'NEW_CALEDONIA'; + break; + + case 'new': + $lang_name = 'NEW_LANGUAGE'; + $country_name = 'NEW_COUNTRY'; + break; + + case 'nc': + $lang_name = 'paicî'; //French, Nengone, Paicî, Ajië, Drehu + $country_name = 'NEW_CALEDONIA'; + break; + + case 'nk': + $lang_name = 'Korea North'; + $country_name = 'KOREA_NORTH'; + break; + + case 'ng': + $lang_name = 'Nigeria'; + $country_name = 'NIGERIA'; + break; + + case 'nf': + $lang_name = 'Norfolk Island'; + $country_name = 'NORFOLK_ISLAND'; + break; + + case 'nl': + $lang_name = 'DUTCH'; //Netherlands, Flemish. + $country_name = 'NETHERLANDS'; + break; + + case 'no': + $lang_name = 'Norway'; + $country_name = 'NORWAY'; + break; + + case 'np': + $lang_name = 'Nepal'; + $country_name = 'NEPAL'; + break; + + case 'nr': + $lang_name = 'Nauru'; + $country_name = 'NAURU'; + break; + + case 'niu': + $lang_name = 'NIUEAN'; //Niuean (official) 46% (a Polynesian language closely related to Tongan and Samoan) + $country_name = 'NIUE'; // Niuean: Niuē + break; + + case 'nu': + $lang_name = 'NU'; //Niuean (official) 46% (a Polynesian language closely related to Tongan and Samoan) + $country_name = 'NIUE'; // Niuean: Niuē + break; + + case 'nz': + $lang_name = 'New Zealand'; + $country_name = 'NEW_ZEALAND'; + break; + + case 'ny': + $lang_name = 'Chewa'; + $country_name = 'Nyanja'; + break; + //langue d'oc + case 'oc': + $lang_name = 'OCCITAN'; + $country_name = 'OCCITANIA'; + break; + + case 'oj': + $lang_name = 'ojibwa'; + $country_name = ''; + break; + + case 'om': + $lang_name = 'Oman'; + $country_name = 'OMAN'; + break; + + case 'or': + $lang_name = 'oriya'; + $country_name = ''; + break; + + case 'os': + $lang_name = 'ossetian'; + $country_name = ''; + break; + + case 'pa': + $country_name = 'Panama'; + $lang_name = 'PANAMA'; + break; + + + case 'pe': + $country_name = 'Peru'; + $lang_name = 'PERU'; + break; + + case 'ph': + $lang_name = 'Philippines'; + $country_name = 'PHILIPPINES'; + break; + + case 'pf': + $country_name = 'French Polynesia'; + $lang_name = 'tahitian'; //Polynésie française + break; + + case 'pg': + $country_name = 'PAPUA_NEW_GUINEA'; + $lang_name = 'Papua New Guinea'; + break; + + case 'pi': + $lang_name = 'pali'; + $country_name = ''; + break; + + case 'pl': + $lang_name = 'Poland'; + $country_name = 'POLAND'; + break; + + case 'pn': + $lang_name = 'Pitcairn Island'; + $country_name = 'PITCAIRN_ISLAND'; + break; + + case 'pr': + $lang_name = 'Puerto Rico'; + $country_name = 'PUERTO_RICO'; + break; + + case 'pt': + $lang_name = 'Portugal'; + $country_name = 'PORTUGAL'; + break; + + case 'pk': + $lang_name = 'Pakistan'; + $country_name = 'PAKISTAN'; + break; + + case 'pw': + $country_name = 'Palau Island'; + $lang_name = 'PALAU_ISLAND'; + break; + + case 'ps': + $country_name = 'Palestine'; + $lang_name = 'PALESTINE'; + break; + + case 'py': + $country_name = 'PARAGUAY'; + $lang_name = 'PARAGUAY'; + break; + + case 'qa': + $lang_name = 'Qatar'; + $country_name = 'QATAR'; + break; + + // rmn – Balkan Romani + // rml – Baltic Romani + // rmc – Carpathian Romani + // rmf – Kalo Finnish Romani + // rmo – Sinte Romani + // rmy – Vlax Romani + // rmw – Welsh Romani + case 'ri': + case 'rom': + $country_name = 'EASTEN_EUROPE'; + $lang_name = 'ROMANI'; + break; + + case 'ro': + $country_name = 'ROMANIA'; + $lang_name = 'ROMANIAN'; + break; + + case 'ro_md': + case 'ro_MD': + $country_name = 'ROMANIA'; + $lang_name = 'ROMANIAN_MOLDAVIA'; + break; + + case 'ro_ro': + case 'ro_RO': + $country_name = 'ROMANIA'; + $lang_name = 'ROMANIAN_ROMANIA'; + break; + + case 'rn': + $lang_name = 'kirundi'; + $country_name = ''; + break; + + case 'rm': + $country_name = ''; + $lang_name = 'romansh'; //Switzerland + break; + + case 'rs': + $country_name = 'REPUBLIC_OF_SERBIA'; //Република Србија //Republika Srbija + $lang_name = 'serbian'; //Serbia, Србија / Srbija + break; + + case 'ru': + case 'ru_ru': + case 'ru_RU': + $country_name = 'RUSSIA'; + $lang_name = 'RUSSIAN'; + break; + + case 'rw': + $country_name = 'RWANDA'; + $lang_name = 'Rwanda'; + break; + + + case 'sa': + $lang_name = 'arabic'; + $country_name = 'SAUDI_ARABIA'; + break; + + case 'sb': + $lang_name = 'Solomon Islands'; + $country_name = 'SOLOMON_ISLANDS'; + break; + + case 'sc': + $lang_name = 'seychellois-creole'; + $country_name = 'SEYCHELLES'; + break; + + case 'sco': + $lang_name = 'SCOTISH'; + $country_name = 'Scotland'; + break; + + //scf – San Miguel Creole French (Panama) + case 'scf': + $lang_name = 'SAN_MIGUEL_CREOLE_FRENCH'; + $country_name = 'SAN_MIGUEL'; + break; + + case 'sd': + $lang_name = 'Sudan'; + $country_name = 'SUDAN'; + break; + + case 'si': + $lang_name = 'SLOVENIAN'; + $country_name = 'SLOVENIA'; + break; + + case 'sh': + $lang_name = 'SH'; + $country_name = 'ST_HELENA'; + break; + + case 'sk': + $country_name = 'SLOVAKIA'; + $lang_name = 'Slovakia'; + break; + + case 'sg': + $country_name = 'SINGAPORE'; + $lang_name = 'Singapore'; + break; + + case 'sl': + $country_name = 'SIERRA_LEONE'; + $lang_name = 'Sierra Leone'; + break; + + case 'sm': + $lang_name = 'San Marino'; + $country_name = 'SAN_MARINO'; + break; + + case 'smi': + $lang_name = 'Sami'; + $country_name = 'Norway'; //Native to Finland, Norway, Russia, and Sweden + break; + + case 'sn': + $lang_name = 'Senegal'; + $country_name = 'SENEGAL'; + break; + + case 'so': + $lang_name = 'Somalia'; + $country_name = 'SOMALIA'; + break; + + case 'sq': + $lang_name = 'ALBANIAN'; + $country_name = 'Albania'; + break; + + case 'sr': + $lang_name = 'Suriname'; + $country_name = 'SURINAME'; + break; + + case 'ss': + $lang_name = ''; //Bari [Karo or Kutuk ('mother tongue', Beri)], Dinka, Luo, Murle, Nuer, Zande + $country_name = 'REPUBLIC_OF_SOUTH_SUDAN'; + break; + + case 'sse': + $lang_name = 'STANDARD_SCOTTISH_ENGLISH'; + $country_name = 'Scotland'; + break; + + case 'st': + $lang_name = 'Sao Tome & Principe'; + $country_name = 'SAO_TOME_&_PRINCIPE'; + break; + + case 'sv': + $lang_name = 'El Salvador'; + $country_name = 'EL_SALVADOR'; + break; + + case 'sx': + $lang_name = 'dutch'; + $country_name = 'SINT_MAARTEN_(DUTCH_PART)'; + break; + + + case 'sz': + $lang_name = 'Swaziland'; + $country_name = 'SWAZILAND'; + break; + + case 'se': + case 'sv-SE': + case 'sv-se': + //Swedish (Sweden) (sv-SE) + $lang_name = 'Sweden'; + $country_name = 'SWEDEN'; + break; + + case 'sy': + $lang_name = 'SYRIAC'; //arabic syrian + $country_name = 'SYRIA'; + break; + + + case 'tc': + $lang_name = 'Turks & Caicos Is'; + $country_name = 'TURKS_&_CAICOS_IS'; + break; + + case 'td': + $lang_name = 'Chad'; + $country_name = 'CHAD'; + break; + + case 'tf': + $lang_name = 'french '; // + $country_name = 'FRENCH_SOUTHERN_TERRITORIES'; //Terres australes françaises + break; + + case 'tj': + $lang_name = 'Tajikistan'; + $country_name = 'TAJIKISTAN'; + break; + + case 'tg': + $lang_name = 'Togo'; + $country_name = 'TOGO'; + break; + + case 'th': + $country_name = 'Thailand'; + $lang_name = 'THAILAND'; + break; + + case 'tk': + //260 speakers of Tokelauan, of whom 2,100 live in New Zealand, + //1,400 in Tokelau, + //and 17 in Swains Island + $lang_name = 'Tokelauan'; // /toʊkəˈlaʊən/ Tokelauans or Polynesians + $country_name = 'TOKELAUAU'; //Dependent territory of New Zealand + break; + + case 'tl': + $country_name = 'East Timor'; + $lang_name = 'East Timor'; + break; + + case 'to': + $country_name = 'Tonga'; + $lang_name = 'TONGA'; + break; + + case 'tt': + $country_name = 'Trinidad & Tobago'; + $lang_name = 'TRINIDAD_&_TOBAGO'; + break; + + case 'tn': + $lang_name = 'Tunisia'; + $country_name = 'TUNISIA'; + break; + + case 'tm': + $lang_name = 'Turkmenistan'; + $country_name = 'TURKMENISTAN'; + break; + + case 'tr': + $lang_name = 'Turkey'; + $country_name = 'TURKEY'; + break; + + case 'tv': + $lang_name = 'Tuvalu'; + $country_name = 'TUVALU'; + break; + + case 'tw': + $lang_name = 'TAIWANESE_HOKKIEN'; //Taibei Hokkien + $country_name = 'TAIWAN'; + break; + + case 'tz': + $country_name = 'TANZANIA'; + $lang_name = 'Tanzania'; + break; + + case 'ug': + $lang_name = 'Uganda'; + $country_name = 'UGANDA'; + break; + + case 'ua': + $lang_name = 'Ukraine'; + $country_name = 'UKRAINE'; + break; + + case 'us': + $lang_name = 'en-us'; + $country_name = 'UNITED_STATES_OF_AMERICA'; + break; + + case 'uz': + $lang_name = 'uzbek'; //Uyghur Perso-Arabic alphabet + $country_name = 'UZBEKISTAN'; + break; + + case 'uy': + $lang_name = 'Uruguay'; + $country_name = 'URUGUAY'; + break; + + case 'va': + $country_name = 'VATICAN_CITY'; //Holy See + $lang_name = 'latin'; + break; + + case 'vc': + $country_name = 'ST_VINCENT_&_GRENADINES'; // + $lang_name = 'vincentian-creole'; + break; + + case 've': + $lang_name = 'Venezuela'; + $country_name = 'VENEZUELA'; + break; + + case 'vi': + $lang_name = 'Virgin Islands (USA)'; + $country_name = 'VIRGIN_ISLANDS_(USA)'; + break; + + case 'fr_vn': + $lang_name = 'FRENCH_VIETNAM'; + $country_name = 'VIETNAM'; + break; + + case 'vn': + $lang_name = 'Vietnam'; + $country_name = 'VIETNAM'; + break; + + case 'vg': + $lang_name = 'Virgin Islands (Brit)'; + $country_name = 'VIRGIN_ISLANDS_(BRIT)'; + break; + + case 'vu': + $lang_name = 'Vanuatu'; + $country_name = 'VANUATU'; + break; + + case 'wls': + $lang_name = 'WALLISIAN'; + $country_name = 'WALES'; + break; + + case 'wf': + $country_name = 'TERRITORY_OF_THE_WALLIS_AND_FUTUNA_ISLANDS'; + $lang_name = 'WF'; + //Wallisian, or ʻUvean + //Futunan - Austronesian, Malayo-Polynesian + break; + + case 'ws': + $country_name = 'SAMOA'; + $lang_name = 'Samoa'; + break; + + case 'ye': + $lang_name = 'Yemen'; + $country_name = 'YEMEN'; + break; + + case 'yt': + $lang_name = 'Mayotte'; //Shimaore: + $country_name = 'DEPARTMENT_OF_MAYOTTE'; //Département de Mayotte + break; + + case 'za': + $lang_name = 'zhuang'; + $country_name = 'SOUTH_AFRICA'; + break; + case 'zm': + $lang_name = 'zambian'; + $country_name = 'ZAMBIA'; + break; + case 'zw': + $lang_name = 'Zimbabwe'; + $country_name = 'ZIMBABWE'; + break; + case 'zu': + $lang_name = 'zulu'; + $country_name = 'ZULU'; + break; + default: + $lang_name = $file_dir; + $country_name = $file_dir; + break; + } + $return = ($lang_country == 'country') ? $country_name : $lang_name; + $return = ($langs_countries == true) ? $lang_name[$country_name] : $return; + return $return ; + } + + /** + * @param string $var The key to look for + * @return mixed The data stored at the key + */ + public function __get($var) + { + if (isset($this -> $var)) + { + return $this -> $var; + } + if ($var == 'size') + { + $this -> size = new Size(SHOW_DIR_SIZE ? $this -> dir_size() : false); + return $this -> size; + } + throw new ExceptionDisplay('Variable ' . Url::html_output($var) + . ' not set in DirItem class.'); + } +} + +?> \ No newline at end of file diff --git a/classes/DirectoryList.php b/classes/DirectoryList.php new file mode 100644 index 0000000..c20e782 --- /dev/null +++ b/classes/DirectoryList.php @@ -0,0 +1,256 @@ + + * @version 1.0.1 (June 30, 2004) + * @package AutoIndex + */ +class DirectoryList implements Iterator +{ + /** + * @var string The directory this object represents + */ + protected $dir_name; + + /** + * @var array The list of filesname in this directory (strings) + */ + protected $contents; + + /** + * @var int The size of the $contents array + */ + private $list_count; + + //begin implementation of Iterator + /** + * @var int $i is used to keep track of the current pointer inside the array when implementing Iterator + */ + private $i; + + /** + * @return string The element $i currently points to in the array + */ + public function current() + { + if ($this -> i < count($this -> contents)) + { + return $this -> contents[$this -> i]; + } + return false; + } + + /** + * Increments the internal array pointer, then returns the value + * at that new position. + * + * @return string The current position of the pointer in the array + */ + public function next() + { + $this -> i++; + return $this -> current(); + } + + /** + * Sets the internal array pointer to 0 + */ + public function rewind() + { + $this -> i = 0; + } + + /** + * @return bool True if $i is a valid array index + */ + public function valid() + { + return ($this -> i < count($this -> contents)); + } + + /** + * @return int Returns $i, the key of the array + */ + public function key() + { + return $this -> i; + } + //end implementation of Iterator + + /** + * @return int The total size in bytes of the folder (recursive) + */ + public function size_recursive() + { + $total_size = 0; + foreach ($this as $current) + { + $t = $this -> dir_name . $current; + if (@is_dir($t)) + { + if ($current != '..') + { + $temp = new DirectoryList($t); + $total_size += $temp -> size_recursive(); + } + } + else + { + $total_size += @filesize($t); + } + } + return $total_size; + } + + /** + * @return int The total number of files in this directory (recursive) + */ + public function num_files() + { + $count = 0; + foreach ($this as $current) + { + $t = $this -> dir_name . $current; + if (@is_dir($t)) + { + if ($current != '..') + { + $temp = new DirectoryList($t); + $count += $temp -> num_files(); + } + } + else + { + $count++; + } + } + return $count; + } + + /** + * @param string $string The string to search for + * @param array $array The array to search + * @return bool True if $string matches any elements in $array + */ + public static function match_in_array($string, &$array) + { + $string = Item::get_basename($string); + static $replace = array( + '\*' => '[^\/]*', + '\+' => '[^\/]+', + '\?' => '[^\/]?'); + foreach ($array as $m) + { + if (preg_match('/^' . strtr(preg_quote(Item::get_basename($m), '/'), $replace) . '$/i', $string)) + { + return true; + } + } + return false; + } + + /** + * @param string $t The file or folder name + * @param bool $is_file + * @return bool True if $t is listed as a hidden file + */ + public static function is_hidden($t, $is_file = true) + { + $t = Item::get_basename($t); + if ($t == '.' || $t == '') + { + return true; + } + global $you; + if ($you -> level >= ADMIN) + //allow admins to view hidden files + { + return false; + } + global $hidden_files, $show_only_these_files; + if ($is_file && count($show_only_these_files)) + { + return (!self::match_in_array($t, $show_only_these_files)); + } + return self::match_in_array($t, $hidden_files); + } + + /** + * @param string $var The key to look for + * @return mixed The data stored at the key + */ + public function __get($var) + { + if (isset($this -> $var)) + { + return $this -> $var; + } + throw new ExceptionDisplay('Variable ' . Url::html_output($var) + . ' not set in DirectoryList class.'); + } + + /** + * @param string $path + */ + public function __construct($path) + { + $path = Item::make_sure_slash($path); + if (!@is_dir($path)) + { + throw new ExceptionDisplay('Directory ' . Url::html_output($path) + . ' does not exist.'); + } + $temp_list = @scandir($path); + if ($temp_list === false) + { + throw new ExceptionDisplay('Error reading from directory ' + . Url::html_output($path) . '.'); + } + $this -> dir_name = $path; + $this -> contents = array(); + foreach ($temp_list as $t) + { + if (!self::is_hidden($t, !@is_dir($path . $t))) + { + $this -> contents[] = $t; + } + } + $this -> list_count = count($this -> contents); + $this -> i = 0; + } +} + +?> \ No newline at end of file diff --git a/classes/DirectoryListDetailed.php b/classes/DirectoryListDetailed.php new file mode 100644 index 0000000..7aa3165 --- /dev/null +++ b/classes/DirectoryListDetailed.php @@ -0,0 +1,237 @@ + + * @version 1.1.0 (January 01, 2006) + * @package AutoIndex + */ +class DirectoryListDetailed extends DirectoryList +{ + /** + * @var string The HTML text that makes up the path navigation links + */ + protected $path_nav; + + /** + * @var int Total number of files in this directory + */ + protected $total_files; + + /** + * @var int Total number of folders in this directory + */ + protected $total_folders; + + /** + * @var int Total number of folders in this directory (including parent) + */ + protected $raw_total_folders; + + /** + * @var int Total number of downloads of files in this directory + */ + protected $total_downloads; + + /** + * @var Size Total size of this directory (recursive) + */ + protected $total_size; + + /** + * @return string The HTML text that makes up the path navigation + */ + private function set_path_nav() + { + global $config, $subdir; + $exploded = explode('/', $subdir); + $c = count($exploded) - 1; + $temp = '' + . Url::html_output(substr(str_replace('/', ' / ', $config -> __get('base_dir')), 0, -2)) . '/ '; + for ($i = 0; $i < $c; $i++) + { + $temp .= '' . Url::html_output($exploded[$i]) . ' / '; + } + return $temp; + } + + /** + * Returns -1 if $a < $b or 1 if $a > $b + * + * @param Item $a + * @param Item $b + * @return int + */ + private static function callback_sort(Item $a, Item $b) + { + if ($a -> __get('is_parent_dir')) + { + return -1; + } + if ($b -> __get('is_parent_dir')) + { + return 1; + } + $sort = strtolower($_SESSION['sort']); + if ($sort === 'size') + { + $val = (($a -> __get('size') -> __get('bytes') < + $b -> __get('size') -> __get('bytes')) ? -1 : 1); + } + else + { + if (!$a -> is_set($sort)) + { + $_SESSION['sort'] = 'filename'; //so the "continue" link will work + throw new ExceptionDisplay('Invalid sort mode.'); + } + if (is_string($a -> __get($sort))) + { + $val = strnatcasecmp($a -> __get($sort), $b -> __get($sort)); + } + else + { + $val = (($a -> __get($sort) < $b -> __get($sort)) ? -1 : 1); + } + } + return ((strtolower($_SESSION['sort_mode']) === 'd') ? -$val : $val); + } + + /** + * @param array $list The array to be sorted with the callback_sort function + */ + protected static function sort_list(&$list) + { + usort($list, array('self', 'callback_sort')); + } + + /** + * @return int The total number of files and folders (including the parent folder) + */ + public function total_items() + { + return $this -> raw_total_folders + $this -> total_files; + } + + /** + * @param string $path The directory to read the files from + * @param int $page The number of files to skip (used for pagination) + */ + public function __construct($path, $page = 1) + { + $path = Item::make_sure_slash($path); + parent::__construct($path); + $subtract_parent = false; + $this -> total_downloads = $total_size = 0; + $dirs = $files = array(); + foreach ($this as $t) + { + if (@is_dir($path . $t)) + { + $temp = new DirItem($path, $t); + if ($temp -> __get('is_parent_dir')) + { + $dirs[] = $temp; + $subtract_parent = true; + } + else if ($temp -> __get('filename') !== false) + { + $dirs[] = $temp; + if ($temp -> __get('size') -> __get('bytes') !== false) + { + $total_size += $temp -> __get('size') -> __get('bytes'); + } + } + } + else if (@is_file($path . $t)) + { + $temp = new FileItem($path, $t); + if ($temp -> __get('filename') !== false) + { + $files[] = $temp; + $this -> total_downloads += $temp -> __get('downloads'); + $total_size += $temp -> __get('size') -> __get('bytes'); + } + } + } + self::sort_list($dirs); + self::sort_list($files); + $this -> contents = array_merge($dirs, $files); + $this -> total_size = new Size($total_size); + $this -> total_files = count($files); + $this -> raw_total_folders = $this -> total_folders = count($dirs); + if ($subtract_parent) + { + $this -> total_folders--; + } + $this -> path_nav = $this -> set_path_nav(); + + //Paginate the files + if (ENTRIES_PER_PAGE) + { + if ($page < 1) + { + throw new ExceptionDisplay('Invalid page number.'); + } + global $config; + $num_per_page = $config -> __get('entries_per_page'); + if (($page - 1) * $num_per_page >= $this -> total_items()) + { + throw new ExceptionDisplay('Invalid page number.'); + } + $this -> contents = array_slice($this -> contents, ($page - 1) * $num_per_page, $num_per_page); + } + } + + /** + * @return string The HTML text of the directory list, using the template system + */ + public function __toString() + { + $head = new TemplateInfo(TABLE_HEADER, $this); + $main = new TemplateFiles(EACH_FILE, $this); + $foot = new TemplateInfo(TABLE_FOOTER, $this); + return $head -> __toString() . $main -> __toString() . $foot -> __toString(); + } +} + +?> \ No newline at end of file diff --git a/classes/Display.php b/classes/Display.php new file mode 100644 index 0000000..d9b7a25 --- /dev/null +++ b/classes/Display.php @@ -0,0 +1,90 @@ + + * @version 1.0.2 (July 22, 2004) + * @package AutoIndex + */ +class Display +{ + /** + * @var string HTML text to output + */ + private $contents; + + /** + * @return string The HTML text of the list of function calls + * @see debug_backtrace() + */ + public static function get_trace() + { + $list = '

Debug trace:'; + foreach (debug_backtrace() as $arr) + { + $line = (isset($arr['line']) ? $arr['line'] : 'unknown'); + $file = (isset($arr['file']) ? Item::get_basename($arr['file']) : 'unknown'); + $type = (isset($arr['type']) ? $arr['type'] : ''); + $class = (isset($arr['class']) ? $arr['class'] : ''); + $function = (isset($arr['function']) ? $arr['function'] : 'unknown'); + $list .= "\n
$file line $line ($class$type$function)"; + } + return $list . '

'; + } + + /** + * @param string $contents Sets the HTML contents + */ + public function __construct(&$contents) + { + $this -> contents = $contents; + } + + /** + * @return string The HTML output, using the template system + */ + public function __toString() + { + $header = new TemplateIndexer(GLOBAL_HEADER); + $footer = new TemplateIndexer(GLOBAL_FOOTER); + $output = $header -> __toString() . $this -> contents; + if (DEBUG) + { + $output .= self::get_trace(); + } + return $output . $footer -> __toString(); + } +} + +?> \ No newline at end of file diff --git a/classes/ExceptionDisplay.php b/classes/ExceptionDisplay.php new file mode 100644 index 0000000..34c87e1 --- /dev/null +++ b/classes/ExceptionDisplay.php @@ -0,0 +1,64 @@ + + * @version 1.0.0 (August 01, 2004) + * @package AutoIndex + * @see Display + */ +class ExceptionDisplay extends ExceptionFatal +{ + /** + * @return string The HTML text to display + */ + public function __toString() + { + global $words; + $str = '
' + . $this -> message . '

' . (isset($words) ? $words -> __get('continue') : 'Continue') + . '.

'; + $temp = new Display($str); + return $temp -> __toString(); + } +} + +?> \ No newline at end of file diff --git a/classes/FileItem.php b/classes/FileItem.php new file mode 100644 index 0000000..7203349 --- /dev/null +++ b/classes/FileItem.php @@ -0,0 +1,118 @@ + + * @version 1.0.1 (July 10, 2004) + * @package AutoIndex + */ +class FileItem extends Item +{ + /** + * @param string $fn The filename + * @return string Everything after the list dot in the filename, not including the dot + */ + public static function ext($fn) + { + $fn = Item::get_basename($fn); + return (strpos($fn, '.') ? strtolower(substr(strrchr($fn, '.'), 1)) : ''); + } + + /** + * @return string Returns the extension of the filename + * @see FileItem::ext() + */ + public function file_ext() + { + return self::ext($this -> filename); + } + + /** + * @param string $parent_dir + * @param string $filename + */ + public function __construct($parent_dir, $filename) + { + parent::__construct($parent_dir, $filename); + if (!@is_file($this -> parent_dir . $filename)) + { + throw new ExceptionDisplay('File ' + . Url::html_output($this -> parent_dir . $filename) + . ' does not exist.'); + } + global $config, $words, $downloads; + $this -> filename = $filename; + $this -> size = new Size(filesize($this -> parent_dir . $filename)); + if (ICON_PATH) + { + $file_icon = new Icon($filename); + $this -> icon = $file_icon -> __toString(); + } + $this -> downloads = (DOWNLOAD_COUNT && $downloads -> is_set($parent_dir . $filename) ? (int)($downloads -> __get($parent_dir . $filename)) : 0); + $this -> link = Url::html_output($_SERVER['PHP_SELF']) . '?dir=' . Url::translate_uri(substr($this -> parent_dir, strlen($config -> __get('base_dir')))) + . '&file=' . Url::translate_uri($filename); + if (THUMBNAIL_HEIGHT && in_array(self::ext($filename), array('png', 'jpg', 'jpeg', 'gif'))) + { + $this -> thumb_link = ' ' . $words -> __get('thumbnail of') . ' ' . $filename
+			. ''; + } + $size = $this -> size -> __get('bytes'); + if (MD5_SHOW && $size > 0 && $size / 1048576 <= $config -> __get('md5_show')) + { + $this -> md5_link = '[' + . $words -> __get('calculate md5sum') . ']'; + } + } + + /** + * @param string $var The key to look for + * @return mixed The data stored at the key + */ + public function __get($var) + { + if (isset($this -> $var)) + { + return $this -> $var; + } + throw new ExceptionDisplay('Variable ' . Url::html_output($var) + . ' not set in FileItem class.'); + } +} + +?> \ No newline at end of file diff --git a/classes/Ftp.php b/classes/Ftp.php new file mode 100644 index 0000000..6482882 --- /dev/null +++ b/classes/Ftp.php @@ -0,0 +1,155 @@ + + * @version 1.0.0 (February 16, 2005) + * @package AutoIndex + */ +class Ftp extends DirectoryList +{ + /** + * @var resource The FTP connection handle + */ + private $handle; + + /** + * @var array Array of bools, for each entry + */ + private $is_directory; + + /** + * Returns if the $i'th entry is a directory or not. + * + * @param int $i The file/folder entry to check + * @return bool True if directory, false if file + */ + public function is_directory($i) + { + return $this -> is_directory[$i]; + } + + /** + * Reads the contents of the directory $path from the FTP server. + * + * @param string $path + */ + private function update_list($path) + { + $path = Item::make_sure_slash($path); + $is_dir = $this -> contents = array(); + $this -> dir_name = $path; + $raw_list = @ftp_rawlist($this -> handle, $path); + if ($raw_list === false) + { + throw new ExceptionDisplay('Unable to read directory contents of FTP server.'); + } + foreach ($raw_list as $file) + { + if ($file == '') + { + continue; + } + $name = strrchr($file, ' '); + if ($name === false) + { + continue; + } + $this -> is_directory[] = (strtolower($file{0}) === 'd'); + $this -> contents[] = $path . substr($name, 1); + } + $this -> list_count = count($this -> contents); + $this -> i = 0; + } + + /** + * @param string $local + * @param string $remote + */ + public function get_file($local, $remote) + { + if (!@ftp_get($this -> handle, $local, $remote, FTP_BINARY)) + { + throw new ExceptionDisplay('Unable to transfer file from FTP server.'); + } + } + + /** + * @param string $local + * @param string $remote + */ + public function put_file($local, $remote) + { + if (!@ftp_put($this -> handle, $remote, $local, FTP_BINARY)) + { + throw new ExceptionDisplay('Unable to transfer file to FTP server.'); + } + } + + /** + * @param string $host + * @param int $port + * @param bool $passive + * @param string $directory Directory to view + * @param string $username To login with + * @param string $password To login with + */ + public function __construct($host, $port, $passive, $directory, $username, $password) + { + $this -> handle = @ftp_connect(trim($host), (int)$port); + if ($this -> handle === false) + { + throw new ExceptionDisplay('Could not connect to FTP server.'); + } + if (!@ftp_login($this -> handle, $username, $password)) + { + throw new ExceptionDisplay('Incorrect login for FTP server.'); + } + if ($passive && !@ftp_pasv($this -> handle, true)) + { + throw new ExceptionDisplay('Could not set passive mode for FTP server.'); + } + $this -> update_list($directory); + } + + /** + * Closes the open FTP connection when the object is destroyed. + */ + public function __destruct() + { + ftp_close($this -> handle); + } +} + +?> \ No newline at end of file diff --git a/classes/Htaccess.php b/classes/Htaccess.php new file mode 100644 index 0000000..493032c --- /dev/null +++ b/classes/Htaccess.php @@ -0,0 +1,508 @@ + + * - + * - + * - AddDescription + * - IndexIgnore + * - Include + * - Order + * - Deny from + * - Allow from + * - AuthUserFile + * - AuthName + * - Require user + * + * These password formats are supported for .htpasswd file: + * - MD5 + * - SHA-1 + * - Crypt + * - Apache's Custom MD5 Crypt + * + * @author Justin Hagstrom + * @version 1.0.1 (January 6, 2007) + * @package AutoIndex + */ +class Htaccess +{ + /** + * @var string "AuthName" setting + */ + private $auth_name; + + /** + * @var string "AuthUserFile" setting + */ + private $auth_user_file; + + /** + * @var array "Require user" setting + */ + private $auth_required_users; + + /** + * @var string "Order" setting + */ + private $order; + + /** + * @var array "Allow from" setting + */ + private $allow_list; + + /** + * @var array "Deny from" setting + */ + private $deny_list; + + /** + * Converts hexadecimal to binary. + * + * @param string $hex + * @return string + */ + private static function hex2bin($hex) + { + $bin = ''; + $ln = strlen($hex); + for($i = 0; $i < $ln; $i += 2) + { + $bin .= chr(hexdec($hex{$i} . $hex{$i+1})); + } + return $bin; + } + + /** + * Return the number of count from the value using base conversion. + * + * @param int $value + * @param int $count + * @return int + */ + private static function to64($value, $count) + { + static $root = './0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'; + $result = ''; + while(--$count) + { + $result .= $root[$value & 0x3f]; + $value >>= 6; + } + return $result; + } + + /** + * Implementation of Apache's Custom MD5 Crypt. + * + * @param string $plain The plaintext password + * @param string $salt The salt + * @return string The hashed password + */ + private static function md5_crypt($plain, $salt) + { + $length = strlen($plain); + $context = $plain . '$apr1$' . $salt; + $binary = self::hex2bin(md5($plain . $salt . $plain)); + for ($i = $length; $i > 0; $i -= 16) + { + $context .= substr($binary, 0, min(16, $i)); + } + for ( $i = $length; $i > 0; $i >>= 1) + { + $context .= ($i & 1) ? chr(0) : $plain[0]; + } + $binary = self::hex2bin(md5($context)); + for ($i = 0; $i < 1000; $i++) + { + $new = ($i & 1) ? $plain : substr($binary, 0, 16); + if ($i % 3) + { + $new .= $salt; + } + if ($i % 7) + { + $new .= $plain; + } + $new .= (($i & 1) ? substr($binary, 0, 16) : $plain); + $binary = self::hex2bin(md5($new)); + } + $p = array(); + for ($i = 0; $i < 5; $i++) + { + $k = $i + 6; + $j = $i + 12; + if ($j == 16) + { + $j = 5; + } + $p[] = self::to64( + (ord($binary[$i]) << 16) | + (ord($binary[$k]) << 8) | + (ord($binary[$j])), 5 + ); + } + return '$apr1$' . $salt . '$' . implode($p) . self::to64(ord($binary[11]), 3); + } + + /** + * Tests if $test matches $target. + * + * @param string $test + * @param string $target + * @return bool True if $test matches $target + */ + private static function matches($test, $target) + { + static $replace = array( + '\*' => '.*', + '\+' => '.+', + '\?' => '.?'); + return (bool)preg_match('/^' . strtr(preg_quote($test, '/'), $replace) . '$/i', $target); + } + + /** + * Checks if AuthName and AuthUserFile are set, and then prompts for a + * username and password. + */ + private function check_auth() + { + if ($this -> auth_user_file == '') + { + return; + } + if ($this -> auth_name == '') + { + $this -> auth_name = '"Directory access restricted by AutoIndex"'; + } + $validated = false; + if (isset($_SERVER['PHP_AUTH_USER'], $_SERVER['PHP_AUTH_PW'])) + { + $file = @file($this -> auth_user_file); + if ($file === false) + { + $_GET['dir'] = ''; + throw new ExceptionDisplay('Cannot open .htpasswd file. +
' . htmlentities($this -> auth_user_file) . ''); + } + if ($this -> auth_required_users === array() || DirectoryList::match_in_array($_SERVER['PHP_AUTH_USER'], $this -> auth_required_users)) + { + foreach ($file as $account) + { + $parts = explode(':', trim($account)); + if (count($parts) < 2 || $_SERVER['PHP_AUTH_USER'] != $parts[0]) + { + continue; + } + if (isset($parts[2])) + //MD5 hash format with realm + { + $parts[1] = $parts[2]; + } + switch (strlen($parts[1])) + { + case 13: + //Crypt hash format + { + $validated = (crypt($_SERVER['PHP_AUTH_PW'], substr($parts[1], 0, 2)) == $parts[1]); + break 2; + } + case 32: + //MD5 hash format + { + $validated = (md5($_SERVER['PHP_AUTH_PW']) == $parts[1]); + break 2; + } + case 37: + //Apache's MD5 Crypt hash format + { + $salt = explode('$', $parts[1]); + $validated = (self::md5_crypt($_SERVER['PHP_AUTH_PW'], $salt[2]) == $parts[1]); + break 2; + } + case 40: + //SHA-1 hash format + { + $validated = (sha1($_SERVER['PHP_AUTH_PW']) == $parts[1]); + break 2; + } + } + } + } + sleep(1); + } + if (!$validated) + { + header('WWW-Authenticate: Basic realm=' . $this -> auth_name); + header('HTTP/1.0 401 Authorization Required'); + $_GET['dir'] = ''; + throw new ExceptionDisplay('A username and password are required to access this directory.'); + } + } + + /** + * Checks if the user's IP or hostname is either allowed or denied. + */ + private function check_deny() + { + global $ip, $host, $words; + if ($this -> order === 'allow,deny') + { + if (!DirectoryList::match_in_array($host, $this -> allow_list) + && !DirectoryList::match_in_array($ip, $this -> allow_list)) + { + $_GET['dir'] = ''; + throw new ExceptionDisplay($words -> __get('the administrator has blocked your ip address or hostname') . '.'); + } + } + else if (DirectoryList::match_in_array($ip, $this -> deny_list) + || DirectoryList::match_in_array($host, $this -> deny_list)) + { + $_GET['dir'] = ''; + throw new ExceptionDisplay($words -> __get('the administrator has blocked your ip address or hostname') . '.'); + } + } + + /** + * @param string $file The .htaccess file (name and path) to parse + */ + private function parse($file) + { + $data = @file($file); + if ($data === false) + { + return; + } + $conditional_directory = ''; + $other_conditional = false; + foreach ($data as $line) + { + $line = trim($line); + if ($line == '') + { + continue; + } + if ($line{0} == '<') + { + if (preg_match('#^#i', $line)) + { + $conditional_directory = ''; + } + else if (preg_match('#^<\s*directory\s+\"?(.+?)\"?\s*>#i', $line, $matches)) + { + $conditional_directory = $matches[1]; + } + else if (preg_match('#^#i', $line)) + { + //ignore tags + continue; + } + else if (preg_match('#^#i', $line)) + { + $conditional_defined = ''; + } + else if (preg_match('#^<\s*ifdefine\s+(.+?)\s*>#i', $line, $matches)) + { + $conditional_defined = $matches[1]; + } + else if (isset($line{1})) + { + $other_conditional = ($line{1} != '/'); + } + continue; + } + global $dir; + if ($other_conditional || $conditional_directory != '' && !self::matches($conditional_directory, $dir)) + //deal with or an unknown < > tag + { + continue; + } + if ($conditional_defined != '') + //deal with + { + $conditional_defined = strtoupper($conditional_defined); + if ($conditional_defined{0} === '!') + { + $conditional_defined = substr($conditional_defined, 1); + if (defined($conditional_defined) && constant($conditional_defined)) + { + continue; + } + } + else if (!defined($conditional_defined) || !constant($conditional_defined)) + { + continue; + } + } + $parts = preg_split('#\s#', $line, -1, PREG_SPLIT_NO_EMPTY); + switch (strtolower($parts[0])) + { + case 'indexignore': + { + global $hidden_files; + for ($i = 1; $i < count($parts); $i++) + { + $hidden_files[] = $parts[$i]; + } + break; + } + case 'include': + { + if (isset($parts[1]) && @is_file($parts[1]) && @is_readable($parts[1])) + { + self::parse($parts[1]); + } + break; + } + case 'allow': + { + if (isset($parts[1]) && strtolower($parts[1]) === 'from') + { + for ($i = 2; $i < count($parts); $i++) + { + foreach (explode(',', $parts[$i]) as $ip) + { + if (strtolower($ip) === 'all') + { + $this -> allow_list = array('*'); + } + else + { + $this -> allow_list[] = $ip; + } + } + } + } + break; + } + case 'deny': + { + if (isset($parts[1]) && strtolower($parts[1]) === 'from') + { + for ($i = 2; $i < count($parts); $i++) + { + foreach (explode(',', $parts[$i]) as $ip) + { + if (strtolower($ip) === 'all') + { + $this -> deny_list = array('*'); + } + else + { + $this -> deny_list[] = $ip; + } + } + } + } + break; + } + case 'adddescription': + { + global $descriptions; + if (!isset($descriptions)) + { + $descriptions = new ConfigData(false); + } + for ($i = 1; isset($parts[$i], $parts[$i+1]); $i += 2) + { + $descriptions -> set($parts[$i], $parts[$i+1]); + } + break; + } + case 'authuserfile': + { + if (isset($parts[1])) + { + $this -> auth_user_file = str_replace('"', '', implode(' ', array_slice($parts, 1))); + } + break; + } + case 'authname': + { + if (isset($parts[1])) + { + $this -> auth_name = implode(' ', array_slice($parts, 1)); + } + break; + } + case 'order': + { + if (isset($parts[1]) && (strtolower($parts[1]) === 'allow,deny' || strtolower($parts[1]) === 'mutual-failure')) + { + $this -> order = 'allow,deny'; + } + } + case 'require': + { + if (isset($parts[1]) && strtolower($parts[1]) === 'user') + { + for ($i = 2; $i < count($parts); $i++) + { + $this -> auth_required_users[] = $parts[$i]; + } + } + break; + } + } + } + } + + /** + * @param string $dir The deepest folder to parse for .htaccess files + * @param string $filename The name of the files to look for + */ + public function __construct($dir, $filename = '.htaccess') + { + $this -> auth_name = $this -> auth_user_file = ''; + $this -> auth_required_users = $this -> allow_list = $this -> deny_list = array(); + $this -> order = 'deny,allow'; + if (DirItem::get_parent_dir($dir) != '') + //recurse into parent directories + { + new Htaccess(DirItem::get_parent_dir($dir)); + } + $dir = Item::make_sure_slash($dir); + $file = $dir . $filename; + if (@is_file($file) && @is_readable($file)) + { + $this -> parse($dir . $filename); + $this -> check_deny(); + $this -> check_auth(); + } + } +} + +?> \ No newline at end of file diff --git a/classes/Icon.php b/classes/Icon.php new file mode 100644 index 0000000..d61ee7a --- /dev/null +++ b/classes/Icon.php @@ -0,0 +1,148 @@ + + * @version 1.0.2 (August 07, 2004) + * @package AutoIndex + */ +class Icon +{ + /** + * @var string Filename of the image file + */ + private $image_name; + + /** + * Given a file extension, this will come up with the filename of the + * icon to represent the filetype. + * + * @param string $ext The file extension to find the icon for + * @return string The appropriate icon depending on the extension + */ + private static function find_icon($ext) + { + if ($ext == '') + { + return 'generic'; + } + static $icon_types = array( + 'binary' => array('bat', 'bin', 'com', 'dmg', 'dms', 'exe', 'msi', + 'msp', 'pif', 'pyd', 'scr', 'so'), + 'binhex' => array('hqx'), + 'cd' => array('bwi', 'bws', 'bwt', 'ccd', 'cdi', 'cue', 'img', + 'iso', 'mdf', 'mds', 'nrg', 'nri', 'sub', 'vcd'), + 'comp' => array('cfg', 'conf', 'inf', 'ini', 'log', 'nfo', 'reg'), + 'compressed' => array('7z', 'a', 'ace', 'ain', 'alz', 'amg', 'arc', + 'ari', 'arj', 'bh', 'bz', 'bz2', 'cab', 'deb', 'dz', 'gz', + 'io', 'ish', 'lha', 'lzh', 'lzs', 'lzw', 'lzx', 'msx', 'pak', + 'rar', 'rpm', 'sar', 'sea', 'sit', 'taz', 'tbz', 'tbz2', + 'tgz', 'tz', 'tzb', 'uc2', 'xxe', 'yz', 'z', 'zip', 'zoo'), + 'dll' => array('386', 'db', 'dll', 'ocx', 'sdb', 'vxd'), + 'doc' => array('abw', 'ans', 'chm', 'cwk', 'dif', 'doc', 'dot', + 'mcw', 'msw', 'pdb', 'psw', 'rtf', 'rtx', 'sdw', 'stw', 'sxw', + 'vor', 'wk4', 'wkb', 'wpd', 'wps', 'wpw', 'wri', 'wsd'), + 'image' => array('adc', 'art', 'bmp', 'cgm', 'dib', 'gif', 'ico', + 'ief', 'jfif', 'jif', 'jp2', 'jpc', 'jpe', 'jpeg', 'jpg', 'jpx', + 'mng', 'pcx', 'png', 'psd', 'psp', 'swc', 'sxd', 'tga', + 'tif', 'tiff', 'wmf', 'wpg', 'xcf', 'xif', 'yuv'), + 'java' => array('class', 'jar', 'jav', 'java', 'jtk'), + 'js' => array('ebs', 'js', 'jse', 'vbe', 'vbs', 'wsc', 'wsf', + 'wsh'), + 'key' => array('aex', 'asc', 'gpg', 'key', 'pgp', 'ppk'), + 'mov' => array('amc', 'dv', 'm4v', 'mac', 'mov', 'mp4v', 'mpg4', + 'pct', 'pic', 'pict', 'pnt', 'pntg', 'qpx', 'qt', 'qti', + 'qtif', 'qtl', 'qtp', 'qts', 'qtx'), + 'movie' => array('asf', 'asx', 'avi', 'div', 'divx', 'dvi', 'm1v', + 'm2v', 'mkv', 'movie', 'mp2v', 'mpa', 'mpe', 'mpeg', 'mpg', + 'mps', 'mpv', 'mpv2', 'ogm', 'ram', 'rmvb', 'rnx', 'rp', 'rv', + 'vivo', 'vob', 'wmv', 'xvid'), + 'pdf' => array('edn', 'fdf', 'pdf', 'pdp', 'pdx'), + 'php' => array('inc', 'php', 'php3', 'php4', 'php5', 'phps', + 'phtml'), + 'ppt' => array('emf', 'pot', 'ppa', 'pps', 'ppt', 'sda', 'sdd', + 'shw', 'sti', 'sxi'), + 'ps' => array('ai', 'eps', 'ps'), + 'sound' => array('aac', 'ac3', 'aif', 'aifc', 'aiff', 'ape', 'apl', + 'au', 'ay', 'bonk', 'cda', 'cdda', 'cpc', 'fla', 'flac', + 'gbs', 'gym', 'hes', 'iff', 'it', 'itz', 'kar', 'kss', 'la', + 'lpac', 'lqt', 'm4a', 'm4p', 'mdz', 'mid', 'midi', 'mka', + 'mo3', 'mod', 'mp+', 'mp1', 'mp2', 'mp3', 'mp4', 'mpc', + 'mpga', 'mpm', 'mpp', 'nsf', 'oda', 'ofr', 'ogg', 'pac', 'pce', + 'pcm', 'psf', 'psf2', 'ra', 'rm', 'rmi', 'rmjb', 'rmm', 'sb', + 'shn', 'sid', 'snd', 'spc', 'spx', 'svx', 'tfm', 'tfmx', + 'voc', 'vox', 'vqf', 'wav', 'wave', 'wma', 'wv', 'wvx', 'xa', + 'xm', 'xmz'), + 'tar' => array('gtar', 'tar'), + 'text' => array('asm', 'c', 'cc', 'cp', 'cpp', 'cxx', 'diff', 'h', + 'hpp', 'hxx', 'm3u', 'md5', 'patch', 'pls', 'py', 'sfv', 'sh', + 'txt'), + 'uu' => array('uu', 'uud', 'uue'), + 'web' => array('asa', 'asp', 'aspx', 'cfm', 'cgi', 'css', 'dhtml', + 'dtd', 'grxml', 'htc', 'htm', 'html', 'htt', 'htx', 'jsp', 'lnk', + 'mathml', 'mht', 'mhtml', 'perl', 'pl', 'plg', 'rss', 'shtm', + 'shtml', 'stm', 'swf', 'tpl', 'wbxml', 'xht', 'xhtml', 'xml', + 'xsl', 'xslt', 'xul'), + 'xls' => array('csv', 'dbf', 'prn', 'pxl', 'sdc', 'slk', 'stc', 'sxc', + 'xla', 'xlb', 'xlc', 'xld', 'xlr', 'xls', 'xlt', 'xlw')); + foreach ($icon_types as $png_name => $exts) + { + if (in_array($ext, $exts)) + { + return $png_name; + } + } + return 'unknown'; + } + + /** + * @param string $filename The filename to find the icon for + */ + public function __construct($filename) + { + $this -> image_name = self::find_icon(FileItem::ext($filename)); + } + + /** + * @return string The full path to the icon file + */ + public function __toString() + { + global $config; + return $config -> __get('icon_path') + . $this -> image_name . '.png'; + } +} + +?> \ No newline at end of file diff --git a/classes/Image.php b/classes/Image.php new file mode 100644 index 0000000..f650d7b --- /dev/null +++ b/classes/Image.php @@ -0,0 +1,204 @@ + + * @version 1.0.0 (May 22, 2004) + * @package AutoIndex + */ +class Image +{ + /** + * @var string Name of the image file + */ + private $filename; + + /** + * @var int The height of the thumbnail to create (width is automatically determined) + */ + private $height; + + /** + * Outputs the jpeg image along with the correct headers so the + * browser will display it. The script is then exited. + */ + public function __toString() + { + $thumbnail_height = $this -> height; + $file = $this -> filename; + if (!@is_file($file)) + { + header('HTTP/1.0 404 Not Found'); + throw new ExceptionDisplay('Image file not found: ' + . Url::html_output($file) . ''); + } + switch (FileItem::ext($file)) + { + case 'gif': + { + $src = @imagecreatefromgif($file); + break; + } + case 'jpeg': + case 'jpg': + case 'jpe': + { + $src = @imagecreatefromjpeg($file); + break; + } + case 'png': + { + $src = @imagecreatefrompng($file); + break; + } + case 'php': + { + $src = str_replace('php', 'png', $file); + //JN (GPL) + $file_header = 'Content-type: image/png'; + + srand ((float) microtime() * 10000000); + $quote = rand(1, 6); + + switch($quote) + { + case "1": + $rand_quote = "MXP-CMS Team, mxp.sf.net"; + break; + + case "2": + $rand_quote = "in between milestones edition ;)"; + break; + + case "3": + $rand_quote = "MX-Publisher, Fully Modular Portal & CMS for phpBB"; + break; + + case "4": + $rand_quote = "Portal & CMS Site Creation Tool"; + break; + + case "5": + $rand_quote = "...pafileDB, FAP, MX-Publisher, Translator"; + break; + + case "6": + $rand_quote = "...Calendar, Links & News...modules"; + break; + } + + $pic_title = $rand_quote; + $pic_title_reg = preg_replace("/[^A-Za-z0-9]/", "_", $pic_title); + + $current_release = "3.0.0"; + + $im = @ImageCreateFromPNG($src); + $pic_size = @getimagesize($src); + + $pic_width = $pic_size[0]; + $pic_height = $pic_size[1]; + + $dimension_font = 1; + $dimension_filesize = filesize($src); + $dimension_string = intval($pic_width) . 'x' . intval($pic_height) . '(' . intval($dimension_filesize / 1024) . 'KB)'; + + $blue = ImageColorAllocate($im, 6, 108, 159); + + $dimension_height = imagefontheight($dimension_font); + $dimension_width = imagefontwidth($dimension_font) * strlen($current_release); + $dimension_x = ($thumbnail_width - $dimension_width) / 2; + $dimension_y = $thumbnail_height + ((16 - $dimension_height) / 2); + //ImageString($im, 2, $dimension_x, $dimension_y, $current_release, $blue); + @ImageString($im, 2, 125, 2, $current_release, $blue); + @ImageString($im, 2, 20, 17, $rand_quote, $blue); + + @Header($file_header); + Header("Expires: Mon, 1, 1999 05:00:00 GMT"); + Header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); + Header("Cache-Control: no-store, no-cache, must-revalidate"); + Header("Cache-Control: post-check=0, pre-check=0", false); + Header("Pragma: no-cache"); + @ImagePNG($im); + exit; + break; + } + default: + { + throw new ExceptionDisplay('Unsupported file extension.'); + } + } + if ($src === false) + { + throw new ExceptionDisplay('Unsupported image type.'); + } + + header('Content-Type: image/jpeg'); + header('Cache-Control: public, max-age=3600, must-revalidate'); + header('Expires: ' . gmdate('D, d M Y H:i:s', time() + 3600) + . ' GMT'); + $src_height = imagesy($src); + if ($src_height <= $thumbnail_height) + { + imagejpeg($src, '', 95); + } + else + { + $src_width = imagesx($src); + $thumb_width = $thumbnail_height * ($src_width / $src_height); + $thumb = imagecreatetruecolor($thumb_width, $thumbnail_height); + imagecopyresampled($thumb, $src, 0, 0, 0, 0, $thumb_width, + $thumbnail_height, $src_width, $src_height); + imagejpeg($thumb); + imagedestroy($thumb); + } + imagedestroy($src); + die(); + } + + /** + * @param string $file The image file + */ + public function __construct($file) + { + if (!THUMBNAIL_HEIGHT) + { + throw new ExceptionDisplay('Image thumbnailing is turned off.'); + } + global $config; + $this -> height = (int)$config -> __get('thumbnail_height'); + $this -> filename = $file; + } +} + +?> \ No newline at end of file diff --git a/classes/Item.php b/classes/Item.php new file mode 100644 index 0000000..32aee23 --- /dev/null +++ b/classes/Item.php @@ -0,0 +1,218 @@ + + * @version 1.0.1 (July 03, 2004) + * @package AutoIndex + * @see DirItem, FileItem + */ +abstract class Item +{ + /** + * @var string + */ + protected $filename; + + /** + * @var Size + */ + protected $size; + + /** + * @var int Last modified time + */ + protected $m_time; + + /** + * @var int Last accessed time + */ + protected $a_time; + + /** + * @var int + */ + protected $downloads; + + /** + * @var string + */ + protected $description; + + /** + * @var string The HTML text of the link to the type icon + */ + protected $icon; + + /** + * @var string The HTML text of the "[New]" icon + */ + protected $new_icon; + + /** + * @var string The HTML text of the link to this file or folder + */ + protected $link; + + /** + * @var string The HTML text of the link to the thumbnail picture + */ + protected $thumb_link; + + /** + * @var string The HTML text of the link to find the md5sum + */ + protected $md5_link; + + /** + * @var string The name and path of the parent directory + */ + protected $parent_dir; + + /** + * @var bool True if this is a link to '../' + */ + protected $is_parent_dir; + + /** + * @param int $timestamp Time in UNIX timestamp format + * @return string Formatted version of $timestamp + */ + private static function format_date($timestamp) + { + if ($timestamp === false) + { + return ' '; + } + return date(DATE_FORMAT, $timestamp); + } + + /** + * @return string Date modified (m_time) formatted as a string + * @see Item::format_date() + */ + public function format_m_time() + { + return self::format_date($this -> m_time); + } + + /** + * @return string Date last accessed (a_time) formatted as a string + * @see Item::format_date() + */ + public function format_a_time() + { + return self::format_date($this -> a_time); + } + + /** + * Returns everything after the slash, or the original string if there is + * no slash. A slash at the last character of the string is ignored. + * + * @param string $fn The file or folder name + * @return string The basename of $fn + * @see basename() + */ + public static function get_basename($fn) + { + return basename(str_replace('\\', '/', $fn)); + } + + /** + * @param string $path The directory name + * @return string If there is no slash at the end of $path, one will be added + */ + public static function make_sure_slash($path) + { + $path = str_replace('\\', '/', $path); + if (!preg_match('#/$#', $path)) + { + $path .= '/'; + } + return $path; + } + + /** + * @param string $parent_dir + * @param string $filename + */ + public function __construct($parent_dir, $filename) + { + $parent_dir = self::make_sure_slash($parent_dir); + $full_name = $parent_dir . $filename; + $this -> is_parent_dir = false; + $this -> m_time = filemtime($full_name); + $this -> a_time = fileatime($full_name); + $this -> icon = $this -> new_icon = $this -> md5_link = $this -> thumb_link = ''; + global $descriptions; + $this -> description = ((DESCRIPTION_FILE && $descriptions -> is_set($full_name)) ? $descriptions -> __get($full_name) : ' '); + $this -> parent_dir = $parent_dir; + if (DAYS_NEW) + { + global $config; + $days_new = $config -> __get('days_new'); + $age = (time() - $this -> m_time) / 86400; + $age_r = round($age, 1); + $s = (($age_r == 1) ? '' : 's'); + + $this -> new_icon = (($days_new > 0 && $age <= $days_new) ? + (ICON_PATH ? ' ' . ' : ' [New]') : ''); + } + } + + /** + * @param string $var The key to look for + * @return bool True if $var is set + */ + public function is_set($var) + { + return isset($this -> $var); + } + + /** + * @return string The file or folder name + */ + public function __toString() + { + return $this -> filename; + } + + /** + * @return string The file extension of the file or folder name + */ + abstract public function file_ext(); +} + +?> \ No newline at end of file diff --git a/classes/Language.php b/classes/Language.php new file mode 100644 index 0000000..83fa86c --- /dev/null +++ b/classes/Language.php @@ -0,0 +1,168 @@ + + * @version 1.0.0 (January 01, 2006) + * @package AutoIndex + */ +class Language +{ + /** + * @var ConfigData Contains the translation data from the language file + */ + private $translation_data; + + /** + * Returns a list of all files in $path that match the filename format + * of language files. + * + * There are two valid formats for the filename of a language file. The + * standard way is the language code then the .txt extension. You can + * also use the language code followed by an underscore then the + * country code. The second format would be used for dialects of + * languages. For example pt.txt would be Portuguese, and pt_BR.txt + * would be Brazilian Portuguese. The filenames are case insensitive. + * + * @param string $path The directory to read from + * @return array The list of valid language files (based on filename) + */ + public static function get_all_langs($path) + { + if (($hndl = @opendir($path)) === false) + { + return false; + } + $list = array(); + while (($file = readdir($hndl)) !== false) + { + if (@is_file($path . $file) && preg_match('/^[a-z]{2}(_[a-z]{2})?' + . preg_quote(LANGUAGE_FILE_EXT, '/') . '$/i', $file)) + { + $list[] = $file; + } + } + closedir($hndl); + for ($i = 0; $i < count($list); $i++) + { + //remove the file extention from each language code + $list[$i] = substr($list[$i], 0, -strlen(LANGUAGE_FILE_EXT)); + } + return $list; + } + + /** + * @return string The code for the language to load + * + * First tries to use the default of the user's browser, and then tries + * the default in the config file. + */ + private function get_current_lang() + { + //try to detect the default language of the user's browser + if (isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])) + //e.g. "en-us,en;q=0.5" + { + $available_langs = self::get_all_langs(PATH_TO_LANGUAGES); + if ($available_langs !== false) + { + $pref = array(); //user's preferred languages + foreach (explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']) as $lang) + { + $lang_array = explode(';q=', trim($lang)); + $q = (isset($lang_array[1]) ? trim($lang_array[1]) : 1); //preference value + $pref[trim($lang_array[0])] = (float) $q; + } + arsort($pref); + //find the first match that is available: + foreach ($pref as $lang => $q) + { + if (in_array($lang, $available_langs)) + { + return $lang; + } + elseif (file_exists(@realpath(PATH_TO_LANGUAGES . $lang . LANGUAGE_FILE_EXT))) + { + return $lang; + } + } + } + } + //the browser has no preferences set, so use the config's default + global $config; + return $config -> __get('language'); + } + + /** + * Creates a new language object. First tries to use the default of + * the user's browser, and then tries the default in the config file. + */ + public function __construct() + { + $lang_file = PATH_TO_LANGUAGES . $this -> get_current_lang() + . LANGUAGE_FILE_EXT; + if (!@is_readable($lang_file)) + { + throw new ExceptionFatal('Cannot read from language file: ' + . Url::html_output($lang_file) . ''); + } + //load the file as a tab-separated object + $this -> translation_data = new ConfigData($lang_file); + } + + /** + * @param string $name The word to look for + * @return bool True if $name is set in the translation file + */ + public function is_set($name) + { + return $translation_data -> is_set($name); + } + + /** + * @param string $var The key to look for (the keyword) + * @return string The value $name points to (its translation) + */ + public function __get($var) + { + if ($this -> translation_data -> is_set($var)) + { + return $this -> translation_data -> __get($var); + } + throw new ExceptionDisplay('Variable ' . Url::html_output($var) + . ' not set in Language file.'); + } +} + +?> \ No newline at end of file diff --git a/classes/Logging.php b/classes/Logging.php new file mode 100644 index 0000000..709980f --- /dev/null +++ b/classes/Logging.php @@ -0,0 +1,132 @@ + + * @version 1.0.1 (July 21, 2004) + * @package AutoIndex + */ +class Logging +{ + /** + * @var string Filename of the log to write to + */ + private $filename; + + /** + * @param string $filename The name of the log file + */ + public function __construct($filename) + { + $this -> filename = $filename; + } + + /** + * Writes data to the log file. + * + * @param string $extra Any additional data to add in the last column of the entry + */ + public function add_entry($extra = '') + { + if (LOG_FILE) + { + $h = @fopen($this -> filename, 'ab'); + if ($h === false) + { + throw new ExceptionDisplay('Could not open log file for writing.' + . ' Make sure PHP has write permission to this file.'); + } + global $dir, $ip, $host; + $referrer = (isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : 'N/A'); + fwrite($h, date(DATE_FORMAT) . "\t" . date('H:i:s') + . "\t$ip\t$host\t$referrer\t$dir\t$extra\n"); + fclose($h); + } + } + + /** + * @param int $max_num_to_display + */ + public function display($max_num_to_display) + { + if (!@is_file($this -> filename)) + { + throw new ExceptionDisplay('There are no entries in the log file.'); + } + $file_array = @file($this -> filename); + if ($file_array === false) + { + throw new ExceptionDisplay('Could not open log file for reading.'); + } + $count_log = count($file_array); + $num = (($max_num_to_display == 0) ? $count_log : min($max_num_to_display, $count_log)); + $out = "

Viewing $num (of $count_log) entries.

\n" + . '' + . '' + . '' + . '' + . ''; + for ($i = 0; $i < $num; $i++) + { + $class = (($i % 2) ? 'dark_row' : 'light_row'); + $out .= ''; + $parts = explode("\t", rtrim($file_array[$count_log-$i-1], "\r\n"), 7); + if (count($parts) !== 7) + { + throw new ExceptionDisplay('Incorrect format for log file on line ' + . ($i + 1)); + } + for ($j = 0; $j < 7; $j++) + { + $cell = Url::html_output($parts[$j]); + if ($j === 4 && $cell != 'N/A') + { + $cell = "$cell"; + } + $out .= '' : "$cell"); + } + $out .= "\n"; + } + global $words; + $out .= '
#DateTimeIP addressHostnameReferrerDirectoryFile downloaded or other info
' . ($i + 1) . '' . (($cell == '') ? ' 

' . $words -> __get('continue') + . '.

'; + echo new Display($out); + die(); + } +} + +?> \ No newline at end of file diff --git a/classes/MimeType.php b/classes/MimeType.php new file mode 100644 index 0000000..95cde31 --- /dev/null +++ b/classes/MimeType.php @@ -0,0 +1,200 @@ + + * @version 1.0.1 (February 09, 2005) + * @package AutoIndex + */ +class MimeType +{ + /** + * @var string The filename's MIME-type + */ + private $mime; + + /** + * @var string The default MIME-type to return + */ + private $default_type; + + /** + * Given a file extension, this will come up with the file's appropriate + * MIME-type. + * + * @param string $ext The file extension to find the MIME-type for + * @return string The appropriate MIME-type depending on the extension + */ + private function find_mime_type($ext) + { + static $mime_types = array( + 'application/andrew-inset' => array('ez'), + 'application/mac-binhex40' => array('hqx'), + 'application/mac-compactpro' => array('cpt'), + 'application/mathml+xml' => array('mathml'), + 'application/msword' => array('doc'), + 'application/octet-stream' => array('bin', 'dms', 'lha', + 'lzh', 'exe', 'class', 'so', 'dll', 'dmg'), + 'application/oda' => array('oda'), + 'application/ogg' => array('ogg'), + 'application/pdf' => array('pdf'), + 'application/postscript' => array('ai', 'eps', 'ps'), + 'application/rdf+xml' => array('rdf'), + 'application/smil' => array('smi', 'smil'), + 'application/srgs' => array('gram'), + 'application/srgs+xml' => array('grxml'), + 'application/vnd.mif' => array('mif'), + 'application/vnd.mozilla.xul+xml' => array('xul'), + 'application/vnd.ms-excel' => array('xls'), + 'application/vnd.ms-powerpoint' => array('ppt'), + 'application/vnd.wap.wbxml' => array('wbxml'), + 'application/vnd.wap.wmlc' => array('wmlc'), + 'application/vnd.wap.wmlscriptc' => array('wmlsc'), + 'application/voicexml+xml' => array('vxml'), + 'application/x-bcpio' => array('bcpio'), + 'application/x-cdlink' => array('vcd'), + 'application/x-chess-pgn' => array('pgn'), + 'application/x-cpio' => array('cpio'), + 'application/x-csh' => array('csh'), + 'application/x-director' => array('dcr', 'dir', 'dxr'), + 'application/x-dvi' => array('dvi'), + 'application/x-futuresplash' => array('spl'), + 'application/x-gtar' => array('gtar'), + 'application/x-hdf' => array('hdf'), + 'application/x-javascript' => array('js'), + 'application/x-koan' => array('skp', 'skd', 'skt', 'skm'), + 'application/x-latex' => array('latex'), + 'application/x-netcdf' => array('nc', 'cdf'), + 'application/x-sh' => array('sh'), + 'application/x-shar' => array('shar'), + 'application/x-shockwave-flash' => array('swf'), + 'application/x-stuffit' => array('sit'), + 'application/x-sv4cpio' => array('sv4cpio'), + 'application/x-sv4crc' => array('sv4crc'), + 'application/x-tar' => array('tar'), + 'application/x-tcl' => array('tcl'), + 'application/x-tex' => array('tex'), + 'application/x-texinfo' => array('texinfo', 'texi'), + 'application/x-troff' => array('t', 'tr', 'roff'), + 'application/x-troff-man' => array('man'), + 'application/x-troff-me' => array('me'), + 'application/x-troff-ms' => array('ms'), + 'application/x-ustar' => array('ustar'), + 'application/x-wais-source' => array('src'), + 'application/xhtml+xml' => array('xhtml', 'xht'), + 'application/xslt+xml' => array('xslt'), + 'application/xml' => array('xml', 'xsl'), + 'application/xml-dtd' => array('dtd'), + 'application/zip' => array('zip'), + 'audio/basic' => array('au', 'snd'), + 'audio/midi' => array('mid', 'midi', 'kar'), + 'audio/mpeg' => array('mpga', 'mp2', 'mp3'), + 'audio/x-aiff' => array('aif', 'aiff', 'aifc'), + 'audio/x-mpegurl' => array('m3u'), + 'audio/x-pn-realaudio' => array('ram', 'ra'), + 'application/vnd.rn-realmedia' => array('rm'), + 'audio/x-wav' => array('wav'), + 'chemical/x-pdb' => array('pdb'), + 'chemical/x-xyz' => array('xyz'), + 'image/bmp' => array('bmp'), + 'image/cgm' => array('cgm'), + 'image/gif' => array('gif'), + 'image/ief' => array('ief'), + 'image/jpeg' => array('jpeg', 'jpg', 'jpe'), + 'image/png' => array('png'), + 'image/svg+xml' => array('svg'), + 'image/tiff' => array('tiff', 'tif'), + 'image/vnd.djvu' => array('djvu', 'djv'), + 'image/vnd.wap.wbmp' => array('wbmp'), + 'image/x-cmu-raster' => array('ras'), + 'image/x-icon' => array('ico'), + 'image/x-portable-anymap' => array('pnm'), + 'image/x-portable-bitmap' => array('pbm'), + 'image/x-portable-graymap' => array('pgm'), + 'image/x-portable-pixmap' => array('ppm'), + 'image/x-rgb' => array('rgb'), + 'image/x-xbitmap' => array('xbm'), + 'image/x-xpixmap' => array('xpm'), + 'image/x-xwindowdump' => array('xwd'), + 'model/iges' => array('igs', 'iges'), + 'model/mesh' => array('msh', 'mesh', 'silo'), + 'model/vrml' => array('wrl', 'vrml'), + 'text/calendar' => array('ics', 'ifb'), + 'text/css' => array('css'), + 'text/html' => array('html', 'htm'), + 'text/plain' => array('asc', 'txt'), + 'text/richtext' => array('rtx'), + 'text/rtf' => array('rtf'), + 'text/sgml' => array('sgml', 'sgm'), + 'text/tab-separated-values' => array('tsv'), + 'text/vnd.wap.wml' => array('wml'), + 'text/vnd.wap.wmlscript' => array('wmls'), + 'text/x-setext' => array('etx'), + 'video/mpeg' => array('mpeg', 'mpg', 'mpe'), + 'video/quicktime' => array('qt', 'mov'), + 'video/vnd.mpegurl' => array('mxu', 'm4u'), + 'video/x-msvideo' => array('avi'), + 'video/x-sgi-movie' => array('movie'), + 'x-conference/x-cooltalk' => array('ice') + ); + foreach ($mime_types as $mime_type => $exts) + { + if (in_array($ext, $exts)) + { + return $mime_type; + } + } + return $this -> default_type; + } + + /** + * @param string $filename The filename to find the MIME-type for + * @param string $default_type The default MIME-type to return + */ + public function __construct($filename, $default_type = 'text/plain') + { + $this -> default_type = $default_type; + $this -> mime = $this -> find_mime_type(FileItem::ext($filename)); + } + + /** + * @return string + */ + public function __toString() + { + return $this -> mime; + } +} + +?> \ No newline at end of file diff --git a/classes/Search.php b/classes/Search.php new file mode 100644 index 0000000..d13f854 --- /dev/null +++ b/classes/Search.php @@ -0,0 +1,189 @@ + + * @version 1.0.3 (July 06, 2005) + * @package AutoIndex + */ +class Search extends DirectoryListDetailed +{ + /** + * @var array List of matched filenames + */ + private $matches; + + /** + * @return string The HTML text that makes up the search box + */ + public static function search_box() + { + global $words, $subdir; + $search = (isset($_GET['search']) ? Url::html_output($_GET['search']) : ''); + $mode = (isset($_GET['search_mode']) ? self::clean_mode($_GET['search_mode']) : 'f'); + $modes = array('files' => 'f', 'folders' => 'd', 'both' => 'fd'); + $out = '
' + . '

' + . '

'; + return $out; + } + + /** + * @param string $filename + * @param string $string + * @return bool True if string matches filename + */ + private static function match(&$filename, &$string) + { + if (preg_match_all('/(?<=")[^"]+(?=")|[^ "]+/', $string, $matches)) + { + foreach ($matches[0] as $w) + { + if (stripos($filename, $w) !== false) + { + return true; + } + } + } + return false; + } + + /** + * Merges $obj into $this. + * + * @param Search $obj + */ + private function merge(Search $obj) + { + $this -> total_folders += $obj -> __get('total_folders'); + $this -> total_files += $obj -> __get('total_files'); + $this -> total_downloads += $obj -> __get('total_downloads'); + $this -> total_size -> add_size($obj -> __get('total_size')); + $this -> matches = array_merge($this -> matches, $obj -> __get('contents')); + } + + /** + * Returns a string with all characters except 'd' and 'f' stripped. + * Either 'd' 'f' 'df' will be returned, defaults to 'f' + * + * @param string $mode + * @return string + */ + private static function clean_mode($mode) + { + $str = ''; + if (stripos($mode, 'f') !== false) + { + $str .= 'f'; + } + if (stripos($mode, 'd') !== false) + { + $str .= 'd'; + } + else if ($str == '') + { + $str = 'f'; + } + return $str; + } + + /** + * @param string $query String to search for + * @param string $dir The folder to search (recursive) + * @param string $mode Should be f (files), d (directories), or fd (both) + */ + public function __construct($query, $dir, $mode) + { + if (strlen($query) < 2 || strlen($query) > 20) + { + throw new ExceptionDisplay('Search query is either too long or too short.'); + } + $mode = self::clean_mode($mode); + $dir = Item::make_sure_slash($dir); + DirectoryList::__construct($dir); + $this -> matches = array(); + $this -> total_size = new Size(0); + $this -> total_downloads = $this -> total_folders = $this -> total_files = 0; + foreach ($this as $item) + { + if ($item == '..') + { + continue; + } + if (@is_dir($dir . $item)) + { + if (stripos($mode, 'd') !== false && self::match($item, $query)) + { + $temp = new DirItem($dir, $item); + $this -> matches[] = $temp; + if ($temp -> __get('size') -> __get('bytes') !== false) + { + $this -> total_size -> add_size($temp -> __get('size')); + } + $this -> total_folders++; + } + $sub_search = new Search($query, $dir . $item, $mode); + $this -> merge($sub_search); + } + else if (stripos($mode, 'f') !== false && self::match($item, $query)) + { + $temp = new FileItem($dir, $item); + $this -> matches[] = $temp; + $this -> total_size -> add_size($temp -> __get('size')); + $this -> total_downloads += $temp -> __get('downloads'); + $this -> total_files++; + } + } + global $words, $config, $subdir; + $link = ' ' + . Url::html_output($dir) . ' '; + $this -> path_nav = $words -> __get('search results for') + . $link . $words -> __get('and its subdirectories'); + $this -> contents = $this -> matches; + unset($this -> matches); + } +} + +?> \ No newline at end of file diff --git a/classes/Size.php b/classes/Size.php new file mode 100644 index 0000000..4b7c21a --- /dev/null +++ b/classes/Size.php @@ -0,0 +1,112 @@ + + * @version 1.0.1 (July 15, 2004) + * @package AutoIndex + */ +class Size +{ + /** + * @var int Size in bytes + */ + private $bytes; + + /** + * @return string Returns $bytes formatted as a string + */ + public function formatted() + { + $size = $this -> bytes; + if ($size === true) + //used for the parent directory + { + return ' '; + } + if ($size === false) + //used for regular directories (if SHOW_DIR_SIZE is false) + { + return '[dir]'; + } + static $u = array(' B', 'KB', 'MB', 'GB'); + for ($i = 0; $size >= 1024 && $i < 4; $i++) + { + $size /= 1024; + } + return number_format($size, 1) . ' ' . $u[$i]; + } + + /** + * Adds the size of $s into $this + * + * @param Size $s + */ + public function add_size(Size $s) + { + $temp = $s -> __get('bytes'); + if (is_int($temp)) + { + $this -> bytes += $temp; + } + } + + /** + * True if parent directory, + * False if directory, + * Integer for an actual size. + * + * @param mixed $bytes + */ + public function __construct($bytes) + { + $this -> bytes = ((is_bool($bytes)) ? $bytes : max((int)$bytes, 0)); + } + + /** + * @param string $var The key to look for + * @return string The value $name points to + */ + public function __get($var) + { + if (isset($this -> $var)) + { + return $this -> $var; + } + throw new ExceptionDisplay('Variable ' . Url::html_output($var) + . ' not set in Size class.'); + } +} + +?> \ No newline at end of file diff --git a/classes/Stats.php b/classes/Stats.php new file mode 100644 index 0000000..f535aac --- /dev/null +++ b/classes/Stats.php @@ -0,0 +1,498 @@ + + * @version 1.0.1 (July 12, 2004) + * @package AutoIndex + */ +class Stats +{ + /** + * @var array Stores number of downloads per file extension + */ + private $extensions; + + /** + * @var array Hits per day + */ + private $dates; + + /** + * @var array Unique hits per day + */ + private $unique_hits; + + /** + * @var array Keys are the country codes and values are the number of visits + */ + private $countries; + + /** + * @var int Total views of the base_dir + */ + private $total_hits; + + /** + * @var int The number of days that there is a log entry for + */ + private $num_days; + + /** + * @var int Average hits per day ($total_hits / $num_days) + */ + private $avg; + + /** + * Returns $num formatted with a color (green for positive numbers, red + * for negative numbers, and black for 0). + * + * @param int $num + * @return string + */ + private static function get_change_color($num) + { + if ($num > 0) + { + return '+'; + } + if ($num < 0) + { + return ''; + } + return ''; + } + + /** + * If $array[$num] is set, it will be incremented by 1, otherwise it will + * be set to 1. + * + * @param int $num + * @param array $array + */ + private static function add_num_to_array($num, &$array) + { + isset($array[$num]) ? $array[$num]++ : $array[$num] = 1; + } + + /** + * Reads the log file, and sets the member variables after doing + * calculations. + */ + public function __construct() + { + $extensions = $dates = $unique_hits = $countries = array(); + $total_hits = 0; + global $config; + $log_file = $config -> __get('log_file'); + $base_dir = $config -> __get('base_dir'); + $h = @fopen($log_file, 'rb'); + if ($h === false) + { + throw new ExceptionDisplay("Cannot open log file: $log_file"); + } + while (!feof($h)) + { + $entries = explode("\t", rtrim(fgets($h, 1024), "\r\n")); + if (count($entries) === 7) + { + //find the number of unique visits + if ($entries[5] == $base_dir) + { + $total_hits++; + if (!in_array($entries[3], $unique_hits)) + { + $unique_hits[] = Url::html_output($entries[3]); + } + + //find country codes by hostnames + $cc = FileItem::ext($entries[3]); + if (preg_match('/^[a-z]+$/i', $cc)) + { + self::add_num_to_array($cc, $countries); + } + + //find the dates of the visits + self::add_num_to_array($entries[0], $dates); + } + + //find file extensions + $ext = FileItem::ext($entries[6]); + if (preg_match('/^[\w-]+$/', $ext)) + { + self::add_num_to_array($ext, $extensions); + } + } + } + fclose($h); + $this -> num_days = count($dates); + $this -> avg = round($total_hits / $this -> num_days); + $this -> extensions = $extensions; + $this -> dates = $dates; + $this -> unique_hits = $unique_hits; + $this -> countries = $countries; + $this -> total_hits = $total_hits; + } + + /** + * Uses the display class to output results. + */ + public function display() + { + static $country_codes = array( + 'af' => 'Afghanistan', + 'al' => 'Albania', + 'dz' => 'Algeria', + 'as' => 'American Samoa', + 'ad' => 'Andorra', + 'ao' => 'Angola', + 'ai' => 'Anguilla', + 'aq' => 'Antarctica', + 'ag' => 'Antigua and Barbuda', + 'ar' => 'Argentina', + 'am' => 'Armenia', + 'aw' => 'Aruba', + 'au' => 'Australia', + 'at' => 'Austria', + 'ax' => 'Ålang Islands', + 'az' => 'Azerbaidjan', + 'bs' => 'Bahamas', + 'bh' => 'Bahrain', + 'bd' => 'Banglades', + 'bb' => 'Barbados', + 'by' => 'Belarus', + 'be' => 'Belgium', + 'bz' => 'Belize', + 'bj' => 'Benin', + 'bm' => 'Bermuda', + 'bo' => 'Bolivia', + 'ba' => 'Bosnia-Herzegovina', + 'bw' => 'Botswana', + 'bv' => 'Bouvet Island', + 'br' => 'Brazil', + 'io' => 'British Indian O. Terr.', + 'bn' => 'Brunei Darussalam', + 'bg' => 'Bulgaria', + 'bf' => 'Burkina Faso', + 'bi' => 'Burundi', + 'bt' => 'Buthan', + 'kh' => 'Cambodia', + 'cm' => 'Cameroon', + 'ca' => 'Canada', + 'cv' => 'Cape Verde', + 'ky' => 'Cayman Islands', + 'cf' => 'Central African Rep.', + 'td' => 'Chad', + 'cl' => 'Chile', + 'cn' => 'China', + 'cx' => 'Christmas Island', + 'cc' => 'Cocos (Keeling) Isl.', + 'co' => 'Colombia', + 'km' => 'Comoros', + 'cg' => 'Congo', + 'ck' => 'Cook Islands', + 'cr' => 'Costa Rica', + 'hr' => 'Croatia', + 'cu' => 'Cuba', + 'cy' => 'Cyprus', + 'cz' => 'Czech Republic', + 'cs' => 'Czechoslovakia', + 'dk' => 'Denmark', + 'dj' => 'Djibouti', + 'dm' => 'Dominica', + 'do' => 'Dominican Republic', + 'tp' => 'East Timor', + 'ec' => 'Ecuador', + 'eg' => 'Egypt', + 'sv' => 'El Salvador', + 'gq' => 'Equatorial Guinea', + 'ee' => 'Estonia', + 'et' => 'Ethiopia', + 'fk' => 'Falkland Isl. (UK)', + 'fo' => 'Faroe Islands', + 'fj' => 'Fiji', + 'fi' => 'Finland', + 'fr' => 'France', + 'fx' => 'France (European Terr.)', + 'tf' => 'French Southern Terr.', + 'ga' => 'Gabon', + 'gm' => 'Gambia', + 'ge' => 'Georgia', + 'de' => 'Germany', + 'gh' => 'Ghana', + 'gi' => 'Gibraltar', + 'gb' => 'Great Britain (UK)', + 'gr' => 'Greece', + 'gl' => 'Greenland', + 'gd' => 'Grenada', + 'gp' => 'Guadeloupe (Fr)', + 'gu' => 'Guam (US)', + 'gt' => 'Guatemala', + 'gn' => 'Guinea', + 'gw' => 'Guinea Bissau', + 'gy' => 'Guyana', + 'gf' => 'Guyana (Fr)', + 'ht' => 'Haiti', + 'hm' => 'Heard & McDonald Isl.', + 'hn' => 'Honduras', + 'hk' => 'Hong Kong', + 'hu' => 'Hungary', + 'is' => 'Iceland', + 'in' => 'India', + 'id' => 'Indonesia', + 'ir' => 'Iran', + 'iq' => 'Iraq', + 'ie' => 'Ireland', + 'il' => 'Israel', + 'it' => 'Italy', + 'ci' => 'Ivory Coast', + 'jm' => 'Jamaica', + 'jp' => 'Japan', + 'jo' => 'Jordan', + 'kz' => 'Kazachstan', + 'ke' => 'Kenya', + 'kg' => 'Kirgistan', + 'ki' => 'Kiribati', + 'kp' => 'North Korea', + 'kr' => 'South Korea', + 'kw' => 'Kuwait', + 'la' => 'Laos', + 'lv' => 'Latvia', + 'lb' => 'Lebanon', + 'ls' => 'Lesotho', + 'lr' => 'Liberia', + 'ly' => 'Libya', + 'li' => 'Liechtenstein', + 'lt' => 'Lithuania', + 'lu' => 'Luxembourg', + 'mo' => 'Macau', + 'mg' => 'Madagascar', + 'mw' => 'Malawi', + 'my' => 'Malaysia', + 'mv' => 'Maldives', + 'ml' => 'Mali', + 'mt' => 'Malta', + 'mh' => 'Marshall Islands', + 'mk' => 'Macedonia', + 'mq' => 'Martinique (Fr.)', + 'mr' => 'Mauritania', + 'mu' => 'Mauritius', + 'mx' => 'Mexico', + 'fm' => 'Micronesia', + 'md' => 'Moldavia', + 'mc' => 'Monaco', + 'mn' => 'Mongolia', + 'ms' => 'Montserrat', + 'ma' => 'Morocco', + 'mz' => 'Mozambique', + 'mm' => 'Myanmar', + 'na' => 'Namibia', + 'nr' => 'Nauru', + 'np' => 'Nepal', + 'an' => 'Netherland Antilles', + 'nl' => 'Netherlands', + 'nt' => 'Neutral Zone', + 'nc' => 'New Caledonia (Fr.)', + 'nz' => 'New Zealand', + 'ni' => 'Nicaragua', + 'ne' => 'Niger', + 'ng' => 'Nigeria', + 'nu' => 'Niue', + 'nf' => 'Norfolk Island', + 'mp' => 'Northern Mariana Isl.', + 'no' => 'Norway', + 'om' => 'Oman', + 'pk' => 'Pakistan', + 'pw' => 'Palau', + 'pa' => 'Panama', + 'pg' => 'Papua New Guinea', + 'py' => 'Paraguay', + 'pe' => 'Peru', + 'ph' => 'Philippines', + 'pn' => 'Pitcairn', + 'pl' => 'Poland', + 'pf' => 'Polynesia (Fr.)', + 'pt' => 'Portugal', + 'pr' => 'Puerto Rico (US)', + 'qa' => 'Qatar', + 're' => 'Réunion (Fr.)', + 'ro' => 'Romania', + 'ru' => 'Russian Federation', + 'rw' => 'Rwanda', + 'lc' => 'Saint Lucia', + 'ws' => 'Samoa', + 'sm' => 'San Marino', + 'sa' => 'Saudi Arabia', + 'sn' => 'Senegal', + 'sc' => 'Seychelles', + 'sl' => 'Sierra Leone', + 'sg' => 'Singapore', + 'sk' => 'Slovak Republic', + 'si' => 'Slovenia', + 'sb' => 'Solomon Islands', + 'so' => 'Somalia', + 'za' => 'South Africa', + 'su' => 'Soviet Union', + 'es' => 'Spain', + 'lk' => 'Sri Lanka', + 'sh' => 'St. Helena', + 'pm' => 'St. Pierre & Miquelon', + 'st' => 'St. Tome and Principe', + 'kn' => 'St. Kitts Nevis Anguilla', + 'vc' => 'St. Vincent & Grenadines', + 'sd' => 'Sudan', + 'sr' => 'Suriname', + 'sj' => 'Svalbard & Jan Mayen Isl.', + 'sz' => 'Swaziland', + 'se' => 'Sweden', + 'ch' => 'Switzerland', + 'sy' => 'Syria', + 'tj' => 'Tadjikistan', + 'tw' => 'Taiwan', + 'tz' => 'Tanzania', + 'th' => 'Thailand', + 'tg' => 'Togo', + 'tk' => 'Tokelau', + 'to' => 'Tonga', + 'tt' => 'Trinidad & Tobago', + 'tn' => 'Tunisia', + 'tr' => 'Turkey', + 'tm' => 'Turkmenistan', + 'tc' => 'Turks & Caicos Islands', + 'tv' => 'Tuvalu', + 'ug' => 'Uganda', + 'ua' => 'Ukraine', + 'ae' => 'United Arab Emirates', + 'uk' => 'United Kingdom', + 'us' => 'United States', + 'uy' => 'Uruguay', + 'um' => 'US Minor outlying Isl.', + 'uz' => 'Uzbekistan', + 'vu' => 'Vanuatu', + 'va' => 'Vatican City State', + 've' => 'Venezuela', + 'vn' => 'Vietnam', + 'vg' => 'Virgin Islands (British)', + 'vi' => 'Virgin Islands (US)', + 'wf' => 'Wallis & Futuna Islands', + 'wlk' => 'Wales', + 'eh' => 'Western Sahara', + 'ye' => 'Yemen', + 'yu' => 'Yugoslavia', + 'zr' => 'Zaire', + 'zm' => 'Zambia', + 'zw' => 'Zimbabwe', + 'mil' => 'United States Military', + 'gov' => 'United States Government', + 'com' => 'Commercial', + 'net' => 'Network', + 'org' => 'Non-Profit Organization', + 'edu' => 'Educational', + 'int' => 'International', + 'aero' => 'Air Transport Industry', + 'biz' => 'Businesses', + 'coop' => 'Non-profit cooperatives', + 'arpa' => 'Arpanet', + 'info' => 'Info', + 'name' => 'Name', + 'nato' => 'Nato', + 'museum' => 'Museum', + 'pro' => 'Pro' + ); + + $str = ' + ' + . " + +
 TotalDaily
Hits{$this -> total_hits}{$this -> avg}" + . '
Unique Hits' . count($this -> unique_hits) + . '' + . round(count($this -> unique_hits) / $this -> num_days) + . '

Percent Unique: ' + . number_format(count($this -> unique_hits) / $this -> total_hits * 100, 1) . '

'; + + arsort($this -> extensions); + arsort($this -> countries); + + $date_nums = array_values($this -> dates); + $str .= ' + + '; + $i = 0; + foreach ($this -> dates as $day => $num) + { + $diff = $num - $this -> avg; + $change = (($i > 0) ? ($num - $date_nums[$i-1]) : 0); + $change_color = self::get_change_color($change); + $diff_color = self::get_change_color($diff); + $class = (($i++ % 2) ? 'dark_row' : 'light_row'); + $str .= " + + + "; + } + + $str .= '
DateHits That DayChange From Previous DayDifference From Average (' . $this -> avg + . ')
$day$num$change_color$change$diff_color$diff

+ + '; + $i = 0; + foreach ($this -> extensions as $ext => $num) + { + $class = (($i++ % 2) ? 'dark_row' : 'light_row'); + $str .= " + "; + } + + $str .= '
Downloads based on file extensionsTotalDaily
$ext$num" + . number_format($num / $this -> num_days, 1) . "

+ + '; + $i = 0; + foreach ($this -> countries as $c => $num) + { + $c_code = (isset($country_codes[strtolower($c)]) ? ' (' + . $country_codes[strtolower($c)] . ')' : ''); + $class = (($i++ % 2) ? 'dark_row' : 'light_row'); + $str .= "\n"; + } + $str .= '
Hostname ISP extensionTotalDaily
$c{$c_code}$num" + . number_format($num / $this -> num_days, 1) . "

Continue.

'; + echo new Display($str); + die(); + } +} + +?> \ No newline at end of file diff --git a/classes/Tar.php b/classes/Tar.php new file mode 100644 index 0000000..3f41bcc --- /dev/null +++ b/classes/Tar.php @@ -0,0 +1,128 @@ + + * @version 1.0.1 (July 03, 2004) + * @package AutoIndex + */ +class Tar +{ + /** + * @var int Length of directory path to cut off from start + */ + private $base_dir_length; + + /** + * @var string Added in the filepath inside the tar archive + */ + private $prepend_path; + + /** + * @param string $data + * @return int The checksum of $data + */ + private static function checksum(&$data) + { + $unsigned_chksum = 0; + for ($i = 0; $i < 512; $i++) + { + $unsigned_chksum += ord($data{$i}); + } + for ($i = 148; $i < 156; $i++) + { + $unsigned_chksum -= ord($data{$i}); + } + return $unsigned_chksum + 256; + } + + /** + * @param string $name The file or folder name + * @param int $size The size of the file (0 for directories) + * @param bool $is_dir True if folder, false if file + */ + private function create_header($name, $size = 0, $is_dir = true) + { + $header = str_pad($this -> prepend_path . substr($name, $this -> base_dir_length), 100, "\0") //filename + . str_pad('755', 7, '0', STR_PAD_LEFT) . "\0" //permissions + . '0000000' . "\0" //uid + . '0000000' . "\0" //gid + . str_pad(decoct($size), 11, '0', STR_PAD_LEFT) . "\0" //size + . str_pad(decoct(filemtime($name)), 11, '0', STR_PAD_LEFT) . "\0" //time + . ' ' //checksum (8 spaces) + . ($is_dir ? '5' : '0') //typeflag + . str_repeat("\0", 100) //linkname + . 'ustar ' //magic + /* + * version (1) + username (32) + groupname (32) + devmajor (8) + + * devminor (8) + prefix (155) + end (12) = 248 + */ + . str_repeat("\0", 248); + + $checksum = str_pad(decoct(self::checksum($header)), 6, '0', STR_PAD_LEFT) . "\0 "; + return substr_replace($header, $checksum, 148, strlen($checksum)); + } + + /** + * @param DirectoryList $filenames List of files to add to the archive + * @param string $prepend_path Added in the filepath inside the tar archive + * @param int $base_dir_length Length of directory path to cut off from start + */ + public function __construct(DirectoryList $filenames, $prepend_path = '', $base_dir_length = 0) + { + $this -> base_dir_length = (int)$base_dir_length; + $this -> prepend_path = Item::make_sure_slash($prepend_path); + foreach ($filenames as $base) + { + $name = $filenames -> __get('dir_name') . $base; + if (@is_dir($name)) + { + if ($base != '.' && $base != '..') + { + echo $this -> create_header($name); + $list = new DirectoryList($name); + new Tar($list, $this -> prepend_path, $this -> base_dir_length); + } + } + else if (@is_file($name) && @is_readable($name) && ($size = @filesize($name))) + { + echo $this -> create_header($name, $size, false); + Url::force_download($name, false); + echo str_repeat("\0", (ceil($size / 512) * 512) - $size); + } + } + } +} + +?> \ No newline at end of file diff --git a/classes/Template.php b/classes/Template.php new file mode 100644 index 0000000..56f69e4 --- /dev/null +++ b/classes/Template.php @@ -0,0 +1,146 @@ + + * @version 1.0.3 (February 02, 2005) + * @package AutoIndex + */ +class Template +{ + /** + * @var string The final output + */ + protected $out; + + /** + * @param array $m The array given by preg_replace_callback() + * @return string Looks up $m[1] in word list and returns match + */ + private static function callback_words($m) + { + global $words; + return $words -> __get(strtolower($m[1])); + } + + /** + * @param array $m The array given by preg_replace_callback() + * @return string The parsed template of filename $m[1] + */ + private static function callback_include($m) + { + $temp = new Template($m[1]); + return $temp -> __toString(); + } + + /** + * @param array $m The array given by preg_replace_callback() + * @return string The setting for the config value $m[1] + */ + private static function callback_config($m) + { + global $config; + return $config -> __get(strtolower($m[1])); + } + + /** + * Parses the text in $filename and sets the result to $out. We cannot + * use ExceptionDisplay here if there is an error, since it uses the + * template system. + * + * Steps to parse the template: + * - remove comments + * - replace {info} variables + * - replace {words} strings + * - replace {config} variables + * - include other files when we see the {include} statement + * + * @param string $filename The name of the file to parse + */ + public function __construct($filename) + { + global $config, $dir, $subdir; + $full_filename = $config -> __get('template') . $filename; + if (!@is_file($full_filename)) + { + throw new ExceptionFatal('Template file ' + . Url::html_output($full_filename) . ' cannot be found.'); + } + + //read raw file contents + $contents = @file_get_contents($full_filename); + if ($contents === false) + { + throw new ExceptionFatal('Template file ' + . Url::html_output($full_filename) . ' could not be opened for reading.'); + } + + //remove comments + $contents = preg_replace('#/\*.*?\*/#s', '', $contents); + + //replace info variables and word strings from language file + $tr = array( + '{info:dir}' => (isset($dir) ? Url::html_output($dir) : ''), + '{info:subdir}' => (isset($subdir) ? Url::html_output($subdir) : ''), + '{info:version}' => VERSION, + '{info:page_time}' => round((microtime(true) - START_TIME) * 1000, 1)); + $contents = preg_replace_callback('/\{\s*words?\s*:\s*(.+)\s*\}/Ui', + array('self', 'callback_words'), strtr($contents, $tr)); + + //replace {config} variables + $contents = preg_replace_callback('/\{\s*config\s*:\s*(.+)\s*\}/Ui', + array('self', 'callback_config'), $contents); + + //parse includes + $this -> out = preg_replace_callback('/\{\s*include\s*:\s*(.+)\s*\}/Ui', + array('self', 'callback_include'), $contents); + } + + /** + * @return string The HTML text of the parsed template + */ + public function __toString() + { + return $this -> out; + } +} + +?> diff --git a/classes/TemplateFiles.php b/classes/TemplateFiles.php new file mode 100644 index 0000000..f93fb42 --- /dev/null +++ b/classes/TemplateFiles.php @@ -0,0 +1,244 @@ + + * @version 1.0.1 (July 09, 2004) + * @package AutoIndex + */ +class TemplateFiles extends TemplateInfo +{ + /** + * @var Item The file or folder we're currently processing + */ + private $temp_item; + + /** + * @var bool Is the current user an admin + */ + private $is_admin; + + /** + * @var bool Is the current user a moderator + */ + private $is_mod; + + /** + * @var int The number of the file we're currently processing + */ + private $i; + + /** + * @var int The total number of files to process + */ + private $length; + + /** + * @param array $m The array given by preg_replace_callback() + * @return string Property is gotten from temp_item + */ + private function callback_file($m) + { + global $words, $subdir; + switch (strtolower($m[1])) + { + case 'tr_class': + { + return (($this -> i % 2) ? 'dark_row' : 'light_row'); + } + case 'filename': + { + return Url::html_output($this -> temp_item -> __get('filename')); + } + case 'file_ext': + { + return $this -> temp_item -> file_ext(); + } + case 'size': + { + return $this -> temp_item -> __get('size') -> formatted(); + } + case 'bytes': + { + return $this -> temp_item -> __get('size') -> __get('bytes'); + } + case 'date': + case 'time': + case 'm_time': + { + return $this -> temp_item -> format_m_time(); + } + case 'a_time': + { + return $this -> temp_item -> format_a_time(); + } + case 'thumbnail': + { + return $this -> temp_item -> __get('thumb_link'); + } + case 'num_subfiles': + { + return (($this -> temp_item instanceof DirItem + && !$this -> temp_item -> __get('is_parent_dir')) ? $this -> temp_item -> num_subfiles() : ''); + } + case 'delete_link': + { + return (($this -> is_admin && !$this -> temp_item -> __get('is_parent_dir')) ? + ' [' . $words -> __get('delete') . ']' : ''); + } + case 'rename_link': + { + return (($this -> is_admin && !$this -> temp_item -> __get('is_parent_dir')) ? + ' [' . $words -> __get('rename') . ']' : ''); + } + case 'edit_description_link': + { + $slash = (($this -> temp_item instanceof DirItem) ? '/' : ''); + return (($this -> is_mod && DESCRIPTION_FILE && !$this -> temp_item -> __get('is_parent_dir')) ? + ' [' + . $words -> __get('edit description') . ']' : ''); + } + case 'ftp_upload_link': + { + if (!$this -> is_mod || !$this -> temp_item instanceof FileItem || !isset($_SESSION['ftp'])) + { + return ''; + } + return ' [' . $words->__get('upload to ftp') . ']'; + } + default: + { + return $this -> temp_item -> __get($m[1]); + } + } + } + + /** + * Either the HTML text is returned, or an empty string is returned, + * depending on if the if-statement passed. + * + * @param array $m The array given by preg_replace_callback() + * @return string The result to insert into the HTML + */ + private function callback_type($m) + { + switch (strtolower($m[1])) + { + case 'is_file': //file + { + return (($this -> temp_item instanceof FileItem) ? $m[2] : ''); + } + case 'is_dir': //folder or link to parent directory + { + return (($this -> temp_item instanceof DirItem) ? $m[2] : ''); + } + case 'is_real_dir': //folder + { + return (($this -> temp_item instanceof DirItem + && !$this -> temp_item -> __get('is_parent_dir')) ? $m[2] : ''); + } + case 'is_parent_dir': //link to parent directory + { + return (($this -> temp_item instanceof DirItem + && $this -> temp_item -> __get('is_parent_dir')) ? $m[2] : ''); + } + default: + { + throw new ExceptionDisplay('Invalid file:if statement in ' + . Url::html_output(EACH_FILE) . ''); + } + } + } + + /** + * Either the HTML text is returned or an empty string is returned, + * depending on if temp_item is the ith file parsed. + * + * @param array $m The array given by preg_replace_callback() + * @return string The result to insert into the HTML output + */ + private function callback_do_every($m) + { + $num = $this -> i + 1; + return (($num % (int)$m[1] === 0 && $this -> length !== $num) ? $m[2] : ''); + } + + + /** + * Parses info for each file in the directory. Order of elements to + * replace is: + * - file:if + * - do_every + * - file + * + * @param string $filename The name of the file to parse + * @param DirectoryListDetailed $list + */ + public function __construct($filename, DirectoryListDetailed $list) + { + parent::__construct($filename, $list); + global $you; + $this -> is_admin = ($you -> level >= ADMIN); + $this -> is_mod = ($you -> level >= MODERATOR); + $final_file_line = ''; + $this -> length = (int)$list -> __get('list_count'); + foreach ($list as $i => $item) + { + $this -> i = (int)$i; + $this -> temp_item = $item; + $temp_line = preg_replace_callback('/\{\s*file\s*:\s*if\s*:\s*(\w+)\s*\}(.*)\{\s*end\s*if\s*\}/Uis', + array($this, 'callback_type'), $this -> out); + $temp_line = preg_replace_callback('/\{\s*do_every\s*:\s*(\d+)\s*\}(.*)\{\s*end\s*do_every\s*\}/Uis', + array($this, 'callback_do_every'), $temp_line); + $final_file_line .= preg_replace_callback('/\{\s*file\s*:\s*(\w+)\s*\}/Ui', + array($this, 'callback_file'), $temp_line); + } + $this -> out = $final_file_line; + } +} + +?> \ No newline at end of file diff --git a/classes/TemplateIndexer.php b/classes/TemplateIndexer.php new file mode 100644 index 0000000..1990f76 --- /dev/null +++ b/classes/TemplateIndexer.php @@ -0,0 +1,146 @@ + + * @version 1.0.3 (February 02, 2005) + * @package AutoIndex + */ +class TemplateIndexer +{ + /** + * @var string The final output + */ + protected $out; + + /** + * @param array $m The array given by preg_replace_callback() + * @return string Looks up $m[1] in word list and returns match + */ + private static function callback_words($m) + { + global $words; + return $words -> __get(strtolower($m[1])); + } + + /** + * @param array $m The array given by preg_replace_callback() + * @return string The parsed template of filename $m[1] + */ + private static function callback_include($m) + { + $temp = new TemplateIndexer($m[1]); + return $temp -> __toString(); + } + + /** + * @param array $m The array given by preg_replace_callback() + * @return string The setting for the config value $m[1] + */ + private static function callback_config($m) + { + global $config; + return $config -> __get(strtolower($m[1])); + } + + /** + * Parses the text in $filename and sets the result to $out. We cannot + * use ExceptionDisplay here if there is an error, since it uses the + * template system. + * + * Steps to parse the template: + * - remove comments + * - replace {info} variables + * - replace {words} strings + * - replace {config} variables + * - include other files when we see the {include} statement + * + * @param string $filename The name of the file to parse + */ + public function __construct($filename) + { + global $config, $dir, $subdir; + $full_filename = $config -> __get('template') . $filename; + if (!@is_file($full_filename)) + { + throw new ExceptionFatal('Template file ' + . Url::html_output($full_filename) . ' cannot be found.'); + } + + //read raw file contents + $contents = @file_get_contents($full_filename); + if ($contents === false) + { + throw new ExceptionFatal('Template file ' + . Url::html_output($full_filename) . ' could not be opened for reading.'); + } + + //remove comments + $contents = preg_replace('#/\*.*?\*/#s', '', $contents); + + //replace info variables and word strings from language file + $tr = array( + '{info:dir}' => (isset($dir) ? Url::html_output($dir) : ''), + '{info:subdir}' => (isset($subdir) ? Url::html_output($subdir) : ''), + '{info:version}' => VERSION, + '{info:page_time}' => round((microtime(true) - START_TIME) * 1000, 1)); + $contents = preg_replace_callback('/\{\s*words?\s*:\s*(.+)\s*\}/Ui', + array('self', 'callback_words'), strtr($contents, $tr)); + + //replace {config} variables + $contents = preg_replace_callback('/\{\s*config\s*:\s*(.+)\s*\}/Ui', + array('self', 'callback_config'), $contents); + + //parse includes + $this -> out = preg_replace_callback('/\{\s*include\s*:\s*(.+)\s*\}/Ui', + array('self', 'callback_include'), $contents); + } + + /** + * @return string The HTML text of the parsed template + */ + public function __toString() + { + return $this -> out; + } +} + +?> diff --git a/classes/TemplateInfo.php b/classes/TemplateInfo.php new file mode 100644 index 0000000..747bfca --- /dev/null +++ b/classes/TemplateInfo.php @@ -0,0 +1,205 @@ + + * @version 1.1.0 (January 01, 2006) + * @package AutoIndex + */ +class TemplateInfo extends TemplateIndexer +{ + /** + * @var DirectoryListDetailed + */ + private $dir_list; + + /** + * @param array $m The array given by preg_replace_callback() + * @return string Link to change the sort mode + */ + private static function callback_sort($m) + { + global $subdir; + $m = Url::html_output(strtolower($m[1])); + $temp = Url::html_output($_SERVER['PHP_SELF']) . '?dir=' . $subdir + . '&sort=' . $m . '&sort_mode=' + . (($_SESSION['sort'] == $m && $_SESSION['sort_mode'] == 'a') ? 'd' : 'a'); + + if (isset($_GET['search'], $_GET['search_mode']) + && $_GET['search'] != '' && $_GET['search_mode'] != '') + { + $temp .= '&search=' . Url::html_output($_GET['search']) + . '&search_mode=' . Url::html_output($_GET['search_mode']); + } + return $temp; + } + + /** + * @param array $m The array given by preg_replace_callback() + * @return string Property is gotten from dir_list + */ + private function callback_info($m) + { + switch (strtolower($m[1])) + { + case 'archive_link': + { + global $config; + return Url::html_output($_SERVER['PHP_SELF']) . '?archive=true&dir=' + . substr($this -> dir_list -> __get('dir_name'), strlen($config -> __get('base_dir'))); + } + case 'total_size': + { + return $this -> dir_list -> __get('total_size') -> formatted(); + } + case 'search_box': + { + return Search::search_box(); + } + case 'login_box': + { + global $you; + return $you -> login_box(); + } + case 'current_page_number': + { + if (!ENTRIES_PER_PAGE) + { + return 1; + } + global $page; + return $page; + } + case 'last_page_number': + { + if (!ENTRIES_PER_PAGE) + { + return 1; + } + global $max_page; + return $max_page; + } + case 'previous_page_link': + { + if (!ENTRIES_PER_PAGE) + { + return ''; + } + global $config, $page; + if ($page <= 1) + { + return '<<'; + } + return '<<'; + } + case 'next_page_link': + { + if (!ENTRIES_PER_PAGE) + { + return ''; + } + global $config, $page, $max_page; + if ($page >= $max_page) + { + return '>>'; + } + return '>>'; + } + default: + { + return $this -> dir_list -> __get($m[1]); + } + } + } + + /** + * Either the HTML text is returned, or an empty string is returned, + * depending on if the if-statement passed. + * + * @param array $m The array given by preg_replace_callback() + * @return string The result to insert into the HTML + */ + private static function callback_if($m) + { + $var = strtoupper($m[1]); + if (!defined($var)) + { + throw new ExceptionDisplay('$' . Url::html_output($m[1]) + . ' is not a valid variable (check if-statement in template file).'); + } + return (constant($var) ? $m[2] : ''); + } + + /** + * @param string $filename The name of the file to parse + * @param DirectoryListDetailed $dir_list + */ + public function __construct($filename, DirectoryListDetailed $dir_list) + { + parent::__construct($filename); + $this -> dir_list = $dir_list; + + //parse if-statements + $last_text = ''; + $regex = '/\{\s*if\s*:\s*(\w+)\s*\}(.*)\{\s*end\s*if\s*:\s*\1\s*\}/Uis'; //match {if:foo} ... {end if:foo} + while ($last_text != ($this -> out = preg_replace_callback($regex, array('self', 'callback_if'), $this -> out))) + { + $last_text = $this -> out; + } + $this -> out = $last_text; + + //parse sort modes + $this -> out = preg_replace_callback('/\{\s*sort\s*:\s*(\w+)\s*\}/Ui', + array('self', 'callback_sort'), $this -> out); + + //replace {info} variables + $this -> out = preg_replace_callback('/\{\s*info\s*:\s*(\w+)\s*\}/Ui', + array($this, 'callback_info'), $this -> out); + } +} + +?> \ No newline at end of file diff --git a/classes/Upload.php b/classes/Upload.php new file mode 100644 index 0000000..f95b3a0 --- /dev/null +++ b/classes/Upload.php @@ -0,0 +1,153 @@ + + * @version 1.0.1 (June 30, 2004) + * @package AutoIndex + */ +class Upload +{ + /** + * Uploads all files in the $_FILES array, then echos the results. + */ + public function do_upload() + { + $uploaded_files = $errors = ''; + global $words, $log, $dir; + foreach ($_FILES as $file_upload) + { + $filename = Item::get_basename($file_upload['name']); + if ($filename == '') + { + continue; + } + if (DirectoryList::is_hidden($filename)) + { + $errors .= "
  • $filename [" + . $words -> __get('filename is listed as a hidden file') + . ']
  • '; + continue; + } + $filename = Url::clean_input($filename); + $fullpathname = realpath($dir) . '/' . $filename; + if (@file_exists($fullpathname)) + { + $errors .= "
  • $filename [" + . $words -> __get('file already exists') . ']
  • '; + } + else if (@move_uploaded_file($file_upload['tmp_name'], $fullpathname)) + { + @chmod($fullpathname, 0644); + $uploaded_files .= "
  • $filename
  • "; + $log -> add_entry("Uploaded file: $filename"); + } + else + { + $errors .= "
  • $filename
  • "; + } + } + if ($errors == '') + { + $errors = '
    [' . $words -> __get('none') . ']'; + } + if ($uploaded_files == '') + { + $uploaded_files = '
    [' . $words -> __get('none') . ']'; + } + $str = '
    ' + . '' . $words -> __get('uploaded files') + . ": $uploaded_files

    " + . $words -> __get('failed files') . ": $errors" + . '

    ' . $words -> __get('continue') . '.

    '; + echo new Display($str); + die(); + } + + /** + * @param User $current_user Makes sure the user has permission to upload files + */ + public function __construct(User $current_user) + { + if ($current_user -> level < LEVEL_TO_UPLOAD) + { + throw new ExceptionDisplay('Your user account does not have permission to upload files.'); + } + } + + /** + * @return string The HTML that makes up the upload form + */ + public function __toString() + { + global $words, $subdir; + if (isset($_GET['num_uploads']) && (int)$_GET['num_uploads'] > 0) + { + $str = '

    '; + $num = min((int)$_GET['num_uploads'], 100); + for ($i = 0; $i < $num; $i++) + { + $str .= "\n\t" . $words -> __get('file') + . ' '. ($i + 1) . ' :
    '; + } + $str .= '

    '; + $str = '
    ' + . $str . '

    ' . $words -> __get('continue') . '.

    '; + echo new Display($str); + die(); + } + return '

    ' + . $words -> __get('upload') . ' ' + . $words -> __get('files to this folder') . '

    '; + } +} + +?> \ No newline at end of file diff --git a/classes/Url.php b/classes/Url.php new file mode 100644 index 0000000..925c16e --- /dev/null +++ b/classes/Url.php @@ -0,0 +1,232 @@ + + * @version 1.0.4 (November 9, 2007) + * @package AutoIndex + */ +class Url +{ + /** + * @var string + */ + private $url; + + /** + * Rawurlencodes $uri, but not slashes. + * + * @param string $uri + * @return string + */ + public static function translate_uri($uri) + { + $uri = rawurlencode(str_replace('\\', '/', $uri)); + return str_replace(rawurlencode('/'), '/', $uri); + } + + /** + * Returns the string with correct HTML entities so it can be displayed. + * + * @param string $str + * @return string + */ + public static function html_output($str) + { + return htmlentities($str, ENT_QUOTES, 'UTF-8'); + } + + /** + * Checks input for hidden files/folders, and deals with ".." + * + * @param string $d The URL to check + * @return string Safe version of $d + */ + private static function eval_dir($d) + { + $d = str_replace('\\', '/', $d); + if ($d == '' || $d == '/') + { + return ''; + } + $dirs = explode('/', $d); + for ($i = 0; $i < count($dirs); $i++) + { + if (DirectoryList::is_hidden($dirs[$i], false)) + { + array_splice($dirs, $i, 1); + $i--; + } + else if (preg_match('/^\.\./', $dirs[$i])) //if it starts with two dots + { + array_splice($dirs, $i-1, 2); + $i = -1; + } + } + $new_dir = implode('/', $dirs); + if ($new_dir == '' || $new_dir == '/') + { + return ''; + } + if ($d{0} == '/' && $new_dir{0} != '/') + { + $new_dir = '/' . $new_dir; + } + if (preg_match('#/$#', $d) && !preg_match('#/$#', $new_dir)) + { + $new_dir .= '/'; + } + else if (DirectoryList::is_hidden(Item::get_basename($new_dir))) + //it's a file, so make sure the file itself is not hidden + { + return DirItem::get_parent_dir($new_dir); + } + return $new_dir; + } + + /** + * @param string $url The URL path to check and clean + * @return string Resolves $url's special chars and runs eval_dir on it + */ + public static function clean_input($url) + { + $url = rawurldecode( $url ); + $newURL = ''; + for ( $i = 0; $i < strlen( $url ); $i++ ) //loop to remove all null chars + { + if ( ord($url[$i]) != 0 ) + { + $newURL .= $url[$i]; + } + } + return self::eval_dir( $newURL ); + } + + /** + * Sends the browser a header to redirect it to this URL. + */ + public function redirect() + { + $site = $this -> url; + header("Location: $site"); + die(simple_display('Redirection header could not be sent.
    ' + . "Continue here: $site")); + } + + /** + * @param string $file_dl + * @param bool $headers + */ + public static function force_download($file_dl, $headers = true) + { + if (!@is_file($file_dl)) + { + header('HTTP/1.0 404 Not Found'); + throw new ExceptionDisplay('The file ' + . self::html_output($file_dl) + . ' could not be found on this server.'); + } + if (!($fn = @fopen($file_dl, 'rb'))) + { + throw new ExceptionDisplay('

    Error 401: permission denied

    you cannot access ' + . Url::html_output($file_dl) . ' on this server.'); + } + if ($headers) + { + $outname = Item::get_basename($file_dl); + $size = @filesize($file_dl); + if ($size !== false) + { + header('Content-Length: ' . $size); + } + $mime = new MimeType($outname); + header('Content-Type: ' . $mime -> __toString() . '; name="' . $outname . '"'); + header('Content-Disposition: attachment; filename="' . $outname . '"'); + } + global $speed; + while (true) + { + $temp = @fread($fn, (int)($speed * 1024)); + if ($temp === '') + { + break; + } + echo $temp; + flush(); + if (BANDWIDTH_LIMIT) + { + sleep(1); + } + } + fclose($fn); + } + + /** + * Downloads the URL on the user's browser, using either the redirect() + * or force_download() functions. + */ + public function download() + { + if (FORCE_DOWNLOAD) + { + @set_time_limit(0); + self::force_download(self::clean_input($this -> url)); + die(); + } + $this -> redirect(); + } + + /** + * @param string $text_url The URL to create an object from + * @param bool $special_chars If true, translate_uri will be run on the url + */ + public function __construct($text_url, $special_chars = false) + { + if ($special_chars) + { + $text_url = self::translate_uri($text_url); + } + $this -> url = $text_url; + } + + /** + * @return string Returns the URL as a string + */ + public function __toString() + { + return $this -> url; + } +} + +?> \ No newline at end of file diff --git a/classes/User.php b/classes/User.php new file mode 100644 index 0000000..57afdc6 --- /dev/null +++ b/classes/User.php @@ -0,0 +1,152 @@ + + * @version 1.0.1 (July 21, 2004) + * @package AutoIndex + */ +class User +{ + /** + * @var string Username + */ + public $username; + + /** + * @var string The password, stored as a sha-1 hash of the actual password + */ + public $sha1_pass; + + /** + * @var int The user's level (use the GUEST USER ADMIN constants) + */ + public $level; + + /** + * @var string The user's home directory, or an empty string to use the default base_dir + */ + public $home_dir; + + /** + * @param User $user The user to compare to $this + * @return bool True if this user is equal to $user, based on username and password + */ + public function equals(User $user) + { + return ((strcasecmp($this -> username, $user -> username) === 0) + && (strcasecmp($this -> sha1_pass, $user -> sha1_pass) === 0)); + } + + /** + * Since this is not an instance of UserLoggedIn, we know he is not + * logged in. + */ + public function logout() + { + throw new ExceptionDisplay('You are not logged in.'); + } + + /** + * Here we display a login box rather than account options, since this is + * not an instance of UserLoggedIn. + * + * @return string The HTML text of the login box + */ + public function login_box() + { + $str = ''; + if (USE_LOGIN_SYSTEM) + { + global $words, $subdir; + $str .= '
    ' + . $words -> __get('username') . ':' + . '
    ' . $words -> __get('password') + . ':
    ' + . '

    '; + } + if (LEVEL_TO_UPLOAD === GUEST) + { + global $you; + $upload_panel = new Upload($you); + $str .= $upload_panel -> __toString(); + } + return $str; + } + + /** + * @param string $username Username + * @param string $sha1_pass Password as a sha-1 hash + * @param int $level User's level (use the GUEST, USER, MODERATOR, ADMIN constants) + * @param string $home_dir The home directory of the user, or blank for the default + */ + public function __construct($username = '', $sha1_pass = '', $level = GUEST, $home_dir = '') + { + $level = (int)$level; + if ($level < BANNED || $level > ADMIN) + { + throw new ExceptionDisplay('Error in user accounts file: + Invalid user level (for username "' + . Url::html_output($username) . '").'); + } + if ($sha1_pass != '' && strlen($sha1_pass) !== 40) + { + throw new ExceptionDisplay('Error in user accounts file: + Invalid password hash (for username "' + . Url::html_output($username) . '").'); + } + $this -> sha1_pass = $sha1_pass; + $this -> username = $username; + $this -> level = $level; + $this -> home_dir = $home_dir; + } + + /** + * @return string This string format is how it is stored in the user_list file + */ + public function __toString() + { + return $this -> username . "\t" . $this -> sha1_pass . "\t" + . $this -> level . "\t" . $this -> home_dir . "\n"; + } +} + +?> \ No newline at end of file diff --git a/classes/UserLoggedIn.php b/classes/UserLoggedIn.php new file mode 100644 index 0000000..aada290 --- /dev/null +++ b/classes/UserLoggedIn.php @@ -0,0 +1,114 @@ + + * @version 1.0.1 (July 02, 2004) + * @package AutoIndex + */ +class UserLoggedIn extends User +{ + /** + * Since the user is already logged in, the account options will be + * displayed rather than a login box. + * + * @return string The HTML text that makes up the account options box + */ + public function login_box() + { + global $words, $you, $subdir; + $txt = '

    ' . $words -> __get('logout') + . ' [ ' . Url::html_output($this -> username) . ' ]

    '; + if ($you -> level >= MODERATOR) + //show admin options if they are a moderator or higher + { + $admin_panel = new Admin($you); + $txt = $admin_panel -> __toString() . $txt; + } + if ($you -> level >= LEVEL_TO_UPLOAD) + //show upload options if they are a logged in user or higher + { + $upload_panel = new Upload($you); + $txt .= $upload_panel -> __toString(); + } + return $txt; + } + + /** + * Logs out the user by destroying the session data and refreshing the + * page. + */ + public function logout() + { + global $subdir; + $this -> level = GUEST; + $this -> sha1_pass = $this -> username = ''; + session_unset(); + session_destroy(); + $home = new Url(Url::html_output($_SERVER['PHP_SELF']), true); + $home -> redirect(); + } + + /** + * Validates username and password using the accounts stored in the + * user_list file. + * + * @param string $username The username to login + * @param string $sha1_pass The sha-1 hash of the password + */ + public function __construct($username, $sha1_pass) + { + parent::__construct($username, $sha1_pass); + $accounts = new Accounts(); + if (!($accounts -> is_valid_user($this))) + { + global $log; + $log -> add_entry("Invalid login (Username: $username)"); + session_unset(); + sleep(1); + throw new ExceptionDisplay('Invalid username or password.'); + } + $this -> level = $accounts -> get_level($username); + if ($this -> level <= BANNED) + { + throw new ExceptionDisplay('Your account has been disabled by the site admin.'); + } + $this -> username = $accounts -> get_stored_case($username); + $this -> home_dir = $accounts -> get_home_dir($username); + } +} + +?> \ No newline at end of file diff --git a/config.php b/config.php new file mode 100644 index 0000000..380115c --- /dev/null +++ b/config.php @@ -0,0 +1,549 @@ + + * @version 1.2.0 (January 01, 2006) + * + * @copyright Copyright (C) 2002-2006 Justin Hagstrom + * @license http://www.gnu.org/licenses/gpl.html GNU General Public License (GPL) + * + * @link http://autoindex.sourceforge.net + */ + +/* + AutoIndex PHP Script 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. + + AutoIndex PHP Script 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 +*/ + +if (!defined('IN_AUTOINDEX') || !IN_AUTOINDEX) +{ + die(); +} + +$strings = array('base_dir', 'icon_path', 'flag_path', 'language', 'template', 'log_file', + 'description_file', 'user_list', 'download_count', 'hidden_files', + 'banned_list'); +$checkboxes = array('show_dir_size', 'use_login_system', 'force_download', + 'search_enabled', 'anti_leech', 'must_login_to_download', 'archive', + 'parse_htaccess'); +$numbers = array('days_new', 'thumbnail_height', 'bandwidth_limit', 'md5_show', + 'entries_per_page'); + +if (count($_POST) >= count($strings) + count($numbers)) +{ + $directories = array('base_dir', 'icon_path', 'flag_path', 'template'); + $output = "' . htmlentities($setting) . ' not set.')); + } + if ($_POST[$setting] == '') + { + $output .= "$setting\tfalse\n"; + continue; + } + $_POST[$setting] = str_replace('\\', '/', $_POST[$setting]); + if (in_array($setting, $directories) && !preg_match('#/$#', $_POST[$setting])) + //make sure there is a slash at the end of directories + { + $_POST[$setting] .= '/'; + } + $output .= "$setting\t{$_POST[$setting]}\n"; + } + foreach ($checkboxes as $setting) + { + $output .= "$setting\t" . (isset($_POST[$setting]) ? 'true' : 'false') + . "\n"; + } + foreach ($numbers as $setting) + { + if (!isset($_POST[$setting])) + { + die(simple_display('Required setting ' + . htmlentities($setting) . ' not set.')); + } + if ($_POST[$setting] == '') + { + $output .= "$setting\t0\n"; + continue; + } + if ($_POST[$setting] < 0) + { + die(simple_display('The setting ' + . htmlentities($setting) . ' should not be a negitive number.')); + } + $_POST[$setting] = (string)((float)$_POST[$setting]); + $output .= "$setting\t{$_POST[$setting]}\n"; + } + $output .= "\n*/\n\n?>"; + + if (!isset($_POST['force_download'])) + { + if (preg_match('#^(/|[a-z]\:)#i', $_POST['base_dir'])) + { + die(simple_display('It seems you are using an absolute path for the Base Directory.' + . '
    This means you must check the "Pipe downloaded files though the PHP script" box.')); + } + if ((int)$_POST['bandwidth_limit'] !== 0) + { + die(simple_display('For the Bandwidth Limit feature to work, the "force download" feature needs to be on.' + . '
    This means you must check the "Pipe downloaded files though the PHP script" box.')); + } + } + if (isset($_POST['must_login_to_download']) && !isset($_POST['use_login_system'])) + { + die(simple_display('To enable must_login_to_download, the ' + . 'use_login_system option must also be turned on.')); + } + foreach (array('base_dir', 'template') as $valid) + { + if (!@is_dir($_POST[$valid])) + { + die(simple_display(htmlentities($valid) + . ' setting is not a valid directory.')); + } + } + + if (@is_file(CONFIG_STORED)) + //if the file already exists, back it up + { + $temp_name = CONFIG_STORED . '.bak'; + for ($i = 1; @file_exists($temp_name); $i++) + { + $temp_name = CONFIG_STORED . '.bak' . (string)$i; + } + @copy(CONFIG_STORED, $temp_name); + } + + $h = @fopen(CONFIG_STORED, 'wb'); + if ($h === false) + //the file could not be written to, so now it must be downloaded through the browser + { + header('Content-Type: text/plain; name="' . CONFIG_STORED . '"'); + header('Content-Disposition: attachment; filename="' . CONFIG_STORED . '"'); + die($output); + } + else + //the file was opened successfully, so write to it + { + fwrite($h, $output); + fclose($h); + + //begin display of "configuration complete" page + echo ''; + ?> + + + + + AutoIndex Configuration: Complete! + + + + +
    +

    Write successful!
    AutoIndex configuration is finished.

    +

    Continue.

    +
    + + './', + 'icon_path' => 'index_icons/winxp/', + 'flag_path' => 'flags/language/', + 'language' => 'en', + 'template' => './templates/default/', + 'log_file' => 'false', + 'description_file' => 'false', + 'user_list' => '.htpasswd.autoindex', + 'download_count' => 'false', + 'hidden_files' => 'hidden_files', + 'banned_list' => 'false', + 'show_dir_size' => 'true', + 'use_login_system' => 'false', + 'force_download' => 'false', + 'search_enabled' => 'true', + 'anti_leech' => 'false', + 'must_login_to_download' => 'false', + 'archive' => 'false', + 'days_new' => '0', + 'entries_per_page' => '0', + 'thumbnail_height' => '0', + 'bandwidth_limit' => '0', + 'md5_show' => '0', + 'parse_htaccess' => 'true' +); + +global $config; +if (isset($config)) +//if we're reconfiguring the script, use the current settings +{ + foreach ($settings as $key => $data) + { + $settings[$key] = $config -> __get($key); + } +} + +//begin display of main configuration page: +echo ''; +?> + + + + +AutoIndex Configuration Generator + + + +
    + +

    + AutoIndex PHP Script +
    Configuration +

    +

    + The default options are currently selected, so just press the configure button at the bottom to use them. +

    + +
    + +

    +
    +Base Directory: +

    + This is the folder that will be the root of the directory listing. +
    This will be the starting point for the script. Nothing above this directory can be viewed, but its subfolders can. +
    Make sure to use a path relative to this index.php file if you can. +

    +
    + +

    +
    +Icon Path: +

    + This is the path to the icon image files (the path web browsers will access them from). +
    The included icon sets are apache, kde, osx, and winxp. +
    You can leave it blank to not show icons. +

    +
    + +

    +
    +Flag Path: +

    + This is the path to the flag image files (the path web browsers will access them from). +
    The included icon sets are country, language. +
    You can leave it blank to not show icons. +

    +
    + +

    +
    + /> Show Directory Size +

    + If this box is checked, the total size of directories will be shown under size (all the folder's contents will be added up). +
    Otherwise, it will display "[dir]" under size. +
    NOTE: If you are trying to index many files (meaning a few thousand), you will notice a speed improvement with this turned off. +

    +
    + +

    +
    + /> Enable Searching +

    + If this box is checked, people will be able to search for a file or folder by its filename. +
    It will search the folder you are currently in, and all subfolders. +
    Searching is not case sensitive. +

    +
    + +

    +
    +Template Directory: +

    + This is the path where the *.tpl template files are located (relative to this index.php file). +

    +
    + +

    +
    + /> Enable Login System +
    /> Users must login to view/download +
    User List: +

    + User List contains the path to the text file where the usernames and encrypted passwords are stored. +
    Make sure the file is chmod'ed so PHP can read and write to it. +
    (User List is only needed if the login system is enabled.) +
    +
    The default accounts are: +
    username: admin +
    password: admin +
    +
    username: user +
    password: user +
    +
    Be sure to create new accounts, then delete these default ones if you enable the login system! +

    +
    + +

    +
    +Age for "New" Icon: days +

    + This contains the number of days old a file can be and still have [New] written next to it. +
    If it is set to 0, this feature will be disabled. +

    +
    + +

    +
    +Number of file entires per page: +

    + This contains the number of files or folders to display on a single page. + If there are more files or folders, the display will be separated into different + pages with Previous and Next buttons. +
    If it is set to 0, everything will be displayed on one page. +

    +
    + +

    +
    +Image Thumbnail Height: pixels +

    + This is a feature that will show thumbnails next to images. (NOTE: GDlib 2.0.1 or higher is required) +
    Setting it to 0 will disable this feature, and setting it to any other number will set the size of the thumbnail. +
    (100 is a good setting to start with.) +

    +
    + +

    +
    + /> Pipe downloaded files though the PHP script +

    Bandwidth Limit: KB/s

    +

    + This contains the max download speed for files. The above checkbox needs to be checked for this to work. +
    If it is set to 0, the script will not limit download speed. +

    +
    + +

    +
    +

    /> Anti-Leech

    +

    + When downloading a file, this will check to make sure the referrer the browser sends matches the website's URL. +
    Since some people turn off referrer sending in their browser, this option is not recommended. +

    +
    + +

    +
    + +

    + The following items contain the path and filename to the file where the data for that feature will be stored. +
    Leave it blank to turn off that feature. +

    + +

    Hidden Files List: +
    + Any file or folder matched to an item in this list will be kept hidden. +
    The contents of the list are editable when you login as an admin. +

    + +

    Access Log File: +
    + The file to write the access log. +
    If this is enabled, you will be able to view the contents of the logfile +
    and generate statistics when you login as an admin. +

    + +

    File/Folder Description File: +
    + The file to write the file descriptions to. +
    File/Folder descriptions are editable when you login as an admin. +

    + +

    Download Count File: +
    + The file to write the file download counts to. +
    The count is automatically increased when a file is downloaded. +

    + +

    Banned User List: +
    + The file to write IP addresses and hostnames that are blocked from accessing this script. +
    The contents of the list are editable when you login as an admin. +

    +
    + +

    +
    + /> Allow folder archive downloading +

    + If this box is checked, users will be able to download the folder's contents as a tar archive file. +

    +
    + +

    +
    + /> Parse .htaccess files +

    + If this box is checked, .htaccess files will be parsed and used by AutoIndex. +

    +
    + +

    +
    +

    MD5 calculation max size: MB

    +

    + Setting this to 0 will disable this feature, and setting it to any other number will set the maximum size of a file to allow users to find the md5sum of (in megabytes). +
    (10 is a good setting to start with.) +

    +
    + +

    +
    +Default Language: +

    + The user's browser's default language is used, unless that language is + not available in AutoIndex. In that case, the language selected here is + used. +

    +
    + +


    + +

    + +

    +

    + When you press Configure, the script will attempt to write the config data to the file. +
    If it cannot (for example if it does not have write permission in the directory) the config file will be downloaded, and you will have to upload it to your server. +
    (It should be named and put in the same folder as index.php) +

    + +
    + + + + \ No newline at end of file diff --git a/favicon.gif b/favicon.gif new file mode 100644 index 0000000..e75c684 Binary files /dev/null and b/favicon.gif differ diff --git a/flags/README.md b/flags/README.md new file mode 100644 index 0000000..45a0aa0 --- /dev/null +++ b/flags/README.md @@ -0,0 +1,2523 @@ +#FamFamFam Language Flag Icons + +These icons are public domain, and as such are free for any use (attribution appreciated but not required). + +#Country flags by Mark James. + +Note that these country flags are named using the ISO3166-1 alpha-2 codes where appropriate. A list of codes can be found at http://en.wikipedia.org/wiki/ISO_3166-1_alpha-2 + +To get started, checkout http://tkrotoff.github.com/famfamfam_flags/ + +#Language flags by Florin C Bodin + +Note that these language flags are named using the ISO639-1 codes where appropriate. A list of codes can be found at https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes + +If you find these flag icons for languages useful, please donate via paypal to orynider@rdslink.ro (or click the donate button available at http://paypal.me/orynider ) + +For country flag icons - http://www.famfamfam.com + + +To Do: +1. Move country flags to country\ folder. +2. Move language flags to language\ folder. +3. Adding a function in php to get country flags or language flags. + + /** + * function decode_lang from mx_traslator phpBB3 Extension + * + * $mx_user_lang = decode_country_name($lang['USER_LANG'], 'country'); + * + * @param unknown_type $file_dir + * @param unknown_type $lang_country = 'country' or 'language' + * @param array $langs_countries + * @return unknown + */ + function decode_country_name($file_dir, $lang_country = 'country', $langs_countries = false) + { + /* known languages */ + switch ($file_dir) + { + case 'aa': + $lang_name = 'AFAR'; + $country_name = 'AFAR'; //Ethiopia + break; + + case 'aae': + $lang_name = 'AFRICAN-AMERICAN_ENGLISH'; + $country_name = 'UNITED_STATES'; + break; + + case 'ab': + $lang_name = 'ABKHAZIAN'; + $country_name = 'ABKHAZIA'; + break; + + case 'ad': + $lang_name = 'ANGOLA'; + $country_name = 'ANGOLA'; + break; + + case 'ae': + $lang_name = 'AVESTAN'; + $country_name = 'UNITED_ARAB_EMIRATES'; //Persia + break; + + case 'af': + $country_name = 'AFGHANISTAN'; // langs: pashto and dari + $lang_name = 'AFRIKAANS'; // speakers: 6,855,082 - 13,4% + break; + + case 'ag': + $lang_name = 'ENGLISH-CREOLE'; + $country_name = 'ANTIGUA_&_BARBUDA'; + break; + + case 'ai': + $lang_name = 'Anguilla'; + $country_name = 'ANGUILLA'; + break; + + case 'aj': + $lang_name = 'AROMANIAN'; + $country_name = 'Aromaya'; + break; + + case 'ak': + $lang_name = 'AKAN'; + $country_name = ''; + break; + + case 'al': + $lang_name = 'ALBANIAN'; + $country_name = 'ALBANIA'; + break; + + + case 'am': + $lang_name = 'AMHARIC'; + //$lang_name = 'armenian'; + $country_name = 'ARMENIA'; + break; + + case 'an': + $lang_name = 'ARAGONESE'; // + //$country_name = 'Andorra'; + $country_name = 'NETHERLAND_ANTILLES'; + break; + + case 'ao': + $lang_name = 'ANGOLIAN'; + $country_name = 'ANGOLA'; + break; + + case 'ap': + $lang_name = 'ANGIKA'; + $country_name = 'ANGA'; //India + break; + + case 'ar': + $lang_name = 'ARABIC'; + $country_name = 'ARGENTINA'; + break; + + case 'arq': + $lang_name = 'ALGERIAN_ARABIC'; //known as Darja or Dziria in Algeria + $country_name = 'ALGERIA'; + break; + + case 'ary': + $lang_name = 'MOROCCAN_ARABIC'; //known as Moroccan Arabic or Moroccan Darija or Algerian Saharan Arabic + $country_name = 'MOROCCO'; + break; + + //jrb – Judeo-Arabic + //yhd – Judeo-Iraqi Arabic + //aju – Judeo-Moroccan Arabic + //yud – Judeo-Tripolitanian Arabic + //ajt – Judeo-Tunisian Arabic + //jye – Judeo-Yemeni Arabic + case 'jrb': + $lang_name = 'JUDEO-ARABIC'; + $country_name = 'JUDEA'; + break; + + case 'kab': + $lang_name = 'KABYLE'; //known as Kabyle (Tamazight) + $country_name = 'ALGERIA'; + break; + + case 'aq': + $lang_name = ''; + $country_name = 'ANTARCTICA'; + break; + + case 'as': + $lang_name = 'ASSAMESE'; + $country_name = 'AMERICAN_SAMOA'; + break; + + case 'at': + $lang_name = 'GERMAN'; + $country_name = 'AUSTRIA'; + break; + + case 'av': + $lang_name = 'AVARIC'; + $country_name = ''; + break; + + case 'av-da': + case 'av_da': + case 'av_DA': + $lang_name = 'AVARIAN_KHANATE'; + $country_name = 'Daghestanian'; + break; + + case 'ay': + $lang_name = 'AYMARA'; + $country_name = ''; + break; + + case 'aw': + $lang_name = 'ARUBA'; + $country_name = 'ARUBA'; + break; + + case 'au': + $lang_name = 'en-au'; // + $country_name = 'AUSTRALIA'; + break; + + case 'az': + $lang_name = 'AZERBAIJANI'; + $country_name = 'AZERBAIJAN'; + break; + + case 'ax': + $lang_name = 'FINNISH'; + $country_name = 'ÅLAND_ISLANDS'; //The Åland Islands or Åland (Swedish: Åland, IPA: [ˈoːland]; Finnish: Ahvenanmaa) is an archipelago province at the entrance to the Gulf of Bothnia in the Baltic Sea belonging to Finland. + break; + + case 'ba': + $lang_name = 'BASHKIR'; //Baskortostán (Rusia) + $country_name = 'BOSNIA_&_HERZEGOVINA'; //Bosnian, Croatian, Serbian + break; + + //Bavarian (also known as Bavarian Austrian or Austro-Bavarian; Boarisch [ˈbɔɑrɪʃ] or Bairisch; + //German: Bairisch [ˈbaɪʁɪʃ] (About this soundlisten); Hungarian: bajor. + case 'bar': + $lang_name = 'BAVARIAN'; + $country_name = 'BAVARIA'; //Germany + break; + + case 'bb': + $lang_name = 'Barbados'; + $country_name = 'BARBADOS'; + break; + + case 'bd': + $lang_name = 'Bangladesh'; + $country_name = 'BANGLADESH'; + break; + + case 'be': + $lang_name = 'BELARUSIAN'; + $country_name = 'BELGIUM'; + break; + + case 'bf': + $lang_name = 'Burkina Faso'; + $country_name = 'BURKINA_FASO'; + break; + + case 'bg': + $lang_name = 'BULGARIAN'; + $country_name = 'BULGARIA'; + break; + + case 'bh': + $lang_name = 'BHOJPURI'; // Bihar (India) + $country_name = 'BAHRAIN'; // Mamlakat al-Ba?rayn (arabic) + break; + + case 'bi': + $lang_name = 'BISLAMA'; + $country_name = 'BURUNDI'; + break; + + + case 'bj': + $lang_name = 'BENIN'; + $country_name = 'BENIN'; + break; + + case 'bl': + $lang_name = 'BONAIRE'; + $country_name = 'BONAIRE'; + break; + + case 'bm': + $lang_name = 'BAMBARA'; + $country_name = 'Bermuda'; + break; + + case 'bn': + $country_name = 'BRUNEI'; + $lang_name = 'BENGALI'; + + break; + + case 'bo': + $lang_name = 'TIBETAN'; + $country_name = 'BOLIVIA'; + break; + + case 'br': + $lang_name = 'BRETON'; + $country_name = 'BRAZIL'; //pt + break; + + case 'bs': + $lang_name = 'BOSNIAN'; + $country_name = 'BAHAMAS'; + break; + + case 'bt': + $lang_name = 'Bhutan'; + $country_name = 'Bhutan'; + break; + + case 'bw': + $lang_name = 'Botswana'; + $country_name = 'BOTSWANA'; + break; + + case 'bz': + $lang_name = 'BELIZE'; + $country_name = 'BELIZE'; + break; + + case 'by': + $lang_name = 'BELARUSIAN'; + $country_name = 'Belarus'; + break; + + case 'en-CM': + case 'en_cm': + $lang_name = 'CAMEROONIAN_PIDGIN_ENGLISH'; + $country_name = 'Cameroon'; + break; + + case 'wes': + $lang_name = 'CAMEROONIAN'; //Kamtok + $country_name = 'CAMEROON'; //Wes Cos + break; + + case 'cm': + $lang_name = 'CAMEROON'; + $country_name = 'CAMEROON'; + break; + + case 'ca': + $lang_name = 'CATALAN'; + $country_name = 'CANADA'; + break; + + case 'cc': + $lang_name = 'COA_A_COCOS'; //COA A Cocos dialect of Betawi Malay [ente (you) and ane (me)] and AU-English + $country_name = 'COCOS_ISLANDS'; //CC Cocos (Keeling) Islands + break; + + case 'cd': + $lang_name = 'Congo Democratic Republic'; + $country_name = 'CONGO_DEMOCRATIC_REPUBLIC'; + break; + + //нохчийн мотт + case 'ce': + $lang_name = 'CHECHEN'; + $country_name = 'Chechenya'; + break; + + case 'cf': + $lang_name = 'Central African Republic'; + $country_name = 'CENTRAL_AFRICAN_REPUBLIC'; + break; + + case 'cg': + $lang_name = 'CONGO'; + $country_name = 'CONGO'; + break; + + case 'ch': + $lang_name = 'CHAMORRO'; //Finu' Chamoru + $country_name = 'SWITZERLAND'; + break; + + case 'ci': + $lang_name = 'Cote D-Ivoire'; + $country_name = 'COTE_D-IVOIRE'; + break; + + case 'ck': + $lang_name = ''; + $country_name = 'COOK_ISLANDS'; //CK Cook Islands + break; + + case 'cl': + $lang_name = 'Chile'; + $country_name = 'CHILE'; + break; + + case 'cn': + //Chinese Macrolanguage + case 'zh': //639-1: zh + case 'chi': //639-2/B: chi + case 'zho': //639-2/T and 639-3: zho + $lang_name = 'CHINESE'; + $country_name = 'CHINA'; + break; + //Chinese Individual Languages + // 中文 + // Fujian Province, Republic of China + case 'cn-fj': + // 閩東話 + case 'cdo': //Chinese Min Dong + $lang_name = 'CHINESE_DONG'; + $country_name = 'CHINA'; + break; + //1. Bingzhou spoken in central Shanxi (the ancient Bing Province), including Taiyuan. + //2. Lüliang spoken in western Shanxi (including Lüliang) and northern Shaanxi. + //3. Shangdang spoken in the area of Changzhi (ancient Shangdang) in southeastern Shanxi. + //4. Wutai spoken in parts of northern Shanxi (including Wutai County) and central Inner Mongolia. + //5. Da–Bao spoken in parts of northern Shanxi and central Inner Mongolia, including Baotou. + //6. Zhang-Hu spoken in Zhangjiakou in northwestern Hebei and parts of central Inner Mongolia, including Hohhot. + //7. Han-Xin spoken in southeastern Shanxi, southern Hebei (including Handan) and northern Henan (including Xinxiang). + //8. Zhi-Yan spoken in Zhidan County and Yanchuan County in northern Shaanxi. + // 晋语 / 晉語 + case 'cjy': //Chinese Jinyu 晉 + $lang_name = 'CHINA_JINYU'; + $country_name = 'CHINA'; + break; + // Cantonese is spoken in Hong Kong + // 官話 + case 'cmn': //Chinese Mandarin 普通话 (Pǔ tōng huà) literally translates into “common tongue.” + $lang_name = 'CHINESE_MANDARIN'; + $country_name = 'CHINA'; + break; + // Mandarin is spoken in Mainland China and Taiwan + // 閩語 / 闽语 + //semantic shift has occurred in Min or the rest of Chinese: + //*tiaŋB 鼎 "wok". The Min form preserves the original meaning "cooking pot". + //*dzhənA "rice field". scholars identify the Min word with chéng 塍 (MC zying) "raised path between fields", but Norman argues that it is cognate with céng 層 (MC dzong) "additional layer or floor". + //*tšhioC 厝 "house". the Min word is cognate with shù 戍 (MC syuH) "to guard". + //*tshyiC 喙 "mouth". In Min this form has displaced the common Chinese term kǒu 口. It is believed to be cognate with huì 喙 (MC xjwojH) "beak, bill, snout; to pant". + //Austroasiatic origin for some Min words: + //*-dəŋA "shaman" compared with Vietnamese đồng (/ɗoŋ2/) "to shamanize, to communicate with spirits" and Mon doŋ "to dance (as if) under demonic possession". + //*kiɑnB 囝 "son" appears to be related to Vietnamese con (/kɔn/) and Mon kon "child". + + // Southern Min: + // Datian Min; + // Hokkien 話; Hokkien-Taiwanese 閩台泉漳語 - Philippine Hokkien 咱儂話. + // Teochew; + // Zhenan Min; + // Zhongshan Min, etc. + + //Pu-Xian Min (Hinghwa); Putian dialect: Xianyou dialect. + + //Northern Min: Jian'ou dialect; Jianyang dialect; Chong'an dialect; Songxi dialect; Zhenghe dialect; + + //Shao-Jiang Min: Shaowu dialect, Jiangle dialect, Guangze dialect, Shunchang dialect; + //http://www.shanxigov.cn/ + //Central Min: Sanming dialect; Shaxian dialect; Yong'an dialect, + + //Leizhou Min : Leizhou Min. + + //Abbreviation + //Simplified Chinese: 闽 + //Traditional Chinese: 閩 + //Literal meaning: Min [River] + + //莆仙片 + case 'cpx': //Chinese Pu-Xian Min, Sing-iú-uā / 仙游話, (Xianyou dialect) http://www.putian.gov.cn/ + $lang_name = 'CHINESE_PU-XIAN'; + $country_name = 'CHINA'; + break; + // 徽語 + case 'czh': //Chinese HuiZhou 惠州 http://www.huizhou.gov.cn/ | Song dynasty + $lang_name = 'CHINESE_HUIZHOU'; + $country_name = 'CHINA'; + break; + // 閩中片 + case 'czo': //Chinese Min Zhong 閩中語 | 闽中语 http://zx.cq.gov.cn/ | Zhong-Xian | Zhong 忠县 + $lang_name = 'CHINESE_ZHONG'; + $country_name = 'CHINA'; + break; + // 東干話 SanMing: http://www.sm.gov.cn/ | Sha River (沙溪) + case 'dng': //Ding Chinese + $lang_name = 'DING_CHINESE'; + $country_name = 'CHINA'; + break; + // 贛語 + case 'gan': //Gan Chinese + $lang_name = 'GAN_CHINESE'; + $country_name = 'CHINA'; + break; + // 客家話 + case 'hak': //Chinese Hakka + $lang_name = 'CHINESE_HAKKA'; + $country_name = 'CHINA'; + break; + + case 'hsn': //Xiang Chinese 湘語/湘语 + $lang_name = 'XIANG_CHINESE'; + $country_name = 'CHINA'; + break; + // 文言 + case 'lzh': //Literary Chinese + $lang_name = 'LITERARY_CHINESE'; + $country_name = 'CHINA'; + break; + // 閩北片 + case 'mnp': //Min Bei Chinese + $lang_name = 'MIN_BEI_CHINESE'; + $country_name = 'CHINA'; + break; + // 閩南語 + case 'nan': //Min Nan Chinese + $lang_name = 'MIN_NAN_CHINESE'; + $country_name = 'CHINA'; + break; + // 吴语 + case 'wuu': //Wu Chinese + $lang_name = 'WU_CHINESE'; + $country_name = 'CHINA'; + break; + // 粵語 + case 'yue': //Yue or Cartonese Chinese + $lang_name = 'YUE_CHINESE'; + $country_name = 'CHINA'; + break; + + case 'co': + $lang_name = 'CORSICAN'; // Corsica + $country_name = 'COLUMBIA'; + break; + //Eeyou Istchee ᐄᔨᔨᐤ ᐊᔅᒌ + case 'cr': + $lang_name = 'CREE'; + $country_name = 'COSTA_RICA'; + break; + + case 'cs': + $lang_name = 'CZECH'; + $country_name = 'CZECH_REPUBLIC'; + break; + + case 'cu': + $lang_name = 'SLAVONIC'; + $country_name = 'CUBA'; //langs: + break; + + case 'cv': + $country_name = 'CAPE_VERDE'; + $lang_name = 'CHUVASH'; + break; + + case 'cx': + $lang_name = ''; // Malaysian Chinese origin and European Australians + $country_name = 'CHRISTMAS_ISLAND'; + break; + + case 'cy': + $lang_name = 'CYPRUS'; + $country_name = 'CYPRUS'; + break; + + case 'cz': + $lang_name = 'CZECH'; + $country_name = 'CZECH_REPUBLIC'; + break; + + case 'cw': + $lang_name = 'PAPIAMENTU'; // Papiamentu (Portuguese-based Creole), Dutch, English + $country_name = 'CURAÇÃO'; // Ilha da Curação (Island of Healing) + break; + + case 'da': + $lang_name = 'DANISH'; + $country_name = 'DENMARK'; + break; + + //Geman (Deutsch) + /* deu – German + gmh – Middle High German + goh – Old High German + gct – Colonia Tovar German + bar – Bavarian + cim – Cimbrian + geh – Hutterite German + ksh – Kölsch + nds – Low German + sli – Lower Silesian + ltz – Luxembourgish + vmf – Mainfränkisch + mhn – Mòcheno + pfl – Palatinate German + pdc – Pennsylvania German + pdt – Plautdietsch + swg – Swabian German + gsw – Swiss German + uln – Unserdeutsch + sxu – Upper Saxon + wae – Walser German + wep – Westphalian + hrx – Riograndenser Hunsrückisch + yec – Yenish */ + + + //Germany 84,900,000 75,101,421 (91.8%) 5,600,000 (6.9%) De facto sole nationwide official language + case 'de': + case 'de-DE': + case 'de_de': + case 'deu': + $lang_name = 'GERMAN'; + $country_name = 'GERMANY'; + break; + //Belgium 11,420,163 73,000 (0.6%) 2,472,746 (22%) De jure official language in the German speaking community + case 'de_be': + case 'de-BE': + $lang_name = 'BELGIUM_GERMAN'; + $country_name = 'BELGIUM'; + break; + //Austria 8,838,171 8,040,960 (93%) 516,000 (6%) De jure sole nationwide official language + case 'de_at': + case 'de-AT': + $lang_name = 'AUSTRIAN_GERMAN'; + $country_name = 'AUSTRIA'; + break; + // Switzerland 8,508,904 5,329,393 (64.6%) 395,000 (5%) Co-official language at federal level; de jure sole official language in 17, co-official in 4 cantons (out of 26) + case 'de_sw': + case 'de-SW': + $lang_name = 'SWISS_GERMAN'; + $country_name = 'SWITZERLAND'; + break; + + //Luxembourg 602,000 11,000 (2%) 380,000 (67.5%) De jure nationwide co-official language + case 'de_lu': + case 'de-LU': + case 'ltz': + $lang_name = 'LUXEMBOURG_GERMAN'; + $country_name = 'LUXEMBOURG'; + break; + //Liechtenstein 37,370 32,075 (85.8%) 5,200 (13.9%) De jure sole nationwide official language + //Alemannic, or rarely Alemmanish + case 'de_li': + case 'de-LI': + $lang_name = 'LIECHTENSTEIN_GERMAN'; + $country_name = 'LIECHTENSTEIN'; + break; + case 'gsw': + $lang_name = 'Alemannic_German'; + $country_name = 'SWITZERLAND'; + break; + //mostly spoken on Lifou Island, Loyalty Islands, New Caledonia. + case 'dhv': + $lang_name = 'DREHU'; + $country_name = 'NEW_CALEDONIA'; + break; + + case 'dk': + $lang_name = 'DANISH'; + $country_name = 'DENMARK'; + break; + + //acf – Saint Lucian / Dominican Creole French + case 'acf': + $lang_name = 'DOMINICAN_CREOLE_FRENCH'; //ROSEAU + $country_name = 'DOMINICA'; + break; + + case 'en_dm': + case 'en-DM': + $lang_name = 'DOMINICA_ENGLISH'; + $country_name = 'DOMINICA'; + break; + + case 'do': + case 'en_do': + case 'en-DO': + $lang_name = 'SPANISH'; //Santo Domingo + $country_name = 'DOMINICAN_REPUBLIC'; + break; + + case 'dj': + case 'aa-DJ': + case 'aa_dj': + $lang_name = 'DJIBOUTI'; //Yibuti, Afar + $country_name = 'REPUBLIC_OF_DJIBOUTI'; //République de Djibouti + break; + + case 'dv': + $lang_name = 'DIVEHI'; //Maldivian + $country_name = 'MALDIVIA'; + break; + + //Berbera Taghelmustă (limba oamenilor albaștri), zisă și Tuaregă, este vorbită în Sahara occidentală. + //Berbera Tamazigtă este vorbită în masivul Atlas din Maroc, la sud de orașul Meknes. + //Berbera Zenatică zisă și Rifană, este vorbită în masivul Rif din Maroc, în nord-estul țării. + //Berbera Șenuană zisă și Telică, este vorbită în masivul Tell din Algeria, în nordul țării. + //Berbera Cabilică este vorbită în jurul masivelor Mitigea și Ores din Algeria, în nordul țării. + //Berbera Șauiană este vorbită în jurul orașului Batna din Algeria. + //Berbera Tahelhită, zisă și Șlănuană (în limba franceză Chleuh) este vorbită în jurul masivului Tubkal din Maroc, în sud-vestul țării. + //Berbera Tamașekă, zisă și Sahariană, este vorbită în Sahara de nord, în Algeria, Libia și Egipt. + //Berber: Tacawit (@ city Batna from Chaoui, Algery), Shawiya (Shauian) + case 'shy': + $lang_name = 'SHAWIYA_BERBER'; + $country_name = 'ALGERIA'; + break; + + case 'dz': + $lang_name = 'DZONGKHA'; + $country_name = 'ALGERIA'; //http://www.el-mouradia.dz/ + break; + + case 'ec': + $country_name = 'ECUADOR'; + $lang_name = 'ECUADOR'; + break; + + case 'eg': + $country_name = 'EGYPT'; + $lang_name = 'EGYPT'; + break; + + case 'eh': + $lang_name = 'WESTERN_SAHARA'; + $country_name = 'WESTERN_SAHARA'; + break; + + case 'ee': + //Kɔsiɖagbe (Sunday) + //Dzoɖagbe (Monday) + //Braɖagbe, Blaɖagbe (Tuesday) + //Kuɖagbe (Wednesday) + //Yawoɖagbe (Thursday) + //Fiɖagbe (Friday) + //Memliɖagbe (Saturday) + $lang_name = 'EWE'; //Èʋegbe Native to Ghana, Togo + $country_name = 'ESTONIA'; + break; + + //Greek Language: + //ell – Modern Greek + //grc – Ancient Greek + //cpg – Cappadocian Greek + //gmy – Mycenaean Greek + //pnt – Pontic + //tsd – Tsakonian + //yej – Yevanic + + case 'el': + $lang_name = 'GREEK'; + $country_name = 'GREECE'; + break; + + case 'cpg': + $lang_name = 'CAPPADOCIAN_GREEK'; + $country_name = 'GREECE'; + break; + case 'gmy': + $lang_name = 'MYCENAEAN_GREEK'; + $country_name = 'GREECE'; + break; + case 'pnt': + $lang_name = 'PONTIC'; + $country_name = 'GREECE'; + break; + case 'tsd': + $lang_name = 'TSAKONIAN'; + $country_name = 'GREECE'; + break; + //Albanian: Janina or Janinë, Aromanian: Ianina, Enina, Turkish: Yanya; + case 'yej': + $lang_name = 'YEVANIC'; + $country_name = 'GREECE'; + break; + + case 'en_uk': + case 'en-UK': + case 'uk': + $lang_name = 'BRITISH_ENGLISH'; //used in United Kingdom + $country_name = 'GREAT_BRITAIN'; + break; + + case 'en_fj': + case 'en-FJ': + $lang_name = 'FIJIAN_ENGLISH'; + $country_name = 'FIJI'; + break; + + case 'GibE': + case 'en_gb': + case 'en-GB': + case 'gb': + $lang_name = 'GIBRALTARIAN _ENGLISH'; //used in Gibraltar + $country_name = 'GIBRALTAR'; + break; + + case 'en_us': + case 'en-US': + $lang_name = 'AMERICAN_ENGLISH'; + $country_name = 'UNITED_STATES_OF_AMERICA'; + break; + + case 'en_ie': + case 'en-IE': + case 'USEng': + $lang_name = 'HIBERNO_ENGLISH'; //Irish English + $country_name = 'IRELAND'; + break; + + case 'en_il': + case 'en-IL': + case 'ILEng': + case 'heblish': + case 'engbrew': + $lang_name = 'ISRAELY_ENGLISH'; + $country_name = 'ISRAEL'; + break; + + case 'en_ca': + case 'en-CA': + case 'CanE': + $lang_name = 'CANADIAN_ENGLISH'; + $country_name = 'CANADA'; + break; + + case 'en_ck': + $lang_name = 'COOK_ISLANDS_ENGLISH'; + $country_name = 'COOK_ISLANDS'; //CK Cook Islands + break; + + case 'en_in': + case 'en-IN': + $lang_name = 'INDIAN_ENGLISH'; + $country_name = 'REPUBLIC_OF_INDIA'; + break; + + case 'en_ai': + case 'en-AI': + $lang_name = 'ANGUILLAN_ENGLISH'; + $country_name = 'ANGUILLA'; + break; + + case 'en_au': + case 'en-AU': + case 'AuE': + $lang_name = 'AUSTRALIAN_ENGLISH'; + $country_name = 'AUSTRALIA'; + break; + + case 'en_nz': + case 'en-NZ': + case 'NZE': + $lang_name = 'NEW_ZEALAND_ENGLISH'; + $country_name = 'NEW_ZEALAND'; + break; + + //New England English + case 'en_ne': + $lang_name = 'NEW_ENGLAND_ENGLISH'; + $country_name = 'NEW_ENGLAND'; + break; + + // + case 'en_bm': + $lang_name = 'BERMUDIAN ENGLISH.'; + $country_name = 'BERMUDA'; + break; + + case 'en_nu': + $lang_name = 'NIUEAN_ENGLISH'; //Niuean (official) 46% (a Polynesian language closely related to Tongan and Samoan) + $country_name = 'NIUE'; // Niuean: Niuē + break; + + case 'en_ms': + $lang_name = 'MONTSERRAT_ENGLISH'; + $country_name = 'MONTSERRAT'; + break; + + case 'en_pn': + $lang_name = 'PITCAIRN_ISLAND_ENGLISH'; + $country_name = 'PITCAIRN_ISLAND'; + break; + + case 'en_sh': + $lang_name = 'ST_HELENA_ENGLISH'; + $country_name = 'ST_HELENA'; + break; + + case 'en_tc': + $lang_name = 'TURKS_&_CAICOS_IS_ENGLISH'; + $country_name = 'TURKS_&_CAICOS_IS'; + break; + + case 'en_vg': + $lang_name = 'VIRGIN_ISLANDS_ENGLISH'; + $country_name = 'VIRGIN_ISLANDS_(BRIT)'; + break; + + case 'eo': + $lang_name = 'ESPERANTO'; //created in the late 19th century by L. L. Zamenhof, a Polish-Jewish ophthalmologist. In 1887 + $country_name = 'EUROPE'; + break; + + case 'er': + $lang_name = 'ERITREA'; + $country_name = 'ERITREA'; + break; + + //See: + // http://www.webapps-online.com/online-tools/languages-and-locales + // https://www.ibm.com/support/knowledgecenter/ko/SSS28S_3.0.0/com.ibm.help.forms.doc/locale_spec/i_xfdl_r_locale_quick_reference.html + case 'es': + //Spanish Main + $lang_name = 'SPANISH'; + $country_name = 'SPAIN'; + break; + case 'es_MX': + case 'es_mx': + //Spanish (Mexico) (es-MX) + $lang_name = 'SPANISH_MEXICO'; + $country_name = 'MEXICO'; + break; + case 'es_US': + case 'es_us': + $lang_name = 'SPANISH_UNITED_STATES'; + $country_name = 'UNITED_STATES'; + break; + case 'es-419': + //Spanish Latin America and the Caribbean + $lang_name = 'SPANISH_CARIBBEAN'; + $country_name = 'CARIBBE'; + break; + case 'es-ar': + // Spanish Argentina + $lang_name = 'SPANISH_ARGENTINIAN'; + $country_name = 'ARGENTINA'; + break; + case 'es-BO': + case 'es-bo': + $lang_name = 'SPANISH_BOLIVIAN'; + $country_name = 'BOLIVIA'; + break; + case 'es-BR': + case 'es-br': + $lang_name = 'SPANISH_BRAZILIAN'; + $country_name = 'BRAZIL'; + break; + case 'es-cl': + // Spanish Chile + $lang_name = 'SPANISH_CHILEAN'; + $country_name = 'CHILE'; + break; + case 'es-CO': + case 'es-co': + // Spanish (Colombia) (es-CO) + $lang_name = 'SPANISH_COLOMBIAN'; + $country_name = 'COLOMBIA'; + break; + case 'es-CR': + case 'es-cr': + $lang_name = 'SPANISH_COSTA_RICA'; + $country_name = 'COSTA_RICA'; + break; + case 'es-DO': + case 'es-do': + //Spanish (Dominican Republic) (es-DO) + $lang_name = 'SPANISH_DOMINICAN_REPUBLIC'; + $country_name = 'DOMINICAN_REPUBLIC'; + break; + case 'es-ec': + // Spanish (Ecuador) (es-EC) + $lang_name = 'SPANISH'; + $country_name = 'SPAIN'; + break; + case 'es-es': + // Spanish Spain + $lang_name = 'SPANISH'; + $country_name = 'SPAIN'; + break; + case 'es-ES_tradnl': + case 'es-es_tradnl': + $lang_name = 'SPANISH'; + $country_name = 'SPAIN'; + break; + case 'es-EU': + case 'es-eu': + $lang_name = 'SPANISH'; + $country_name = 'SPAIN'; + break; + case 'es-gt': + // Spanish (Guatemala) (es-GT) + $lang_name = 'SPANISH'; + $country_name = 'SPAIN'; + break; + case 'es-HN': + case 'es-hn': + //Spanish (Honduras) (es-HN) + $lang_name = 'SPANISH'; + $country_name = 'SPAIN'; + break; + case 'es-la': + // Spanish Lao + $lang_name = 'SPANISH'; + $country_name = 'SPAIN'; + break; + case 'es-mx': + // Spanish Mexico + $lang_name = 'SPANISH'; + $country_name = 'SPAIN'; + break; + case 'es-NI': + case 'es-ni': + // Spanish (Nicaragua) (es-NI) + $lang_name = 'SPANISH_NICARAGUAN'; + $country_name = 'NICARAGUA'; + break; + case 'es-PA': + case 'es-pa': + //Spanish (Panama) (es-PA) + $lang_name = 'SPANISH_PANAMIAN'; + $country_name = 'PANAMA'; + break; + case 'es-pe': + case 'es-PE': + //Spanish (Peru) (es-PE) + $lang_name = 'SPANISH_PERU'; + $country_name = 'PERU'; + break; + case 'es-PR': + //Spanish (Puerto Rico) (es-PR) + $lang_name = 'SPANISH_PUERTO_RICO'; + $country_name = 'PUERTO_RICO'; + break; + case 'es-PY': + case 'es-py': + //Spanish (Paraguay) (es-PY) + $lang_name = 'SPANISH_PARAGUAY'; + $country_name = 'PARAGUAY'; + break; + case 'es-SV': + case 'es-sv': + //Spanish (El Salvador) (es-SV) + $lang_name = 'SPANISH_EL_SALVADOR'; + $country_name = 'EL_SALVADOR'; + break; + case 'es-us': + // Spanish (United States) (es-US) + $lang_name = 'SPANISH_UNITED_STATES'; + $country_name = 'UNITED_STATES'; + break; + case 'es-UY': + case 'es-uy': + //Spanish (Uruguay) (es-UY) + $lang_name = 'SPANISH_URUGUAY'; + $country_name = 'URUGUAY'; + break; + case 'es-ve': + // Spanish (Venezuela) (es-VE) + $lang_name = 'SPANISH_VENEZUELA'; + $country_name = 'BOLIVARIAN_REPUBLIC_OF_VENEZUELA'; + break; + case 'es-xl': + // Spanish Latin America + $lang_name = 'SPANISH_LATIN_AMERICA'; + $country_name = 'LATIN_AMERICA'; + break; + + case 'et': + $lang_name = 'ESTONIAN'; + $country_name = 'ESTONIA'; + break; + + case 'eu': + $lang_name = 'BASQUE'; + $country_name = ''; + break; + + case 'fa': + $lang_name = 'PERSIAN'; + $country_name = ''; + break; + + //for Fulah (also spelled Fula) the ISO 639-1 code is ff. + //fub – Adamawa Fulfulde + //fui – Bagirmi Fulfulde + //fue – Borgu Fulfulde + //fuq – Central-Eastern Niger Fulfulde + //ffm – Maasina Fulfulde + //fuv – Nigerian Fulfulde + //fuc – Pulaar + //fuf – Pular + //fuh – Western Niger Fulfulde + + case 'fub': + $lang_name = 'ADAMAWA_FULFULDE'; + $country_name = ''; + break; + + case 'fui': + $lang_name = 'BAGIRMI_FULFULDE'; + $country_name = ''; + break; + + case 'fue': + $lang_name = 'BORGU_FULFULDE'; + $country_name = ''; + break; + + case 'fuq': + $lang_name = 'CENTRAL-EASTERN_NIGER_FULFULDE'; + $country_name = ''; + break; + + case 'ffm': + $lang_name = 'MAASINA_FULFULDE'; + $country_name = ''; + break; + + case 'fuv': + $lang_name = 'NIGERIAN_FULFULDE'; + $country_name = ''; + break; + + case 'fuc': + $lang_name = 'PULAAR'; + $country_name = 'SENEGAMBIA_CONFEDERATION'; //sn //gm + break; + + case 'fuf': + $lang_name = 'PULAR'; + $country_name = ''; + break; + + case 'fuh': + $lang_name = 'WESTERN_NIGER_FULFULDE'; + $country_name = ''; + break; + + case 'ff': + $lang_name = 'FULAH'; + $country_name = ''; + break; + + case 'fi': + case 'fin': + $lang_name = 'FINNISH'; + $country_name = 'FINLAND'; + break; + + case 'fkv': + $lang_name = 'KVEN'; + $country_name = 'NORWAY'; + break; + + case 'fit': + $lang_name = 'KVEN'; + $country_name = 'SWEDEN'; + break; + + case 'fj': + $lang_name = 'FIJIAN'; + $country_name = 'FIJI'; + break; + + case 'fk': + $lang_name = 'FALKLANDIAN'; + $country_name = 'FALKLAND_ISLANDS'; + break; + + case 'fm': + $lang_name = 'MICRONESIA'; + $country_name = 'MICRONESIA'; + break; + + case 'fo': + $lang_name = 'FAROESE'; + $country_name = 'FAROE_ISLANDS'; + break; + + //Metropolitan French (French: France Métropolitaine or la Métropole) + case 'fr': + case 'fr_me': + $lang_name = 'FRENCH'; + $country_name = 'FRANCE'; + break; + //Acadian French + case 'fr_ac': + $lang_name = 'ACADIAN_FRENCH'; + $country_name = 'ACADIA'; + break; + + case 'fr_dm': + case 'fr-DM': + $lang_name = 'DOMINICA_FRENCH'; + $country_name = 'DOMINICA'; + break; + + //al-dîzāyīr + case 'fr_dz': + $lang_name = 'ALGERIAN_FRENCH'; + $country_name = 'ALGERIA'; + break; + //Aostan French (French: français valdôtain) + //Seventy: septante[a] [sɛp.tɑ̃t] + //Eighty: huitante[b] [ɥi.tɑ̃t] + //Ninety: nonante[c] [nɔ.nɑ̃t] + case 'fr_ao': + $lang_name = 'AOSTAN_FRENCH'; + $country_name = 'ITALY'; + break; + //Belgian French + case 'fr_bl': + $lang_name = 'BELGIAN_FRENCH'; + $country_name = 'BELGIUM'; + break; + //Cambodian French - French Indochina + case 'fr_cb': + $lang_name = 'CAMBODIAN_FRENCH'; + $country_name = 'CAMBODIA'; + break; + //Cajun French - Le Français Cajun - New Orleans + case 'fr_cj': + $lang_name = 'CAJUN_FRENCH'; + $country_name = 'UNITED_STATES'; + break; + //Canadian French (French: Français Canadien) + //Official language in Canada, New Brunswick, Northwest Territories, Nunavut, Quebec, Yukon, + //Official language in United States, Maine (de facto), New Hampshire + case 'fr_ca': + case 'fr-CA': + $lang_name = 'CANADIAN_FRENCH'; + $country_name = 'CANADA'; + break; + //Guianese French + case 'gcr': + case 'fr_gu': + $lang_name = 'GUIANESE_FRENCH'; + $country_name = 'FRENCH_GUIANA'; + break; + //Guianese English + case 'gyn': + case 'en_gy': + $lang_name = 'GUYANESE_CREOLE'; + $country_name = 'ENGLISH_GUIANA'; + break; + //Haitian French + case 'fr-HT': + case 'fr_ht': + $lang_name = 'HAITIAN_FRENCH'; + $country_name = 'HAITI'; //UNITED_STATES + break; + //Haitian English + case 'en-HT': + case 'en_ht': + $lang_name = 'HAITIAN_CREOLE'; + $country_name = 'HAITI'; //UNITED_STATES + break; + //Indian French + case 'fr_id': + $lang_name = 'INDIAN_FRENCH'; + $country_name = 'INDIA'; + break; + case 'en_id': + $lang_name = 'INDIAN_ENGLISH'; + $country_name = 'INDIA'; + break; + //Jersey Legal French - Anglo-Norman French + case 'xno': + case 'fr_je': + $lang_name = 'JERSEY_LEGAL_FRENCH'; + $country_name = 'UNITED_STATES'; + break; + + case 'fr_kh': + $lang_name = 'CAMBODIAN_FRENCH'; + $country_name = 'CAMBODIA'; + break; + + //Lao French + case 'fr_la': + $lang_name = 'LAO_FRENCH'; + $country_name = 'LAOS'; + break; + //Louisiana French (French: Français de la Louisiane, Louisiana Creole: Françé la Lwizyàn) + case 'frc': + case 'fr_lu': + $lang_name = 'LOUISIANIAN_FRENCH'; + $country_name = 'LOUISIANA'; + break; + //Louisiana Creole + case 'lou': + $lang_name = 'LOUISIANA_CREOLE'; + $country_name = 'LOUISIANA'; + break; + //Meridional French (French: Français Méridional, also referred to as Francitan) + case 'fr_mr': + $lang_name = 'MERIDIONAL_FRENCH'; + $country_name = 'OCCITANIA'; + break; + //Missouri French + case 'fr_mi': + $lang_name = 'MISSOURI_FRENCH'; + $country_name = 'MISSOURI‎'; + break; + //New Caledonian French vs New Caledonian Pidgin French + case 'fr_nc': + $lang_name = 'NEW_CALEDONIAN_FRENCH'; + $country_name = 'NEW_CALEDONIA'; + break; + //Newfoundland French (French: Français Terre-Neuvien), + case 'fr_nf': + $lang_name = 'NEWFOUNDLAND_FRENCH'; + $country_name = 'CANADA'; + break; + //New England French + case 'fr_ne': + $lang_name = 'NEW_ENGLAND_FRENCH'; + $country_name = 'NEW_ENGLAND'; + break; + //Quebec French (French: français québécois; also known as Québécois French or simply Québécois) + case 'fr_qb': + $lang_name = 'QUEBEC_FRENCH'; + $country_name = 'CANADA'; + break; + //Swiss French + case 'fr_sw': + $lang_name = 'SWISS_FRENCH'; + $country_name = 'SWITZERLAND'; + break; + //French Southern and Antarctic Lands + case 'fr_tf': + case 'tf': + $lang_name = 'FRENCH_SOUTHERN_TERRITORIES'; // + $country_name = 'SOUTHERN_TERRITORIES'; //Terres australes françaises + break; + //Vietnamese French + case 'fr_vt': + $lang_name = 'VIETNAMESE_FRENCH'; + $country_name = 'VIETNAM'; + break; + //West Indian French + case 'fr_if': + $lang_name = 'WEST_INDIAN_FRENCH'; + $country_name = 'INDIA'; + break; + + case 'fr_wf': + $country_name = 'TERRITORY_OF_THE_WALLIS_AND_FUTUNA_ISLANDS'; + $lang_name = 'WALLISIAN_FRENCH'; + break; + + case 'fy': + $lang_name = 'WESTERN_FRISIAN'; + $country_name = 'FRYSK'; + break; + + case 'ga': + $lang_name = 'IRISH'; + $country_name = 'GABON'; + break; + + case 'GenAm': + $lang_name = 'General American'; + $country_name = 'UNITED_STATES'; + break; + + //gcf – Guadeloupean Creole + case 'gcf': + $lang_name = 'GUADELOUPEAN_CREOLE_FRENCH'; + $country_name = 'GUADELOUPE'; + break; + + case 'gd': + $lang_name = 'SCOTTISH'; + $country_name = 'GRENADA'; + break; + + case 'ge': + $lang_name = 'GEORGIAN'; + $country_name = 'GEORGIA'; + break; + + case 'gi': + $lang_name = 'LLANITO'; //Llanito or Yanito + $country_name = 'GIBRALTAR'; + break; + + case 'gg': + $lang_name = 'GUERNESIAIS'; //English, Guernésiais, Sercquiais, Auregnais + $country_name = 'GUERNSEY'; + break; + + case 'gh': + $lang_name = 'Ghana'; + $country_name = 'GHANA'; + break; + + case 'ell': + $lang_name = 'MODERN_GREEK'; + $country_name = 'GREECE'; + break; + + case 'gr': + case 'gre': + $lang_name = 'MODERN_GREEK'; + $country_name = 'GREECE'; + break; + + case 'grc': + $lang_name = 'ANCIENT_GREEK'; + $country_name = 'GREECE'; + break; + + //Galician is spoken by some 2.4 million people, mainly in Galicia, + //an autonomous community located in northwestern Spain. + case 'gl': + $lang_name = 'GALICIAN'; //Galicia + $country_name = 'GREENLAND'; + break; + + case 'gm': + $lang_name = 'Gambia'; + $country_name = 'GAMBIA'; + break; + + //grn is the ISO 639-3 language code for Guarani. Its ISO 639-1 code is gn. + // nhd – Chiripá + // gui – Eastern Bolivian Guaraní + // gun – Mbyá Guaraní + // gug – Paraguayan Guaraní + // gnw – Western Bolivian Guaraní + case 'gn': + $lang_name = 'GUARANI'; + $country_name = 'GUINEA'; + break; + //Nhandéva is also known as Chiripá. + //The Spanish spelling, Ñandeva, is used in the Paraguayan Chaco + // to refer to the local variety of Eastern Bolivian, a subdialect of Avá. + case 'nhd': + $lang_name = 'Chiripa'; + $country_name = 'PARAGUAY'; + break; + case 'gui': + $lang_name = 'EASTERN_BOLIVIAN_GUARANI'; + $country_name = 'BOLIVIA'; + break; + case 'gun': + $lang_name = 'MBYA_GUARANI'; + $country_name = 'PARAGUAY'; + break; + case 'gug': + $lang_name = 'PARAGUAYAN_GUARANI'; + $country_name = 'PARAGUAY'; + break; + case 'gnw': + $lang_name = 'WESTERN_BOLIVIAN_GUARANI'; + $country_name = 'BOLIVIA'; + break; + + case 'gs': + $lang_name = 'ENGLISH'; + $country_name = 'SOUTH_GEORGIA_AND_THE_SOUTH_SANDWICH_ISLANDS'; + break; + + case 'gt': + $lang_name = 'Guatemala'; + $country_name = 'GUATEMALA'; + break; + + case 'gq': + $lang_name = 'Equatorial Guinea'; + $country_name = 'EQUATORIAL_GUINEA'; + break; + + case 'gu': + $lang_name = 'GUJARATI'; + $country_name = 'GUAM'; + break; + + case 'gv': + $lang_name = 'manx'; + $country_name = ''; + break; + + case 'gw': + $lang_name = 'Guinea Bissau'; + $country_name = 'GUINEA_BISSAU'; + break; + + case 'gy': + $lang_name = 'Guyana'; + $country_name = 'GUYANA'; + break; + + case 'ha': + $country_name = ''; + $lang_name = 'HAUSA'; + break; + + //heb – Modern Hebrew + //hbo – Classical Hebrew (liturgical) + //smp – Samaritan Hebrew (liturgical) + //obm – Moabite (extinct) + //xdm – Edomite (extinct) + case 'he': + case 'heb': + $country_name = 'ISRAEL'; + $lang_name = 'HEBREW'; + break; + case 'hbo': + $country_name = 'ISRAEL'; + $lang_name = 'CLASSICAL_HEBREW'; + break; + case 'sam': + $country_name = 'SAMARIA'; + $lang_name = 'SAMARITAN_ARAMEIC'; + break; + case 'smp': + $country_name = 'SAMARIA'; + $lang_name = 'SAMARITAN_HEBREW'; + break; + case 'obm': + $country_name = 'MOAB'; + $lang_name = 'MOABITE'; + break; + case 'xdm': + $country_name = 'EDOMITE'; + $lang_name = 'EDOM'; + break; + case 'hi': + $lang_name = 'hindi'; + $country_name = ''; + break; + + case 'ho': + $lang_name = 'hiri_motu'; + $country_name = ''; + break; + + case 'hk': + $lang_name = 'Hong Kong'; + $country_name = 'HONG_KONG'; + break; + + case 'hn': + $country_name = 'Honduras'; + $lang_name = 'HONDURAS'; + break; + + case 'hr': + $lang_name = 'croatian'; + $country_name = 'CROATIA'; + break; + + case 'ht': + $lang_name = 'haitian'; + $country_name = 'HAITI'; + break; + + case 'ho': + $lang_name = 'hiri_motu'; + $country_name = ''; + break; + + case 'hu': + $lang_name = 'hungarian'; + $country_name = 'HUNGARY'; + break; + + case 'hy': + case 'hy-am': + $lang_name = 'ARMENIAN'; + $country_name = ''; + break; + + case 'hy-AT': + case 'hy_at': + $lang_name = 'ARMENIAN-ARTSAKH'; + $country_name = 'REPUBLIC_OF_ARTSAKH'; + break; + + case 'hz': + $lang_name = 'HERERO'; + $country_name = ''; + break; + + case 'ia': + $lang_name = 'INTERLINGUA'; + $country_name = ''; + break; + + case 'ic': + $lang_name = ''; + $country_name = 'CANARY_ISLANDS'; + break; + + case 'id': + $lang_name = 'INDONESIAN'; + $country_name = 'INDONESIA'; + break; + + case 'ie': + $lang_name = 'interlingue'; + $country_name = 'IRELAND'; + break; + + case 'ig': + $lang_name = 'igbo'; + $country_name = ''; + break; + + case 'ii': + $lang_name = 'sichuan_yi'; + $country_name = ''; + break; + + case 'ik': + $lang_name = 'inupiaq'; + $country_name = ''; + break; + + //Mostly spoken on Ouvéa Island or Uvea Island of the Loyalty Islands, New Caledonia. + case 'iai': + $lang_name = 'IAAI'; + $country_name = 'NEW_CALEDONIA'; + break; + + case 'il': + $lang_name = 'ibrit'; + $country_name = 'ISRAEL'; + break; + + case 'im': + $lang_name = 'Isle of Man'; + $country_name = 'ISLE_OF_MAN'; + break; + + case 'in': + $lang_name = 'India'; + $country_name = 'INDIA'; + break; + + + case 'ir': + $lang_name = 'Iran'; + $country_name = 'IRAN'; + break; + + case 'is': + $lang_name = 'Iceland'; + $country_name = 'ICELAND'; + break; + + case 'it': + $lang_name = 'ITALIAN'; + $country_name = 'ITALY'; + break; + + case 'iq': + $lang_name = 'Iraq'; + $country_name = 'IRAQ'; + break; + + case 'je': + $lang_name = 'jerriais'; //Jèrriais + $country_name = 'JERSEY'; //Bailiwick of Jersey + break; + + case 'jm': + $lang_name = 'Jamaica'; + $country_name = 'JAMAICA'; + break; + + case 'jo': + $lang_name = 'Jordan'; + $country_name = 'JORDAN'; + break; + + case 'jp': + $lang_name = 'japanese'; + $country_name = 'JAPAN'; + break; + + case 'jv': + $lang_name = 'javanese'; + $country_name = ''; + break; + + case 'kh': + $lang_name = 'KH'; + $country_name = 'CAMBODIA'; + break; + + case 'ke': + $lang_name = 'Kenya'; + $country_name = 'KENYA'; + break; + + case 'ki': + $lang_name = 'Kiribati'; + $country_name = 'KIRIBATI'; + break; + + //Bantu languages + //zdj – Ngazidja Comorian + case 'zdj': + $lang_name = 'Ngazidja Comorian'; + $country_name = 'COMOROS'; + break; + //wni – Ndzwani Comorian (Anjouani) dialect + case 'wni': + $lang_name = 'Ndzwani Comorian'; + $country_name = 'COMOROS'; + break; + //swb – Maore Comorian dialect + case 'swb': + $lang_name = 'Maore Comorian'; + $country_name = 'COMOROS'; + break; + //wlc – Mwali Comorian dialect + case 'wlc': + $lang_name = 'Mwali Comorian'; + $country_name = 'COMOROS'; + break; + + case 'km': + $lang_name = 'KHMER'; + $country_name = 'COMOROS'; + break; + + case 'kn': + $lang_name = 'kannada'; + $country_name = 'ST_KITTS-NEVIS'; + break; + + case 'ko': + case 'kp': + $lang_name = 'korean'; + // kor – Modern Korean + // jje – Jeju + // okm – Middle Korean + // oko – Old Korean + // oko – Proto Korean + // okm Middle Korean + // oko Old Korean + $country_name = 'Korea North'; + break; + + case 'kr': + $lang_name = 'korean'; + $country_name = 'KOREA_SOUTH'; + break; + + case 'kn': + $lang_name = 'St Kitts-Nevis'; + $country_name = 'ST_KITTS-NEVIS'; + break; + + case 'ks': + $lang_name = 'kashmiri'; //Kashmir + $country_name = 'KOREA_SOUTH'; + break; + + case 'ky': + $lang_name = 'Cayman Islands'; + $country_name = 'CAYMAN_ISLANDS'; + break; + + case 'kz': + $lang_name = 'Kazakhstan'; + $country_name = 'KAZAKHSTAN'; + break; + + case 'kw': + //endonim: Kernewek + $lang_name = 'Cornish'; + $country_name = 'KUWAIT'; + break; + + case 'kg': + $lang_name = 'Kyrgyzstan'; + $country_name = 'KYRGYZSTAN'; + break; + + case 'la': + $lang_name = 'Laos'; + $country_name = 'LAOS'; + break; + + case 'lk': + $lang_name = 'Sri Lanka'; + $country_name = 'SRI_LANKA'; + break; + + case 'lv': + $lang_name = 'Latvia'; + $country_name = 'LATVIA'; + break; + + case 'lb': + $lang_name = 'LUXEMBOURGISH'; + $country_name = 'LEBANON'; + break; + + case 'lc': + $lang_name = 'St Lucia'; + $country_name = 'ST_LUCIA'; + break; + + case 'ls': + $lang_name = 'Lesotho'; + $country_name = 'LESOTHO'; + break; + + case 'lo': + $lang_name = 'LAO'; + $country_name = 'LAOS'; + break; + + case 'lr': + $lang_name = 'Liberia'; + $country_name = 'LIBERIA'; + break; + + case 'ly': + $lang_name = 'Libya'; + $country_name = 'Libya'; + break; + + case 'li': + $lang_name = 'LIMBURGISH'; + $country_name = 'LIECHTENSTEIN'; + break; + + case 'lt': + $country_name = 'Lithuania'; + $lang_name = 'LITHUANIA'; + break; + + case 'lu': + $lang_name = 'LUXEMBOURGISH'; + $country_name = 'LUXEMBOURG'; + break; + + case 'ma': + $lang_name = 'Morocco'; + $country_name = 'MOROCCO'; + break; + + case 'mc': + $country_name = 'MONACO'; + $lang_name = 'Monaco'; + break; + + case 'md': + $country_name = 'MOLDOVA'; + $lang_name = 'romanian'; + break; + + case 'me': + $lang_name = 'MONTENEGRIN'; //Serbo-Croatian, Cyrillic, Latin + $country_name = 'MONTENEGRO'; //Црна Гора + break; + + case 'mf': + $lang_name = 'FRENCH'; // + $country_name = 'SAINT_MARTIN_(FRENCH_PART)'; + break; + + case 'mg': + $lang_name = 'Madagascar'; + $country_name = 'MADAGASCAR'; + break; + + case 'mh': + $lang_name = 'Marshall Islands'; + $country_name = 'MARSHALL_ISLANDS'; + break; + + case 'mi': + $lang_name = 'MAORI'; + $country_name = 'Maori'; + break; + + //Mi'kmaq hieroglyphic writing was a writing system and memory aid used by the Mi'kmaq, + //a First Nations people of the east coast of Canada, Mostly spoken in Nova Scotia and Newfoundland. + case 'mic': + $lang_name = 'MIKMAQ'; + $country_name = 'CANADA'; + break; + + case 'mk': + $lang_name = 'Macedonia'; + $country_name = 'MACEDONIA'; + break; + + case 'mr': + $lang_name = 'Mauritania'; + $country_name = 'Mauritania'; + break; + + case 'mu': + $lang_name = 'Mauritius'; + $country_name = 'MAURITIUS'; + break; + + case 'mo': + $lang_name = 'Macau'; + $country_name = 'MACAU'; + break; + + case 'mn': + $lang_name = 'Mongolia'; + $country_name = 'MONGOLIA'; + break; + + case 'ms': + $lang_name = 'Montserrat'; + $country_name = 'MONTSERRAT'; + break; + + case 'mz': + $lang_name = 'Mozambique'; + $country_name = 'MOZAMBIQUE'; + break; + + case 'mm': + $lang_name = 'Myanmar'; + $country_name = 'MYANMAR'; + break; + + case 'mp': + $lang_name = 'chamorro'; //Carolinian + $country_name = 'NORTHERN_MARIANA_ISLANDS'; + break; + + case 'mw': + $country_name = 'Malawi'; + $lang_name = 'MALAWI'; + break; + + case 'my': + $lang_name = 'Myanmar'; + $country_name = 'MALAYSIA'; + break; + + case 'mv': + $lang_name = 'Maldives'; + $country_name = 'MALDIVES'; + break; + + case 'ml': + $lang_name = 'Mali'; + $country_name = 'MALI'; + break; + + case 'mt': + $lang_name = 'Malta'; + $country_name = 'MALTA'; + break; + + case 'mx': + $lang_name = 'Mexico'; + $country_name = 'MEXICO'; + break; + + case 'mq': + $lang_name = 'antillean-creole'; // Antillean Creole (Créole Martiniquais) + $country_name = 'MARTINIQUE'; + break; + + case 'na': + $lang_name = 'Nambia'; + $country_name = 'NAMBIA'; + break; + + case 'ni': + $lang_name = 'Nicaragua'; + $country_name = 'NICARAGUA'; + break; + + //Barber: Targuí, tuareg + case 'ne': + $lang_name = 'Niger'; + $country_name = 'NIGER'; + break; + + //Mostly spoken on Maré Island of the Loyalty Islands, New Caledonia. + case 'nen': + $lang_name = 'NENGONE'; + $country_name = 'NEW_CALEDONIA'; + break; + + case 'new': + $lang_name = 'NEW_LANGUAGE'; + $country_name = 'NEW_COUNTRY'; + break; + + case 'nc': + $lang_name = 'paicî'; //French, Nengone, Paicî, Ajië, Drehu + $country_name = 'NEW_CALEDONIA'; + break; + + case 'nk': + $lang_name = 'Korea North'; + $country_name = 'KOREA_NORTH'; + break; + + case 'ng': + $lang_name = 'Nigeria'; + $country_name = 'NIGERIA'; + break; + + case 'nf': + $lang_name = 'Norfolk Island'; + $country_name = 'NORFOLK_ISLAND'; + break; + + case 'nl': + $lang_name = 'DUTCH'; //Netherlands, Flemish. + $country_name = 'NETHERLANDS'; + break; + + case 'no': + $lang_name = 'Norway'; + $country_name = 'NORWAY'; + break; + + case 'np': + $lang_name = 'Nepal'; + $country_name = 'NEPAL'; + break; + + case 'nr': + $lang_name = 'Nauru'; + $country_name = 'NAURU'; + break; + + case 'niu': + $lang_name = 'NIUEAN'; //Niuean (official) 46% (a Polynesian language closely related to Tongan and Samoan) + $country_name = 'NIUE'; // Niuean: Niuē + break; + + case 'nu': + $lang_name = 'NU'; //Niuean (official) 46% (a Polynesian language closely related to Tongan and Samoan) + $country_name = 'NIUE'; // Niuean: Niuē + break; + + case 'nz': + $lang_name = 'New Zealand'; + $country_name = 'NEW_ZEALAND'; + break; + + case 'ny': + $lang_name = 'Chewa'; + $country_name = 'Nyanja'; + break; + //langue d'oc + case 'oc': + $lang_name = 'OCCITAN'; + $country_name = 'OCCITANIA'; + break; + + case 'oj': + $lang_name = 'ojibwa'; + $country_name = ''; + break; + + case 'om': + $lang_name = 'Oman'; + $country_name = 'OMAN'; + break; + + case 'or': + $lang_name = 'oriya'; + $country_name = ''; + break; + + case 'os': + $lang_name = 'ossetian'; + $country_name = ''; + break; + + case 'pa': + $country_name = 'Panama'; + $lang_name = 'PANAMA'; + break; + + + case 'pe': + $country_name = 'Peru'; + $lang_name = 'PERU'; + break; + + case 'ph': + $lang_name = 'Philippines'; + $country_name = 'PHILIPPINES'; + break; + + case 'pf': + $country_name = 'French Polynesia'; + $lang_name = 'tahitian'; //Polynésie française + break; + + case 'pg': + $country_name = 'PAPUA_NEW_GUINEA'; + $lang_name = 'Papua New Guinea'; + break; + + case 'pi': + $lang_name = 'pali'; + $country_name = ''; + break; + + case 'pl': + $lang_name = 'Poland'; + $country_name = 'POLAND'; + break; + + case 'pn': + $lang_name = 'Pitcairn Island'; + $country_name = 'PITCAIRN_ISLAND'; + break; + + case 'pr': + $lang_name = 'Puerto Rico'; + $country_name = 'PUERTO_RICO'; + break; + + case 'pt': + $lang_name = 'Portugal'; + $country_name = 'PORTUGAL'; + break; + + case 'pk': + $lang_name = 'Pakistan'; + $country_name = 'PAKISTAN'; + break; + + case 'pw': + $country_name = 'Palau Island'; + $lang_name = 'PALAU_ISLAND'; + break; + + case 'ps': + $country_name = 'Palestine'; + $lang_name = 'PALESTINE'; + break; + + case 'py': + $country_name = 'PARAGUAY'; + $lang_name = 'PARAGUAY'; + break; + + case 'qa': + $lang_name = 'Qatar'; + $country_name = 'QATAR'; + break; + + // rmn – Balkan Romani + // rml – Baltic Romani + // rmc – Carpathian Romani + // rmf – Kalo Finnish Romani + // rmo – Sinte Romani + // rmy – Vlax Romani + // rmw – Welsh Romani + case 'ri': + case 'rom': + $country_name = 'EASTEN_EUROPE'; + $lang_name = 'ROMANI'; + break; + + case 'ro': + $country_name = 'ROMANIA'; + $lang_name = 'ROMANIAN'; + break; + + case 'ro_md': + case 'ro_MD': + $country_name = 'ROMANIA'; + $lang_name = 'ROMANIAN_MOLDAVIA'; + break; + + case 'ro_ro': + case 'ro_RO': + $country_name = 'ROMANIA'; + $lang_name = 'ROMANIAN_ROMANIA'; + break; + + case 'rn': + $lang_name = 'kirundi'; + $country_name = ''; + break; + + case 'rm': + $country_name = ''; + $lang_name = 'romansh'; //Switzerland + break; + + case 'rs': + $country_name = 'REPUBLIC_OF_SERBIA'; //Република Србија //Republika Srbija + $lang_name = 'serbian'; //Serbia, Србија / Srbija + break; + + case 'ru': + case 'ru_ru': + case 'ru_RU': + $country_name = 'RUSSIA'; + $lang_name = 'RUSSIAN'; + break; + + case 'rw': + $country_name = 'RWANDA'; + $lang_name = 'Rwanda'; + break; + + + case 'sa': + $lang_name = 'arabic'; + $country_name = 'SAUDI_ARABIA'; + break; + + case 'sb': + $lang_name = 'Solomon Islands'; + $country_name = 'SOLOMON_ISLANDS'; + break; + + case 'sc': + $lang_name = 'seychellois-creole'; + $country_name = 'SEYCHELLES'; + break; + + case 'sco': + $lang_name = 'SCOTISH'; + $country_name = 'Scotland'; + break; + + //scf – San Miguel Creole French (Panama) + case 'scf': + $lang_name = 'SAN_MIGUEL_CREOLE_FRENCH'; + $country_name = 'SAN_MIGUEL'; + break; + + case 'sd': + $lang_name = 'Sudan'; + $country_name = 'SUDAN'; + break; + + case 'si': + $lang_name = 'SLOVENIAN'; + $country_name = 'SLOVENIA'; + break; + + case 'sh': + $lang_name = 'SH'; + $country_name = 'ST_HELENA'; + break; + + case 'sk': + $country_name = 'SLOVAKIA'; + $lang_name = 'Slovakia'; + break; + + case 'sg': + $country_name = 'SINGAPORE'; + $lang_name = 'Singapore'; + break; + + case 'sl': + $country_name = 'SIERRA_LEONE'; + $lang_name = 'Sierra Leone'; + break; + + case 'sm': + $lang_name = 'San Marino'; + $country_name = 'SAN_MARINO'; + break; + + case 'smi': + $lang_name = 'Sami'; + $country_name = 'Norway'; //Native to Finland, Norway, Russia, and Sweden + break; + + case 'sn': + $lang_name = 'Senegal'; + $country_name = 'SENEGAL'; + break; + + case 'so': + $lang_name = 'Somalia'; + $country_name = 'SOMALIA'; + break; + + case 'sq': + $lang_name = 'ALBANIAN'; + $country_name = 'Albania'; + break; + + case 'sr': + $lang_name = 'Suriname'; + $country_name = 'SURINAME'; + break; + + case 'ss': + $lang_name = ''; //Bari [Karo or Kutuk ('mother tongue', Beri)], Dinka, Luo, Murle, Nuer, Zande + $country_name = 'REPUBLIC_OF_SOUTH_SUDAN'; + break; + + case 'sse': + $lang_name = 'STANDARD_SCOTTISH_ENGLISH'; + $country_name = 'Scotland'; + break; + + case 'st': + $lang_name = 'Sao Tome & Principe'; + $country_name = 'SAO_TOME_&_PRINCIPE'; + break; + + case 'sv': + $lang_name = 'El Salvador'; + $country_name = 'EL_SALVADOR'; + break; + + case 'sx': + $lang_name = 'dutch'; + $country_name = 'SINT_MAARTEN_(DUTCH_PART)'; + break; + + + case 'sz': + $lang_name = 'Swaziland'; + $country_name = 'SWAZILAND'; + break; + + case 'se': + case 'sv-SE': + case 'sv-se': + //Swedish (Sweden) (sv-SE) + $lang_name = 'Sweden'; + $country_name = 'SWEDEN'; + break; + + case 'sy': + $lang_name = 'SYRIAC'; //arabic syrian + $country_name = 'SYRIA'; + break; + + + case 'tc': + $lang_name = 'Turks & Caicos Is'; + $country_name = 'TURKS_&_CAICOS_IS'; + break; + + case 'td': + $lang_name = 'Chad'; + $country_name = 'CHAD'; + break; + + case 'tf': + $lang_name = 'french '; // + $country_name = 'FRENCH_SOUTHERN_TERRITORIES'; //Terres australes françaises + break; + + case 'tj': + $lang_name = 'Tajikistan'; + $country_name = 'TAJIKISTAN'; + break; + + case 'tg': + $lang_name = 'Togo'; + $country_name = 'TOGO'; + break; + + case 'th': + $country_name = 'Thailand'; + $lang_name = 'THAILAND'; + break; + + case 'tk': + //260 speakers of Tokelauan, of whom 2,100 live in New Zealand, + //1,400 in Tokelau, + //and 17 in Swains Island + $lang_name = 'Tokelauan'; // /toʊkəˈlaʊən/ Tokelauans or Polynesians + $country_name = 'TOKELAUAU'; //Dependent territory of New Zealand + break; + + case 'tl': + $country_name = 'East Timor'; + $lang_name = 'East Timor'; + break; + + case 'to': + $country_name = 'Tonga'; + $lang_name = 'TONGA'; + break; + + case 'tt': + $country_name = 'Trinidad & Tobago'; + $lang_name = 'TRINIDAD_&_TOBAGO'; + break; + + case 'tn': + $lang_name = 'Tunisia'; + $country_name = 'TUNISIA'; + break; + + case 'tm': + $lang_name = 'Turkmenistan'; + $country_name = 'TURKMENISTAN'; + break; + + case 'tr': + $lang_name = 'Turkey'; + $country_name = 'TURKEY'; + break; + + case 'tv': + $lang_name = 'Tuvalu'; + $country_name = 'TUVALU'; + break; + + case 'tw': + $lang_name = 'TAIWANESE_HOKKIEN'; //Taibei Hokkien + $country_name = 'TAIWAN'; + break; + + case 'tz': + $country_name = 'TANZANIA'; + $lang_name = 'Tanzania'; + break; + + case 'ug': + $lang_name = 'Uganda'; + $country_name = 'UGANDA'; + break; + + case 'ua': + $lang_name = 'Ukraine'; + $country_name = 'UKRAINE'; + break; + + case 'us': + $lang_name = 'en-us'; + $country_name = 'UNITED_STATES_OF_AMERICA'; + break; + + case 'uz': + $lang_name = 'uzbek'; //Uyghur Perso-Arabic alphabet + $country_name = 'UZBEKISTAN'; + break; + + case 'uy': + $lang_name = 'Uruguay'; + $country_name = 'URUGUAY'; + break; + + case 'va': + $country_name = 'VATICAN_CITY'; //Holy See + $lang_name = 'latin'; + break; + + case 'vc': + $country_name = 'ST_VINCENT_&_GRENADINES'; // + $lang_name = 'vincentian-creole'; + break; + + case 've': + $lang_name = 'Venezuela'; + $country_name = 'VENEZUELA'; + break; + + case 'vi': + $lang_name = 'Virgin Islands (USA)'; + $country_name = 'VIRGIN_ISLANDS_(USA)'; + break; + + case 'fr_vn': + $lang_name = 'FRENCH_VIETNAM'; + $country_name = 'VIETNAM'; + break; + + case 'vn': + $lang_name = 'Vietnam'; + $country_name = 'VIETNAM'; + break; + + case 'vg': + $lang_name = 'Virgin Islands (Brit)'; + $country_name = 'VIRGIN_ISLANDS_(BRIT)'; + break; + + case 'vu': + $lang_name = 'Vanuatu'; + $country_name = 'VANUATU'; + break; + + case 'wls': + $lang_name = 'WALLISIAN'; + $country_name = 'WALES'; + break; + + case 'wf': + $country_name = 'TERRITORY_OF_THE_WALLIS_AND_FUTUNA_ISLANDS'; + $lang_name = 'WF'; + //Wallisian, or ʻUvean + //Futunan - Austronesian, Malayo-Polynesian + break; + + case 'ws': + $country_name = 'SAMOA'; + $lang_name = 'Samoa'; + break; + + case 'ye': + $lang_name = 'Yemen'; + $country_name = 'YEMEN'; + break; + + case 'yt': + $lang_name = 'Mayotte'; //Shimaore: + $country_name = 'DEPARTMENT_OF_MAYOTTE'; //Département de Mayotte + break; + + case 'za': + $lang_name = 'zhuang'; + $country_name = 'SOUTH_AFRICA'; + break; + case 'zm': + $lang_name = 'zambian'; + $country_name = 'ZAMBIA'; + break; + case 'zw': + $lang_name = 'Zimbabwe'; + $country_name = 'ZIMBABWE'; + break; + case 'zu': + $lang_name = 'zulu'; + $country_name = 'ZULU'; + break; + default: + $lang_name = $file_dir; + $country_name = $file_dir; + break; + } + $return = ($lang_country == 'country') ? $country_name : $lang_name; + $return = ($langs_countries == true) ? $lang_name[$country_name] : $return; + return $return ; } + + + +Contact: orynider@gmail.com diff --git a/flags/language/aa.png b/flags/language/aa.png new file mode 100644 index 0000000..6a34e9a Binary files /dev/null and b/flags/language/aa.png differ diff --git a/flags/language/aa_dj.png b/flags/language/aa_dj.png new file mode 100644 index 0000000..e186bce Binary files /dev/null and b/flags/language/aa_dj.png differ diff --git a/flags/language/ab.png b/flags/language/ab.png new file mode 100644 index 0000000..74a48d4 Binary files /dev/null and b/flags/language/ab.png differ diff --git a/flags/language/ae.png b/flags/language/ae.png new file mode 100644 index 0000000..650face Binary files /dev/null and b/flags/language/ae.png differ diff --git a/flags/language/af.png b/flags/language/af.png new file mode 100644 index 0000000..baed3d6 Binary files /dev/null and b/flags/language/af.png differ diff --git a/flags/language/aj.png b/flags/language/aj.png new file mode 100644 index 0000000..c46c459 Binary files /dev/null and b/flags/language/aj.png differ diff --git a/flags/language/ak.png b/flags/language/ak.png new file mode 100644 index 0000000..71769ce Binary files /dev/null and b/flags/language/ak.png differ diff --git a/flags/language/am.png b/flags/language/am.png new file mode 100644 index 0000000..3c05ee0 Binary files /dev/null and b/flags/language/am.png differ diff --git a/flags/language/an.png b/flags/language/an.png new file mode 100644 index 0000000..e467eaa Binary files /dev/null and b/flags/language/an.png differ diff --git a/flags/language/ar.png b/flags/language/ar.png new file mode 100644 index 0000000..c0b62f3 Binary files /dev/null and b/flags/language/ar.png differ diff --git a/flags/language/arq.png b/flags/language/arq.png new file mode 100644 index 0000000..7a164d1 Binary files /dev/null and b/flags/language/arq.png differ diff --git a/flags/language/as.png b/flags/language/as.png new file mode 100644 index 0000000..b7c99a3 Binary files /dev/null and b/flags/language/as.png differ diff --git a/flags/language/av-da.png b/flags/language/av-da.png new file mode 100644 index 0000000..6c390f4 Binary files /dev/null and b/flags/language/av-da.png differ diff --git a/flags/language/av.png b/flags/language/av.png new file mode 100644 index 0000000..e892cb5 Binary files /dev/null and b/flags/language/av.png differ diff --git a/flags/language/av_da.png b/flags/language/av_da.png new file mode 100644 index 0000000..6c390f4 Binary files /dev/null and b/flags/language/av_da.png differ diff --git a/flags/language/ay.png b/flags/language/ay.png new file mode 100644 index 0000000..b5c93dd Binary files /dev/null and b/flags/language/ay.png differ diff --git a/flags/language/az.png b/flags/language/az.png new file mode 100644 index 0000000..85c88d7 Binary files /dev/null and b/flags/language/az.png differ diff --git a/flags/language/ba.png b/flags/language/ba.png new file mode 100644 index 0000000..7b9f76d Binary files /dev/null and b/flags/language/ba.png differ diff --git a/flags/language/be.png b/flags/language/be.png new file mode 100644 index 0000000..bbd20b6 Binary files /dev/null and b/flags/language/be.png differ diff --git a/flags/language/bg.png b/flags/language/bg.png new file mode 100644 index 0000000..c61ede0 Binary files /dev/null and b/flags/language/bg.png differ diff --git a/flags/language/bi.png b/flags/language/bi.png new file mode 100644 index 0000000..c98db3d Binary files /dev/null and b/flags/language/bi.png differ diff --git a/flags/language/bl.png b/flags/language/bl.png new file mode 100644 index 0000000..348493e Binary files /dev/null and b/flags/language/bl.png differ diff --git a/flags/language/bm.png b/flags/language/bm.png new file mode 100644 index 0000000..082dedd Binary files /dev/null and b/flags/language/bm.png differ diff --git a/flags/language/bn.png b/flags/language/bn.png new file mode 100644 index 0000000..935ecea Binary files /dev/null and b/flags/language/bn.png differ diff --git a/flags/language/br.png b/flags/language/br.png new file mode 100644 index 0000000..f0eddd3 Binary files /dev/null and b/flags/language/br.png differ diff --git a/flags/language/bs.png b/flags/language/bs.png new file mode 100644 index 0000000..f04d4fb Binary files /dev/null and b/flags/language/bs.png differ diff --git a/flags/language/ca.png b/flags/language/ca.png new file mode 100644 index 0000000..f7bd8fd Binary files /dev/null and b/flags/language/ca.png differ diff --git a/flags/language/cdo.png b/flags/language/cdo.png new file mode 100644 index 0000000..95117bc Binary files /dev/null and b/flags/language/cdo.png differ diff --git a/flags/language/ce.png b/flags/language/ce.png new file mode 100644 index 0000000..ed66b00 Binary files /dev/null and b/flags/language/ce.png differ diff --git a/flags/language/ch.png b/flags/language/ch.png new file mode 100644 index 0000000..be01a1f Binary files /dev/null and b/flags/language/ch.png differ diff --git a/flags/language/cjy.png b/flags/language/cjy.png new file mode 100644 index 0000000..c4914d0 Binary files /dev/null and b/flags/language/cjy.png differ diff --git a/flags/language/cmn.png b/flags/language/cmn.png new file mode 100644 index 0000000..3d1bcbb Binary files /dev/null and b/flags/language/cmn.png differ diff --git a/flags/language/cn.png b/flags/language/cn.png new file mode 100644 index 0000000..c4914d0 Binary files /dev/null and b/flags/language/cn.png differ diff --git a/flags/language/co.png b/flags/language/co.png new file mode 100644 index 0000000..72c1331 Binary files /dev/null and b/flags/language/co.png differ diff --git a/flags/language/cpg.png b/flags/language/cpg.png new file mode 100644 index 0000000..517bdd8 Binary files /dev/null and b/flags/language/cpg.png differ diff --git a/flags/language/cpx.png b/flags/language/cpx.png new file mode 100644 index 0000000..4472174 Binary files /dev/null and b/flags/language/cpx.png differ diff --git a/flags/language/cr.png b/flags/language/cr.png new file mode 100644 index 0000000..747f3b8 Binary files /dev/null and b/flags/language/cr.png differ diff --git a/flags/language/cs.png b/flags/language/cs.png new file mode 100644 index 0000000..e905983 Binary files /dev/null and b/flags/language/cs.png differ diff --git a/flags/language/cv.png b/flags/language/cv.png new file mode 100644 index 0000000..6991c96 Binary files /dev/null and b/flags/language/cv.png differ diff --git a/flags/language/czh.png b/flags/language/czh.png new file mode 100644 index 0000000..963edf8 Binary files /dev/null and b/flags/language/czh.png differ diff --git a/flags/language/czo.png b/flags/language/czo.png new file mode 100644 index 0000000..69a66bd Binary files /dev/null and b/flags/language/czo.png differ diff --git a/flags/language/da.png b/flags/language/da.png new file mode 100644 index 0000000..78920c9 Binary files /dev/null and b/flags/language/da.png differ diff --git a/flags/language/de.png b/flags/language/de.png new file mode 100644 index 0000000..58a17ca Binary files /dev/null and b/flags/language/de.png differ diff --git a/flags/language/de_be.png b/flags/language/de_be.png new file mode 100644 index 0000000..54b728d Binary files /dev/null and b/flags/language/de_be.png differ diff --git a/flags/language/de_de.png b/flags/language/de_de.png new file mode 100644 index 0000000..4461e8e Binary files /dev/null and b/flags/language/de_de.png differ diff --git a/flags/language/de_li.png b/flags/language/de_li.png new file mode 100644 index 0000000..93cda20 Binary files /dev/null and b/flags/language/de_li.png differ diff --git a/flags/language/de_lu.png b/flags/language/de_lu.png new file mode 100644 index 0000000..9d38b8a Binary files /dev/null and b/flags/language/de_lu.png differ diff --git a/flags/language/de_sw.png b/flags/language/de_sw.png new file mode 100644 index 0000000..48c68de Binary files /dev/null and b/flags/language/de_sw.png differ diff --git a/flags/language/deu.png b/flags/language/deu.png new file mode 100644 index 0000000..d78414d Binary files /dev/null and b/flags/language/deu.png differ diff --git a/flags/language/dk.png b/flags/language/dk.png new file mode 100644 index 0000000..06b3c0a Binary files /dev/null and b/flags/language/dk.png differ diff --git a/flags/language/dng.png b/flags/language/dng.png new file mode 100644 index 0000000..5d87903 Binary files /dev/null and b/flags/language/dng.png differ diff --git a/flags/language/dv.png b/flags/language/dv.png new file mode 100644 index 0000000..b1a4dd0 Binary files /dev/null and b/flags/language/dv.png differ diff --git a/flags/language/dz.png b/flags/language/dz.png new file mode 100644 index 0000000..d035910 Binary files /dev/null and b/flags/language/dz.png differ diff --git a/flags/language/ee.png b/flags/language/ee.png new file mode 100644 index 0000000..8c1eff5 Binary files /dev/null and b/flags/language/ee.png differ diff --git a/flags/language/el.png b/flags/language/el.png new file mode 100644 index 0000000..9e3264e Binary files /dev/null and b/flags/language/el.png differ diff --git a/flags/language/en_ai.png b/flags/language/en_ai.png new file mode 100644 index 0000000..80624ba Binary files /dev/null and b/flags/language/en_ai.png differ diff --git a/flags/language/en_au.png b/flags/language/en_au.png new file mode 100644 index 0000000..5746e99 Binary files /dev/null and b/flags/language/en_au.png differ diff --git a/flags/language/en_bm.png b/flags/language/en_bm.png new file mode 100644 index 0000000..84c7905 Binary files /dev/null and b/flags/language/en_bm.png differ diff --git a/flags/language/en_ck.png b/flags/language/en_ck.png new file mode 100644 index 0000000..e3210e6 Binary files /dev/null and b/flags/language/en_ck.png differ diff --git a/flags/language/en_cm.png b/flags/language/en_cm.png new file mode 100644 index 0000000..ee1f66c Binary files /dev/null and b/flags/language/en_cm.png differ diff --git a/flags/language/en_dm.png b/flags/language/en_dm.png new file mode 100644 index 0000000..3be77d9 Binary files /dev/null and b/flags/language/en_dm.png differ diff --git a/flags/language/en_fj.png b/flags/language/en_fj.png new file mode 100644 index 0000000..daaa43c Binary files /dev/null and b/flags/language/en_fj.png differ diff --git a/flags/language/en_gb.png b/flags/language/en_gb.png new file mode 100644 index 0000000..2906ffb Binary files /dev/null and b/flags/language/en_gb.png differ diff --git a/flags/language/en_gy.png b/flags/language/en_gy.png new file mode 100644 index 0000000..a12e3dc Binary files /dev/null and b/flags/language/en_gy.png differ diff --git a/flags/language/en_ht.png b/flags/language/en_ht.png new file mode 100644 index 0000000..27a7ae6 Binary files /dev/null and b/flags/language/en_ht.png differ diff --git a/flags/language/en_id.png b/flags/language/en_id.png new file mode 100644 index 0000000..678e7c5 Binary files /dev/null and b/flags/language/en_id.png differ diff --git a/flags/language/en_ie.png b/flags/language/en_ie.png new file mode 100644 index 0000000..720b1dc Binary files /dev/null and b/flags/language/en_ie.png differ diff --git a/flags/language/en_ms.png b/flags/language/en_ms.png new file mode 100644 index 0000000..792ba62 Binary files /dev/null and b/flags/language/en_ms.png differ diff --git a/flags/language/en_ne.png b/flags/language/en_ne.png new file mode 100644 index 0000000..96092be Binary files /dev/null and b/flags/language/en_ne.png differ diff --git a/flags/language/en_nu.png b/flags/language/en_nu.png new file mode 100644 index 0000000..d0a29b4 Binary files /dev/null and b/flags/language/en_nu.png differ diff --git a/flags/language/en_nz.png b/flags/language/en_nz.png new file mode 100644 index 0000000..851a928 Binary files /dev/null and b/flags/language/en_nz.png differ diff --git a/flags/language/en_pn.png b/flags/language/en_pn.png new file mode 100644 index 0000000..579462f Binary files /dev/null and b/flags/language/en_pn.png differ diff --git a/flags/language/en_sh.png b/flags/language/en_sh.png new file mode 100644 index 0000000..fdc73b8 Binary files /dev/null and b/flags/language/en_sh.png differ diff --git a/flags/language/en_tc.png b/flags/language/en_tc.png new file mode 100644 index 0000000..de78cc1 Binary files /dev/null and b/flags/language/en_tc.png differ diff --git a/flags/language/en_uk.png b/flags/language/en_uk.png new file mode 100644 index 0000000..10b28c7 Binary files /dev/null and b/flags/language/en_uk.png differ diff --git a/flags/language/en_us.png b/flags/language/en_us.png new file mode 100644 index 0000000..ce758b7 Binary files /dev/null and b/flags/language/en_us.png differ diff --git a/flags/language/en_vg.png b/flags/language/en_vg.png new file mode 100644 index 0000000..8047ddd Binary files /dev/null and b/flags/language/en_vg.png differ diff --git a/flags/language/eo.png b/flags/language/eo.png new file mode 100644 index 0000000..21f2c46 Binary files /dev/null and b/flags/language/eo.png differ diff --git a/flags/language/es.png b/flags/language/es.png new file mode 100644 index 0000000..94f95a7 Binary files /dev/null and b/flags/language/es.png differ diff --git a/flags/language/es_es.png b/flags/language/es_es.png new file mode 100644 index 0000000..94f95a7 Binary files /dev/null and b/flags/language/es_es.png differ diff --git a/flags/language/et.png b/flags/language/et.png new file mode 100644 index 0000000..c83c2dd Binary files /dev/null and b/flags/language/et.png differ diff --git a/flags/language/eu.png b/flags/language/eu.png new file mode 100644 index 0000000..91d0cd6 Binary files /dev/null and b/flags/language/eu.png differ diff --git a/flags/language/ff.png b/flags/language/ff.png new file mode 100644 index 0000000..a7b27cc Binary files /dev/null and b/flags/language/ff.png differ diff --git a/flags/language/ffm.png b/flags/language/ffm.png new file mode 100644 index 0000000..f4e779f Binary files /dev/null and b/flags/language/ffm.png differ diff --git a/flags/language/fi.png b/flags/language/fi.png new file mode 100644 index 0000000..5e83867 Binary files /dev/null and b/flags/language/fi.png differ diff --git a/flags/language/fj.png b/flags/language/fj.png new file mode 100644 index 0000000..570084a Binary files /dev/null and b/flags/language/fj.png differ diff --git a/flags/language/fo.png b/flags/language/fo.png new file mode 100644 index 0000000..3589f2d Binary files /dev/null and b/flags/language/fo.png differ diff --git a/flags/language/fr.png b/flags/language/fr.png new file mode 100644 index 0000000..5d39dfa Binary files /dev/null and b/flags/language/fr.png differ diff --git a/flags/language/fr_ac.png b/flags/language/fr_ac.png new file mode 100644 index 0000000..7c5285e Binary files /dev/null and b/flags/language/fr_ac.png differ diff --git a/flags/language/fr_ao.png b/flags/language/fr_ao.png new file mode 100644 index 0000000..04dbd31 Binary files /dev/null and b/flags/language/fr_ao.png differ diff --git a/flags/language/fr_bl.png b/flags/language/fr_bl.png new file mode 100644 index 0000000..be627d7 Binary files /dev/null and b/flags/language/fr_bl.png differ diff --git a/flags/language/fr_ca.png b/flags/language/fr_ca.png new file mode 100644 index 0000000..adbe662 Binary files /dev/null and b/flags/language/fr_ca.png differ diff --git a/flags/language/fr_dz.png b/flags/language/fr_dz.png new file mode 100644 index 0000000..50e1c9d Binary files /dev/null and b/flags/language/fr_dz.png differ diff --git a/flags/language/fr_ht.png b/flags/language/fr_ht.png new file mode 100644 index 0000000..ced907e Binary files /dev/null and b/flags/language/fr_ht.png differ diff --git a/flags/language/fr_id.png b/flags/language/fr_id.png new file mode 100644 index 0000000..52cec1d Binary files /dev/null and b/flags/language/fr_id.png differ diff --git a/flags/language/fr_if.png b/flags/language/fr_if.png new file mode 100644 index 0000000..0437ce4 Binary files /dev/null and b/flags/language/fr_if.png differ diff --git a/flags/language/fr_kh.png b/flags/language/fr_kh.png new file mode 100644 index 0000000..82de702 Binary files /dev/null and b/flags/language/fr_kh.png differ diff --git a/flags/language/fr_la.png b/flags/language/fr_la.png new file mode 100644 index 0000000..0d6c2a3 Binary files /dev/null and b/flags/language/fr_la.png differ diff --git a/flags/language/fr_mi.png b/flags/language/fr_mi.png new file mode 100644 index 0000000..e17a634 Binary files /dev/null and b/flags/language/fr_mi.png differ diff --git a/flags/language/fr_mr.png b/flags/language/fr_mr.png new file mode 100644 index 0000000..4e1c96c Binary files /dev/null and b/flags/language/fr_mr.png differ diff --git a/flags/language/fr_nc.png b/flags/language/fr_nc.png new file mode 100644 index 0000000..e4afeea Binary files /dev/null and b/flags/language/fr_nc.png differ diff --git a/flags/language/fr_ne.png b/flags/language/fr_ne.png new file mode 100644 index 0000000..b768af4 Binary files /dev/null and b/flags/language/fr_ne.png differ diff --git a/flags/language/fr_nf.png b/flags/language/fr_nf.png new file mode 100644 index 0000000..bc33554 Binary files /dev/null and b/flags/language/fr_nf.png differ diff --git a/flags/language/fr_qb.png b/flags/language/fr_qb.png new file mode 100644 index 0000000..6699960 Binary files /dev/null and b/flags/language/fr_qb.png differ diff --git a/flags/language/fr_sw.png b/flags/language/fr_sw.png new file mode 100644 index 0000000..00e7c11 Binary files /dev/null and b/flags/language/fr_sw.png differ diff --git a/flags/language/fr_tf.png b/flags/language/fr_tf.png new file mode 100644 index 0000000..1baf5c3 Binary files /dev/null and b/flags/language/fr_tf.png differ diff --git a/flags/language/fr_vn.png b/flags/language/fr_vn.png new file mode 100644 index 0000000..8623e50 Binary files /dev/null and b/flags/language/fr_vn.png differ diff --git a/flags/language/fr_wf.png b/flags/language/fr_wf.png new file mode 100644 index 0000000..c2b8487 Binary files /dev/null and b/flags/language/fr_wf.png differ diff --git a/flags/language/frc.png b/flags/language/frc.png new file mode 100644 index 0000000..0b6ba9e Binary files /dev/null and b/flags/language/frc.png differ diff --git a/flags/language/fub.png b/flags/language/fub.png new file mode 100644 index 0000000..7d551fa Binary files /dev/null and b/flags/language/fub.png differ diff --git a/flags/language/fuc.png b/flags/language/fuc.png new file mode 100644 index 0000000..2860cba Binary files /dev/null and b/flags/language/fuc.png differ diff --git a/flags/language/fue.png b/flags/language/fue.png new file mode 100644 index 0000000..f78947f Binary files /dev/null and b/flags/language/fue.png differ diff --git a/flags/language/fuf.png b/flags/language/fuf.png new file mode 100644 index 0000000..36c46ad Binary files /dev/null and b/flags/language/fuf.png differ diff --git a/flags/language/fuh.png b/flags/language/fuh.png new file mode 100644 index 0000000..9c35892 Binary files /dev/null and b/flags/language/fuh.png differ diff --git a/flags/language/fui.png b/flags/language/fui.png new file mode 100644 index 0000000..11f2cb9 Binary files /dev/null and b/flags/language/fui.png differ diff --git a/flags/language/fuq.png b/flags/language/fuq.png new file mode 100644 index 0000000..e1ec759 Binary files /dev/null and b/flags/language/fuq.png differ diff --git a/flags/language/fuv.png b/flags/language/fuv.png new file mode 100644 index 0000000..c89c167 Binary files /dev/null and b/flags/language/fuv.png differ diff --git a/flags/language/fy.png b/flags/language/fy.png new file mode 100644 index 0000000..fa18738 Binary files /dev/null and b/flags/language/fy.png differ diff --git a/flags/language/gan.png b/flags/language/gan.png new file mode 100644 index 0000000..1034680 Binary files /dev/null and b/flags/language/gan.png differ diff --git a/flags/language/gcr.png b/flags/language/gcr.png new file mode 100644 index 0000000..5b24845 Binary files /dev/null and b/flags/language/gcr.png differ diff --git a/flags/language/gi.png b/flags/language/gi.png new file mode 100644 index 0000000..d71ee66 Binary files /dev/null and b/flags/language/gi.png differ diff --git a/flags/language/gl.png b/flags/language/gl.png new file mode 100644 index 0000000..2319612 Binary files /dev/null and b/flags/language/gl.png differ diff --git a/flags/language/gmy.png b/flags/language/gmy.png new file mode 100644 index 0000000..6490a04 Binary files /dev/null and b/flags/language/gmy.png differ diff --git a/flags/language/gn.png b/flags/language/gn.png new file mode 100644 index 0000000..27c127f Binary files /dev/null and b/flags/language/gn.png differ diff --git a/flags/language/gnw.png b/flags/language/gnw.png new file mode 100644 index 0000000..1b818a5 Binary files /dev/null and b/flags/language/gnw.png differ diff --git a/flags/language/grc.png b/flags/language/grc.png new file mode 100644 index 0000000..96d4026 Binary files /dev/null and b/flags/language/grc.png differ diff --git a/flags/language/gsw.png b/flags/language/gsw.png new file mode 100644 index 0000000..93cda20 Binary files /dev/null and b/flags/language/gsw.png differ diff --git a/flags/language/gu.png b/flags/language/gu.png new file mode 100644 index 0000000..09a376a Binary files /dev/null and b/flags/language/gu.png differ diff --git a/flags/language/gug.png b/flags/language/gug.png new file mode 100644 index 0000000..27c127f Binary files /dev/null and b/flags/language/gug.png differ diff --git a/flags/language/gui.png b/flags/language/gui.png new file mode 100644 index 0000000..37b2b19 Binary files /dev/null and b/flags/language/gui.png differ diff --git a/flags/language/gyn.png b/flags/language/gyn.png new file mode 100644 index 0000000..a615769 Binary files /dev/null and b/flags/language/gyn.png differ diff --git a/flags/language/ha.png b/flags/language/ha.png new file mode 100644 index 0000000..135b4f0 Binary files /dev/null and b/flags/language/ha.png differ diff --git a/flags/language/hak.png b/flags/language/hak.png new file mode 100644 index 0000000..e2cdba4 Binary files /dev/null and b/flags/language/hak.png differ diff --git a/flags/language/hbo.png b/flags/language/hbo.png new file mode 100644 index 0000000..3be203c Binary files /dev/null and b/flags/language/hbo.png differ diff --git a/flags/language/he.png b/flags/language/he.png new file mode 100644 index 0000000..b9423cf Binary files /dev/null and b/flags/language/he.png differ diff --git a/flags/language/hr.png b/flags/language/hr.png new file mode 100644 index 0000000..c5c0776 Binary files /dev/null and b/flags/language/hr.png differ diff --git a/flags/language/hsn.png b/flags/language/hsn.png new file mode 100644 index 0000000..4391e3a Binary files /dev/null and b/flags/language/hsn.png differ diff --git a/flags/language/ht.png b/flags/language/ht.png new file mode 100644 index 0000000..7ba2ec1 Binary files /dev/null and b/flags/language/ht.png differ diff --git a/flags/language/hu.png b/flags/language/hu.png new file mode 100644 index 0000000..8ed5397 Binary files /dev/null and b/flags/language/hu.png differ diff --git a/flags/language/hy.png b/flags/language/hy.png new file mode 100644 index 0000000..6946f6a Binary files /dev/null and b/flags/language/hy.png differ diff --git a/flags/language/hy_at.png b/flags/language/hy_at.png new file mode 100644 index 0000000..6e34702 Binary files /dev/null and b/flags/language/hy_at.png differ diff --git a/flags/language/it.png b/flags/language/it.png new file mode 100644 index 0000000..43674ae Binary files /dev/null and b/flags/language/it.png differ diff --git a/flags/language/jp.png b/flags/language/jp.png new file mode 100644 index 0000000..10966a2 Binary files /dev/null and b/flags/language/jp.png differ diff --git a/flags/language/ka.png b/flags/language/ka.png new file mode 100644 index 0000000..4b01f44 Binary files /dev/null and b/flags/language/ka.png differ diff --git a/flags/language/kab.png b/flags/language/kab.png new file mode 100644 index 0000000..459dc9e Binary files /dev/null and b/flags/language/kab.png differ diff --git a/flags/language/km.png b/flags/language/km.png new file mode 100644 index 0000000..233d06a Binary files /dev/null and b/flags/language/km.png differ diff --git a/flags/language/kw.png b/flags/language/kw.png new file mode 100644 index 0000000..52f0f98 Binary files /dev/null and b/flags/language/kw.png differ diff --git a/flags/language/language_flags.png b/flags/language/language_flags.png new file mode 100644 index 0000000..7554ea3 Binary files /dev/null and b/flags/language/language_flags.png differ diff --git a/flags/language/language_icons.png b/flags/language/language_icons.png new file mode 100644 index 0000000..2781682 Binary files /dev/null and b/flags/language/language_icons.png differ diff --git a/flags/language/lb.png b/flags/language/lb.png new file mode 100644 index 0000000..f2bac49 Binary files /dev/null and b/flags/language/lb.png differ diff --git a/flags/language/li.png b/flags/language/li.png new file mode 100644 index 0000000..6a24fe7 Binary files /dev/null and b/flags/language/li.png differ diff --git a/flags/language/lo.png b/flags/language/lo.png new file mode 100644 index 0000000..a9f0135 Binary files /dev/null and b/flags/language/lo.png differ diff --git a/flags/language/lou.png b/flags/language/lou.png new file mode 100644 index 0000000..3bda7ab Binary files /dev/null and b/flags/language/lou.png differ diff --git a/flags/language/ltz.png b/flags/language/ltz.png new file mode 100644 index 0000000..9d38b8a Binary files /dev/null and b/flags/language/ltz.png differ diff --git a/flags/language/lzh.png b/flags/language/lzh.png new file mode 100644 index 0000000..c6ef8ee Binary files /dev/null and b/flags/language/lzh.png differ diff --git a/flags/language/mi.png b/flags/language/mi.png new file mode 100644 index 0000000..9896b22 Binary files /dev/null and b/flags/language/mi.png differ diff --git a/flags/language/mic.png b/flags/language/mic.png new file mode 100644 index 0000000..376e0f2 Binary files /dev/null and b/flags/language/mic.png differ diff --git a/flags/language/mnp.png b/flags/language/mnp.png new file mode 100644 index 0000000..4cdb0fb Binary files /dev/null and b/flags/language/mnp.png differ diff --git a/flags/language/my.png b/flags/language/my.png new file mode 100644 index 0000000..2e1f266 Binary files /dev/null and b/flags/language/my.png differ diff --git a/flags/language/nan.png b/flags/language/nan.png new file mode 100644 index 0000000..a424a0a Binary files /dev/null and b/flags/language/nan.png differ diff --git a/flags/language/new.png b/flags/language/new.png new file mode 100644 index 0000000..bf9b8b5 Binary files /dev/null and b/flags/language/new.png differ diff --git a/flags/language/nhd.png b/flags/language/nhd.png new file mode 100644 index 0000000..272a197 Binary files /dev/null and b/flags/language/nhd.png differ diff --git a/flags/language/niu.png b/flags/language/niu.png new file mode 100644 index 0000000..edc09aa Binary files /dev/null and b/flags/language/niu.png differ diff --git a/flags/language/nl.png b/flags/language/nl.png new file mode 100644 index 0000000..91017e6 Binary files /dev/null and b/flags/language/nl.png differ diff --git a/flags/language/ny.png b/flags/language/ny.png new file mode 100644 index 0000000..1a6dcb2 Binary files /dev/null and b/flags/language/ny.png differ diff --git a/flags/language/oc.png b/flags/language/oc.png new file mode 100644 index 0000000..4f6a2a5 Binary files /dev/null and b/flags/language/oc.png differ diff --git a/flags/language/pnt.png b/flags/language/pnt.png new file mode 100644 index 0000000..10c93cc Binary files /dev/null and b/flags/language/pnt.png differ diff --git a/flags/language/ri.png b/flags/language/ri.png new file mode 100644 index 0000000..9c8baba Binary files /dev/null and b/flags/language/ri.png differ diff --git a/flags/language/ro.png b/flags/language/ro.png new file mode 100644 index 0000000..38d9c25 Binary files /dev/null and b/flags/language/ro.png differ diff --git a/flags/language/ro_md.png b/flags/language/ro_md.png new file mode 100644 index 0000000..d57647b Binary files /dev/null and b/flags/language/ro_md.png differ diff --git a/flags/language/ro_ro.png b/flags/language/ro_ro.png new file mode 100644 index 0000000..b622662 Binary files /dev/null and b/flags/language/ro_ro.png differ diff --git a/flags/language/ru.png b/flags/language/ru.png new file mode 100644 index 0000000..df09ef3 Binary files /dev/null and b/flags/language/ru.png differ diff --git a/flags/language/shy.png b/flags/language/shy.png new file mode 100644 index 0000000..be12eed Binary files /dev/null and b/flags/language/shy.png differ diff --git a/flags/language/sq.png b/flags/language/sq.png new file mode 100644 index 0000000..0d929c6 Binary files /dev/null and b/flags/language/sq.png differ diff --git a/flags/language/todo.txt b/flags/language/todo.txt new file mode 100644 index 0000000..a3b0d8d --- /dev/null +++ b/flags/language/todo.txt @@ -0,0 +1,2 @@ +Bihari languages +https://en.wikipedia.org/wiki/Bihari_languages \ No newline at end of file diff --git a/flags/language/tsd.png b/flags/language/tsd.png new file mode 100644 index 0000000..f7b2570 Binary files /dev/null and b/flags/language/tsd.png differ diff --git a/flags/language/tw.png b/flags/language/tw.png new file mode 100644 index 0000000..e23574e Binary files /dev/null and b/flags/language/tw.png differ diff --git a/flags/language/vn.png b/flags/language/vn.png new file mode 100644 index 0000000..6610497 Binary files /dev/null and b/flags/language/vn.png differ diff --git a/flags/language/wes.png b/flags/language/wes.png new file mode 100644 index 0000000..957b9d8 Binary files /dev/null and b/flags/language/wes.png differ diff --git a/flags/language/wls.png b/flags/language/wls.png new file mode 100644 index 0000000..afe0fb7 Binary files /dev/null and b/flags/language/wls.png differ diff --git a/flags/language/wuu.png b/flags/language/wuu.png new file mode 100644 index 0000000..a354aaa Binary files /dev/null and b/flags/language/wuu.png differ diff --git a/flags/language/xdm.png b/flags/language/xdm.png new file mode 100644 index 0000000..6284fbe Binary files /dev/null and b/flags/language/xdm.png differ diff --git a/flags/language/xno.png b/flags/language/xno.png new file mode 100644 index 0000000..47cddf7 Binary files /dev/null and b/flags/language/xno.png differ diff --git a/flags/language/yej.png b/flags/language/yej.png new file mode 100644 index 0000000..ee8c0d5 Binary files /dev/null and b/flags/language/yej.png differ diff --git a/flags/language/yue.png b/flags/language/yue.png new file mode 100644 index 0000000..c260656 Binary files /dev/null and b/flags/language/yue.png differ diff --git a/flags/language/zdj.png b/flags/language/zdj.png new file mode 100644 index 0000000..eb174c7 Binary files /dev/null and b/flags/language/zdj.png differ diff --git a/flags/language/zh.png b/flags/language/zh.png new file mode 100644 index 0000000..c4914d0 Binary files /dev/null and b/flags/language/zh.png differ diff --git a/hidden_files b/hidden_files new file mode 100644 index 0000000..5d7e190 --- /dev/null +++ b/hidden_files @@ -0,0 +1,15 @@ +classes +flags +index_icons +languages +templates +hidden_files +AutoIndex.conf.php +config.php +access.log +license.html +meta.inc +robots.txt +favicon.gif +blank.html +index.htm \ No newline at end of file diff --git a/index.htm b/index.htm new file mode 100644 index 0000000..ee1f723 --- /dev/null +++ b/index.htm @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/index.php b/index.php new file mode 100644 index 0000000..39c7794 --- /dev/null +++ b/index.php @@ -0,0 +1,641 @@ + + * @version 1.2.1 (January 06, 2007) + * + * @copyright Copyright (C) 2002-2007 Justin Hagstrom + * @license http://www.gnu.org/licenses/gpl.html GNU General Public License (GPL) + * + * @link http://autoindex.sourceforge.net + */ + +/* + AutoIndex PHP Script 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. + + AutoIndex PHP Script 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 +*/ + +/** + * OPTIONAL SETTINGS: + */ + +//filenames and paths for configuration related files +define('CONFIG_STORED', 'AutoIndex.conf.php'); +define('CONFIG_GENERATOR', 'config.php'); + +//paths for files that will be included +define('PATH_TO_CLASSES', './classes/'); +define('PATH_TO_LANGUAGES', './languages/'); +define('LANGUAGE_FILE_EXT', '.txt'); + +//filenames of template files +define('GLOBAL_HEADER', 'global_header.tpl'); +define('GLOBAL_FOOTER', 'global_footer.tpl'); +define('TABLE_HEADER', 'table_header.tpl'); +define('TABLE_FOOTER', 'table_footer.tpl'); +define('EACH_FILE', 'each_file.tpl'); + +/** + * When ENABLE_CACHE is true, the indexes of directories will be stored in + * files in the folder CACHE_STORAGE_DIR. You will notice a speed improvement + * when viewing folders that contain a few thousand files. However, the contents + * of the indexed folders will not be updated until you delete the cache file. + */ +define('ENABLE_CACHE', false); + +/** + * This is the folder cache data will be stored in. PHP needs write permission + * in this directory. You can use an absolute path or a relative path, just + * make sure there is a slash at the end. + */ +define('CACHE_STORAGE_DIR', './cache/'); + +/** + * Format to display dates in. + * @see date() + */ +define('DATE_FORMAT', 'Y-M-d'); + +/** + * Sets debug mode. Off (false) by default. + */ +define('DEBUG', false); + +/* END OPTIONAL SETTINGS */ + + +/** The time this script began to execute. */ +define('START_TIME', microtime(true)); + +/** Level for disabled/banned accounts. */ +define('BANNED', -1); + +/** Level for Guest users (users who are not logged in). */ +define('GUEST', 0); + +/** Level for regular user accounts. */ +define('USER', 1); + +/** Level for moderator ("super user") accounts. */ +define('MODERATOR', 2); + +/** Level for Admin users. */ +define('ADMIN', 3); + +/** + * Minimum user level allowed to upload files. + * Use the ADMIN, MODERATOR, USER, GUEST constants. + * GUEST will allow non-logged-in users to upload. + */ +define('LEVEL_TO_UPLOAD', USER); + +/** The version of AutoIndex PHP Script (the whole release, not based on individual files). */ +define('VERSION', '2.2.4'); + +/** + * This must be set to true for other included files to run. Setting it to + * false could be used to temporarily disable the script. + */ +define('IN_AUTOINDEX', true); + +if (@get_magic_quotes_gpc()) +//remove any slashes added by the "magic quotes" setting +{ + $_GET = array_map('stripslashes', $_GET); + $_POST = array_map('stripslashes', $_POST); +} +@set_magic_quotes_runtime(0); + +$_GET = array_change_key_case($_GET, CASE_LOWER); +$_POST = array_change_key_case($_POST, CASE_LOWER); + +if (@ini_get('zlib.output_compression') == '1') +//compensate for compressed output set in php.ini +{ + header('Content-Encoding: gzip'); +} + +/* + * Uncomment the following code to turn on strict XHTML 1.1 compliance in + * users' browsers. If you do this, make sure any changes you make to the + * template do not break XHTML 1.1 compliance. + */ +/*if (isset($_SERVER['HTTP_ACCEPT']) && preg_match('#application/(xhtml\+xml|\*)#i', $_SERVER['HTTP_ACCEPT'])) +{ + header('Content-Type: application/xhtml+xml'); +}*/ + +session_name('AutoIndex2'); +session_start(); + +/** + * Formats $text within valid XHTML 1.1 tags and doctype. + * + * @param string $text + * @param string $title + * @return string + */ +function simple_display($text, $title = 'Error on Page') +{ + return ' + + + + ' . $title . ' + + + +

    ' . $text . '

    + + +'; +} + +/** + * This function is automatically called by PHP when an undefined class is + * called. + * + * A file with the classname followed by .php is included to load the class. + * The class should start with an upper-case letter with each new word also in + * upper-case. The filename must match the class name (including case). + * + * @param string $class The name of the undefined class + */ +function __autoload($class) +{ + if ($class != 'self') + { + $file = PATH_TO_CLASSES . $class . '.php'; + /** Try to load the class file. */ + if (!@include_once($file)) + { + die(simple_display('Error including file ' + . htmlentities($file) . ' - cannot load class.')); + } + } +} + +/** + * This is used to report a fatal error that we cannot display with the Display + * class. All Exceptions used in AutoIndex should inherit from this class. + * + * @package AutoIndex + */ +class ExceptionFatal extends Exception {} + +try +{ + //now we need to include either the stored settings, or the config generator: + if (@is_file(CONFIG_STORED)) + { + if (!@is_readable(CONFIG_STORED)) + { + throw new ExceptionFatal('Make sure PHP has permission to read the file ' + . Url::html_output(CONFIG_STORED) . ''); + } + $config = new ConfigData(CONFIG_STORED); + } + else if (@is_file(CONFIG_GENERATOR)) + { + /** Include the config generator so a new config file can be created. */ + if (!@include_once(CONFIG_GENERATOR)) + { + throw new ExceptionFatal('Error including file ' + . Url::html_output(CONFIG_GENERATOR) . ''); + } + die(); + } + else + { + throw new ExceptionFatal('Neither ' + . Url::html_output(CONFIG_GENERATOR) . ' nor ' + . Url::html_output(CONFIG_STORED) . ' could be found.'); + } + + + //find and store the user's IP address and hostname: + $ip = (isset($_SERVER['REMOTE_ADDR']) ? $_SERVER['REMOTE_ADDR'] : 'N/A'); + if (isset($_SESSION['host'])) + { + $host = $_SESSION['host']; + } + else + { + $_SESSION['host'] = $host = @gethostbyaddr($ip); + } + + + //Create a language object: + $words = new Language(); + + + //Create a logging object: + $log = new Logging($config -> __get('log_file')); + + + foreach ($config as $key => $item) + /* Go through each config setting, and set a constant with each setting's + * name to either true or false depending on if the config setting is + * enabled. + */ + { + $key = strtoupper($key); + if (defined($key)) + { + throw new ExceptionFatal(Url::html_output($key) + . ' is already defined in ' . basename(Url::html_output($_SERVER['PHP_SELF'])) + . ', and should not be in the config file.'); + } + define($key, ($item != 'false' && $item != '0')); + } + + + //make sure all required settings are set in the config file + foreach (array('base_dir', 'icon_path', 'flag_path', 'language', 'template', + 'log_file', 'description_file', 'user_list', 'download_count', + 'hidden_files', 'banned_list', 'show_dir_size', 'use_login_system', + 'force_download', 'search_enabled', 'anti_leech', 'entries_per_page', + 'must_login_to_download', 'archive', 'days_new', 'thumbnail_height', + 'bandwidth_limit', 'md5_show', 'parse_htaccess') as $set) + { + if (!defined(strtoupper($set))) + { + throw new ExceptionFatal('Required setting ' . $set . ' is not set in ' . Url::html_output(CONFIG_STORED) . ''); + } + } + + + /* From this point on, we can throw ExceptionDisplay rather than + * Exception since all the configuration is done. + */ + + $b_list = $only_these_ips = $banned_ips = array(); + if (BANNED_LIST && @is_file($config -> __get('banned_list'))) + //make sure the user is not banned + { + $b_list = @file($config -> __get('banned_list')); + if ($b_list === false) + { + throw new ExceptionDisplay('Error reading from banned_list file.'); + } + for ($i = 0; $i < count($b_list); $i++) + { + $b_list[$i] = rtrim($b_list[$i], "\r\n"); + if (ConfigData::line_is_comment($b_list[$i])) + { + continue; + } + if ($b_list[$i]{0} === ':') + { + $only_these_ips[] = substr($b_list[$i], 1); + } + else + { + $banned_ips[] = $b_list[$i]; + } + } + if (count($only_these_ips) > 0) + { + if (!(DirectoryList::match_in_array($ip, $only_these_ips) || + DirectoryList::match_in_array($host, $only_these_ips))) + { + throw new ExceptionDisplay($words -> __get('the administrator has blocked your ip address or hostname') . '.'); + } + } + else if (DirectoryList::match_in_array($ip, $banned_ips) || + DirectoryList::match_in_array($host, $banned_ips)) + { + throw new ExceptionDisplay($words -> __get('the administrator has blocked your ip address or hostname') . '.'); + } + } + + $show_only_these_files = $hidden_files = array(); + if (HIDDEN_FILES && @is_file($config -> __get('hidden_files'))) + //store the hidden file list in $hidden_list + { + $hidden_list = @file($config -> __get('hidden_files')); + if ($hidden_list === false) + { + throw new ExceptionDisplay('Error reading from "hidden_files" file.'); + } + for ($i = 0; $i < count($hidden_list); $i++) + { + $hidden_list[$i] = rtrim($hidden_list[$i], "\r\n"); + if (ConfigData::line_is_comment($hidden_list[$i])) + { + continue; + } + if ($hidden_list[$i]{0} === ':') + { + $show_only_these_files[] = substr($hidden_list[$i], 1); + } + else + { + $hidden_files[] = $hidden_list[$i]; + } + } + } + + + //size of the "chunks" that are read at a time from the file (when $force_download is on) + $speed = (BANDWIDTH_LIMIT ? $config -> __get('bandwidth_limit') : 8); + + + if (DOWNLOAD_COUNT) + { + if (!@is_file($config -> __get('download_count'))) + { + $h = @fopen($config -> __get('download_count'), 'wb'); + if ($h === false) + { + throw new ExceptionDisplay('Could not open download count file for writing.' + . ' Make sure PHP has write permission to this file.'); + } + fclose($h); + } + $downloads = new ConfigData($config -> __get('download_count')); + } + + + //create a user object: + $log_login = false; + if (USE_LOGIN_SYSTEM && isset($_POST['username'], $_POST['password']) + && $_POST['username'] != '' && $_POST['password'] != '') + { + $you = new UserLoggedIn($_POST['username'], sha1($_POST['password'])); + $log_login = true; + $_SESSION['password'] = sha1($_POST['password']); + unset($_POST['password']); + $_SESSION['username'] = $_POST['username']; + } + else if (USE_LOGIN_SYSTEM && isset($_SESSION['username'], $_SESSION['password'])) + { + $you = new UserLoggedIn($_SESSION['username'], $_SESSION['password']); + } + else + { + $you = new User(); + if (MUST_LOGIN_TO_DOWNLOAD && USE_LOGIN_SYSTEM) + { + $str = '

    You must login to view and download files.

    ' + . '' + . '
    ' + . $you -> login_box() . '
    '; + echo new Display($str); + die(); + } + } + + + //set the logged in user's home directory: + $dir = Item::make_sure_slash((($you -> home_dir == '') ? $config -> __get('base_dir') : $you -> home_dir)); + $config -> set('base_dir', $dir); + $subdir = ''; + + if (isset($_GET['dir'])) + { + $dir .= Url::clean_input($_GET['dir']); + $dir = Item::make_sure_slash($dir); + if (!@is_dir($dir)) + { + header('HTTP/1.0 404 Not Found'); + $_GET['dir'] = ''; //so the "continue" link will work + throw new ExceptionDisplay('The directory ' + . Url::html_output($dir) . ' does not exist.'); + } + $subdir = substr($dir, strlen($config -> __get('base_dir'))); + if (isset($_GET['file']) && ($file = $_GET['file'])) + { + while (preg_match('#\\\\|/$#', $file)) + //remove all slashes from the end of the name + { + $file = substr($file, 0, -1); + } + $file = Url::clean_input($file); + if (!@is_file($dir . $file)) + { + header('HTTP/1.0 404 Not Found'); + throw new ExceptionDisplay('The file ' + . Url::html_output($file) . ' does not exist.'); + } + if (ANTI_LEECH && !isset($_SESSION['ref']) && (!isset($_SERVER['HTTP_REFERER']) + || stripos($_SERVER['HTTP_REFERER'], $_SERVER['SERVER_NAME']) === false)) + { + $log -> add_entry('Leech Attempt'); + $self = $_SERVER['SERVER_NAME'] . Url::html_output($_SERVER['PHP_SELF']) + . '?dir=' . Url::translate_uri($subdir); + throw new ExceptionDisplay('

    This PHP Script has an Anti-Leech feature turned on.

    ' + . '

    Make sure you are accessing this file directly from http://' . $self . '

    '); + } + $log -> add_entry($file); + if (DOWNLOAD_COUNT) + { + $downloads -> add_one($dir . $file); + } + $url = new Url($dir . $file, true); + $url -> download(); + } + } + + if ($log_login) + { + $log -> add_entry('Successful login (Username: ' + . $_SESSION['username'] . ')'); + } + + if (DESCRIPTION_FILE) + { + $descriptions = new ConfigData((@is_file($config -> __get('description_file'))) + ? $config -> __get('description_file') : false); + } + + if (PARSE_HTACCESS) + { + //parse .htaccess file(s) + new Htaccess($dir, '.htaccess'); + } + + if (MD5_SHOW && isset($_GET['md5']) && $_GET['md5'] != '') + { + $file = $dir . Url::clean_input($_GET['md5']); + if (!@is_file($file)) + { + header('HTTP/1.0 404 Not Found'); + throw new ExceptionDisplay('Cannot calculate md5sum: the file ' + . Url::html_output($file) . ' does not exist.'); + } + $size = (int)@filesize($file); + if ($size <= 0 || $size / 1048576 > $config -> __get('md5_show')) + { + throw new ExceptionDisplay('Empty file, or file too big to calculate the' + . 'md5sum of (according to the $md5_show variable).'); + } + die(simple_display(md5_file($file), 'md5sum of ' + . Url::html_output($file))); + } + + if (THUMBNAIL_HEIGHT && isset($_GET['thumbnail'])) + { + $fn = Url::clean_input($_GET['thumbnail']); + if ($fn == '') + { + die(); + } + echo new Image($fn); + } + + if (ARCHIVE && isset($_GET['archive'])) + { + $log -> add_entry('Directory archived'); + $outfile = Item::get_basename($subdir); + if ($outfile == '' || $outfile == '.') + { + $outfile = 'base_dir'; + } + $mime = new MimeType('.tar'); + header('Content-Type: ' . $mime -> __toString()); + header('Content-Disposition: attachment; filename="' + . $outfile . '.tar"'); + @set_time_limit(0); + $list = new DirectoryList($dir); + $tar = new Tar($list, $outfile, strlen($dir)); + die(); + } + + //set the sorting mode: + if (isset($_GET['sort']) && $_GET['sort'] != '') + { + $_SESSION['sort'] = $_GET['sort']; + } + else if (!isset($_SESSION['sort'])) + { + $_SESSION['sort'] = 'filename'; //default sort mode + } + + //set the sorting order: + if (isset($_GET['sort_mode']) && ($_GET['sort_mode'] == 'a' || $_GET['sort_mode'] == 'd')) + { + $_SESSION['sort_mode'] = $_GET['sort_mode']; + } + else if (!isset($_SESSION['sort_mode'])) + { + $_SESSION['sort_mode'] = 'a'; //default sort order + } + + if (count($_FILES) > 0) + //deal with any request to upload files: + { + $upload = new Upload($you); //the constructor checks if you have permission to upload + $upload -> do_upload(); + } + + if (USE_LOGIN_SYSTEM) + { + if (isset($_GET['logout']) && $_GET['logout'] == 'true') + { + $you -> logout(); + } + else if (isset($_GET['action']) && $_GET['action'] != '') + { + $admin = new Admin($you); //the constructor checks if you really are an admin + $admin -> action($_GET['action']); + } + } + + if (ANTI_LEECH && !isset($_SESSION['ref'])) + { + $_SESSION['ref'] = true; + } + + $search_log = ''; + if (SEARCH_ENABLED && isset($_GET['search'], $_GET['search_mode']) + && $_GET['search'] != '' && $_GET['search_mode'] != '') + { + $s = Url::clean_input($_GET['search']); + $dir_list = new Search($s, $dir, $_GET['search_mode']); + $search_log = "Search: $s"; + } + else if (ENABLE_CACHE) + { + $cache = CACHE_STORAGE_DIR . strtr($dir, '\/:', '---'); //path to cache file + if (@is_file($cache)) + { + $contents = @file_get_contents($cache); + if ($contents === false) + { + throw new ExceptionDisplay('Cannot open cache file for reading. Make sure PHP has read permission for these files.'); + } + $dir_list = unserialize($contents); + } + else + { + $dir_list = new DirectoryListDetailed($dir); + if (!@is_dir(CACHE_STORAGE_DIR)) + { + if (!Admin::mkdir_recursive(CACHE_STORAGE_DIR)) + //Attempt to create the directory. If it fails, tell the user to manually make the folder. + { + throw new ExceptionDisplay('Please create the directory ' + . Url::html_output(CACHE_STORAGE_DIR) + . ' so cache files can be written.'); + } + } + $h = @fopen($cache, 'wb'); + if ($h === false) + { + throw new ExceptionDisplay('Cannot write to cache file. Make sure PHP has write permission in the cache directory.'); + } + fwrite($h, serialize($dir_list)); + fclose($h); + } + } + else + { + $page = ((ENTRIES_PER_PAGE && isset($_GET['page'])) ? (int)$_GET['page'] : 1); + $dir_list = new DirectoryListDetailed($dir, $page); + $max_page = (ENTRIES_PER_PAGE ? (ceil($dir_list -> total_items() / $config -> __get('entries_per_page'))) : 1); + } + $log -> add_entry($search_log); + $str = $dir_list -> __toString(); + echo new Display($str); +} +catch (ExceptionDisplay $e) +{ + echo $e; +} +catch (Exception $e) +{ + echo simple_display($e -> getMessage()); +} + +?> \ No newline at end of file diff --git a/index_icons/apache/ass.png b/index_icons/apache/ass.png new file mode 100644 index 0000000..d926638 Binary files /dev/null and b/index_icons/apache/ass.png differ diff --git a/index_icons/apache/back.png b/index_icons/apache/back.png new file mode 100644 index 0000000..183a114 Binary files /dev/null and b/index_icons/apache/back.png differ diff --git a/index_icons/apache/binary.png b/index_icons/apache/binary.png new file mode 100644 index 0000000..cbdc5f9 Binary files /dev/null and b/index_icons/apache/binary.png differ diff --git a/index_icons/apache/binhex.png b/index_icons/apache/binhex.png new file mode 100644 index 0000000..d41320d Binary files /dev/null and b/index_icons/apache/binhex.png differ diff --git a/index_icons/apache/cd.png b/index_icons/apache/cd.png new file mode 100644 index 0000000..86bbb8b Binary files /dev/null and b/index_icons/apache/cd.png differ diff --git a/index_icons/apache/comp.png b/index_icons/apache/comp.png new file mode 100644 index 0000000..cfdc195 Binary files /dev/null and b/index_icons/apache/comp.png differ diff --git a/index_icons/apache/compressed.png b/index_icons/apache/compressed.png new file mode 100644 index 0000000..894ee81 Binary files /dev/null and b/index_icons/apache/compressed.png differ diff --git a/index_icons/apache/dir.png b/index_icons/apache/dir.png new file mode 100644 index 0000000..de3e591 Binary files /dev/null and b/index_icons/apache/dir.png differ diff --git a/index_icons/apache/dll.png b/index_icons/apache/dll.png new file mode 100644 index 0000000..cbdc5f9 Binary files /dev/null and b/index_icons/apache/dll.png differ diff --git a/index_icons/apache/doc.png b/index_icons/apache/doc.png new file mode 100644 index 0000000..bad6e4e Binary files /dev/null and b/index_icons/apache/doc.png differ diff --git a/index_icons/apache/generic.png b/index_icons/apache/generic.png new file mode 100644 index 0000000..42af82e Binary files /dev/null and b/index_icons/apache/generic.png differ diff --git a/index_icons/apache/image.png b/index_icons/apache/image.png new file mode 100644 index 0000000..a4edb69 Binary files /dev/null and b/index_icons/apache/image.png differ diff --git a/index_icons/apache/java.png b/index_icons/apache/java.png new file mode 100644 index 0000000..d431c68 Binary files /dev/null and b/index_icons/apache/java.png differ diff --git a/index_icons/apache/js.png b/index_icons/apache/js.png new file mode 100644 index 0000000..56a8d7a Binary files /dev/null and b/index_icons/apache/js.png differ diff --git a/index_icons/apache/key.png b/index_icons/apache/key.png new file mode 100644 index 0000000..d4899cc Binary files /dev/null and b/index_icons/apache/key.png differ diff --git a/index_icons/apache/login.png b/index_icons/apache/login.png new file mode 100644 index 0000000..a1b4880 Binary files /dev/null and b/index_icons/apache/login.png differ diff --git a/index_icons/apache/mov.png b/index_icons/apache/mov.png new file mode 100644 index 0000000..ec7a0d5 Binary files /dev/null and b/index_icons/apache/mov.png differ diff --git a/index_icons/apache/movie.png b/index_icons/apache/movie.png new file mode 100644 index 0000000..ec7a0d5 Binary files /dev/null and b/index_icons/apache/movie.png differ diff --git a/index_icons/apache/new.png b/index_icons/apache/new.png new file mode 100644 index 0000000..c7987dc Binary files /dev/null and b/index_icons/apache/new.png differ diff --git a/index_icons/apache/pdf.png b/index_icons/apache/pdf.png new file mode 100644 index 0000000..741b78c Binary files /dev/null and b/index_icons/apache/pdf.png differ diff --git a/index_icons/apache/php.png b/index_icons/apache/php.png new file mode 100644 index 0000000..5628101 Binary files /dev/null and b/index_icons/apache/php.png differ diff --git a/index_icons/apache/ppt.png b/index_icons/apache/ppt.png new file mode 100644 index 0000000..bad6e4e Binary files /dev/null and b/index_icons/apache/ppt.png differ diff --git a/index_icons/apache/ps.png b/index_icons/apache/ps.png new file mode 100644 index 0000000..2cbfdd7 Binary files /dev/null and b/index_icons/apache/ps.png differ diff --git a/index_icons/apache/search.png b/index_icons/apache/search.png new file mode 100644 index 0000000..db6910c Binary files /dev/null and b/index_icons/apache/search.png differ diff --git a/index_icons/apache/sound.png b/index_icons/apache/sound.png new file mode 100644 index 0000000..5d7c4cc Binary files /dev/null and b/index_icons/apache/sound.png differ diff --git a/index_icons/apache/srt.png b/index_icons/apache/srt.png new file mode 100644 index 0000000..74195b8 Binary files /dev/null and b/index_icons/apache/srt.png differ diff --git a/index_icons/apache/sub.png b/index_icons/apache/sub.png new file mode 100644 index 0000000..f3158a2 Binary files /dev/null and b/index_icons/apache/sub.png differ diff --git a/index_icons/apache/tar.png b/index_icons/apache/tar.png new file mode 100644 index 0000000..82e7ae5 Binary files /dev/null and b/index_icons/apache/tar.png differ diff --git a/index_icons/apache/text.png b/index_icons/apache/text.png new file mode 100644 index 0000000..ea64c88 Binary files /dev/null and b/index_icons/apache/text.png differ diff --git a/index_icons/apache/torrent.png b/index_icons/apache/torrent.png new file mode 100644 index 0000000..dd429cd Binary files /dev/null and b/index_icons/apache/torrent.png differ diff --git a/index_icons/apache/unknown.png b/index_icons/apache/unknown.png new file mode 100644 index 0000000..d846233 Binary files /dev/null and b/index_icons/apache/unknown.png differ diff --git a/index_icons/apache/uu.png b/index_icons/apache/uu.png new file mode 100644 index 0000000..40951b3 Binary files /dev/null and b/index_icons/apache/uu.png differ diff --git a/index_icons/apache/web.png b/index_icons/apache/web.png new file mode 100644 index 0000000..525d430 Binary files /dev/null and b/index_icons/apache/web.png differ diff --git a/index_icons/apache/xls.png b/index_icons/apache/xls.png new file mode 100644 index 0000000..bad6e4e Binary files /dev/null and b/index_icons/apache/xls.png differ diff --git a/index_icons/kde/ass.png b/index_icons/kde/ass.png new file mode 100644 index 0000000..d926638 Binary files /dev/null and b/index_icons/kde/ass.png differ diff --git a/index_icons/kde/back.png b/index_icons/kde/back.png new file mode 100644 index 0000000..a09643d Binary files /dev/null and b/index_icons/kde/back.png differ diff --git a/index_icons/kde/binary.png b/index_icons/kde/binary.png new file mode 100644 index 0000000..f933085 Binary files /dev/null and b/index_icons/kde/binary.png differ diff --git a/index_icons/kde/binhex.png b/index_icons/kde/binhex.png new file mode 100644 index 0000000..f933085 Binary files /dev/null and b/index_icons/kde/binhex.png differ diff --git a/index_icons/kde/cd.png b/index_icons/kde/cd.png new file mode 100644 index 0000000..c7e3521 Binary files /dev/null and b/index_icons/kde/cd.png differ diff --git a/index_icons/kde/comp.png b/index_icons/kde/comp.png new file mode 100644 index 0000000..285cc81 Binary files /dev/null and b/index_icons/kde/comp.png differ diff --git a/index_icons/kde/compressed.png b/index_icons/kde/compressed.png new file mode 100644 index 0000000..bb2eeb7 Binary files /dev/null and b/index_icons/kde/compressed.png differ diff --git a/index_icons/kde/dir.png b/index_icons/kde/dir.png new file mode 100644 index 0000000..efbfff8 Binary files /dev/null and b/index_icons/kde/dir.png differ diff --git a/index_icons/kde/dll.png b/index_icons/kde/dll.png new file mode 100644 index 0000000..f933085 Binary files /dev/null and b/index_icons/kde/dll.png differ diff --git a/index_icons/kde/doc.png b/index_icons/kde/doc.png new file mode 100644 index 0000000..13d56b5 Binary files /dev/null and b/index_icons/kde/doc.png differ diff --git a/index_icons/kde/generic.png b/index_icons/kde/generic.png new file mode 100644 index 0000000..faf190e Binary files /dev/null and b/index_icons/kde/generic.png differ diff --git a/index_icons/kde/image.png b/index_icons/kde/image.png new file mode 100644 index 0000000..28b2fde Binary files /dev/null and b/index_icons/kde/image.png differ diff --git a/index_icons/kde/java.png b/index_icons/kde/java.png new file mode 100644 index 0000000..0769e96 Binary files /dev/null and b/index_icons/kde/java.png differ diff --git a/index_icons/kde/js.png b/index_icons/kde/js.png new file mode 100644 index 0000000..8322dd1 Binary files /dev/null and b/index_icons/kde/js.png differ diff --git a/index_icons/kde/key.png b/index_icons/kde/key.png new file mode 100644 index 0000000..8322dd1 Binary files /dev/null and b/index_icons/kde/key.png differ diff --git a/index_icons/kde/login.png b/index_icons/kde/login.png new file mode 100644 index 0000000..a1b4880 Binary files /dev/null and b/index_icons/kde/login.png differ diff --git a/index_icons/kde/mov.png b/index_icons/kde/mov.png new file mode 100644 index 0000000..308da7a Binary files /dev/null and b/index_icons/kde/mov.png differ diff --git a/index_icons/kde/movie.png b/index_icons/kde/movie.png new file mode 100644 index 0000000..308da7a Binary files /dev/null and b/index_icons/kde/movie.png differ diff --git a/index_icons/kde/new.png b/index_icons/kde/new.png new file mode 100644 index 0000000..c7987dc Binary files /dev/null and b/index_icons/kde/new.png differ diff --git a/index_icons/kde/pdf.png b/index_icons/kde/pdf.png new file mode 100644 index 0000000..d719762 Binary files /dev/null and b/index_icons/kde/pdf.png differ diff --git a/index_icons/kde/php.png b/index_icons/kde/php.png new file mode 100644 index 0000000..5628101 Binary files /dev/null and b/index_icons/kde/php.png differ diff --git a/index_icons/kde/ppt.png b/index_icons/kde/ppt.png new file mode 100644 index 0000000..8322dd1 Binary files /dev/null and b/index_icons/kde/ppt.png differ diff --git a/index_icons/kde/ps.png b/index_icons/kde/ps.png new file mode 100644 index 0000000..13d56b5 Binary files /dev/null and b/index_icons/kde/ps.png differ diff --git a/index_icons/kde/search.png b/index_icons/kde/search.png new file mode 100644 index 0000000..db6910c Binary files /dev/null and b/index_icons/kde/search.png differ diff --git a/index_icons/kde/sound.png b/index_icons/kde/sound.png new file mode 100644 index 0000000..21f2908 Binary files /dev/null and b/index_icons/kde/sound.png differ diff --git a/index_icons/kde/srt.png b/index_icons/kde/srt.png new file mode 100644 index 0000000..74195b8 Binary files /dev/null and b/index_icons/kde/srt.png differ diff --git a/index_icons/kde/sub.png b/index_icons/kde/sub.png new file mode 100644 index 0000000..f3158a2 Binary files /dev/null and b/index_icons/kde/sub.png differ diff --git a/index_icons/kde/subtitle.png b/index_icons/kde/subtitle.png new file mode 100644 index 0000000..d926638 Binary files /dev/null and b/index_icons/kde/subtitle.png differ diff --git a/index_icons/kde/tar.png b/index_icons/kde/tar.png new file mode 100644 index 0000000..3c2cc56 Binary files /dev/null and b/index_icons/kde/tar.png differ diff --git a/index_icons/kde/text.png b/index_icons/kde/text.png new file mode 100644 index 0000000..13d56b5 Binary files /dev/null and b/index_icons/kde/text.png differ diff --git a/index_icons/kde/torrent.png b/index_icons/kde/torrent.png new file mode 100644 index 0000000..dd429cd Binary files /dev/null and b/index_icons/kde/torrent.png differ diff --git a/index_icons/kde/unknown.png b/index_icons/kde/unknown.png new file mode 100644 index 0000000..faf190e Binary files /dev/null and b/index_icons/kde/unknown.png differ diff --git a/index_icons/kde/uu.png b/index_icons/kde/uu.png new file mode 100644 index 0000000..bb2eeb7 Binary files /dev/null and b/index_icons/kde/uu.png differ diff --git a/index_icons/kde/web.png b/index_icons/kde/web.png new file mode 100644 index 0000000..594ff8d Binary files /dev/null and b/index_icons/kde/web.png differ diff --git a/index_icons/kde/xls.png b/index_icons/kde/xls.png new file mode 100644 index 0000000..6f45141 Binary files /dev/null and b/index_icons/kde/xls.png differ diff --git a/index_icons/osx/ass.png b/index_icons/osx/ass.png new file mode 100644 index 0000000..d926638 Binary files /dev/null and b/index_icons/osx/ass.png differ diff --git a/index_icons/osx/back.png b/index_icons/osx/back.png new file mode 100644 index 0000000..a3fd759 Binary files /dev/null and b/index_icons/osx/back.png differ diff --git a/index_icons/osx/binary.png b/index_icons/osx/binary.png new file mode 100644 index 0000000..12fb387 Binary files /dev/null and b/index_icons/osx/binary.png differ diff --git a/index_icons/osx/binhex.png b/index_icons/osx/binhex.png new file mode 100644 index 0000000..12fb387 Binary files /dev/null and b/index_icons/osx/binhex.png differ diff --git a/index_icons/osx/cd.png b/index_icons/osx/cd.png new file mode 100644 index 0000000..b0ab288 Binary files /dev/null and b/index_icons/osx/cd.png differ diff --git a/index_icons/osx/comp.png b/index_icons/osx/comp.png new file mode 100644 index 0000000..e5118f1 Binary files /dev/null and b/index_icons/osx/comp.png differ diff --git a/index_icons/osx/compressed.png b/index_icons/osx/compressed.png new file mode 100644 index 0000000..ccde83b Binary files /dev/null and b/index_icons/osx/compressed.png differ diff --git a/index_icons/osx/dir.png b/index_icons/osx/dir.png new file mode 100644 index 0000000..5ecdab1 Binary files /dev/null and b/index_icons/osx/dir.png differ diff --git a/index_icons/osx/dll.png b/index_icons/osx/dll.png new file mode 100644 index 0000000..e33010e Binary files /dev/null and b/index_icons/osx/dll.png differ diff --git a/index_icons/osx/doc.png b/index_icons/osx/doc.png new file mode 100644 index 0000000..7909250 Binary files /dev/null and b/index_icons/osx/doc.png differ diff --git a/index_icons/osx/generic.png b/index_icons/osx/generic.png new file mode 100644 index 0000000..847ce7e Binary files /dev/null and b/index_icons/osx/generic.png differ diff --git a/index_icons/osx/image.png b/index_icons/osx/image.png new file mode 100644 index 0000000..a0b8685 Binary files /dev/null and b/index_icons/osx/image.png differ diff --git a/index_icons/osx/java.png b/index_icons/osx/java.png new file mode 100644 index 0000000..251599c Binary files /dev/null and b/index_icons/osx/java.png differ diff --git a/index_icons/osx/js.png b/index_icons/osx/js.png new file mode 100644 index 0000000..57f6b7b Binary files /dev/null and b/index_icons/osx/js.png differ diff --git a/index_icons/osx/key.png b/index_icons/osx/key.png new file mode 100644 index 0000000..e5118f1 Binary files /dev/null and b/index_icons/osx/key.png differ diff --git a/index_icons/osx/login.png b/index_icons/osx/login.png new file mode 100644 index 0000000..a1b4880 Binary files /dev/null and b/index_icons/osx/login.png differ diff --git a/index_icons/osx/mov.png b/index_icons/osx/mov.png new file mode 100644 index 0000000..80b751b Binary files /dev/null and b/index_icons/osx/mov.png differ diff --git a/index_icons/osx/movie.png b/index_icons/osx/movie.png new file mode 100644 index 0000000..80b751b Binary files /dev/null and b/index_icons/osx/movie.png differ diff --git a/index_icons/osx/new.png b/index_icons/osx/new.png new file mode 100644 index 0000000..c7987dc Binary files /dev/null and b/index_icons/osx/new.png differ diff --git a/index_icons/osx/pdf.png b/index_icons/osx/pdf.png new file mode 100644 index 0000000..a1294e1 Binary files /dev/null and b/index_icons/osx/pdf.png differ diff --git a/index_icons/osx/php.png b/index_icons/osx/php.png new file mode 100644 index 0000000..5628101 Binary files /dev/null and b/index_icons/osx/php.png differ diff --git a/index_icons/osx/ppt.png b/index_icons/osx/ppt.png new file mode 100644 index 0000000..2b7d419 Binary files /dev/null and b/index_icons/osx/ppt.png differ diff --git a/index_icons/osx/ps.png b/index_icons/osx/ps.png new file mode 100644 index 0000000..7909250 Binary files /dev/null and b/index_icons/osx/ps.png differ diff --git a/index_icons/osx/search.png b/index_icons/osx/search.png new file mode 100644 index 0000000..db6910c Binary files /dev/null and b/index_icons/osx/search.png differ diff --git a/index_icons/osx/sound.png b/index_icons/osx/sound.png new file mode 100644 index 0000000..8e9cb78 Binary files /dev/null and b/index_icons/osx/sound.png differ diff --git a/index_icons/osx/srt.png b/index_icons/osx/srt.png new file mode 100644 index 0000000..74195b8 Binary files /dev/null and b/index_icons/osx/srt.png differ diff --git a/index_icons/osx/sub.png b/index_icons/osx/sub.png new file mode 100644 index 0000000..f3158a2 Binary files /dev/null and b/index_icons/osx/sub.png differ diff --git a/index_icons/osx/subtitle.png b/index_icons/osx/subtitle.png new file mode 100644 index 0000000..d926638 Binary files /dev/null and b/index_icons/osx/subtitle.png differ diff --git a/index_icons/osx/tar.png b/index_icons/osx/tar.png new file mode 100644 index 0000000..7f4b3e6 Binary files /dev/null and b/index_icons/osx/tar.png differ diff --git a/index_icons/osx/text.png b/index_icons/osx/text.png new file mode 100644 index 0000000..e5118f1 Binary files /dev/null and b/index_icons/osx/text.png differ diff --git a/index_icons/osx/torrent.png b/index_icons/osx/torrent.png new file mode 100644 index 0000000..dd429cd Binary files /dev/null and b/index_icons/osx/torrent.png differ diff --git a/index_icons/osx/unknown.png b/index_icons/osx/unknown.png new file mode 100644 index 0000000..847ce7e Binary files /dev/null and b/index_icons/osx/unknown.png differ diff --git a/index_icons/osx/uu.png b/index_icons/osx/uu.png new file mode 100644 index 0000000..ccde83b Binary files /dev/null and b/index_icons/osx/uu.png differ diff --git a/index_icons/osx/web.png b/index_icons/osx/web.png new file mode 100644 index 0000000..ff107e2 Binary files /dev/null and b/index_icons/osx/web.png differ diff --git a/index_icons/osx/xls.png b/index_icons/osx/xls.png new file mode 100644 index 0000000..8126f2e Binary files /dev/null and b/index_icons/osx/xls.png differ diff --git a/index_icons/winvista/ass.png b/index_icons/winvista/ass.png new file mode 100644 index 0000000..d926638 Binary files /dev/null and b/index_icons/winvista/ass.png differ diff --git a/index_icons/winvista/back.png b/index_icons/winvista/back.png new file mode 100644 index 0000000..1704dfa Binary files /dev/null and b/index_icons/winvista/back.png differ diff --git a/index_icons/winvista/binary.png b/index_icons/winvista/binary.png new file mode 100644 index 0000000..4751d22 Binary files /dev/null and b/index_icons/winvista/binary.png differ diff --git a/index_icons/winvista/binhex.png b/index_icons/winvista/binhex.png new file mode 100644 index 0000000..0f9f9f7 Binary files /dev/null and b/index_icons/winvista/binhex.png differ diff --git a/index_icons/winvista/cd.png b/index_icons/winvista/cd.png new file mode 100644 index 0000000..76786ff Binary files /dev/null and b/index_icons/winvista/cd.png differ diff --git a/index_icons/winvista/comp.png b/index_icons/winvista/comp.png new file mode 100644 index 0000000..1717b1a Binary files /dev/null and b/index_icons/winvista/comp.png differ diff --git a/index_icons/winvista/compressed.png b/index_icons/winvista/compressed.png new file mode 100644 index 0000000..7832eae Binary files /dev/null and b/index_icons/winvista/compressed.png differ diff --git a/index_icons/winvista/dir.png b/index_icons/winvista/dir.png new file mode 100644 index 0000000..a80d00a Binary files /dev/null and b/index_icons/winvista/dir.png differ diff --git a/index_icons/winvista/dll.png b/index_icons/winvista/dll.png new file mode 100644 index 0000000..294ce07 Binary files /dev/null and b/index_icons/winvista/dll.png differ diff --git a/index_icons/winvista/doc.png b/index_icons/winvista/doc.png new file mode 100644 index 0000000..d8b5a32 Binary files /dev/null and b/index_icons/winvista/doc.png differ diff --git a/index_icons/winvista/generic.png b/index_icons/winvista/generic.png new file mode 100644 index 0000000..d113a1f Binary files /dev/null and b/index_icons/winvista/generic.png differ diff --git a/index_icons/winvista/image.png b/index_icons/winvista/image.png new file mode 100644 index 0000000..328a04c Binary files /dev/null and b/index_icons/winvista/image.png differ diff --git a/index_icons/winvista/java.png b/index_icons/winvista/java.png new file mode 100644 index 0000000..cb59202 Binary files /dev/null and b/index_icons/winvista/java.png differ diff --git a/index_icons/winvista/js.png b/index_icons/winvista/js.png new file mode 100644 index 0000000..fbed22a Binary files /dev/null and b/index_icons/winvista/js.png differ diff --git a/index_icons/winvista/key.png b/index_icons/winvista/key.png new file mode 100644 index 0000000..fbe36a6 Binary files /dev/null and b/index_icons/winvista/key.png differ diff --git a/index_icons/winvista/login.png b/index_icons/winvista/login.png new file mode 100644 index 0000000..fad0909 Binary files /dev/null and b/index_icons/winvista/login.png differ diff --git a/index_icons/winvista/mov.png b/index_icons/winvista/mov.png new file mode 100644 index 0000000..199dfb7 Binary files /dev/null and b/index_icons/winvista/mov.png differ diff --git a/index_icons/winvista/movie.png b/index_icons/winvista/movie.png new file mode 100644 index 0000000..4ee2c5f Binary files /dev/null and b/index_icons/winvista/movie.png differ diff --git a/index_icons/winvista/new.png b/index_icons/winvista/new.png new file mode 100644 index 0000000..2eb9796 Binary files /dev/null and b/index_icons/winvista/new.png differ diff --git a/index_icons/winvista/pdf.png b/index_icons/winvista/pdf.png new file mode 100644 index 0000000..fc8e74a Binary files /dev/null and b/index_icons/winvista/pdf.png differ diff --git a/index_icons/winvista/php.png b/index_icons/winvista/php.png new file mode 100644 index 0000000..b703ca6 Binary files /dev/null and b/index_icons/winvista/php.png differ diff --git a/index_icons/winvista/ppt.png b/index_icons/winvista/ppt.png new file mode 100644 index 0000000..fbb8558 Binary files /dev/null and b/index_icons/winvista/ppt.png differ diff --git a/index_icons/winvista/ps.png b/index_icons/winvista/ps.png new file mode 100644 index 0000000..74f934c Binary files /dev/null and b/index_icons/winvista/ps.png differ diff --git a/index_icons/winvista/search.png b/index_icons/winvista/search.png new file mode 100644 index 0000000..6362f3e Binary files /dev/null and b/index_icons/winvista/search.png differ diff --git a/index_icons/winvista/sound.png b/index_icons/winvista/sound.png new file mode 100644 index 0000000..408f5e0 Binary files /dev/null and b/index_icons/winvista/sound.png differ diff --git a/index_icons/winvista/srt.png b/index_icons/winvista/srt.png new file mode 100644 index 0000000..74195b8 Binary files /dev/null and b/index_icons/winvista/srt.png differ diff --git a/index_icons/winvista/sub.png b/index_icons/winvista/sub.png new file mode 100644 index 0000000..f3158a2 Binary files /dev/null and b/index_icons/winvista/sub.png differ diff --git a/index_icons/winvista/subtitle.png b/index_icons/winvista/subtitle.png new file mode 100644 index 0000000..d926638 Binary files /dev/null and b/index_icons/winvista/subtitle.png differ diff --git a/index_icons/winvista/tar.png b/index_icons/winvista/tar.png new file mode 100644 index 0000000..35a73fa Binary files /dev/null and b/index_icons/winvista/tar.png differ diff --git a/index_icons/winvista/text.png b/index_icons/winvista/text.png new file mode 100644 index 0000000..9fb395c Binary files /dev/null and b/index_icons/winvista/text.png differ diff --git a/index_icons/winvista/torrent.png b/index_icons/winvista/torrent.png new file mode 100644 index 0000000..dd429cd Binary files /dev/null and b/index_icons/winvista/torrent.png differ diff --git a/index_icons/winvista/unknown.png b/index_icons/winvista/unknown.png new file mode 100644 index 0000000..d113a1f Binary files /dev/null and b/index_icons/winvista/unknown.png differ diff --git a/index_icons/winvista/uu.png b/index_icons/winvista/uu.png new file mode 100644 index 0000000..35a73fa Binary files /dev/null and b/index_icons/winvista/uu.png differ diff --git a/index_icons/winvista/web.png b/index_icons/winvista/web.png new file mode 100644 index 0000000..cdebf5e Binary files /dev/null and b/index_icons/winvista/web.png differ diff --git a/index_icons/winvista/xls.png b/index_icons/winvista/xls.png new file mode 100644 index 0000000..848fd11 Binary files /dev/null and b/index_icons/winvista/xls.png differ diff --git a/index_icons/winxp/ass.png b/index_icons/winxp/ass.png new file mode 100644 index 0000000..d926638 Binary files /dev/null and b/index_icons/winxp/ass.png differ diff --git a/index_icons/winxp/back.png b/index_icons/winxp/back.png new file mode 100644 index 0000000..30c813a Binary files /dev/null and b/index_icons/winxp/back.png differ diff --git a/index_icons/winxp/binary.png b/index_icons/winxp/binary.png new file mode 100644 index 0000000..689f4eb Binary files /dev/null and b/index_icons/winxp/binary.png differ diff --git a/index_icons/winxp/binhex.png b/index_icons/winxp/binhex.png new file mode 100644 index 0000000..0f9f9f7 Binary files /dev/null and b/index_icons/winxp/binhex.png differ diff --git a/index_icons/winxp/cd.png b/index_icons/winxp/cd.png new file mode 100644 index 0000000..85aa3c1 Binary files /dev/null and b/index_icons/winxp/cd.png differ diff --git a/index_icons/winxp/comp.png b/index_icons/winxp/comp.png new file mode 100644 index 0000000..d84af84 Binary files /dev/null and b/index_icons/winxp/comp.png differ diff --git a/index_icons/winxp/compressed.png b/index_icons/winxp/compressed.png new file mode 100644 index 0000000..131c5df Binary files /dev/null and b/index_icons/winxp/compressed.png differ diff --git a/index_icons/winxp/dir.png b/index_icons/winxp/dir.png new file mode 100644 index 0000000..e67fe98 Binary files /dev/null and b/index_icons/winxp/dir.png differ diff --git a/index_icons/winxp/dll.png b/index_icons/winxp/dll.png new file mode 100644 index 0000000..2977612 Binary files /dev/null and b/index_icons/winxp/dll.png differ diff --git a/index_icons/winxp/doc.png b/index_icons/winxp/doc.png new file mode 100644 index 0000000..80cb76f Binary files /dev/null and b/index_icons/winxp/doc.png differ diff --git a/index_icons/winxp/generic.png b/index_icons/winxp/generic.png new file mode 100644 index 0000000..5cfa3c8 Binary files /dev/null and b/index_icons/winxp/generic.png differ diff --git a/index_icons/winxp/image.png b/index_icons/winxp/image.png new file mode 100644 index 0000000..5354088 Binary files /dev/null and b/index_icons/winxp/image.png differ diff --git a/index_icons/winxp/java.png b/index_icons/winxp/java.png new file mode 100644 index 0000000..7242701 Binary files /dev/null and b/index_icons/winxp/java.png differ diff --git a/index_icons/winxp/js.png b/index_icons/winxp/js.png new file mode 100644 index 0000000..5329793 Binary files /dev/null and b/index_icons/winxp/js.png differ diff --git a/index_icons/winxp/key.png b/index_icons/winxp/key.png new file mode 100644 index 0000000..38a5505 Binary files /dev/null and b/index_icons/winxp/key.png differ diff --git a/index_icons/winxp/login.png b/index_icons/winxp/login.png new file mode 100644 index 0000000..d4e2670 Binary files /dev/null and b/index_icons/winxp/login.png differ diff --git a/index_icons/winxp/mov.png b/index_icons/winxp/mov.png new file mode 100644 index 0000000..199dfb7 Binary files /dev/null and b/index_icons/winxp/mov.png differ diff --git a/index_icons/winxp/movie.png b/index_icons/winxp/movie.png new file mode 100644 index 0000000..fc67b3e Binary files /dev/null and b/index_icons/winxp/movie.png differ diff --git a/index_icons/winxp/new.png b/index_icons/winxp/new.png new file mode 100644 index 0000000..9db7a57 Binary files /dev/null and b/index_icons/winxp/new.png differ diff --git a/index_icons/winxp/pdf.png b/index_icons/winxp/pdf.png new file mode 100644 index 0000000..fc8e74a Binary files /dev/null and b/index_icons/winxp/pdf.png differ diff --git a/index_icons/winxp/php.png b/index_icons/winxp/php.png new file mode 100644 index 0000000..27b5a1c Binary files /dev/null and b/index_icons/winxp/php.png differ diff --git a/index_icons/winxp/ppt.png b/index_icons/winxp/ppt.png new file mode 100644 index 0000000..92d196b Binary files /dev/null and b/index_icons/winxp/ppt.png differ diff --git a/index_icons/winxp/ps.png b/index_icons/winxp/ps.png new file mode 100644 index 0000000..74f934c Binary files /dev/null and b/index_icons/winxp/ps.png differ diff --git a/index_icons/winxp/search.png b/index_icons/winxp/search.png new file mode 100644 index 0000000..d526619 Binary files /dev/null and b/index_icons/winxp/search.png differ diff --git a/index_icons/winxp/sound.png b/index_icons/winxp/sound.png new file mode 100644 index 0000000..6ed1369 Binary files /dev/null and b/index_icons/winxp/sound.png differ diff --git a/index_icons/winxp/srt.png b/index_icons/winxp/srt.png new file mode 100644 index 0000000..74195b8 Binary files /dev/null and b/index_icons/winxp/srt.png differ diff --git a/index_icons/winxp/sub.png b/index_icons/winxp/sub.png new file mode 100644 index 0000000..f3158a2 Binary files /dev/null and b/index_icons/winxp/sub.png differ diff --git a/index_icons/winxp/subtitle.png b/index_icons/winxp/subtitle.png new file mode 100644 index 0000000..d926638 Binary files /dev/null and b/index_icons/winxp/subtitle.png differ diff --git a/index_icons/winxp/tar.png b/index_icons/winxp/tar.png new file mode 100644 index 0000000..dfe4e5a Binary files /dev/null and b/index_icons/winxp/tar.png differ diff --git a/index_icons/winxp/text.png b/index_icons/winxp/text.png new file mode 100644 index 0000000..6e8bc0a Binary files /dev/null and b/index_icons/winxp/text.png differ diff --git a/index_icons/winxp/torrent.png b/index_icons/winxp/torrent.png new file mode 100644 index 0000000..dd429cd Binary files /dev/null and b/index_icons/winxp/torrent.png differ diff --git a/index_icons/winxp/unknown.png b/index_icons/winxp/unknown.png new file mode 100644 index 0000000..5cfa3c8 Binary files /dev/null and b/index_icons/winxp/unknown.png differ diff --git a/index_icons/winxp/uu.png b/index_icons/winxp/uu.png new file mode 100644 index 0000000..dfe4e5a Binary files /dev/null and b/index_icons/winxp/uu.png differ diff --git a/index_icons/winxp/web.png b/index_icons/winxp/web.png new file mode 100644 index 0000000..80363b1 Binary files /dev/null and b/index_icons/winxp/web.png differ diff --git a/index_icons/winxp/xls.png b/index_icons/winxp/xls.png new file mode 100644 index 0000000..7e2aec4 Binary files /dev/null and b/index_icons/winxp/xls.png differ diff --git a/languages/al.txt b/languages/al.txt new file mode 100644 index 0000000..4570b99 --- /dev/null +++ b/languages/al.txt @@ -0,0 +1,91 @@ +// Albanian language file by Laurent Dhima + +index of Treguesi i +parent directory Directory Prind +thumbnail of Minjatura e +continue Vazhdo + +file File +files Files +folder Kartelë +folders Kartela +size Madhësia +total size Madhësia gjithsej +total downloads Gjithsej shkarkime +total Gjithsej +date Ndryshuar +description Përshkrimi +downloads Shkarkime +type Lloji +sort by Renditur sipas + +search Kërko +both Të dy llojet +search results for kërko rezultate për +and its subdirectories dhe nën-directories e tij + +account Llogaria e Përdoruesit +login Identifikohu +logout Shkëputu +username Emri i përdoruesit +password Fjalëkalimi +select user to remove Zgjidh përdoruesin që duhet hequr +are you sure you want to remove the user Jeni i sigurt që dëshironi të hiqni përdoruesin +delete this user Hiqe këtë përdorues +add user Shto përdorues + +guest Vizitues +user Përdorues +mod Moderator +admin Admin +level Niveli i përdoruesit + +rename riemërto/lëviz +renaming Duke riemërtuar +new filename Emër i Ri File +you can also move the file by specifying a path mund të lëvizni gjithashtu një file duke përcaktuar një pozicion +delete elemino +are you sure you want to delete the file Jeni i sigurt që dëshironi të eleminoni këtë file +edit description ndrysho përshkrimin +yes, delete Po, eleminoje + +upload Ngarko +files to this folder file(s) tek kjo kartelë +uploaded files Ngarko files +failed files Files e dështuar +none Asnjë +file already exists file ekziston +filename is listed as a hidden file emri i file rezulton si file i padukshëm + +reconfigure script Rikonfiguro skriptin +create new directory in this folder Krijo një directory të re në këtë kartelë +edit list of hidden files Ndrysho listën e files së padukshëm +add new user Shto përdorues të ri +delete user Hiq përdoruesin +copy url Copy a remote file (to this folder) +upload to ftp upload file to FTP server + +enter the new description for the file Shto përshkrimin e ri për file +change Ndrysho +enter the new name Shkruaj emrin e ri +create Krijo + +add Shto +remove Hiq +remove a hidden file Hiq një file të padukshëm +add a new hidden file Shto një file të ri të padukshëm + +edit ban list Shkruaj listën e IPve të bllokuara dhe emrat e host +remove a ban Hiq një bllokim +add a new ban Shto një bllokim të ri (adresa IP ose emri i host, mund të përdorësh wildcards) +the administrator has blocked your ip address or hostname Sorry, the administrator has blocked your IP address or hostname + +view entries from log file Shiko regjistrimet nga file i log +view statistics from log file Shiko statistikat nga file i log +how many entries would you like to view Sa regjistrime dëshironi të shikoni +view Shiko +page Page +of of + +calculate md5sum llogarit md5sum +download directory as tar.gz archive Shkarko directory si arkiv tar.gz diff --git a/languages/ar.txt b/languages/ar.txt new file mode 100644 index 0000000..4b1753b --- /dev/null +++ b/languages/ar.txt @@ -0,0 +1,91 @@ +// Arabic langauge file + +index of +parent directory +thumbnail of +continue + +file +files +folder +folders +size +total size +total downloads +total +date +description +downloads +type +sort by + +search +both +search results for +and its subdirectories + +account User Account +login +logout +username +password +select user to remove +are you sure you want to remove the user +delete this user +add user + +guest +user +mod Moderator +admin +level + +rename / +renaming +new filename +you can also move the file by specifying a path you can also move the file by specifying a path +delete +are you sure you want to delete the file ݿ +edit description +yes, delete + +upload +files to this folder +uploaded files +failed files +none +file already exists +filename is listed as a hidden file + +reconfigure script +create new directory in this folder +edit list of hidden files +add new user +delete user +copy url Copy a remote file (to this folder) +upload to ftp upload file to FTP server + +enter the new description for the file +change +enter the new name +create + +add +remove +remove a hidden file +add a new hidden file + +edit ban list +remove a ban +add a new ban (IP address or hostname, you can use wildcards) +the administrator has blocked your ip address or hostname + +view entries from log file +view statistics from log file +how many entries would you like to view +view +page Page +of of + +calculate md5sum +download directory as tar.gz archive tar.gz diff --git a/languages/bg.txt b/languages/bg.txt new file mode 100644 index 0000000..fbc78f9 --- /dev/null +++ b/languages/bg.txt @@ -0,0 +1,91 @@ +// Bulgarian language file by error_404@abv.bg + +index of Индек? на +parent directory Главна директори? +thumbnail of Миниатюра на +continue Продължи + +file Файл +files Файлове +folder Папка +folders Папки +size Големина +total size В?ичко големина +total downloads В?ичко теглени? +total В?ичко +date Дата +description Опи?ание +downloads Теглени? +type Вид +sort by Сортирай по + +search Тър?и +both В?ички +search results for намерени резултати за +and its subdirectories и техните подпапки + +account Потребител?ки профил +login Вход +logout Изход +username Потребител?ко име +password Парола +select user to remove Изберете потребител за премахване +are you sure you want to remove the user Сигурен ли ?те, че желаете да премахнете потребител +delete this user Изтрийте този потребител +add user Добавете потребител + +guest Го?т +user Потребител +mod Moderator +admin ?дмини?тратор +level Потребител?ко ниво + +rename преименувай/преме?ти +renaming Преименува +new filename ?ов файл +you can also move the file by specifying a path вие може да преме?тите файл като отбележите път? +delete изтрий +are you sure you want to delete the file Сигурен ли ?те, че желаете да изтриете файла +edit description пром?на на опи?ание +yes, delete Да, изтрий го + +upload Качи +files to this folder файл(ове) за тази папка +uploaded files Качени файлове +failed files ?еу?пешни файлове +none ?ищо +file already exists файлът вече ?ъще?твува +filename is listed as a hidden file файлът е ?ъ? ?крити атрибути + +reconfigure script Реконфигурирай ?крипта +create new directory in this folder Създай нова директори? в тази папка +edit list of hidden files Промени ?пи?ъка на ?критите файлове +add new user Добави нов потребител +delete user Изтрий потребител +copy url Copy a remote file (to this folder) +upload to ftp upload file to FTP server + +enter the new description for the file Добави ново опи?ание за този файл +change Промени +enter the new name Добави ново име +create Създай + +add Добави +remove Премахни +remove a hidden file Премахни ?крити? файл +add a new hidden file Добави нов ?крит файл + +edit ban list Промени ли?та на баннатите IP-та или хо?тове +remove a ban Премахни бан +add a new ban Добави нов бан (IP адре? или хо?т, може да използвате ?пи?ък по подразбиране) +the administrator has blocked your ip address or hostname Sorry, the administrator has blocked your IP address or hostname + +view entries from log file Прегледайте добавките в лог файла +view statistics from log file Прегкледайте ?тати?тиките от лог файла +how many entries would you like to view Колко добавки желаете да прегледате +view Виж +page Page +of of + +calculate md5sum Калкулирай md5 ?умата +download directory as tar.gz archive Свали директори?та като tar.gz архив diff --git a/languages/ca.txt b/languages/ca.txt new file mode 100644 index 0000000..9ab8420 --- /dev/null +++ b/languages/ca.txt @@ -0,0 +1,91 @@ +// Catalan language file (David Gimeno i Ayuso info@sima-pc.com) + +index of Índex de +parent directory Directori anterior +thumbnail of Miniatura de +continue Continuar + +file Fitxer +files Fitxers +folder Carpeta +folders Carpetes +size Tamany +total size Tamany total +total downloads Total descàrregues +total Total +date Modificat +description Descripció +downloads Descàrregues +type Tipus +sort by Ordenar per + +search Cercar +both Ambdós +search results for Resultats cerca de +and its subdirectories i els seus subdirectoris + +account Compte d'usuari +login Entrar +logout Sortir +username Nom d'usuari +password Contrasenya +select user to remove Seleccioneu l'usuari a suprimir +are you sure you want to remove the user Segur que voleu suprimir aquest usuari +delete this user Suprimir aquest usuari +add user Afegir usuari + +guest Visitant +user Usuari +mod Moderator +admin Administrador +level Nivell d'usuari + +rename redenominar/moure +renaming Redenominant +new filename Nom nou del fitxer +you can also move the file by specifying a path també podeu moure el fitxer si n'especifiqueu un camí +delete suprimir +are you sure you want to delete the file Segur que voleu suprimir aquest fitxer +edit description editar la descripció +yes, delete Sí, suprimir-lo + +upload Carregar +files to this folder fitxers a aquesta carpeta +uploaded files Fitxers carregats +failed files Fitxers fallits +none Cap +file already exists ja existeix aquest fitxer +filename is listed as a hidden file aquest fitxer consta com a ocult + +reconfigure script Reconfigurar seqüència +create new directory in this folder Crear un nou directori a aquesta carpeta +edit list of hidden files Editar la llista de fitxers ocults +add new user Afegir un usuari nou +delete user Suprimir un usuari +copy url Copy a remote file (to this folder) +upload to ftp upload file to FTP server + +enter the new description for the file Introduïu la descripció nova del fitxer +change Canviar +enter the new name Introduïu el nom nou +create Crear + +add Afegir +remove Suprimir +remove a hidden file Suprimir un fitxer ocult +add a new hidden file Afegir un fitxer ocult nou + +edit ban list Editar llista d'IP i noms d'ordinador prohibits +remove a ban Suprimir una prohibició +add a new ban Afegir una prohibició nova (adreça IP o nom d'ordinador, podeu usar-hi comodins) +the administrator has blocked your ip address or hostname Sorry, the administrator has blocked your IP address or hostname + +view entries from log file Veure entrades del fitxer de registre +view statistics from log file Veure estadístiques del fitxer de registre +how many entries would you like to view Quantes entrades voleu veure +view Veure +page Page +of of + +calculate md5sum calcular md5sum +download directory as tar.gz archive Descarregar directori com arxiu tar.gz diff --git a/languages/cz.txt b/languages/cz.txt new file mode 100644 index 0000000..ab1884c --- /dev/null +++ b/languages/cz.txt @@ -0,0 +1,91 @@ +// Český překlad, vytvořil the_pest + +index of Výpis z +parent directory Nadřazený adresář +thumbnail of Miniatura of +continue Pokra?ovat + +file Soubor +files Soubory +folder Složka +folders Složky +size Velikost +total size Celková velikost +total downloads Celkem staženo +total Total +date Upraveno +description Popis +downloads Staženo +type Typ +sort by Třídit podle + +search Vyhledat +both Vše +search results for výsledky vyhledávání pro +and its subdirectories a jeho podsložky + +account Uživatelský ú?et +login Přihlásit +logout Odhlásit +username Uživatelské jméno +password Heslo +select user to remove vyberte uživatele pro smazání +are you sure you want to remove the user Jste si jist, že chcete smazat uživatele +delete this user Smazat uživatele +add user Přidat uživatele + +guest Host +user Uživatel +mod Moderátor +admin Administrátor +level Uživatelská úrověň + +rename přejmenovat/přesunout +renaming Přejmenování +new filename Nové jméno souboru +you can also move the file by specifying a path můžete také přesunout soubor ur?ením cesty +delete smazat +are you sure you want to delete the file Jste si jist, že chcete smazat soubor +edit description upravit popis +yes, delete Ano, smazat + +upload Nahrát +files to this folder soubor(ů) do této složky +uploaded files Nahraté soubory +failed files Nahrávaní selhalo +none Žádné +file already exists soubor již existuje +filename is listed as a hidden file jméno souboru je v seznamu skrytých souborů + +reconfigure script Překonfigurovat skript +create new directory in this folder Vytvořit nový adresář (v této složce) +edit list of hidden files Upravit seznam skrytých souborů +add new user Přidat nového uživatele +delete user Smazat uživatele +copy url Kopírovat vzdálený soubor (do této složky) +upload to ftp nahrát soubor na FTP server + +enter the new description for the file Vložit nový popis k souboru +change Změnit +enter the new name Vložit nové jméno +create Vytvořit + +add Přidat +remove Odebrat +remove a hidden file Odebrat skrytý soubor +add a new hidden file Přidat skrytý soubor + +edit ban list Upravit seznam zakázaných IP adres a hostnames +remove a ban Odebrat zákaz +add a new ban Přidat nový zákaz (IP addresa nebo hostname, můžete použít zna?ek např *.host.cz) +the administrator has blocked your ip address or hostname Promiňte, ale správce zablokoval vaši IP adresu nebo hostname + +view entries from log file Zobrazit návštěvy z logu +view statistics from log file Zobrazit statistiky z logu +how many entries would you like to view Kolik položek chcete zobrazit +view Zobrazit +page Page +of of + +calculate md5sum spo?ítat md5sum +download directory as tar.gz archive Stáhnout složku jako tar.gz archiv diff --git a/languages/da.txt b/languages/da.txt new file mode 100644 index 0000000..f7cd4cf --- /dev/null +++ b/languages/da.txt @@ -0,0 +1,92 @@ +// Danish langauge file +// Translated by Morten Gregersen (Mobleman.dk), Denmark + +index of Index af +parent directory Ovenstende mappe +thumbnail of Thumbnail af +continue Fortst + +file Fil +files Filer +folder Mappe +folders Mapper +size Strrelse +total size Total strrelse +total downloads Total downloads +total Total +date ndret +description Beskrivelse +downloads Downloads +type Type +sort by Sorter efter + +search Sg +both Begge +search results for sgeresultater for +and its subdirectories og dens undermapper + +account Brugerkonto +login Log ind +logout Log ud +username Brugernavn +password Kodeord +select user to remove Vlg bruger der skal fjernes +are you sure you want to remove the user Er du sikker p at du vil fjerne brugeren +delete this user Slet denne bruger +add user Tilfj bruger + +guest Gst +user Almindelig bruger +mod Moderator +admin Administrator +level Brugerlevel + +rename omdb/flyt +renaming Omdber +new filename Nyt filnavn +you can also move the file by specifying a path du kan ogs flytte filen ved at specificere en sti +delete slet +are you sure you want to delete the file Er du sikker p at du vil slette filen +edit description redigr beskrivelse +yes, delete Ja, slet den + +upload Upload +files to this folder fil(er) til denne mappe +uploaded files Uploadede filer +failed files Filer der fejlede +none Ingen +file already exists filnavnet eksisterer allerede +filename is listed as a hidden file filenavnet er listet som en skjult fil + +reconfigure script Genkonfigurer script +create new directory in this folder Opret en ny mappe (i denne mappe) +edit list of hidden files Redigr listen med skjulte filer +add new user Tilfj ny bruger +delete user Slet bruger +copy url Kopier en online fil (til denne mappe) +upload to ftp upload fil til FTP server + +enter the new description for the file Indtast den nye beskrivelse til filen +change Skift +enter the new name Indtast the nye navn +create Opret + +add Tilfj +remove Fjern +remove a hidden file Fjern en skjult fil +add a new hidden file Tilfj en skjult fil + +edit ban list Redigr listen med bannede IP'er og hostnavne +remove a ban Fjern et ban +add a new ban Tilfj et nyt ban (IP-adresse eller hostnavn, du kan bruge wildcards) +the administrator has blocked your ip address or hostname Desvrre, administratoren har blokeret din IP-adresse eller hostnavn + +view entries from log file Vis indlg fra log-fil +view statistics from log file Vis statestikker fra log-fil +how many entries would you like to view Hvor mange indlg vil du have vist +view Vis +page Side +of af + +calculate md5sum udregnet md5sum +download directory as tar.gz archive Download mappe som tar.gz arkiv \ No newline at end of file diff --git a/languages/de.txt b/languages/de.txt new file mode 100644 index 0000000..6173062 --- /dev/null +++ b/languages/de.txt @@ -0,0 +1,92 @@ +// German langauge file by thefake +// Updated by tagdancer + +index of Index von +parent directory Uebergeordnetes Verzeichnis +thumbnail of Thumbnail von +continue Weiter + +file Datei +files Dateien +folder Ordner +folders Ordner +size Größe +total size Gesamt Größe +total downloads Gesamte Downloads +total Gesamt +date Modifiziert +description Beschreibung +downloads Downloads +type Typ +sort by Sortiert nach + +search Suche +both Beide +search results for Suchergebnisse für +and its subdirectories und seinen Subverzeichnissen + +account User Account +login Login +logout Log out +username Username +password Passwort +select user to remove Wähle User zum entfernen +are you sure you want to remove the user Sind Sie sicher dass sie diesen User entfernen wollen +delete this user Diesen User löschen +add user User hinzufügen + +guest Gast +user User +mod Moderator +admin Admin +level User's Level + +rename Umbenennen/Verschieben +renaming Umbenennen +new filename Neuer Dateiname +you can also move the file by specifying a path Sie koennen die Datei auch verschieben indem Sie den neuen Pfad angeben +delete Löschen +are you sure you want to delete the file Sind Sie sicher dass Sie diese Datei löschen wollen +edit description beschreibung editieren +yes, delete Ja, löschen + +upload Upload +files to this folder Datei(en) in diesem Verzeichnis +uploaded files Hochgeladene Dateien +failed files Fehlgeschlagene Dateien +none Keine +file already exists Datei existiert bereits +filename is listed as a hidden file Dateiname ist als versteckte Datei aufgelistet + +reconfigure script Rekonfiguriere Script +create new directory in this folder Neues Verzeichnis in diesem Ordner erzeugen +edit list of hidden files Liste der versteckten Dateien editieren +add new user Neuen User hinzufügen +delete user User löschen +copy url Copy a remote file (to this folder) +upload to ftp upload file to FTP server + +enter the new description for the file Geben Sie die neue Beschreibung für die Datei ein +change Ändern +enter the new name Geben Sie den neuen Namen ein +create Anlegen + +add Hinzufügen +remove Entfernen +remove a hidden file Eine versteckte Datei entfernen +add a new hidden file Eine versteckte Datei hinzufügen + +edit ban list Editiere Liste von gebannten IPs und Hostnamen +remove a ban Entferne einen Bann +add a new ban Füge einen neuen Bann hinzu (IP Addresse oder Hostname, Sie koennen Wildcards benutzen) +the administrator has blocked your ip address or hostname Der Administrator hat Ihre IP Adresse oder Hostnamen gesperrt + +view entries from log file Einträge aus der Log Datei ansehen +view statistics from log file Statistik aus der Log Datei ansehen +how many entries would you like to view Wieviele Eintraege wollen Sie sehen +view Ansicht +page Page +of of + +calculate md5sum kalkuliere md5sum +download directory as tar.gz archive Lade das gesamte Verzeichnis als tar.gz Archiv herunter diff --git a/languages/el.txt b/languages/el.txt new file mode 100644 index 0000000..54f6de6 --- /dev/null +++ b/languages/el.txt @@ -0,0 +1,91 @@ +// Greek language file for AutoIndex version 2.1.2, no independent copyright claims by NSK, Translated from English by NSK, The English original is under the GPL therefore this Greek translation is also under the GPL, http://nsk.wikinerds.org/ + +index of Λίστα +parent directory Πάνω κατάλογος +thumbnail of Σμίνκ?υνση του +continue Συνέχεια + +file Α?χείο +files Α?χεία +folder Κατάλογος +folders Κατάλογοι +size Μέγεθος +total size Συνολικό μέγεθος +total downloads Συνολικές μεταφο?ές +total Σ?νολο +date Αλλαγή +description Πε?ιγ?αφή +downloads Μεταφο?ές +type Τ?πος +sort by Ταξινόμιση ανά + +search Ε??εση +both Και τα δυο +search results for Αποτελέσματα ε??εσης για +and its subdirectories και τους υποκαταλόγους του + +account Λογα?ιασμός χ?ήστη +login Αναγνώ?ιση +logout Απεγνώ?ιση +username Όνομα χ?ήστη +password Συνθηματικό +select user to remove Επέλεξε χ?ήστη για να αφαι?έσεις +are you sure you want to remove the user Είσαι σίγου?ος ότι θέλεις να αφαι?έσεις το χ?ήστη +delete this user Διαγ?αφή αυτο? του χ?ήστη +add user Π?οσθήκη χ?ήστη + +guest Καλεσμένος +user Κανονικός χ?ήστης +mod Κατευναστής +admin Διαχει?ηστής +level Επίπεδο χ?ήστη + +rename αλλαγή ονόματος/μετακίνηση +renaming Αλλαγή ονόματος +new filename ?έο όνομα α?χείου +you can also move the file by specifying a path μπο?είς επίσης να μετακινήσεις ένα α?χείο με το να γ?άψεις μία διαδ?ομή +delete διαγ?αφή +are you sure you want to delete the file Είσαι σίγου?ος ότι θέλεις να σβήσεις το α?χείο +edit description διό?θωση πε?ιγ?αφής +yes, delete ?αι, σβήσε το + +upload Μετακίνηση π?ος διακομιστή +files to this folder α?χεία σε αυτό το κατάλογο +uploaded files Α?χεία που έχουν μετακινηθεί στον διακομιστή +failed files Αποτυχημένα α?χεία +none Κανένα +file already exists το α?χείο ήδη υπάχ?ει +filename is listed as a hidden file το όνομα α?χείου είναι κ?υφό + +reconfigure script Αλλαγή πα?αμέτ?ων +create new directory in this folder Δημιου?γία νέου καταλόγου (σε αυτό τον κατάλογο) +edit list of hidden files Επεξε?γασία λίστας κ?υφών α?χείων +add new user Π?οσθήκη νέου χ?ήστη +delete user Διαγ?αφή χ?ήστη +copy url Αντιγ?αφή ενός απομακ?υσμένου α?χείου (σε αυτό το κατάλογο) +upload to ftp Μετακίνηση του α?χείου σε διακομιστή FTP + +enter the new description for the file Εισήγαγε νέα πε?ιγ?αφή για το α?χείο +change Αλλαγή +enter the new name Εισηγαγε το νέο όνομα +create Δημιου?γία + +add Π?οσθήκη +remove Αφαί?εση +remove a hidden file Αφαί?εση κ?υφο? α?χείου +add a new hidden file Π?οσθήκη κ?υφο? α?χείου + +edit ban list Επεξε?γασία λίστας απαγο?ευμένων διευθ?νσεων δικτ?ου IP και ονομάτων hostname +remove a ban Αφαί?εση απαγό?ευσης +add a new ban Π?οσθήκη απαγό?ευσης (διε?θυνση δικτίου IP ή όνομα hostname, μπο?εις να χ?ησιμοποιήσεις χα?ακτή?ες μπαλαντέ?) +the administrator has blocked your ip address or hostname Συγνώμη, ο διαχει?ιστής έχει απαγο?έψει την διε?θυνση δικτ?ου IP σας ή το όνομα hostname σας + +view entries from log file Δες εγγ?αφές από το α?χείο κατεγ?αφών +view statistics from log file Δες στατιστικά απο το α?χείο κατεγ?αφών +how many entries would you like to view Πόσες πολλές εγγ?αφές θα ήθελες να δεις +view Δες +page Page +of of + +calculate md5sum υπολόγησε md5sum +download directory as tar.gz archive Μετακίνηση του καταλόγου στον υπολογιστή μου ως συμπιεσμένο tar.gz α?χείο \ No newline at end of file diff --git a/languages/en.txt b/languages/en.txt new file mode 100644 index 0000000..c37e1c7 --- /dev/null +++ b/languages/en.txt @@ -0,0 +1,91 @@ +// English langauge file + +index of Index of +parent directory Parent Directory +thumbnail of Thumbnail of +continue Continue + +file File +files Files +folder Folder +folders Folders +size Size +total size Total size +total downloads Total downloads +total Total +date Modified +description Description +downloads Downloads +type Type +sort by Sort by + +search Search +both Both +search results for search results for +and its subdirectories and its subdirectories + +account User Account +login Login +logout Log out +username Username +password Password +select user to remove Select user to remove +are you sure you want to remove the user Are you sure you want to remove the user +delete this user Delete this user +add user Add User + +guest Guest +user Regular User +mod Moderator +admin Administrator +level User's level + +rename rename/move +renaming Renaming +new filename New Filename +you can also move the file by specifying a path you can also move the file by specifying a path +delete delete +are you sure you want to delete the file Are you sure you want to delete the file +edit description edit description +yes, delete Yes, delete it + +upload Upload +files to this folder file(s) to this folder +uploaded files Uploaded files +failed files Failed files +none None +file already exists file already exists +filename is listed as a hidden file filename is listed as a hidden file + +reconfigure script Reconfigure script +create new directory in this folder Create new directory (in this folder) +edit list of hidden files Edit list of hidden files +add new user Add new user +delete user Delete user +copy url Copy a remote file (to this folder) +upload to ftp upload file to FTP server + +enter the new description for the file Enter the new description for the file +change Change +enter the new name Enter the new name +create Create + +add Add +remove Remove +remove a hidden file Remove a hidden file +add a new hidden file Add a new hidden file + +edit ban list Edit list of banned IPs and hostnames +remove a ban Remove a ban +add a new ban Add a new ban (IP address or hostname, you can use wildcards) +the administrator has blocked your ip address or hostname Sorry, the administrator has blocked your IP address or hostname + +view entries from log file View entries from log file +view statistics from log file View statistics from log file +how many entries would you like to view How many entries would you like to view +view View +page Page +of of + +calculate md5sum calculate md5sum +download directory as tar.gz archive Download directory as tar.gz archive diff --git a/languages/es.txt b/languages/es.txt new file mode 100644 index 0000000..5e18676 --- /dev/null +++ b/languages/es.txt @@ -0,0 +1,91 @@ +// Spanish langauge file by Jess Espino + +index of Índice de +parent directory Directorio Padre +thumbnail of Miniatura de +continue Continuar + +file Archivo +files Archivos +folder Carpeta +folders Carpetas +size Tamaño +total size Tamaño total +total downloads Total de descargas +total Total +date Modificado +description Descripción +downloads Descargas +type Tipo +sort by Ordenar por + +search Buscar +both Ambos +search results for buscar resultados de +and its subdirectories y estos son subdirectorios + +account Cuenta de usuario +login Usuario +logout Desconectarse +username Usuario +password Contraseña +select user to remove Seleccione el usuario a eliminar +are you sure you want to remove the user ¿Está seguro de que desea eliminar al usuario +delete this user Eliminar este usuario +add user Añadir usuario + +guest Invitado +user Usuario +mod Moderator +admin Administrador +level Nivel del usuario + +rename renombrar/mover +renaming Renombrando +new filename Nuevo nombre de archivo +you can also move the file by specifying a path Usted también puede mover el archivo especificando un destino +delete eliminar +are you sure you want to delete the file ¿Está seguro que desea eliminar el archivo +edit description editar descripcion +yes, delete Sĩ, borrarlo + +upload Enviar +files to this folder archivo(s) a esta carpeta +uploaded files Archivos enviados +failed files Archivos no enviados +none Ninguno +file already exists el archivo ya existe +filename is listed as a hidden file el nombre del archivo es listado como un archivo oculto + +reconfigure script Reconfigurar el script +create new directory in this folder Crear nuevo directorio en esta carpeta +edit list of hidden files Editar lista de ficheros ocultos +add new user Añadir nuevo usuario +delete user Eliminar usuario +copy url Copy a remote file (to this folder) +upload to ftp upload file to FTP server + +enter the new description for the file Introduzca la nueva descripción para este archivo +change Cambiar +enter the new name Introduzca el nuevo nombre +create Crear + +add Añadir +remove Eliminar +remove a hidden file Eliminar un archivo oculto +add a new hidden file Añadir un nuevo archivo oculto + +edit ban list Editar la lista de IPs y hosts baneados +remove a ban Eliminar un ban +add a new ban Añadir nuevo ban (dirección IP o nombre del host, pude usar metacaracteres) +the administrator has blocked your ip address or hostname el administrador ha bloqueado su IP o nombre de máquina + +view entries from log file Ver las entradas del archivo log +view statistics from log file Ver las estadísticas del archivo log +how many entries would you like to view ¿Cuántas entradas desearía usted ver +view Ver +page Página +of de + +calculate md5sum calcular md5sum +download directory as tar.gz archive Descargar directorio como un archivo tar.gz diff --git a/languages/fr.txt b/languages/fr.txt new file mode 100644 index 0000000..b790807 --- /dev/null +++ b/languages/fr.txt @@ -0,0 +1,91 @@ +// French language file by NSV + +index of Index de +parent directory Dossier parent +thumbnail of Vignette de +continue Continuer + +file Fichier +files Fichiers +folder Dossier +folders Dossiers +size Taille +total size Taille total +total downloads Téléchargements totaux +total Total +date Modifié +description Description +downloads Téléchargements +type Type +sort by Classé par + +search Recherche +both Ensemble +search results for Résultat de recherche pour +and its subdirectories et ses sous-dossiers + +account Compte utilisateur +login Connexion +logout Déconnexion +username Nom d'utilisateur +password Mot de passe +select user to remove Selectionner un utilisateur à supprimer +are you sure you want to remove the user Etes vous sûr de vouloir supprimer cet utilisateur +delete this user Supprimer cet utilisateur +add user Ajouter un utilisateur + +guest Invité +user Utilisateur +mod Moderator +admin Administrateur +level Niveau d'utilisateur + +rename renommer/déplacer +renaming Renommage +new filename Nouveau nom de fichier +you can also move the file by specifying a path Vous pouvez déplacer le fichier en spécifiant la direction +delete supprimer +are you sure you want to delete the file Etes vous sûr de vouloir supprimer ce fichier +edit description editer la description +yes, delete Oui, je le supprime + +upload Envoie +files to this folder fichier(s) vers ce dossier +uploaded files Fichiers envoyés +failed files Fichiers ratés +none Aucun +file already exists fichier déjà existant +filename is listed as a hidden file le fichier est listé comme un fichier caché + +reconfigure script Reconfigurer le script +create new directory in this folder Créer un nouveau sous-dossier dans ce dossier +edit list of hidden files Editer la liste des fichiers cachés +add new user Ajouter un nouvel utilisateur +delete user Supprimer un utilisateur +copy url Copy a remote file (to this folder) +upload to ftp upload file to FTP server + +enter the new description for the file Entrer une nouvelle description pour ce fichier +change Changer +enter the new name Entrer un nouveau nom +create Créer + +add Ajouter +remove Supprimer +remove a hidden file Supprimer un fichier caché +add a new hidden file Ajouter un fichier caché + +edit ban list Editer la liste des IPs et des noms de hôte bannis +remove a ban Supprimer un bannissement +add a new ban Ajouter un nouveau bannissement (adresse IP ou noms de hôte, vous pouvez utiliser des wildcards) +the administrator has blocked your ip address or hostname Sorry, the administrator has blocked your IP address or hostname + +view entries from log file Voir les entrées du fichier log +view statistics from log file Voir les statistiques du fichier log +how many entries would you like to view Combien d'entrées voulez vous voir +view Voir +page Page +of of + +calculate md5sum calculer le md5sum +download directory as tar.gz archive Télécharger le dossier en tant qu'archive tar.gz diff --git a/languages/hu.txt b/languages/hu.txt new file mode 100644 index 0000000..37d2721 --- /dev/null +++ b/languages/hu.txt @@ -0,0 +1,92 @@ +// Hungarian (Magyar) translation by crash +// last update: 2005.02.14. 14:15 + +index of Könyvtár +parent directory Feljebb +thumbnail of Thumbnail of +continue Tovább + +file Fájl +files Fájl +folder Könyvtár +folders Könyvtár +size Méret +total size Összes méret +total downloads Összes letöltés +total Összes +date Dátum +description Leírás +downloads Letöltés +type Típus +sort by Rendezés + +search Keresés +both Mind +search results for keresés eredménye +and its subdirectories és az alkönyvtárai + +account Felhasználói Menü +login Belépés +logout Kilépés +username Felhasználó név +password Jelszó +select user to remove Válaszd ki a törlendő felhasználót +are you sure you want to remove the user Biztos törölni akarod a felhasználót +delete this user Felhasználó törlése +add user Új felhasználó + +guest Vendég +user Felhasználó +mod Moderátor +admin Adminisztrátor +level Felhasználó szintje + +rename átnevez +renaming Étnevezés +new filename Új fájlnév +you can also move the file by specifying a path a fájl mozgatásához adj meg könyvtárat +delete töröl +are you sure you want to delete the file Biztos törölni akarod a fájlt +edit description leírás szerkesztése +yes, delete Igen, törölni akarom + +upload Feltöltés +files to this folder fájl(ok) ebbe a könyvtárba +uploaded files Feltöltött fájlok +failed files Sikertelen feltöltés +none Nincs +file already exists a fájl már létezik +filename is listed as a hidden file a fájl neve rejtettnek van beálíltva + +reconfigure script Script Újrakonfigurálása +create new directory in this folder Új könyvtár ebbe a könyvtárba +edit list of hidden files Rejtett fájlok listájának szerkesztése +add new user Új felhasználó +delete user Felhasználó törlése +copy url távoli fájl másolása (ebbe a könyvtárba) +upload to ftp fájl feltöltése az FTP szerverre + +enter the new description for the file Add meg a fájl új leírását +change Változtat +enter the new name Add meg az új nevét +create Létrehoz + +add Hozzáad +remove Töröl +remove a hidden file Rejtett fájl törlése +add a new hidden file Rejtett fájl létrehozása + +edit ban list Kitiltott IP-k és hostok listájának szerkesztése +remove a ban Kitiltás törlése +add a new ban Új kitiltás (IP cím vagy hostnév, wildcards használható) +the administrator has blocked your ip address or hostname Az adminisztrátor kitiltotta az IP címed vagy a hostneved + +view entries from log file Logfájl megtekintése +view statistics from log file Statisztika a logfájlból +how many entries would you like to view Hány darabot szeretnél látni +view Megnéz +page Page +of of + +calculate md5sum md5 számolás +download directory as tar.gz archive Könyvtár letöltése tar.gz formátumban diff --git a/languages/it.txt b/languages/it.txt new file mode 100644 index 0000000..26de319 --- /dev/null +++ b/languages/it.txt @@ -0,0 +1,91 @@ +// Italian language file by Dalilha + +index of Indice del +parent directory Directory padre +thumbnail of Thumbnail di +continue Continua + +file File +files Files +folder Cartella +folders Cartelle +size Dimensione +total size Dimensione totale +total downloads Downloads totali +total Totale +date Modificato +description Descrizione +downloads Downloads +type Tipo +sort by Ordina per + +search Ricerca +both Entrambi +search results for risultati della ricerca per +and its subdirectories e le sue subdirectories + +account Account utente +login Autenticazione +logout Logout +username Nome utente +password Password +select user to remove Seleziona l'utente da rimuovere +are you sure you want to remove the user Sei sicuro che vuoi rimuovere l'utente +delete this user Cancella questo utente +add user Aggiungi Utente + +guest Ospite +user Utente +mod Moderator +admin Admin +level Livello utente + +rename rinomina/sposta +renaming Sto Rinominando +new filename Nuovo nome del file +you can also move the file by specifying a path puoi anche spostare il file specificando un percorso +delete cancella +are you sure you want to delete the file Sicuro di voler cancellare il file +edit description Modifica la descrizione +yes, delete Si, cancella + +upload Caricamento +files to this folder file(s) da questa cartella +uploaded files File caricati +failed files Files falliti +none Niente +file already exists file già esistente +filename is listed as a hidden file Il nome di file è in lista come file nascosto + +reconfigure script Riconfigura lo script +create new directory in this folder Crea una nuova directory in questa cartella +edit list of hidden files Modfica la lista dei file nascosti +add new user Aggiungi un nuovo utente +delete user Cancella utente +copy url Copy a remote file (to this folder) +upload to ftp upload file to FTP server + +enter the new description for the file Inserisci la nuova descrizione per il file +change Cambia +enter the new name Inserisci il nuovo nome +create Crea + +add Aggiungi +remove Rimuovi +remove a hidden file Rimuovi un file nascosto +add a new hidden file Aggiungi un nuovo file nascosto + +edit ban list Modifica la lista degli IP e degli hostname bloccati +remove a ban Rimuovi un blocco +add a new ban Aggiungi un nuovo blocco (indirizzo IP o l'hostname, puoi usare anche i wildcards) +the administrator has blocked your ip address or hostname Sorry, the administrator has blocked your IP address or hostname + +view entries from log file Guarda le entries dal fiel di log +view statistics from log file Guarda le statistiche dal file di log +how many entries would you like to view Quante entries vuoi vedere +view Guarda +page Page +of of + +calculate md5sum calcola md5sum +download directory as tar.gz archive Scarica la directory come un archivio tar.gz diff --git a/languages/ja.txt b/languages/ja.txt new file mode 100644 index 0000000..65c85d6 --- /dev/null +++ b/languages/ja.txt @@ -0,0 +1,92 @@ +// Japanese langauge file +// Tadashi Jokagi + +index of 次?一覧: +parent directory 親ディレクトリ +thumbnail of 次?サム?イル: +continue 続?る + +file ファイル +files ファイル +folder フォルダー +folders フォルダー +size 容? +total size ?容? +total downloads ?ダウンロード数 +total ?計 +date 修正日時 +description 説明 +downloads ダウンロード数 +type 種類 +sort by ソート基準 + +search 検索 +both Both +search results for 次?検索?果: +and its subdirectories ?????サブディレクトリ + +account ユーザーアカウント +login ログイン +logout ログアウト +username ユーザー?? +password パスワード +select user to remove ?択ユーザーを削除?る +are you sure you want to remove the user 本当?ユーザーを削除????? +delete this user ??ユーザーを削除?る +add user 新?ユーザーを追加?る + +guest ゲスト +user 一般ユーザー +mod モデレータ +admin 管?者 +level ユーザー?レベル + +rename ??称変更/移動 +renaming Renaming +new filename 新?ファイル?? +you can also move the file by specifying a path ?様??パス?指定?よりファイルを移動??る???????? +delete 削除?る +are you sure you want to delete the file 本当?ファイルを削除????? +edit description 説明を編集?る +yes, delete ?????れを削除??? + +upload アップロード?る +files to this folder ファイルを??フォルダー? +uploaded files ファイルをアップロード????。 +failed files ファイルを失敗????。 +none ?? +file already exists ファイル?既?存在???。 +filename is listed as a hidden file ファイル?隠?ファイル???一覧表示?れ?? + +reconfigure script スクリプトを?設定?る +create new directory in this folder ??フォルダー?新?ディレクトリを作??る +edit list of hidden files 隠?ファイル?一覧を編集?る +add new user 新?ユーザーを追加?る +delete user ユーザーを削除?る +copy url リモートファイルを??フォルダー?コピー?る +upload to ftp FTP サー?ー?ファイルをアップロード?る + +enter the new description for the file ファイル?新??説明を入力???????。 +change 変更?る +enter the new name 新?????を入力???????。 +create 作??る + +add 追加?る +remove 削除?る +remove a hidden file 隠?ファイルを削除?る +add a new hidden file 隠?ファイルを追加?る + +edit ban list ?止?れ? IP アドレス?ホスト???一覧を編集?る +remove a ban ?止情報を削除?る +add a new ban ?止情報を追加?る (IP アドレス化ホスト???ワイルドカード?使用?????) +the administrator has blocked your ip address or hostname ????ん。???? IP アドレス?も????ホスト???管?者?よりブロック?れ????。 + +view entries from log file ログファイル?らエントリを閲覧?る +view statistics from log file ログファイル?ら統計を閲覧?る +how many entries would you like to view ?れ??ら??エントリを閲覧??????? +view 閲覧?る +page Page +of of + +calculate md5sum md5sum を計算?る +download directory as tar.gz archive ディレクトリを tar.gz アーカイブ???ダウンロード?る diff --git a/languages/ko.txt b/languages/ko.txt new file mode 100644 index 0000000..6f2b7b3 --- /dev/null +++ b/languages/ko.txt @@ -0,0 +1,91 @@ +// 한국어 (Korean) Translation by pandix + +index of Index of +parent directory 상위 디렉토리 +thumbnail of 미리보기 +continue 계속 + +file 파일 +files 파일 +folder 폴더 +folders 폴더 +size 크기 +total size 전체 크기 +total downloads 전체 다운로드수 +total 전체 +date 수정 +description 설명 +downloads 다운로드 +type 형식 +sort by 정렬방식 + +search 검색 +both 모두 +search results for 다음에 대한 검색결과 +and its subdirectories 하위디렉토리 포함 + +account 사용자 계정 +login 로그인 +logout 로그아웃 +username 사용자 +password 비밀번호 +select user to remove 삭제할 사용자를 선택학세요 +are you sure you want to remove the user 사용자를 정말로 삭제하시겠습니까 +delete this user 이 사용자 삭제 +add user 사용자 추가 + +guest 손님 +user 사용자 +mod Moderator +admin 관리자 +level 사용자 레벨 + +rename 이름변경/이동 +renaming 이름변경중 +new filename 새 파일이름 +you can also move the file by specifying a path 특정 경로로 파일을 이동할 수 있습니다 +delete 삭제 +are you sure you want to delete the file 이 파일을 정말로 삭제하시겠습니까 +edit description 설명 편집 +yes, delete 네, 삭제합니다 + +upload 업로드 +files to this folder 개의 파일을 이 폴더에 +uploaded files 업로드한 파일 +failed files 실패한 파일 +none 없음 +file already exists 파일이 이미 있습니다 +filename is listed as a hidden file 숨겨진 파일에 같은 이름이 있습니다 + +reconfigure script 스크립트 재설정 +create new directory in this folder 이 폴더내에 새로운 디렉토리를 만듦니다 +edit list of hidden files 숨김 파일의 목록을 설정합니다 +add new user 새로운 사용자 추가 +delete user 사용자 지우기 +copy url Copy a remote file (to this folder) +upload to ftp upload file to FTP server + +enter the new description for the file 파일의 새로운 설명을 입력하세요 +change 바꾸기 +enter the new name 새 이름을 입력하세요 +create 만들기 + +add 추가 +remove 삭제 +remove a hidden file 숨김파일 삭제 +add a new hidden file 새로운 숨김파일 추가 + +edit ban list 거부 목록의 IP 주소와 호스트네임 편집 +remove a ban 거부 목록에서 제외하기 +add a new ban 거부 목록 추가하기 (IP 주소나 호스트네임, 와일드 카드 사용가능) +the administrator has blocked your ip address or hostname Sorry, the administrator has blocked your IP address or hostname + +view entries from log file 로그 파일 내용 보기 +view statistics from log file 로그 파일 통계 보기 +how many entries would you like to view 얼마나 많은 내용을 표시할까요 +view 보기 +page Page +of of + +calculate md5sum md5sum 계산 +download directory as tar.gz archive 디렉토리를 tar.gz 압축으로 다운받기 diff --git a/languages/ms.txt b/languages/ms.txt new file mode 100644 index 0000000..ee2e5ba --- /dev/null +++ b/languages/ms.txt @@ -0,0 +1,91 @@ +// Fail Bahasa Melayu oleh Ir.Haji Keropok + +index of Indeks tentang +parent directory Direktori Utama +thumbnail of Thumbnail of +continue Bersambung + +file Fail +files Fail-fail +folder Direktori +folders Direktori +size Saiz +total size Jumlah saiz +total downloads Jumlah muatturun +total Jumlah +date Modifait +description Huraian +downloads Muatturun +type Jenis +sort by Asingkan mengikut + +search Cari +both Kedua-duanya +search results for keputusan carian untuk +and its subdirectories dan di bawah direktori + +account Akaun Pengguna +login Log masuk +logout Log keluar +username Namaahli +password Katalaluan +select user to remove Pilih pengguna untuk dibuang +are you sure you want to remove the user Adakah anda pasti untuk membuang pengguna tersebut +delete this user Buang pengguna ini +add user Tambah pengguna + +guest Tetamu +user Pengguna +mod Moderator +admin Pentadbir +level Tahap Pengguna + +rename menamakan/pindah +renaming Menamakankembali +new filename Nama Failbaru +you can also move the file by specifying a path anda boleh pindahkan fail dengan mengkhususkan path +delete buang +are you sure you want to delete the file Adakah anda pasti untuk membuang fail tersebut +edit description ubah huraian +yes, delete Ya, buangkannya + +upload Muatnaik +files to this folder fail ke direktori ini +uploaded files Muatnaik fail +failed files Fail gagal +none Tiada +file already exists fail sudah ada +filename is listed as a hidden file Nama fail sudah tersenarai sebagai fail sembunyi + +reconfigure script Skrip konfigurasi semula +create new directory in this folder Buat direktori baru di dalam folder ini +edit list of hidden files Ubah senarai fail sembunyi +add new user Tambah pengguna baru +delete user Buang pengguna +copy url Copy a remote file (to this folder) +upload to ftp upload file to FTP server + +enter the new description for the file Masukkan huraian baru untuk fail tersebut +change Tukar +enter the new name Masukkan nama baru +create Buat + +add Tambah +remove Buang +remove a hidden file Buang fail sembunyi +add a new hidden file Tambah fail sembunyi baru + +edit ban list Ubah senarai halangan IP dan hostname +remove a ban Buang halangan +add a new ban Tambah halangan baru (Alamat IP atau hostname, anda boleh juga menggunakan wildcard) +the administrator has blocked your ip address or hostname Maaf, pentadbir telah menghalang alamat IP atau hostname anda + +view entries from log file Lihat masukkan dari catatan fail +view statistics from log file Lihat statistik dari catatan fail +how many entries would you like to view Berapa banyakkah masukkan hendak anda lihat +view Lihat +page Page +of of + +calculate md5sum kira md5sum +download directory as tar.gz archive Muatturun direktori sebagai arkib tar.gz diff --git a/languages/nl.txt b/languages/nl.txt new file mode 100644 index 0000000..badc752 --- /dev/null +++ b/languages/nl.txt @@ -0,0 +1,91 @@ +// Dutch langauge file by Raymond + +index of Index van +parent directory Bovenliggende map +thumbnail of Thumbnail van +continue Doorgaan + +file Bestand +files Bestanden +folder Map +folders Mappen +size Grootte +total size Totale Grootte +total downloads Totaal aantal downloads +total Totaal +date Datum +description Beschrijving +downloads Downloads +type Type +sort by Gesorteerd op + +search Zoeken +both Beide +search results for Zoek resultaten van +and its subdirectories en de onderliggende mappen + +account Gebruikers Account +login Login +logout Log out +username Gebruikersnaam +password Wachtwoord +select user to remove Selecteer gebruir om te verwijderen +are you sure you want to remove the user Weet u zeker dat u de gebruiker wil verwijderen +delete this user Verwijder deze gebruiker +add user Voeg gebruiker toe + +guest Gast +user Gebruiker +mod Moderator +admin Admin +level Gebruiker's niveau + +rename hernoem/verplaats +renaming Hernoemen +new filename Nieuwe Bestandsnaam +you can also move the file by specifying a path U kan ook de map verplaatsen door een specifieke pad te specificeren +delete verwijder +are you sure you want to delete the file Weet u zeker dat u dit bestand wilt verwijderen +edit description bewerk beschrijving +yes, delete Ja, verwijderen + +upload Upload +files to this folder Bestand(en) naar deze map +uploaded files Geuploade bestanden +failed files Mislukte bestanden +none Geen +file already exists Bestand bestaat al +filename is listed as a hidden file Bestandsnaam is opgeslagen als verborgen bestand + +reconfigure script Herconfigureer script +create new directory in this folder Maak een nieuwe map in deze map +edit list of hidden files Bewerk lijst van verborgen bestanden +add new user Voeg een nieuwe gebruiker toe +delete user Verwijder gebruiker +copy url Kopieer een bestand van een URL +upload to ftp Upload een bestand naar een FTP server + +enter the new description for the file Geef een nieuwe beschrijving voor het bestand +change Verander +enter the new name Geef een nieuwe naam +create Maak + +add Toevoegen +remove Verwijder +remove a hidden file Verwijder verborgen bestand +add a new hidden file Nieuw verborgen Bestand toevoegen + +edit ban list Bewerk lijst van gebande IP's en hostnames +remove a ban Verwijder een ban +add a new ban Nieuwe ban toevoegen (IP adres of hostname, u kunt wildcards gebruiken) +the administrator has blocked your ip address or hostname Sorry, uw IP-adres of hostname is geblokkeerd door de administrator + +view entries from log file Bekijk notities in het log bestand +view statistics from log file Bekijk de statistieken in het log bestand +how many entries would you like to view Hoeveel notities wilt u bekijken +view Bekijken +page Pagina +of van de + +calculate md5sum Bereken md5sum +download directory as tar.gz archive Download map als tar.gz archief diff --git a/languages/no.txt b/languages/no.txt new file mode 100644 index 0000000..44f278d --- /dev/null +++ b/languages/no.txt @@ -0,0 +1,91 @@ +// Norwegian langauge file by tg90nor + +index of Indeks for +parent directory Modermappe +thumbnail of Forhåndsvisning av +continue Fortsett + +file Fil +files Filer +folder Mappe +folders Mapper +size Størrelse +total size Total størrelse +total downloads Nedlastninger totalt +total Total +date Modifisert +description Beskrivelse +downloads Nedlastninger +type Type +sort by Sorter etter + +search Søk +both Begge +search results for søkeresultater for +and its subdirectories og undermappene + +account Brukerkonto +login Logg inn +logout Logg ut +username Brukernavn +password Passord +select user to remove Velg bruker for fjerning +are you sure you want to remove the user Er du sikker på at du vil fjerne brukeren +delete this user Slett denne brukeren +add user Legg til bruker + +guest Gjest +user Bruker +mod Moderator +admin Admin +level brukerens level + +rename gi nytt navn/flytt +renaming Gir nytt navn +new filename Nytt filnavn +you can also move the file by specifying a path du kan også flytte filen ved å spesifisere en sti +delete slett +are you sure you want to delete the file Er du sikker på at du vil slette filen +edit description endre beskrivelse +yes, delete Ja, slett den + +upload Opplast +files to this folder fil(er) til denne mappen +uploaded files Opplastede filer +failed files Mislykkede filer +none Ingen +file already exists filen eksisterer allerede +filename is listed as a hidden file filnavnet er oppført som en skjult fil + +reconfigure script Rekonfigurer skript +create new directory in this folder Opprett en ny mappe i denne mappen +edit list of hidden files Rediger liste over skjulte filer +add new user Legg til ny bruker +delete user Slett bruker +copy url Copy a remote file (to this folder) +upload to ftp upload file to FTP server + +enter the new description for the file Skriv inn den nye beskrivelsen for filen +change Endre +enter the new name Skriv inn det nye navnet +create Opprett + +add Legg til +remove Fjern +remove a hidden file Fjern en skjult fil +add a new hidden file Legg til en ny skjult fil + +edit ban list Rediger liste over blokkerte IP-er og vertsnavn +remove a ban Fjern en blokkering +add a new ban Legg til en ny blokkering (IP-adresse eller vertsnavn, du kan bruke wildcards) +the administrator has blocked your ip address or hostname Sorry, the administrator has blocked your IP address or hostname + +view entries from log file Vis oppføringer fra logfil +view statistics from log file Vis statistikk fra logfil +how many entries would you like to view Hvor mange oppføringer vil du vise +view Vis +page Page +of of + +calculate md5sum kalkuler md5sum +download directory as tar.gz archive Last ned mappe som tar.gz-arkiv diff --git a/languages/pl.txt b/languages/pl.txt new file mode 100644 index 0000000..7feff88 --- /dev/null +++ b/languages/pl.txt @@ -0,0 +1,91 @@ +// Polish langauge file by Krzysztof Kopeć + +index of Index of +parent directory Katalog macierzysty +thumbnail of Thumbnail z +continue Kontynuuj + +file Plik +files Pliki +folder Folder +folders Foldery +size Rozmiar +total size Całkowity rozmiar +total downloads Suma pobrań +total Całkowity +date Zmodyfikowany +description Opis +downloads Pobierz +type Typ +sort by Sortuj po + +search Wyszukaj +both Obaj +search results for Rezultat wyszukiwania +and its subdirectories i jego podkatalogi + +account Konto użytkownika +login Zaloguj +logout Wyloguj +username Nazwa użytkownika +password Hasło +select user to remove Wybierz uzytkownika do przeniesienia +are you sure you want to remove the user Czy jesteś pewien że chcesz przenieść użytkownika +delete this user Skasuj tego użytkownika +add user Dodaj użytkownika + +guest Gość +user Użytkownik +mod Moderator +admin Administrator +level Poziom użytkownika + +rename zmień nazwę / przenieś +renaming Zmieniając nazwę +new filename Nowa nazwa filmu +you can also move the file by specifying a path możesz też przenieść plik przez wyszczególnianie ścieżki dostępu +delete Skasuj +are you sure you want to delete the file Czy jesteś pewien że chcesz usunąć plik +edit description Edytuj opis +yes, delete Yes, delete it + +upload Załaduj +files to this folder Plik(i) do tego folderu +uploaded files Załadowane pliki +failed files Nie zdołane pliki +none Żaden +file already exists Plik już istnieje +filename is listed as a hidden file nazwa zbioru jest opisana jako zbiór ukryty + +reconfigure script Rekonfiguracja skryptu +create new directory in this folder Utwórz nowy katalog w tym folderze +edit list of hidden files Edytuj listę plików/folderów ukrytych +add new user Dodaj nowego użytkownika +delete user Usuń użytkownika +copy url Copy a remote file (to this folder) +upload to ftp upload file to FTP server + +enter the new description for the file Wprowadź nowy opis do pliku +change Zmień +enter the new name Wprowadź nową nazwę +create Utwórz + +add Dodaj +remove Przenieś +remove a hidden file Przenieś zbiór ukryty +add a new hidden file Dodaj nowy zbiór ukryty + +edit ban list Edytuj listę zakazanych IPs i hostnames +remove a ban Usuń zakaz +add a new ban Dodaj nowy zakaz (adres IP albo hostname, możesz użyć znaków uniwersalnych) +the administrator has blocked your ip address or hostname Przepraszam, administrator zablokował twój adres IP albo hostname + +view entries from log file Zapis widoku z pliku rejestru +view statistics from log file Statystyki widoku z pliku rejestru +how many entries would you like to view Jak wiele zapisów chciałbyś oglądnąć +view Widok +page Page +of of + +calculate md5sum oblicza md5sum +download directory as tar.gz archive Pobierz katalog jak plik archiwum tar.gz diff --git a/languages/pt_BR.txt b/languages/pt_BR.txt new file mode 100644 index 0000000..e210ef0 --- /dev/null +++ b/languages/pt_BR.txt @@ -0,0 +1,92 @@ +// Brazilian style Portuguese translation +// by Marcelo Pelagio Pontes Morais at pontesmorais@yahoo.com + +index of Índice de +parent directory Diretório Pai +thumbnail of Miniatura de +continue Continuar + +file Arquivo +files Arquivos +folder Diretório +folders Diretórios +size Tamanho +total size Tamanho total +total downloads Total de downloads +total Total +date Modificado +description Descrição +downloads Downloads +type Tipo +sort by Ordenar por + +search Procurar +both Ambos +search results for Resultados da busca para +and its subdirectories e seus subdiretórios + +account Conta do Usuário +login Conectar +logout Desconectar +username Nome de Usuário +password Senha +select user to remove Selecione qual usuário remover +are you sure you want to remove the user Tem certeza que deseja remover este usuário +delete this user Remover este usuário +add user Adicionar Usuário + +guest Convidado +user Usuário +mod Moderator +admin Administrador +level Nível do usuário + +rename renomear/mover +renaming Renomeando +new filename Novo nome de arquivo +you can also move the file by specifying a path Você também pode mover o arquivo especificando um caminho +delete apagar +are you sure you want to delete the file Têm certeza que deseja apagar o arquivo +edit description editar descrição +yes, delete Sim, apagar + +upload Enviar +files to this folder arquivos para este diretório +uploaded files Arquivos enviados +failed files Arquivos não enviados +none Nenhum +file already exists Arquivo já existe +filename is listed as a hidden file o nome do arquivo é listado como um arquivo oculto + +reconfigure script Reconfigurar script +create new directory in this folder Criar um novo subdiretório neste diretório +edit list of hidden files Editar lista dos arquivos ocultos +add new user Adicionar novo usuário +delete user Remover usuário +copy url Copy a remote file (to this folder) +upload to ftp upload file to FTP server + +enter the new description for the file Entre a nova descrição para o arquivo +change Modificar +enter the new name Entre o novo nome +create Criar + +add Adicionar +remove Remover +remove a hidden file Remover um arquivo escondido +add a new hidden file Adicionar um novo arquivo escondido + +edit ban list Editar a lista de IPs e hosts com banners +remove a ban Remover um banner +add a new ban Adicionar um novo banner (endereço IP ou hostname. Você pode usar caracteres curinga) +the administrator has blocked your ip address or hostname Sorry, the administrator has blocked your IP address or hostname + +view entries from log file Ver entradas no arquivo de Log +view statistics from log file Ver estatísticas do arquivo de Log +how many entries would you like to view Quantas entradas você deseja ver +view Ver +page Page +of of + +calculate md5sum calcular md5sum +download directory as tar.gz archive Fazer Download do diretório como um arquivo 'tar.gz' diff --git a/languages/ru.txt b/languages/ru.txt new file mode 100644 index 0000000..b0fbbf4 --- /dev/null +++ b/languages/ru.txt @@ -0,0 +1,91 @@ +// Russian langauge file by Andrey Olischuk + +index of Индекс +parent directory Родительская директория +thumbnail of Пиктограмма +continue Продолжить + +file Файл +files Файлы +folder Папка +folders Папки +size Размер +total size Общий размер +total downloads Всего скачано +total Всего +date Изменено +description Описание +downloads Загрузка +type Тип +sort by Сортировать по + +search Поиск +both Оба +search results for Результаты поиска для +and its subdirectories и подкаталоги + +account Аккаунт +login Вход в систему +logout Выход из системы +username Имя пользователя +password Пароль +select user to remove Выберите пользователя для удаления +are you sure you want to remove the user Вы уверены, что хотите удалить этого пользователя +delete this user Удалить этого пользователя +add user Добавить пользователя + +guest Гость +user Пользователь +mod Moderator +admin Администратор +level Уровень + +rename Переименовать +renaming Переименование +new filename Новое имя файла +you can also move the file by specifying a path Вы так же можете переместить файл, указав путь +delete Удалить +are you sure you want to delete the file Вы уверены, что хотите удалить этот файл +edit description Редактировать описание +yes, delete Да, удалить + +upload Закачать +files to this folder Файлы в данную папку +uploaded files Закачаные файлы +failed files Не закачанные файлы +none Нет +file already exists Файл уже существует +filename is listed as a hidden Файл помечен как скрытый + +reconfigure script Переконфигурировать скрипт +create new directory in this folder Создать новую директорию в данной +edit list of hidden files Редактировать список скрытых файлов +add new user Добавить нового пользователя +delete user Удалить пользователя +copy url Copy a remote file (to this folder) +upload to ftp upload file to FTP server + +enter the new description for the file Введите новое описание файла +change Изменить +enter the new name Введите новое имя +create Создать + +add Добавить +remove Удалить +remove a hidden file Удалить скрытый файл +add a new hidden file Добавить новый скрытый файл + +edit ban list Редактировать список забаненых +remove a ban Снять бан +add a new ban Добавить в список забаненых +the administrator has blocked your ip address or hostname Sorry, the administrator has blocked your IP address or hostname + +view entries from log file Просмотреть лог-файл +view statistics from log file Просмотреть статистику из лог-файла +how many entries would you like to view Сколько записей вы хотите просмотреть +view Просмотреть +page Page +of of + +calculate md5sum Рассчитать md5sum +download directory as tar.gz archive Скачать директорию в виде tar.gz архива diff --git a/languages/sk.txt b/languages/sk.txt new file mode 100644 index 0000000..c7f6225 --- /dev/null +++ b/languages/sk.txt @@ -0,0 +1,91 @@ +// Slovenský preklad, vytvoril keeper7 + +index of Výpis z +parent directory Nadradený adresár +thumbnail of Miniatúra +continue Pokračovať + +file Súbor +files Súbory +folder Zložka +folders Zložky +size Veľkost +total size Celková veľkost +total downloads Celkom stiahnuté +total Celkovov +date Upravené +description Popis +downloads Stiahnuté +type Typ +sort by Triediť podľa + +search Vyhľedať +both Všetko +search results for výsledky vyhľadávania pre +and its subdirectories a jeho podzložky + +account Užívatelský účet +login Prihlásiť +logout Odhlásiť +username Užívateľské meno +password Heslo +select user to remove vyberte uživateľa na zmazanie +are you sure you want to remove the user Ste si istý, že chcete zmazat užívateľa +delete this user Zmazať užívateľa +add user Pridať užívateľa + +guest Hosť +user Užívateľ +mod Moderátor +admin Administrátor +level Užívateľská úroveň + +rename premenovať/presunúť +renaming Premenovanie +new filename Nové meno súboru +you can also move the file by specifying a path môžete tiež presunúť súbor určením cesty +delete zmazať +are you sure you want to delete the file Ste si istý, že chcete zmazať súbor +edit description upraviť popis +yes, delete Áno, zmazať + +upload Nahrať +files to this folder súbor(y) do tejto zložky +uploaded files Nahraté súbory +failed files Nahrávanie zlyhalo +none Žiadne +file already exists súbor už existuje +filename is listed as a hidden file meno súboru je v zozname skrytých súborov + +reconfigure script Prekonfigurovať skript +create new directory in this folder Vytvoriť nový adresár (v tejto zložke) +edit list of hidden files Upraviť zoznam skrytých súborov +add new user Pridať nového užívateľa +delete user Zmazať užívateľa +copy url Kopírovať vzdialený súbor (do tejto zložky) +upload to ftp nahrať súbor na FTP server + +enter the new description for the file Vložiť nový popis k súboru +change Zmeniť +enter the new name Vložiť nové meno +create Vytvoriť + +add Pridať +remove Odobrať +remove a hidden file Odobrar skrytý súbor +add a new hidden file Pridať skrytý súbor + +edit ban list Upravit zoznam zakázaných IP adries a hostnames +remove a ban Odobrať zákaz +add a new ban Pridať nový zákaz (IP addresa alebo hostname, môžete použiť značky napr *.host.sk) +the administrator has blocked your ip address or hostname Prepáčte, ale správca zablokoval vašu IP adresu alebo hostname + +view entries from log file Zobraziť návštevy z logu +view statistics from log file Zobraziť štatistiky z logu +how many entries would you like to view Koľko položiek chcete zobraziť +view Zobraziť +page Page +of of + +calculate md5sum spočítať md5sum +download directory as tar.gz archive Stiahnúť zložku ako tar.gz archív diff --git a/languages/sv.txt b/languages/sv.txt new file mode 100644 index 0000000..ad35c9e --- /dev/null +++ b/languages/sv.txt @@ -0,0 +1,91 @@ +// Swedish langauge file by -=FrItZ=- + +index of Indexering av +parent directory Upp en niv +thumbnail of Miniatyrbild av +continue Fortstt + +file Fil +files Filer +folder Mapp +folders Mappar +size Storlek +total size Total storlek +total downloads Totalt nedladdat +total Totalt +date ndrad +description Frklaring +downloads Nedladdningar +type Typ +sort by Sorta efter + +search Sk +both Bde +search results for sk resultat av +and its subdirectories och dess undermappar + +account Anvndarkonto +login Logga in +logout Logga ut +username Anvndarnamn +password Lsenord +select user to remove Vlj anvndare att ta bort +are you sure you want to remove the user r du sker p att du vill ta bort anvndaren +delete this user Radera denna anvndare +add user Skapa anvndare + +guest Gst +user Vanlig anvndare +mod Moderator +admin Administratr +level Anvndarniv + +rename Dp om/flytta +renaming Dper om +new filename Nytt filnamn +you can also move the file by specifying a path Du kan flytta en fil genom att ange en skvg +delete Radera +are you sure you want to delete the file r du sker p att du vill radera filen +edit description ndra frklaring +yes, delete Ja, radera den + +upload Ladda upp +files to this folder fil(er) till denna mapp +uploaded files Uppladdade filer +failed files Misslyckade filer +none Inga +file already exists filen existerar redan +filename is listed as a hidden file filnamnet finns som dold fil + +reconfigure script Konfigurera om scriptet +create new directory in this folder Skapa ny mapp (i denna mapp) +edit list of hidden files ndra listan av dolda filer +add new user Lgg till anvndare +delete user Radera anvndare +copy url Kopiera en remote fil (till denna mapp) +upload to ftp Ladda upp fil till FTP server + +enter the new description for the file Skriv ny frklaring till filen +change ndra +enter the new name Skriv nytt namn +create Skapa + +add Lgg till +remove Ta bort +remove a hidden file Ta bort en dold fil +add a new hidden file Lgg till en dold fil + +edit ban list ndra listan med bannade IPs och vrdnamn +remove a ban Ta bort en ban +add a new ban Lgg till en ban (IP adress eller vrdnamn, du kan anvnda wildcards) +the administrator has blocked your ip address or hostname Fuck U, Administratren har blockerat dig + +view entries from log file Se anslutningar frn loggfil +view statistics from log file Se statistik frn loggfil +how many entries would you like to view Hur mnga anslutningar vill du se +view Se +page Page +of of + +calculate md5sum Kalkylera md5sum +download directory as tar.gz archive Ladda ner mapp som tar.gz arkiv diff --git a/languages/th.txt b/languages/th.txt new file mode 100644 index 0000000..1ac6cac --- /dev/null +++ b/languages/th.txt @@ -0,0 +1,91 @@ +//Thai langauge file by maxzerker@hotmail.com + +index of Ѫբͧ +parent directory ͹˹ +thumbnail of ͺٻͧ +continue + +file +files +folder +folders +size Ҵ +total size Ҵ +total downloads ǹŴ +total +date +description ´ +downloads ǹŴ +type Դ +sort by § + +search +both 駤 +search results šäѺ +and its subdirectories 駫Ѻ + +account ѭռ +login к +logout ͡ҡк +username ͼ +password ʼҹ +select user to remove ͡ͼź͡ +are you sure you want to remove the user سҵͧźͼ +delete this user źͼ +add user ͼ + +guest ᢡ +user +mod Moderator +admin к +level дѺͧ + +rename ¹/͹ +renaming ѧ¹ +new filename +you can also move the file by specifying a path سö͹¡кط +delete ź +are you sure you want to delete the file سͷź +edit description ´ +yes, delete źѹ() + +upload Ŵ +files to this folder +uploaded files Ŵ +failed files +none +file already exists +filename is listed as a hidden file ١Ѵ١͹ + +reconfigure script 觤ʤԻ +create new directory in this folder ҧ +edit list of hidden files ¡âͧ١͹ +add new user +delete user ź +copy url Copy a remote file (to this folder) +upload to ftp upload file to FTP server + +enter the new description for the file к´ͧ +change ¹ +enter the new name кت +create ҧ + +add +remove ͡ +remove a hidden file ١͹͡ +add a new hidden file ŷ١͹ + +edit ban list ¡ẹ;Ъʷ +remove a ban ẹ͡ +add a new ban ¡ẹ (к ; ʷ,سöŴ) +the administrator has blocked your ip address or hostname ¼кӡú͡ ; ʷ ͧس + +view entries from log file ʴ¡èҡ͡ +view statistics from log file ʴʶԵԨҡ͡ +how many entries would you like to view ӹǹͧ¡÷سͧ÷ʴ +view ʴ +page Page +of of + +calculate md5sum ӹdz MD5 +download directory as tar.gz archive ǹŴ tar.gz diff --git a/languages/tr.txt b/languages/tr.txt new file mode 100644 index 0000000..2f4c6d4 --- /dev/null +++ b/languages/tr.txt @@ -0,0 +1,91 @@ +// Turkish language file by Sinan Keskn + +index of indekiler +parent directory Ana Dizin +thumbnail of Kk Resmi +continue Devam + +file Dosya +files Dosyalar +folder Klasr +folders Klasrler +size Boyut +total size Toplam boyut +total downloads Toplam indirilme +total Toplam +date Deitirilme +description Tanmlama +downloads ndirilmeler +type Tip +sort by Sralama + +search Arama +both Her kiside +search results for Arama sonular +and its subdirectories ve altdizinleri + +account Kullanc Hesab +login Giri +logout k +username Kullanc Ad +password ifre +select user to remove Silinecek kullancy sein +are you sure you want to remove the user Kullanc silmek istediinizden emin misiniz +delete this user Bu kullancy sil +add user Kullanc Ekle + +guest Misafir +user Kullanc +mod Moderator +admin Ynetici +level Kullanc Seviyeleri + +rename Yeniden adlandr/Ta +renaming Yeniden adlandrma +new filename Yeni Dosya smi +you can also move the file by specifying a path belirtilen yol ile bu dosyay tayabilirsiniz +delete sil +are you sure you want to delete the file Bu dosyay silmek istediinizden emin misiniz +edit description tanmlama dzenle +yes, delete Evet, sil + +upload Karya gnder +files to this folder dosyalar bu klasre +uploaded files Karya gnderilmi dosyalar +failed files Baarsz dosyalar +none Yok +file already exists dosya zaten var +filename is listed as a hidden file dosya ismi gizli dosya olarak listeleniyor + +reconfigure script Scripti yeniden konfigre et +create new directory in this folder Bu klasrde yeni bir dizin olutur +edit list of hidden files Gizli dosyalarn listesini dzenle +add new user Yeni kullanc ekle +delete user Kullanc sil +copy url Copy a remote file (to this folder) +upload to ftp upload file to FTP server + +enter the new description for the file Dosya iin yeni bir tanmlama girin +change Deitir +enter the new name Yeni isim girin +create Olutur + +add Ekle +remove Sil +remove a hidden file Gizli bir dosya sil +add a new hidden file Gizli bir dosya ekle + +edit ban list Banl IP ve adreslerin listesini dzenle +remove a ban Ban sil +add a new ban Yeni ban ekle (Ip ya da adres) +the administrator has blocked your ip address or hostname Sorry, the administrator has blocked your IP address or hostname + +view entries from log file Logtan girdileri gster +view statistics from log file Logtan istatistikleri gster +how many entries would you like to view Ka girdi grmek istiyorsunuz +view Gster +page Page +of of + +calculate md5sum md5sum hesapla +download directory as tar.gz archive Dizini tar.gz ariv olarak indir diff --git a/license.html b/license.html new file mode 100644 index 0000000..7a5dc0c --- /dev/null +++ b/license.html @@ -0,0 +1,424 @@ + + + + + + GNU General Public License + + + + + + + + + + + +

    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.

    + +

    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.

    + +
    +    <one line to give the program's name and a brief idea of what it does.>
    +    Copyright (C) <year>  <name of author>
    +
    +    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.
    +
    +  <signature of Ty Coon>, 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.

    + + + \ No newline at end of file diff --git a/meta.inc b/meta.inc new file mode 100644 index 0000000..66a601b --- /dev/null +++ b/meta.inc @@ -0,0 +1,14 @@ + +?> \ No newline at end of file diff --git a/robots.txt b/robots.txt new file mode 100644 index 0000000..13faffe --- /dev/null +++ b/robots.txt @@ -0,0 +1,19 @@ +User-agent: msnbot +User-agent: googlebot +User-agent: yahoo! slurp +User-agent: Slurp +User-agent: lycosbot +Disallow: /admin +Disallow: /cache +Disallow: /config +Disallow: /include +Disallow: /install +Disallow: /modules + +User-agent: * +Disallow: /admin +Disallow: /cache +Disallow: /config +Disallow: /include +Disallow: /install +Disallow: /modules \ No newline at end of file diff --git a/templates/SwiftBlue/SwiftBlue.cfg b/templates/SwiftBlue/SwiftBlue.cfg new file mode 100644 index 0000000..d4ccfb7 --- /dev/null +++ b/templates/SwiftBlue/SwiftBlue.cfg @@ -0,0 +1,293 @@ +The mxBB Development Team'; + +// +// When creating a new template, you normally "clone" a template and modify a number of *.tpl files. +// For similar templates this means only a few files are different. +// For example: you may have a template similar to subSilver, but with a different overall_header.tpl - the other files are identical. +// Then this template should only contain one *.tpl file, namely overall_header.tpl, +// and with $mx_template_settings['cloned_template'] = 'subSilver'. +// If this template is a full set of *.tpl files, leave this blank. +$mx_template_settings['cloned_template'] = '_core'; + +// +// Block border graphics are defined in mx_main_layout.tpl, within the 'graph_border' template environment. +// Turning this setting 'false' will disable block border graphics. +$mx_template_settings['border_graphics'] = false; + +/********************************************************************************\ +| Define what graphics bundles to use +| - these are very handy paths to ALL kind of phpBB/MX-Publisher graphics +\********************************************************************************/ +$mx_images['mx_graphics']['general'] = file_exists( $mx_root_path . $current_template_path . "/images/logo.gif" ) ? $current_template_path . "/images" : ( file_exists( $mx_root_path . $cloned_template_path . "/images/logo.gif" ) ? $cloned_template_path . "/images" : $default_template_path . "/images" ); +$mx_images['mx_graphics']['page_icons'] = file_exists( $mx_root_path . $current_template_path . "/images/page_icons" ) ? $current_template_path . "/images/page_icons" : ( file_exists( $mx_root_path . $cloned_template_path . "/images/page_icons" ) ? $cloned_template_path . "/images/page_icons" : $default_template_path . "/images/page_icons" ); +$mx_images['mx_graphics']['block_icons'] = file_exists( $mx_root_path . $current_template_path . "/images/block_icons" ) ? $current_template_path . "/images/block_icons" : ( file_exists( $mx_root_path . $cloned_template_path . "/images/block_icons" ) ? $cloned_template_path . "/images/block_icons" : $default_template_path . "/images/block_icons" ); +$mx_images['mx_graphics']['menu_icons'] = file_exists( $mx_root_path . $current_template_path . "/images/menu_icons" ) ? $current_template_path . "/images/menu_icons" : ( file_exists( $mx_root_path . $cloned_template_path . "/images/menu_icons" ) ? $cloned_template_path . "/images/menu_icons" : $default_template_path . "/images/menu_icons" ); +$mx_images['mx_graphics']['admin_icons'] = file_exists( $mx_root_path . $current_template_path . "/images/admin_icons" ) ? $current_template_path . "/images/admin_icons" : ( file_exists( $mx_root_path . $cloned_template_path . "/images/admin_icons" ) ? $cloned_template_path . "/images/admin_icons" : $default_template_path . "/images/admin_icons" ); +$mx_images['mx_graphics']['phpbb_icons'] = !empty($current_template_path) && file_exists( $phpbb_root_path . $current_template_path . "/images" ) ? $current_template_path . "/images" : ( !empty($cloned_template_path) && file_exists( $phpbb_root_path . $cloned_template_path . "/images" ) ? $cloned_template_path . "/images" : $default_template_path . "/images"); + +// +// Prefix all paths to get full img URLs +// +$current_template_images = PORTAL_URL . $mx_images['mx_graphics']['general']; // Logo etc +$current_template_page_images = PORTAL_URL . $mx_images['mx_graphics']['page_icons']; // Used by adminCP - Pages +$current_template_block_images = PORTAL_URL . $mx_images['mx_graphics']['block_icons']; // Used by userCP block buttons +$current_template_menu_images = PORTAL_URL . $mx_images['mx_graphics']['menu_icons']; // Used by adminCP - Navigation Menu +$current_template_admin_images = PORTAL_URL . $mx_images['mx_graphics']['admin_icons']; // Internal graphics for the MX-Publisher adminCP +$current_template_phpbb_images = PHPBB_URL . $mx_images['mx_graphics']['phpbb_icons']; // phpBB graphics template +$current_template_theme_images = PORTAL_URL . $current_template_path . '/theme/images'; + +// +// Standalone MX-Publisher installation? Where are the phpbb images? +// +//$current_template_phpbb_images = PHPBB_URL . $mx_images['mx_graphics']['phpbb_icons']; // phpBB graphics template +$current_template_phpbb_images = PHPBB_URL . $mx_images['mx_graphics']['phpbb_icons']; // phpBB graphics template + +// +// Define the icon css style +// +$mx_images['mx_graphics']['icon_style'] = +''; + +/********************************************************************************\ +| Page Navigation Images +| 1. If you want to control the overall_header.tpl images from this *.cfg file, make defintions below +| 2. Or if not, use hardcoded image paths in overall_header.tpl, just like in the phpBB standard subSilver overall_header.tpl. +\********************************************************************************/ +// +// Use MX-Publisher graphics - normally the menu_icons bundle +// +$mx_images['mx_nav_home'] = "$current_template_menu_images/icon_home.gif"; // {NAV_IMAGES_HOME} +$mx_images['mx_nav_forum'] = "$current_template_menu_images/icon_forum.gif"; // {NAV_IMAGES_FORUM} +$mx_images['mx_nav_profile'] = "$current_template_menu_images/icon_profile.gif"; // {NAV_IMAGES_PROFILE} +$mx_images['mx_nav_faq'] = "$current_template_menu_images/icon_faq.gif"; // {NAV_IMAGES_FAQ} +$mx_images['mx_nav_search'] = "$current_template_menu_images/icon_search.gif"; // {NAV_IMAGES_SEARCH} +$mx_images['mx_nav_members'] = "$current_template_menu_images/icon_members.gif"; // {NAV_IMAGES_MEMBERS} +$mx_images['mx_nav_groups'] = "$current_template_menu_images/icon_groups.gif"; // {NAV_IMAGES_GROUPS} +$mx_images['mx_nav_mail'] = "$current_template_menu_images/icon_mail.gif"; // {NAV_IMAGES_PRIVMSG} +$mx_images['mx_nav_login'] = "$current_template_menu_images/icon_login.gif"; // {NAV_IMAGES_LOGIN_LOGOUT} +$mx_images['mx_nav_register'] = "$current_template_menu_images/icon_register.gif"; // {NAV_IMAGES_REGISTER} + +// +// Use standard phpBB graphics +// +/* +$mx_images['mx_nav_home'] = "$current_template_phpbb_images/icon_minipost.gif"; +$mx_images['mx_nav_forum'] = "$current_template_phpbb_images/icon_minipost.gif"; +$mx_images['mx_nav_profile'] = "$current_template_phpbb_images/icon_mini_profile.gif"; +$mx_images['mx_nav_faq'] = "$current_template_phpbb_images/icon_mini_faq.gif"; +$mx_images['mx_nav_search'] = "$current_template_phpbb_images/icon_mini_search.gif"; +$mx_images['mx_nav_members'] = "$current_template_phpbb_images/icon_mini_members.gif"; +$mx_images['mx_nav_groups'] = "$current_template_phpbb_images/icon_mini_groups.gif"; +$mx_images['mx_nav_mail'] = "$current_template_phpbb_images/icon_mini_message.gif"; +$mx_images['mx_nav_login'] = "$current_template_phpbb_images/icon_mini_login.gif"; +$mx_images['mx_nav_register'] = "$current_template_phpbb_images/icon_mini_register.gif"; +*/ + +/********************************************************************************\ +| Block Images +| - these images are used for the block editCP buttons and controls +\********************************************************************************/ +$mx_images['mx_contract'] = "$current_template_block_images/contract.gif"; +$mx_images['mx_expand'] = "$current_template_block_images/expand.gif"; +$mx_images['mx_block_edit_admin'] = "$current_template_block_images/block_edit_admin.gif"; +$mx_images['mx_block_edit_split'] = "$current_template_block_images/block_edit_split.gif"; +$mx_images['mx_block_edit'] = "$current_template_block_images/block_edit.gif"; +$mx_images['mx_block_hidden'] = "$current_template_block_images/block_hidden.gif"; + +/********************************************************************************\ +| adminCP/editCP Images +| - these images are used for the adminCP & block editCP +\********************************************************************************/ +$mx_images['mx_spacer'] = "$current_template_phpbb_images/spacer.gif"; + +// +// phpBB Graphics - for standalone MX-Publisher installation +/* +$images['icon_quote'] = "$current_template_phpbb_images/{LANG}/icon_quote.gif"; +$images['icon_edit'] = "$current_template_phpbb_images/{LANG}/icon_edit.gif"; +$images['icon_search'] = "$current_template_phpbb_images/{LANG}/icon_search.gif"; +$images['icon_profile'] = "$current_template_phpbb_images/{LANG}/icon_profile.gif"; +$images['icon_pm'] = "$current_template_phpbb_images/{LANG}/icon_pm.gif"; +$images['icon_email'] = "$current_template_phpbb_images/{LANG}/icon_email.gif"; +$images['icon_delpost'] = "$current_template_phpbb_images/icon_delete.gif"; +$images['icon_ip'] = "$current_template_phpbb_images/{LANG}/icon_ip.gif"; +$images['icon_www'] = "$current_template_phpbb_images/{LANG}/icon_www.gif"; +$images['icon_icq'] = "$current_template_phpbb_images/{LANG}/icon_icq_add.gif"; +$images['icon_aim'] = "$current_template_phpbb_images/{LANG}/icon_aim.gif"; +$images['icon_yim'] = "$current_template_phpbb_images/{LANG}/icon_yim.gif"; +$images['icon_msnm'] = "$current_template_phpbb_images/{LANG}/icon_msnm.gif"; +$images['icon_minipost'] = "$current_template_phpbb_images/icon_minipost.gif"; +$images['icon_gotopost'] = "$current_template_phpbb_images/icon_minipost.gif"; +$images['icon_minipost_new'] = "$current_template_phpbb_images/icon_minipost_new.gif"; +$images['icon_latest_reply'] = "$current_template_phpbb_images/icon_latest_reply.gif"; +$images['icon_newest_reply'] = "$current_template_phpbb_images/icon_newest_reply.gif"; + +$images['forum'] = "$current_template_phpbb_images/folder_big.gif"; +$images['forum_new'] = "$current_template_phpbb_images/folder_new_big.gif"; +$images['forum_locked'] = "$current_template_phpbb_images/folder_locked_big.gif"; + +$images['folder'] = "$current_template_phpbb_images/folder.gif"; +$images['folder_new'] = "$current_template_phpbb_images/folder_new.gif"; +$images['folder_hot'] = "$current_template_phpbb_images/folder_hot.gif"; +$images['folder_hot_new'] = "$current_template_phpbb_images/folder_new_hot.gif"; +$images['folder_locked'] = "$current_template_phpbb_images/folder_lock.gif"; +$images['folder_locked_new'] = "$current_template_phpbb_images/folder_lock_new.gif"; +$images['folder_sticky'] = "$current_template_phpbb_images/folder_sticky.gif"; +$images['folder_sticky_new'] = "$current_template_phpbb_images/folder_sticky_new.gif"; +$images['folder_announce'] = "$current_template_phpbb_images/folder_announce.gif"; +$images['folder_announce_new'] = "$current_template_phpbb_images/folder_announce_new.gif"; + +$images['post_new'] = "$current_template_phpbb_images/{LANG}/post.gif"; +$images['post_locked'] = "$current_template_phpbb_images/{LANG}/reply-locked.gif"; +$images['reply_new'] = "$current_template_phpbb_images/{LANG}/reply.gif"; +$images['reply_locked'] = "$current_template_phpbb_images/{LANG}/reply-locked.gif"; + +$images['pm_inbox'] = "$current_template_phpbb_images/msg_inbox.gif"; +$images['pm_outbox'] = "$current_template_phpbb_images/msg_outbox.gif"; +$images['pm_savebox'] = "$current_template_phpbb_images/msg_savebox.gif"; +$images['pm_sentbox'] = "$current_template_phpbb_images/msg_sentbox.gif"; +$images['pm_readmsg'] = "$current_template_phpbb_images/folder.gif"; +$images['pm_unreadmsg'] = "$current_template_phpbb_images/folder_new.gif"; +$images['pm_replymsg'] = "$current_template_phpbb_images/{LANG}/reply.gif"; +$images['pm_postmsg'] = "$current_template_phpbb_images/{LANG}/msg_newpost.gif"; +$images['pm_quotemsg'] = "$current_template_phpbb_images/{LANG}/icon_quote.gif"; +$images['pm_editmsg'] = "$current_template_phpbb_images/{LANG}/icon_edit.gif"; +$images['pm_new_msg'] = ""; +$images['pm_no_new_msg'] = ""; + +$images['Topic_watch'] = ""; +$images['topic_un_watch'] = ""; +$images['topic_mod_lock'] = "$current_template_phpbb_images/topic_lock.gif"; +$images['topic_mod_unlock'] = "$current_template_phpbb_images/topic_unlock.gif"; +$images['topic_mod_split'] = "$current_template_phpbb_images/topic_split.gif"; +$images['topic_mod_move'] = "$current_template_phpbb_images/topic_move.gif"; +$images['topic_mod_delete'] = "$current_template_phpbb_images/topic_delete.gif"; + +$images['voting_graphic'][0] = "$current_template_phpbb_images/voting_bar.gif"; +$images['voting_graphic'][1] = "$current_template_phpbb_images/voting_bar.gif"; +$images['voting_graphic'][2] = "$current_template_phpbb_images/voting_bar.gif"; +$images['voting_graphic'][3] = "$current_template_phpbb_images/voting_bar.gif"; +$images['voting_graphic'][4] = "$current_template_phpbb_images/voting_bar.gif"; +*/ + +$images['voting_graphic'][0] = "$current_template_phpbb_images/voting_bar.gif"; +$images['voting_graphic'][1] = "$current_template_phpbb_images/voting_bar.gif"; +$images['voting_graphic'][2] = "$current_template_phpbb_images/voting_bar.gif"; +$images['voting_graphic'][3] = "$current_template_phpbb_images/voting_bar.gif"; +$images['voting_graphic'][4] = "$current_template_phpbb_images/voting_bar.gif"; + +// +// Define common theme colors (if not present in db) +// +$template_config_row['body_bgcolor'] = "FFFFFF"; +$template_config_row['body_text'] = "383B3F"; +$template_config_row['body_link'] = "006699"; +$template_config_row['body_vlink'] = "006699"; +$template_config_row['body_alink'] = "006699"; +$template_config_row['body_hlink'] = "f3a625"; +$template_config_row['tr_color1'] = "F7EEEE"; // row1 +$template_config_row['tr_color2'] = "FBF4F4"; // row2 +$template_config_row['tr_color3'] = "f1f1f1"; // row3 +$template_config_row['th_color1'] = "FFA34F"; // bodyline border color +$template_config_row['th_color2'] = "333333"; // forumline border color +$template_config_row['th_color3'] = "d1d7dc"; // boxes border color +$template_config_row['td_color1'] = "F7EEEE"; // code/quote boxes background +$template_config_row['td_color2'] = "FBF4F4"; // post box background +$template_config_row['fontface1'] = "Verdana,Arial,Helvetica,sans-serif"; +$template_config_row['fontface2'] = "Trebuchet MS"; +$template_config_row['fontface3'] = "Courier, \'Courier New\', sans-serif"; +$template_config_row['fontsize3'] = "12"; +$template_config_row['fontcolor1'] = "383B3F"; // Main font color +$template_config_row['fontcolor2'] = "726363"; +$template_config_row['fontcolor3'] = "FFA34F"; + + +/********************************************************************************\ +| CORE Images +\********************************************************************************/ +// +// Logo +// +$mx_images['mx_logo'] = "$current_template_theme_images/logo.gif"; + +// +// SiteLog +// +$mx_images['mx_dot'] = $images['folder']; + +// +// Online Block +// +$mx_images['mx_who_is_online'] = "$current_template_theme_images/whosonline.gif"; +?> diff --git a/templates/SwiftBlue/SwiftBlue.css b/templates/SwiftBlue/SwiftBlue.css new file mode 100644 index 0000000..a40417e --- /dev/null +++ b/templates/SwiftBlue/SwiftBlue.css @@ -0,0 +1,3477 @@ +/* phpBB3 Style Sheet + -------------------------------------------------------------- + Style name: SwiftBlue + Based on style: SwiftBlue Theme for phpBB2 by BitByBit, http://www.bitbybit.f2s.com + Original author: OryNider, using subsilver2 Theme as a base. + This is an alternative subsilver2 style with purple-blue colors. + -------------------------------------------------------------- +*/ + +/* Layout + ------------ */ +* { + /* Reset browsers default margin, padding and font sizes */ + margin: 0; + padding: 0; +} + +abbr { + text-decoration: none; +} + +html { + font-size: 100%; +} +/* General page style. The scroll bar colours only visible in IE5.5+ */ +body { + background-color: #E3F0FB; + scrollbar-face-color: #BADBF5; + scrollbar-highlight-color: #E3F0FB; + scrollbar-shadow-color: #BADBF5; + scrollbar-3dlight-color: #80BBEC; + scrollbar-arrow-color: #072978; + scrollbar-track-color: #DAECFA; + scrollbar-darkshadow-color: #4B8DF1; + padding-right: 0px; + padding-left: 0px; + background: url("./images/backgroundbluelight.gif"); + padding-bottom: 0px; + margin: 5px 10px 10px; + font-family: Verdana, Geneva, 'Lucida Grande', Arial, Helvetica, sans-serif, droid-serif; + padding-top: 0px; + font-size: 89.5%; + margin: 0; +} + +#wrapheader { + min-height: 120px; + height: auto !important; + height: 120px; +/* background-image: url('./images/background.gif'); + background-repeat: repeat-x;*/ +/* padding: 0 25px 15px 25px;*/ + padding: 0; +} + +#wrapcentre { + margin: 15px 25px 0 25px; +} + +#wrapfooter { + text-align: center; + clear: both; +} + +#wrapnav { + width: 100%; + margin: 0; + background-color: #DAECFA; + border-width: 1px; + border-style: solid; + border-color: #A9B8C2; +} + +#logodesc { + margin-bottom: 5px; + padding: 5px 25px; + background: transparent none 0 0 no-repeat; + border-bottom: 1px solid #D9DFE4; +} + +#menubar { + margin: 0 25px; +} + +#datebar { + margin: 10px 25px 0 25px; +} + +#findbar { + width: 100%; + margin: 0; + padding: 0; + border: 0; +} + +.forumrules { + background-color: #F9CC79; + border-width: 1px; + border-style: solid; + border-color: #BB9860; + padding: 4px; + font-weight: normal; + font-size: 1.1em; + font-family: "Lucida Grande", Verdana, Arial, Helvetica, sans-serif; +} + +.forumrules h3 { + color: red; +} + +#pageheader { } +#pagecontent { } +#pagefooter { } + +#poll { } +#postrow { } +#postdata { } + + +/* Text + --------------------- */ +h1 { + color: black; + font-family: "Lucida Grande", "Trebuchet MS", Verdana, sans-serif; + font-weight: bold; + font-size: 1.8em; + text-decoration: none; +} + +h2 { + font-family: Arial, Helvetica, sans-serif; + font-weight: bold; + font-size: 1.5em; + text-decoration: none; + line-height: 120%; +} + +h3 { + font-size: 1.3em; + font-weight: bold; + font-family: Arial, Helvetica, sans-serif; + line-height: 120%; +} + +h4 { + margin: 0; + font-size: 1.1em; + font-weight: bold; +} + +p { + font-size: 1.1em; +} + +p.moderators { + margin: 0; + float: left; + color: black; + font-weight: bold; +} + +.rtl p.moderators { + float: right; +} + +p.linkmcp { + margin: 0; + float: right; + white-space: nowrap; +} + +.rtl p.linkmcp { + float: left; +} + +p.breadcrumbs { + margin: 0; + float: left; + color: black; + font-weight: bold; + white-space: normal; + font-size: 1em; +} + +.rtl p.breadcrumbs { + float: right; +} + +p.datetime { + margin: 0; + float: right; + white-space: nowrap; + font-size: 1em; +} + +.rtl p.datetime { + float: left; +} + +p.searchbar { + padding: 2px 0; + white-space: nowrap; +} + +p.searchbarreg { + margin: 0; + float: right; + white-space: nowrap; +} + +.rtl p.searchbarreg { + float: left; +} + +p.forumdesc { + padding-bottom: 4px; +} + +p.topicauthor { + margin: 1px 0; +} + +p.topicdetails { + margin: 1px 0; +} + +.postreported, .postreported a:visited, .postreported a:hover, .postreported a:link, .postreported a:active { + margin: 1px 0; + color: red; + font-weight:bold; +} + +.postapprove, .postapprove a:visited, .postapprove a:hover, .postapprove a:link, .postapprove a:active { + color: green; + font-weight:bold; +} + +.postapprove img, .postreported img { + vertical-align: bottom; +} + +.postauthor { + color: #000000; +} + +.postdetails { + color: #000000; +} + +/* The content of the posts (body of text) */ +.postbody { + font-size : 15px; + line-height: 14px; + font-family: "Trebuchet MS", "Lucida Grande", Helvetica, Arial, Times, sans-serif; +} + +.postbody li, ol, ul { + margin: 0 0 0 1.5em; +} + +.rtl .postbody li, .rtl ol, .rtl ul { + margin: 0 1.5em 0 0; +} + +.posthilit { + background-color: yellow; +} + +.nav { + color: black; + font-weight: bold; +} + +/* Action-bars (container for post/reply buttons, pagination, etc.) +---------------------------------------- */ + +fa-fw { + width: 1.28571429em; + text-align: center; +} + +.action-bar { + font-size: 11px; + margin: 4px 0; +} + +.forabg + .action-bar { + margin-top: 2em; +} + +.action-bar .button { + margin-right: 5px; + float: left; +} + +.action-bar .button-search { + margin-right: 0; +} + +.action-bar .newtopic, .action-bar .postreply { + border-color: #1C0046; + background-color: #AB95CB; /* Old browsers */ /* FF3.6+ */ + background-image: -webkit-linear-gradient(top, #AB95CB 0%, #1A0040 100%); + background-image: linear-gradient(to bottom, #AB95CB 0%,#1A0040 100%); /* W3C */ + filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#AB95CB', endColorstr='#1A0040',GradientType=0 ); /* IE6-9 */ +} + +.action-bar .newtopic:hover, .action-bar .postreply:hover { + background-color: #1A0040; /* Old browsers */ /* FF3.6+ */ + background-image: -webkit-linear-gradient(top, #1A0040 0%, #AB95CB 100%); + background-image: linear-gradient(to bottom, #1A0040 0%,#AB95CB 100%); /* W3C */ + filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#1A0040', endColorstr='#AB95CB',GradientType=0 ); /* IE6-9 */ +} + +.pagination { + padding: 4px; + color: black; + font-size: 1em; + font-weight: bold; +} + +.cattitle { + +} + +/* General text */ +.gen { + margin: 1px 1px; + font-size: 15px; +} + +.genmed { + margin: 1px 1px; + font-size: 14px; +} + +.gensmall { + margin: 1px 1px; + font-size: 11px; +} +.gen,.genmed,.gensmall { color : #000000; } +a.gen,a.genmed,a.gensmall { color: #072978; text-decoration: none; } +a.gen:hover,a.genmed:hover,a.gensmall:hover { color: #041642; text-decoration: underline; } + + +/* The register, login, search etc links at the top of the page */ +.mainmenu { font-size : 11px; color : #000000 } +a.mainmenu { text-decoration: none; color : #072978; } +a.mainmenu:hover{ text-decoration: underline; color : #041642; } + +/* Forum category titles */ +.cattitle { font-weight: bold; font-size: 12px ; letter-spacing: 1px; color : #072978} +a.cattitle { text-decoration: none; color : #072978; } +a.cattitle:hover{ text-decoration: underline; } + +/* Forum title: Text and link to the forums used in: index.php */ +.forumlink { font-weight: bold; font-size: 12px; color : #072978; } +a.forumlink { text-decoration: none; color : #072978; } +a.forumlink:hover{ text-decoration: underline; color : #041642; } + +/* Used for the navigation text, (Page 1,2,3 etc) and the navigation bar when in a forum */ +.nav { font-weight: bold; font-size: 11px; color : #000000;} +a.nav { text-decoration: none; color : #072978; } +a.nav:hover { text-decoration: underline; } + + +/* titles for the topics: could specify viewed link colour too */ +.topictitle,h1,h2 { font-weight: bold; font-size: 11px; color : #000000; } +a.topictitle:link { text-decoration: none; color : #072978; } +a.topictitle:visited { text-decoration: none; color : #072978; } +a.topictitle:hover { text-decoration: underline; color : #041642; } + + +/* Name of poster in viewmsg.php and viewtopic.php and other places */ +.name { font-size : 11px; color : #000000;} + +/* Location, number of posts, post date etc */ +.postdetails { font-size : 10px; color : #000000; } + +a.postlink:link { text-decoration: none; color : #072978 } +a.postlink:visited { text-decoration: none; color : #072978; } +a.postlink:hover { text-decoration: underline; color : #041642} + + +/* Quote & Code blocks */ +.code { + font-family: Courier, 'Courier New', sans-serif; font-size: 11px; color: #006600; + background-color: #FAFAFA; border: #80BBEC; border-style: solid; + border-left-width: 1px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px +} + +.quote { + font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 11px; color: #444444; line-height: 125%; + background-color: #FAFAFA; border: #80BBEC; border-style: solid; + border-left-width: 1px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px +} + + +/* Copyright and bottom info */ +.copyright { font-size: 10px; font-family: Verdana, Arial, Helvetica, sans-serif; color: #444444; letter-spacing: -1px;} +a.copyright { color: #444444; text-decoration: none;} +a.copyright:hover { color: #000000; text-decoration: underline;} + + +.copyright { + color: #444; + font-weight: normal; + font-family: "Lucida Grande", Verdana, Arial, Helvetica, sans-serif; +} + +.titles { + font-family: "Lucida Grande", Helvetica, Arial, sans-serif; + font-weight: bold; + font-size: 1.3em; + text-decoration: none; +} + +.error { + color: red; +} + +/* Horizontal lists +----------------------------------------*/ +.navbar ul.linklist { + padding: 2px 0; + list-style-type: none; +} + +ul.linklist { + display: block; + margin: 0; +} + +.cp-main .panel { + padding: 5px 10px; +} + +ul.linklist > li { + float: left; + font-size: 1.1em; + line-height: 2.2em; + list-style-type: none; + margin-right: 7px; + width: auto; +} + +ul.linklist > li.rightside, p.rightside, a.rightside { + float: right; + margin-right: 0; + margin-left: 7px; + text-align: right; +} + +ul.navlinks { + border-top: 1px solid transparent; +} + +ul.leftside { + float: left; + margin-left: 0; + margin-right: 5px; + text-align: left; +} + +ul.rightside { + float: right; + margin-left: 5px; + margin-right: -5px; + text-align: right; +} + +ul.linklist li.responsive-menu { + position: relative; + margin: 0 5px 0 0; +} + +.hasjs ul.linklist.leftside, .hasjs ul.linklist.rightside { + max-width: 48%; +} + +.hasjs ul.linklist.fullwidth { + max-width: none; +} + +li.responsive-menu.dropdown-right .dropdown { + left: -9px; +} + +li.responsive-menu.dropdown-left .dropdown { + right: -6px; +} + +ul.linklist .dropdown { + top: 22px; +} + +ul.linklist .dropdown-up .dropdown { + bottom: 18px; + top: auto; +} + +/* Bulletin icons for list items +----------------------------------------*/ +ul.linklist.bulletin > li:before { + display: inline-block; + content: "\2022"; + font-size: inherit; + line-height: inherit; + padding-right: 4px; +} + +ul.linklist.bulletin > li:first-child:before, +ul.linklist.bulletin > li.rightside:last-child:before { + content: none; +} + +ul.linklist.bulletin > li.no-bulletin:before { + content: none; +} + +.responsive-menu:before { + display: none !important; +} + +/* Profile in overall_header.html */ +.header-profile { + display: inline-block; + vertical-align: top; +} + +a.header-avatar, +a.header-avatar:hover { + text-decoration: none; +} + +a.header-avatar img { + margin-bottom: 2px; + max-height: 20px; + vertical-align: middle; + width: auto; +} + +a.header-avatar span:after { + content: '\f0dd'; + display: inline-block; + font: normal normal normal 14px/1 FontAwesome; + padding-left: 6px; + padding-top: 2px; + vertical-align: top; +} + +/* -------------------------------------------------------------- /* + $Icons +/* -------------------------------------------------------------- */ + +/* Global module setup +---------------------------------------- */ + +/* Renamed version of .fa class for agnostic usage of icon fonts. + * Just change the name of the font after the 14/1 to the name of + * the font you wish to use. + */ +.icon, +.button .icon, +blockquote cite:before, +.uncited:before { + font-family: FontAwesome; + font-size: 14px; + font-weight: normal; + font-style: normal; + font-variant: normal; + line-height: 1; + display: inline-block; + /* stylelint-disable order/declaration-block-properties-specified-order */ + -moz-osx-font-smoothing: grayscale; + -webkit-font-smoothing: antialiased; + /* stylelint-enable order/declaration-block-properties-specified-order */ + text-rendering: auto; /* optimizelegibility throws things off #1094 */ +} + +.icon:before { + padding-right: 2px; +} + +.button .icon:before { + padding-right: 0; +} + +/* Icon size classes - Default size is 14px, use these for small variations */ + +.icon.icon-xl { + font-size: 20px; +} + +.icon.icon-lg { + font-size: 18px; +} + +.icon.icon-md { + font-size: 12px; +} + +.icon.icon-sm { + font-size: 10px; +} + +/* icon modifiers */ +.icon-tiny { + font-size: 16px; + vertical-align: text-bottom; + width: 12px; + -webkit-transform: scale(0.65, 0.75); + transform: scale(0.65, 0.75); +} + +.arrow-right .icon { + float: right; +} + +.arrow-left:hover .icon { + margin-right: 5px; + margin-left: -5px; +} + +.arrow-left .icon { + float: left; +} + +.arrow-right:hover .icon { + margin-right: -5px; + margin-left: 5px; +} + +.post-buttons .dropdown-contents .icon { + float: right; + margin-left: 5px; +} + +.alert_close .icon:before { + border-radius: 50%; + display: block; + width: 11px; + height: 12px; + padding: 0; +} + +blockquote cite:before, +.uncited:before { + content: "\f10d"; /* Font Awesome quote-left */ +} + +.rtl blockquote cite:before, +.rtl .uncited:before { + content: "\f10e"; /* Font Awesome quote-right */ +} + +/* Dropdown menu +----------------------------------------*/ +.dropdown-container { + position: relative; +} + +.dropdown-container-right { + float: right; +} + +.dropdown-container-left { + float: left; +} + +.nojs .dropdown-container:hover .dropdown { + display: block !important; +} + +.dropdown { + display: none; + position: absolute; + left: 0; + top: 1.2em; + z-index: 2; + border: 1px solid transparent; + border-radius: 5px; + padding: 9px 0 0; + margin-right: -500px; +} + +.dropdown.live-search { + top: auto; +} + +.dropdown-container.topic-tools { + float: left; +} + +.dropdown-up .dropdown { + top: auto; + bottom: 1.2em; + padding: 0 0 9px; +} + +.dropdown-left .dropdown, .nojs .rightside .dropdown { + left: auto; + right: 0; + margin-left: -500px; + margin-right: 0; +} + +.dropdown-button-control .dropdown { + top: 24px; +} + +.dropdown-button-control.dropdown-up .dropdown { + top: auto; + bottom: 24px; +} + +.dropdown .pointer, .dropdown .pointer-inner { + position: absolute; + width: 0; + height: 0; + border-top-width: 0; + border-bottom: 10px solid transparent; + border-left: 10px dashed transparent; + border-right: 10px dashed transparent; + -webkit-transform: rotate(360deg); /* better anti-aliasing in webkit */ + display: block; +} + +.dropdown-up .pointer, .dropdown-up .pointer-inner { + border-bottom-width: 0; + border-top: 10px solid transparent; +} + +.dropdown .pointer { + right: auto; + left: 10px; + top: -1px; + z-index: 3; +} + +.dropdown-up .pointer { + bottom: -1px; + top: auto; +} + +.dropdown-left .dropdown .pointer, .nojs .rightside .dropdown .pointer { + left: auto; + right: 10px; +} + +.dropdown .pointer-inner { + top: auto; + bottom: -11px; + left: -10px; +} + +.dropdown-up .pointer-inner { + bottom: auto; + top: -11px; +} + +.dropdown .dropdown-contents { + z-index: 2; + overflow: hidden; + overflow-y: auto; + border: 1px solid transparent; + border-radius: 5px; + padding: 5px; + position: relative; + max-height: 300px; +} + +.dropdown-contents a { + display: block; + padding: 5px; +} + +.jumpbox { + margin: 5px 0; +} + +.jumpbox .dropdown li { + border-top: 1px solid transparent; +} + +.jumpbox .dropdown-select { + margin: 0; +} + +.jumpbox .dropdown-contents { + padding: 0; + text-decoration: none; +} + +.jumpbox .dropdown-contents li { + padding: 0; +} + +.jumpbox .dropdown-contents a { + margin-right: 20px; + padding: 5px 10px; + text-decoration: none; + width: 100%; +} + +.jumpbox .spacer { + display: inline-block; + width: 0px; +} + +.jumpbox .spacer + .spacer { + width: 20px; +} + +.dropdown-contents a { + display: block; + padding: 5px; +} + +.jumpbox .dropdown-select { + margin: 0; +} + +.jumpbox .dropdown-contents a { + text-decoration: none; +} + +.dropdown li { + display: list-item; + border-top: 1px dotted transparent; + float: none !important; + line-height: normal !important; + font-size: 1em !important; + list-style: none; + margin: 0; + white-space: nowrap; + text-align: left; +} + +.dropdown-contents > li { + padding-right: 15px; +} + +.dropdown-nonscroll > li { + padding-right: 0; +} + +.dropdown li:first-child, .dropdown li.separator + li, .dropdown li li { + border-top: 0; +} + +.dropdown li li:first-child { + margin-top: 4px; +} + +.dropdown li li:last-child { + padding-bottom: 0; +} + +.dropdown li li { + border-top: 1px dotted transparent; + padding-left: 18px; +} + +.wrap .dropdown li, .dropdown.wrap li, .dropdown-extended li { + white-space: normal; +} + +.dropdown li.separator { + border-top: 1px solid transparent; + padding: 0; +} + +.dropdown li.separator:first-child, .dropdown li.separator:last-child { + display: none !important; +} + +/* jQuery popups +---------------------------------------- */ +.phpbb_alert { + background-color: #FFFFFF; + border-color: #999999; +} +.darken { + background-color: #000000; +} + +.loading_indicator { + background-color: #000000; + background-image: url("./images/loading.gif"); +} + +.dropdown-extended ul li { + border-top-color: #B9B9B9; +} + +.dropdown-extended ul li:hover { + background-color: #cfd1f6; + color: #000000; +} + +.dropdown-extended .header, .dropdown-extended .footer { + border-color: #B9B9B9; + color: #000000; +} + +.dropdown-extended .footer { + border-top-style: solid; + border-top-width: 1px; +} + +.dropdown-extended .header { + background-color: #f1f2ff; /* Old browsers */ /* FF3.6+ */ + background-image: -webkit-linear-gradient(top, #f1f2ff 0%, #caceeb 100%); + background-image: linear-gradient(to bottom, #f1f2ff 0%,#caceeb 100%); /* W3C */ + filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#f1f2ff', endColorstr='#caceeb',GradientType=0 ); /* IE6-9 */ +} + +.dropdown .pointer { + border-color: #B9B9B9 transparent; +} + +.dropdown .pointer-inner { + border-color: #FFF transparent; +} + +.dropdown-extended .pointer-inner { + border-color: #f1f2ff transparent; +} + +.dropdown .dropdown-contents { + background: #fff; + border-color: #B9B9B9; + box-shadow: 1px 3px 5px rgba(0, 0, 0, 0.2); +} + +.dropdown-up .dropdown-contents { + box-shadow: 1px 0 5px rgba(0, 0, 0, 0.2); +} + +.dropdown li, .dropdown li li { + border-color: #DCDCDC; +} + +.dropdown li.separator { + border-color: #DCDCDC; +} + +/* Notifications +---------------------------------------- */ + +.notification_list p.notification-time { + color: #4d4d77; +} + +li.notification-reported strong, li.notification-disapproved strong { + color: #0d5aa2; +} + +.badge { + background-color: #0d5aa2; + color: #ffffff; +} + +/* Responsive breadcrumbs +----------------------------------------*/ +.breadcrumbs .crumb { + float: left; + font-weight: bold; + word-wrap: normal; +} + +.breadcrumbs .crumb:before { + content: '\2039'; + font-weight: bold; + padding: 0 0.5em; +} + +.breadcrumbs .crumb:first-child:before { + content: none; +} + +.breadcrumbs .crumb a { + white-space: nowrap; + text-overflow: ellipsis; + vertical-align: bottom; + overflow: hidden; +} + +.breadcrumbs.wrapped .crumb a { letter-spacing: -.3px; } +.breadcrumbs.wrapped .crumb.wrapped-medium a { letter-spacing: -.4px; } +.breadcrumbs.wrapped .crumb.wrapped-tiny a { letter-spacing: -.5px; } + +.breadcrumbs .crumb.wrapped-max a { max-width: 120px; } +.breadcrumbs .crumb.wrapped-wide a { max-width: 100px; } +.breadcrumbs .crumb.wrapped-medium a { max-width: 80px; } +.breadcrumbs .crumb.wrapped-small a { max-width: 60px; } +.breadcrumbs .crumb.wrapped-tiny a { max-width: 40px; } + +/* Tables + ------------ */ +/* General font families for common tags */ +font,th,td,p { font-family: Verdana, Arial, Helvetica, sans-serif } +a:link,a:active,a:visited { color : #006699; } +a:hover { text-decoration: underline; color : #DD6900; } +hr { height: 0px; border: solid #80BBEC 0px; border-top-width: 1px;} + + +/* This is the border line & background colour round the entire page */ +.bodyline { + background-color: #E3F0FB; + background-image: url("./images/bodyline.jpg"); + padding-bottom: 40px; + border: 1px #4B8DF1 solid; +} + +/* This is the outline round the main forum tables */ +.forumline { background-color: #E3F0FB; border: 2px #006699 solid; } + +.profile { + padding: 4px; +} + +.tablebg { + background-color: #A9B8C2; +} + +/* Main table cell colours and backgrounds */ + +.row1 { + background-color: #DAECFA; + padding: 4px; +} + +.row2 { + background-color: #BADBF5; + padding: 4px; +} + +.row3 { + background-color: #80BBEC; + padding: 4px; +} + +.row4 { + background-color: #E4E8EB; + padding: 4px; +} + +.col1 { + background-color: #BADBF5; + padding: 4px; +} + +.col2 { + background-color: #DAECFA; + padding: 4px; +} + + +/* + This is for the table cell above the Topics, Post & Last posts on the index.php page + By default this is the fading out gradiated silver background. + However, you could replace this with a bitmap specific for each forum +*/ +.rowpic { + background-color: #E3F0FB; + background-image: url('./images/cellpic2.jpg'); + background-repeat: repeat-y; +} + +.catdiv { + height: 28px; + background: white url('./images/cellpic2.jpg') repeat-y scroll top left; +} +.rtl .catdiv { + background: white url('./images/cellpic2_rtl.jpg') repeat-y scroll top right; +} + +/* Header cells - the blue and silver gradient backgrounds */ +th { + color: #FFA34F; font-size: 11px; font-weight : bold; + background-color: #006699; height: 25px; + background-image: url('./images/cellpic3.gif'); +} + +.cat { + height: 28px; + background-color: #C7D0D7; + text-indent: 4px; +} + + +.cat,.catHead,.catSides,.catLeft,.catRight,.catBottom { + background-image: url('./images/cellpic1.gif'); + background-color:#80BBEC; border: #E3F0FB; border-style: solid; height: 28px; +} + + +/* + Setting additional nice inner borders for the main table cells. + The names indicate which sides the border will be on. + Don't worry if you don't understand this, just ignore it :-) +*/ +td.cat,td.catHead,td.catBottom { + height: 29px; + border-width: 0px 0px 0px 0px; +} +th.thHead,th.thSides,th.thTop,th.thLeft,th.thRight,th.thBottom,th.thCornerL,th.thCornerR { + font-weight: bold; border: #E3F0FB; border-style: solid; height: 28px; } +td.row3Right,td.spaceRow { + background-color: #80BBEC; border: #E3F0FB; border-style: solid; } + +th.thHead,td.catHead { font-size: 12px; border-width: 1px 1px 0px 1px; } +th.thSides,td.catSides,td.spaceRow { border-width: 0px 1px 0px 1px; } +th.thRight,td.catRight,td.row3Right { border-width: 0px 1px 0px 0px; } +th.thLeft,td.catLeft { border-width: 0px 0px 0px 1px; } +th.thBottom,td.catBottom { border-width: 0px 1px 1px 1px; } +th.thTop { border-width: 1px 0px 0px 0px; } +th.thCornerL { border-width: 1px 0px 0px 1px; } +th.thCornerR { border-width: 1px 1px 0px 0px; } + +.spacer { + background-color: #80BBEC; +} + +hr { + height: 1px; + border-width: 0; + background-color: #80BBEC; + color: #80BBEC; +} + +.legend { + text-align:center; + margin: 0 auto; +} + +/* Links + ------------ */ + +a:link { + color: #006597; + text-decoration: none; +} + +a:active, +a:visited { + color: #005784; + text-decoration: none; +} + +a:hover { + color: #D46400; + text-decoration: underline; +} + +a.forumlink { + color: #069; + font-weight: bold; + font-family: "Lucida Grande", Helvetica, Arial, sans-serif; + font-size: 13px; +} + +a.topictitle { + margin: 1px 0; + font-family: "Lucida Grande", Helvetica, Arial, sans-serif; + font-weight: bold; + font-size: 13px; +} + +a.topictitle:visited { + color: #5493B4; + text-decoration: none; +} + +th a, +th a:visited { + color: #FFA34F !important; + text-decoration: none; +} + +th a:hover { + text-decoration: underline; +} + + +/* Form Elements + ------------ */ +form { + margin: 0; + padding: 0; + border: 0; +} + +input { + color: #333333; + font-family: "Lucida Grande", Verdana, Helvetica, sans-serif; + font-size: 12px; + font-weight: normal; + padding: 1px; + border: 1px solid #A9B8C2; + background-color: #FAFAFA; +} + +textarea { + background-color: #FAFAFA; + color: #333333; + font-family: "Lucida Grande", Verdana, Helvetica, Arial, sans-serif; + font-size: 14px; + line-height: 15px; + font-weight: normal; + border: 1px solid #A9B8C2; + padding: 2px; +} + +select { + color: #333333; + background-color: #FAFAFA; + font-family: "Lucida Grande", Verdana, Helvetica, sans-serif; + font-size: 1.1em; + font-weight: normal; + border: 1px solid #A9B8C2; + padding: 1px; +} + +option { + padding: 0 1em 0 0; +} + +option.disabled-option { + color: graytext; +} + +.rtl option { + padding: 0 0 0 1em; +} + +input.radio { + border: none; + background-color: transparent; +} + +.post { + background-color: #DAECFA; + border-style: solid; + border-width: 1px; +} + +.btnbbcode { + color: #000000; + font-weight: normal; + font-size: 0.8em; + font-family: "Lucida Grande", Verdana, Helvetica, sans-serif; + background-color: #DAECFA; + border: 1px solid #666666; +} + +.btnmain { + font-weight: bold; + background-color: #DAECFA; + border: 1px solid #A9B8C2; + cursor: pointer; + padding: 1px 3px; + font-size: 0.8em; +} + +.btnlite { + font-weight: normal; + background-color: #DAECFA; + border: 1px solid #A9B8C2; + cursor: pointer; + padding: 1px 3px; + font-size: 0.8em; +} + +.btnfile { + font-weight: normal; + background-color: #DAECFA; + border: 1px solid #A9B8C2; + padding: 1px 3px; + font-size: 0.8em; +} + +.helpline { + background-color: #BADBF5; + border-style: none; +} + + +/* BBCode + ------------ */ +.quotetitle, .attachtitle { + margin: 10px 5px 0 5px; + padding: 4px; + border-width: 1px 1px 0 1px; + border-style: solid; + border-color: #A9B8C2; + color: #333333; + background-color: #A9B8C2; + font-size: 0.85em; + font-weight: bold; +} + +.quotetitle .quotetitle { + font-size: 1em; +} + +.quotecontent, .attachcontent { + margin: 0 5px 10px 5px; + padding: 5px; + border-color: #A9B8C2; + border-width: 0 1px 1px 1px; + border-style: solid; + font-weight: normal; + font-size: 1em; + line-height: 1.4em; + font-family: "Lucida Grande", "Trebuchet MS", Helvetica, Arial, sans-serif; + background-color: #FAFAFA; + color: #4B5C77; +} + +.attachcontent { + font-size: 0.85em; +} + +.codetitle { + margin: 10px 5px 0 5px; + padding: 2px 4px; + border-width: 1px 1px 0 1px; + border-style: solid; + border-color: #A9B8C2; + color: #333333; + background-color: #A9B8C2; + font-family: "Lucida Grande", Verdana, Helvetica, Arial, sans-serif; + font-size: 0.8em; +} + +.codecontent { + direction: ltr; + margin: 0 5px 10px 5px; + padding: 5px; + border-color: #A9B8C2; + border-width: 0 1px 1px 1px; + border-style: solid; + font-weight: normal; + color: #006600; + font-size: 0.85em; + font-family: Monaco, 'Courier New', monospace; + background-color: #FAFAFA; +} + +.postimage { + max-width: 100%; +} + +.syntaxbg { + color: #E3F0FB; +} + +.syntaxcomment { + color: #FF8000; +} + +.syntaxdefault { + color: #0000BB; +} + +.syntaxhtml { + color: #000000; +} + +.syntaxkeyword { + color: #007700; +} + +.syntaxstring { + color: #DD0000; +} + + +/* Private messages + ------------------ */ +.pm_marked_colour { + background-color: #000000; +} + +.pm_replied_colour { + background-color: #A9B8C2; +} + +.pm_friend_colour { + background-color: #007700; +} + +.pm_foe_colour { + background-color: #DD0000; +} + + +/* Misc + ------------ */ +img { + border: none; +} + +.sep { + color: black; + background-color: #FFA34F; +} + +table.colortable td { + padding: 0; +} + +pre { + font-size: 1.1em; + font-family: Monaco, 'Courier New', monospace; +} + +.nowrap { + white-space: nowrap; +} + +.username-coloured { + font-weight: bold; +} + +.emoji { + min-height: 18px; + min-width: 18px; + height: 1em; + width: 1em; +} + +/* The largest text used in the index page title and toptic title etc. */ +.maintitle,h1,h2 { + font-weight: bold; font-size: 22px; font-family: "Trebuchet MS",Verdana, Arial, Helvetica, sans-serif; + text-decoration: none; line-height : 120%; color : #000000; +} + + +/* Form elements */ +input,textarea, select { + color : #000000; + font: normal 11px Verdana, Arial, Helvetica, sans-serif; + border-color : #000000; +} + +/* The text input fields background colour */ +input.post, textarea.post, select { + background-color : #E3F0FB; +} + +input { text-indent : 2px; } + +/* The buttons used for bbCode styling in message post */ +input.button { + background-color : #DAECFA; + color : #000000; + font-size: 11px; font-family: Verdana, Arial, Helvetica, sans-serif; +} + +/* The main submit button option */ +input.mainoption { + background-color : #FAFAFA; + font-weight : bold; +} + +/* None-bold submit button */ +input.liteoption { + background-color : #FAFAFA; + font-weight : normal; +} + +/* This is the line in the posting page which shows the rollover + help line. This is actually a text box, but if set to be the same + colour as the background no one will know ;) +*/ +.helpline { background-color: #BADBF5; border-style: none; } + + +/* Former imageset */ +span.imageset { + display: inline-block; + background: transparent none 0 0 no-repeat; + margin: 0; + padding: 0; + width: 0; + height: 0; + overflow: hidden; +} +a.imageset { + text-decoration: none !important; +} + +/* Global imageset items */ +.imageset.site_logo { + background-image: url("./images/site_logo.png"); + padding-top: 0px; + padding-left: 240px; + padding-right: 0px; + padding-bottom: 100px; +} +.imageset.upload_bar { + background-image: url("./images/upload_bar.gif"); + padding-left: 280px; + padding-top: 16px; +} +.imageset.poll_left { + background-image: url("./images/poll_left.gif"); + padding-left: 4px; + padding-top: 12px; +} +.imageset.poll_center { + background-image: url("./images/poll_center.gif"); + padding-left: 1px; + padding-top: 12px; +} +.imageset.poll_right { + background-image: url("./images/poll_right.gif"); + padding-left: 4px; + padding-top: 12px; +} +.imageset.forum_link { + background-image: url("./images/forum_link.gif"); + padding-left: 46px; + padding-top: 25px; +} +.imageset.forum_read { + background-image: url("./images/forum_read.gif"); + padding-left: 46px; + padding-top: 25px; +} +.imageset.forum_read_locked { + background-image: url("./images/forum_read_locked.gif"); + padding-left: 46px; + padding-top: 25px; +} +.imageset.forum_read_subforum { + background-image: url("./images/forum_read_subforum.gif"); + padding-left: 46px; + padding-top: 25px; +} +.imageset.forum_unread { + background-image: url("./images/forum_unread.gif"); + padding-left: 46px; + padding-top: 25px; +} +.imageset.forum_unread_locked { + background-image: url("./images/forum_unread_locked.gif"); + padding-left: 46px; + padding-top: 25px; +} +.imageset.forum_unread_subforum { + background-image: url("./images/forum_unread_subforum.gif"); + padding-left: 46px; + padding-top: 25px; +} +.imageset.topic_moved { + background-image: url("./images/topic_moved.gif"); + padding-left: 19px; + padding-top: 18px; +} +.imageset.topic_read { + background-image: url("./images/topic_read.gif"); + padding-left: 19px; + padding-top: 18px; +} +.imageset.topic_read_mine { + background-image: url("./images/topic_read_mine.gif"); + padding-left: 19px; + padding-top: 18px; +} +.imageset.topic_read_hot { + background-image: url("./images/topic_read_hot.gif"); + padding-left: 19px; + padding-top: 18px; +} +.imageset.topic_read_hot_mine { + background-image: url("./images/topic_read_hot_mine.gif"); + padding-left: 19px; + padding-top: 18px; +} +.imageset.topic_read_locked { + background-image: url("./images/topic_read_locked.gif"); + padding-left: 19px; + padding-top: 18px; +} +.imageset.topic_read_locked_mine { + background-image: url("./images/topic_read_locked_mine.gif"); + padding-left: 19px; + padding-top: 18px; +} +.imageset.topic_unread { + background-image: url("./images/topic_unread.gif"); + padding-left: 19px; + padding-top: 18px; +} +.imageset.topic_unread_mine { + background-image: url("./images/topic_unread_mine.gif"); + padding-left: 19px; + padding-top: 18px; +} +.imageset.topic_unread_hot { + background-image: url("./images/topic_unread_hot.gif"); + padding-left: 19px; + padding-top: 18px; +} +.imageset.topic_unread_hot_mine { + background-image: url("./images/topic_unread_hot_mine.gif"); + padding-left: 19px; + padding-top: 18px; +} +.imageset.topic_unread_locked { + background-image: url("./images/topic_unread_locked.gif"); + padding-left: 19px; + padding-top: 18px; +} +.imageset.topic_unread_locked_mine { + background-image: url("./images/topic_unread_locked_mine.gif"); + padding-left: 19px; + padding-top: 18px; +} +.imageset.sticky_read { + background-image: url("./images/sticky_read.gif"); + padding-left: 19px; + padding-top: 18px; +} +.imageset.sticky_read_mine { + background-image: url("./images/sticky_read_mine.gif"); + padding-left: 19px; + padding-top: 18px; +} +.imageset.sticky_read_locked { + background-image: url("./images/sticky_read_locked.gif"); + padding-left: 19px; + padding-top: 18px; +} +.imageset.sticky_read_locked_mine { + background-image: url("./images/sticky_read_locked_mine.gif"); + padding-left: 19px; + padding-top: 18px; +} +.imageset.sticky_unread { + background-image: url("./images/sticky_unread.gif"); + padding-left: 19px; + padding-top: 18px; +} +.imageset.sticky_unread_mine { + background-image: url("./images/sticky_unread_mine.gif"); + padding-left: 19px; + padding-top: 18px; +} +.imageset.sticky_unread_locked { + background-image: url("./images/sticky_unread_locked.gif"); + padding-left: 19px; + padding-top: 18px; +} +.imageset.sticky_unread_locked_mine { + background-image: url("./images/sticky_unread_locked_mine.gif"); + padding-left: 19px; + padding-top: 18px; +} +.imageset.announce_read { + background-image: url("./images/announce_read.gif"); + padding-left: 19px; + padding-top: 18px; +} +.imageset.announce_read_mine { + background-image: url("./images/announce_read_mine.gif"); + padding-left: 19px; + padding-top: 18px; +} +.imageset.announce_read_locked { + background-image: url("./images/announce_read_locked.gif"); + padding-left: 19px; + padding-top: 18px; +} +.imageset.announce_read_locked_mine { + background-image: url("./images/announce_read_locked_mine.gif"); + padding-left: 19px; + padding-top: 18px; +} +.imageset.announce_unread { + background-image: url("./images/announce_unread.gif"); + padding-left: 19px; + padding-top: 18px; +} +.imageset.announce_unread_mine { + background-image: url("./images/announce_unread_mine.gif"); + padding-left: 19px; + padding-top: 18px; +} +.imageset.announce_unread_locked { + background-image: url("./images/announce_unread_locked.gif"); + padding-left: 19px; + padding-top: 18px; +} +.imageset.announce_unread_locked_mine { + background-image: url("./images/announce_unread_locked_mine.gif"); + padding-left: 19px; + padding-top: 18px; +} +.imageset.global_read { + background-image: url("./images/global_read.gif"); + padding-left: 19px; + padding-top: 18px; +} +.imageset.global_read_mine { + background-image: url("./images/global_read_mine.gif"); + padding-left: 19px; + padding-top: 18px; +} +.imageset.global_read_locked { + background-image: url("./images/global_read_locked.gif"); + padding-left: 19px; + padding-top: 18px; +} +.imageset.global_read_locked_mine { + background-image: url("./images/global_read_locked_mine.gif"); + padding-left: 19px; + padding-top: 18px; +} +.imageset.global_unread { + background-image: url("./images/global_unread.gif"); + padding-left: 19px; + padding-top: 18px; +} +.imageset.global_unread_mine { + background-image: url("./images/global_unread_mine.gif"); + padding-left: 19px; + padding-top: 18px; +} +.imageset.global_unread_locked { + background-image: url("./images/global_unread_locked.gif"); + padding-left: 19px; + padding-top: 18px; +} +.imageset.global_unread_locked_mine { + background-image: url("./images/global_unread_locked_mine.gif"); + padding-left: 19px; + padding-top: 18px; +} +.imageset.pm_read { + background-image: url("./images/topic_read.gif"); + padding-left: 19px; + padding-top: 18px; +} +.imageset.pm_unread { + background-image: url("./images/topic_unread.gif"); + padding-left: 19px; + padding-top: 18px; +} +.imageset.icon_post_target { + background-image: url("./images/icon_post_target.gif"); + padding-left: 12px; + padding-top: 9px; +} +.imageset.icon_post_target_unread { + background-image: url("./images/icon_post_target_unread.gif"); + padding-left: 12px; + padding-top: 9px; +} +.imageset.icon_topic_attach { + background-image: url("./images/icon_topic_attach.gif"); + padding-left: 14px; + padding-top: 18px; +} +.imageset.icon_topic_latest { + background-image: url("./images/icon_topic_latest.gif"); + padding-left: 18px; + padding-top: 9px; +} +.imageset.icon_topic_newest { + background-image: url("./images/icon_topic_newest.gif"); + padding-left: 18px; + padding-top: 9px; +} +.imageset.icon_topic_reported { + background-image: url("./images/icon_topic_reported.gif"); + padding-left: 19px; + padding-top: 18px; +} +.imageset.icon_topic_unapproved { + background-image: url("./images/icon_topic_unapproved.gif"); + padding-left: 19px; + padding-top: 18px; +} +.imageset.icon_topic_deleted { + background-image: url("./images/icon_topic_deleted.gif"); + padding-left: 14px; + padding-top: 14px; +} + + +/* English images for fallback */ +.imageset.phpbb_aol-icon, .imageset.icon_contact_aim { + background-image: url("./en/icon_contact_aim.gif"); + padding-left: 72px; + padding-top: 20px; +} +.imageset.icon_contact_email { + background-image: url("./en/icon_contact_email.gif"); + padding-left: 72px; + padding-top: 20px; +} +.imageset.phpbb_icq-icon, .imageset.icon_contact_icq { + background-image: url("./en/icon_contact_icq.gif"); + padding-left: 72px; + padding-top: 20px; +} +.imageset.icon_contact_jabber { + background-image: url("./en/icon_contact_jabber.gif"); + padding-left: 72px; + padding-top: 20px; +} +.imageset.phpbb_wlm-icon, .imageset.icon_contact_msnm { + background-image: url("./en/icon_contact_msnm.gif"); + padding-left: 72px; + padding-top: 20px; +} +.imageset.icon_contact_pm { + background-image: url("./en/icon_contact_pm.gif"); + padding-left: 72px; + padding-top: 20px; +} +.imageset.phpbb_yahoo-icon, .imageset.icon_contact_yahoo { + background-image: url("./en/icon_contact_yahoo.gif"); + padding-left: 72px; + padding-top: 20px; +} +.imageset.phpbb_website-icon, .imageset.icon_contact_www { + background-image: url("./en/icon_contact_www.gif"); + padding-left: 72px; + padding-top: 20px; +} +.imageset.icon_post_delete { + background-image: url("./en/icon_post_delete.gif"); + padding-left: 20px; + padding-top: 20px; +} +.imageset.icon_post_edit { + background-image: url("./en/icon_post_edit.gif"); + padding-left: 90px; + padding-top: 20px; +} +.imageset.icon_post_info { + background-image: url("./en/icon_post_info.gif"); + padding-left: 20px; + padding-top: 20px; +} +.imageset.icon_post_quote { + background-image: url("./en/icon_post_quote.gif"); + padding-left: 90px; + padding-top: 20px; +} +.imageset.icon_post_report { + background-image: url("./en/icon_post_report.gif"); + padding-left: 20px; + padding-top: 20px; +} +.imageset.icon_user_online { + background-image: url("./en/icon_user_online.gif"); + padding-left: 72px; + padding-top: 20px; +} +.imageset.icon_user_offline { + background-image: url("./en/icon_user_offline.gif"); + padding-left: 72px; + padding-top: 20px; +} +.imageset.icon_user_profile { + background-image: url("./en/icon_user_profile.gif"); + padding-left: 72px; + padding-top: 20px; +} +.imageset.icon_user_search { + background-image: url("./en/icon_user_search.gif"); + padding-left: 72px; + padding-top: 20px; +} +.imageset.icon_user_warn { + background-image: url("./en/icon_user_warn.gif"); + padding-left: 20px; + padding-top: 20px; +} +.imageset.button_pm_new { + background-image: url("./en/button_pm_new.gif"); + padding-left: 97px; + padding-top: 27px; +} +.imageset.button_pm_reply { + background-image: url("./en/button_pm_reply.gif"); + padding-left: 90px; + padding-top: 20px; +} +.imageset.button_topic_locked { + background-image: url("./en/button_topic_locked.gif"); + padding-left: 97px; + padding-top: 27px; +} +.imageset.button_topic_new { + background-image: url("./en/button_topic_new.gif"); + padding-left: 97px; + padding-top: 27px; +} +.imageset.button_topic_reply { + background-image: url("./en/button_topic_reply.gif"); + padding-left: 97px; + padding-top: 27px; +} + +/* Responsive breadcrumbs +----------------------------------------*/ +.rtl .breadcrumbs .crumb { + float: right; +} + +/* Table styles +----------------------------------------*/ +table.table1 { + width: 100%; +} + +.ucp-main table.table1 { + padding: 2px; +} + +table.table1 thead th { + font-weight: normal; + text-transform: uppercase; + line-height: 1.3em; + font-size: 1em; + padding: 0 0 4px 3px; +} + +table.table1 thead th span { + padding-left: 7px; +} + +table.table1 tbody tr { + border: 1px solid transparent; +} + +table.table1 td { + font-size: 1.1em; +} + +table.table1 tbody td { + padding: 5px; + border-top: 1px solid transparent; +} + +table.table1 tbody th { + padding: 5px; + border-bottom: 1px solid transparent; + text-align: left; +} + +/* Specific column styles */ +table.table1 .name { text-align: left; } +table.table1 .center { text-align: center; } +table.table1 .reportby { width: 15%; } +table.table1 .posts { text-align: center; width: 7%; } +table.table1 .joined { text-align: left; width: 15%; } +table.table1 .active { text-align: left; width: 15%; } +table.table1 .mark { text-align: center; width: 7%; } +table.table1 .info { text-align: left; width: 30%; } +table.table1 .info div { width: 100%; white-space: normal; overflow: hidden; } +table.table1 .autocol { line-height: 2em; white-space: nowrap; } +table.table1 thead .autocol { padding-left: 1em; } + +table.table1 span.rank-img { + float: right; + width: auto; +} + +table.info td { + padding: 3px; +} + +table.info tbody th { + padding: 3px; + text-align: right; + vertical-align: top; + font-weight: normal; +} + +table.table1 thead th { + color: #FFFFFF; +} + +table.table1 tbody tr { + border-color: #BFC1CF; +} + +table.table1 tbody tr:hover, table.table1 tbody tr.hover { + background-color: #CFE1F6; + color: #000; +} + +table.table1 td { + color: #536482; +} + +table.table1 tbody td { + border-top-color: #FAFAFA; +} + +table.table1 tbody th { + border-bottom-color: #000000; + color: #333333; + background-color: #FFFFFF; +} + +table.info tbody th { + color: #000000; +} + +table.table1 td { + color: #536482; +} + +table.table1 td { + font-size: 1.1em; +} + +table.fixed-width-table { + table-layout: fixed; +} + +.rtl table.table1 thead th { + padding: 0 3px 4px 0; +} + +.rtl table.table1 thead th span { + padding-left: 0; + padding-right: 7px; +} + +.rtl table.table1 tbody th { + text-align: right; +} + +/* Specific column styles */ +.rtl table.table1 .name { text-align: right; } +.rtl table.table1 .joined { text-align: right; } +.rtl table.table1 .active { text-align: right; } +.rtl table.table1 .info { text-align: right; } +.rtl table.table1 thead .autocol { padding-left: 0; padding-right: 1em; } + +/* Specific column styles */ +.ltr table.table1 .name { text-align: left; } +.ltr table.table1 .joined { text-align: left; } +.ltr table.table1 .active { text-align: left; } +.ltr table.table1 .info { text-align: left; } +.ltr table.table1 thead .autocol { padding-right: 0; padding-left: 1em; } + +.rtl table.table1 span.rank-img { + float: left; +} + +.rtl table.info tbody th { + text-align: left; +} + +.rtl .forumbg table.table1 { + margin: 0 -1px -1px -2px; +} + +.forumbg table.table1 { + margin: 0; +} + +.forumbg-table > .inner { + margin: 0 -1px; +} + +.color_palette_placeholder table { + border-collapse: separate; + border-spacing: 1px; +} + + /* Control Panel Styles +---------------------------------------- */ + + +/* Main CP box +----------------------------------------*/ +.cp-menu { + float:left; + width: 19%; + margin-top: 1em; + margin-bottom: 5px; +} + +.cp-main { + float: left; + width: 81%; +} + +.cp-main .content { + padding: 0; +} + +.panel-container .panel p { + font-size: 1.1em; +} + +.panel-container .panel ol { + margin-left: 2em; + font-size: 1.1em; +} + +.panel-container .panel li.row { + border-bottom: 1px solid transparent; + border-top: 1px solid transparent; +} + +ul.cplist { + margin-bottom: 5px; + border-top: 1px solid transparent; +} + +.panel-container .panel li.header dd, .panel-container .panel li.header dt { + margin-bottom: 2px; +} + +.panel-container table.table1 { + margin-bottom: 1em; +} + +.panel-container table.table1 thead th { + font-weight: bold; + border-bottom: 1px solid transparent; + padding: 5px; +} + +.panel-container table.table1 tbody th { + font-style: italic; + background-color: transparent !important; + border-bottom: none; +} + +.cp-main .pm-message { + border: 1px solid transparent; + margin: 10px 0; + width: auto; + float: none; +} + +.pm-message h2 { + padding-bottom: 5px; +} + +.cp-main .postbody h3, .cp-main .box2 h3 { + margin-top: 0; +} + +.panel-container .postbody p.author { + font-size: 1.1em; +} + +.cp-main .buttons { + margin-left: 0; +} + +.cp-main ul.linklist { + margin: 0; +} + +/* MCP Specific tweaks */ +.mcp-main .postbody { + width: 100%; +} + +.tabs-container h2 { + float: left; + margin-bottom: 0px; +} + +/* CP tabs shared +----------------------------------------*/ +.tabs, .minitabs { + line-height: normal; +} + +.tabs > ul, .minitabs > ul { + list-style: none; + margin: 0; + padding: 0; + position: relative; +} + +.tabs .tab, .minitabs .tab { + display: block; + float: left; + font-size: 1em; + font-weight: bold; + line-height: 1.4em; +} + +.tabs .tab > a, .minitabs .tab > a { + display: block; + padding: 5px 9px; + position: relative; + text-decoration: none; + white-space: nowrap; + cursor: pointer; +} + +/* CP tabbed menu +----------------------------------------*/ +.tabs { + margin: 20px 0 0 7px; +} + +.tabs .tab > a { + border: 1px solid transparent; + border-radius: 4px 4px 0 0; + margin: 1px 1px 0 0; +} + +.tabs .activetab > a { + margin-top: 0; + padding-bottom: 7px; +} + +/* Mini tabbed menu used in MCP +----------------------------------------*/ +.minitabs { + float: right; + margin: 15px 7px 0 0; + max-width: 50%; +} + +.minitabs .tab { + float: right; +} + +.minitabs .tab > a { + border-radius: 5px 5px 0 0; + margin-left: 2px; +} + +.minitabs .tab > a:hover { + text-decoration: none; +} + +/* Responsive tabs +----------------------------------------*/ +.responsive-tab { + position: relative; +} + +.responsive-tab > a.responsive-tab-link { + display: block; + font-size: 1.6em; + position: relative; + width: 16px; + line-height: 0.9em; + text-decoration: none; +} + +.responsive-tab .responsive-tab-link:before { + content: ''; + position: absolute; + left: 10px; + top: 7px; + height: .125em; + width: 14px; + border-bottom: 0.125em solid transparent; + border-top: 0.375em double transparent; +} + +.tabs .dropdown, .minitabs .dropdown { + top: 20px; + margin-right: -2px; + font-size: 1.1em; + font-weight: normal; +} + +.minitabs .dropdown { + margin-right: -4px; +} + +.tabs .dropdown-up .dropdown, .minitabs .dropdown-up .dropdown { + bottom: 20px; + top: auto; +} + +.tabs .dropdown li { + text-align: right; +} + +.minitabs .dropdown li { + text-align: left; +} + +/* UCP navigation menu +----------------------------------------*/ +/* Container for sub-navigation list */ +.navigation { + width: 100%; + padding-top: 36px; +} + +.navigation ul { + list-style: none; +} + +/* Default list state */ +.navigation li { + display: inline; + font-weight: bold; + margin: 1px 0; + padding: 0; +} + +/* Link styles for the sub-section links */ +.navigation a { + display: block; + padding: 5px; + margin: 1px 0; + text-decoration: none; +} + +.navigation a:hover { + text-decoration: none; +} + +/* Preferences pane layout +----------------------------------------*/ +.cp-main h2 { + border-bottom: none; + padding: 0; + margin-left: 10px; +} + +/* Friends list */ +.cp-mini { + margin: 10px 15px 10px 5px; + max-height: 200px; + overflow-y: auto; + padding: 5px 10px; + border-radius: 7px; +} + +dl.mini dt { + font-weight: bold; +} + +dl.mini dd { + padding-top: 4px; +} + +.friend-online { + font-weight: bold; +} + +.friend-offline { + font-style: italic; +} + +/* PM Styles +----------------------------------------*/ +/* Defined rules list for PM options */ +ol.def-rules { + padding-left: 0; +} + +ol.def-rules li { + line-height: 180%; + padding: 1px; +} + +/* PM marking colours */ +.pmlist li.bg1 { + padding: 0 3px; +} + +.pmlist li.bg2 { + padding: 0 3px; +} + +.pmlist li.pm_message_reported_colour, .pm_message_reported_colour { + border-left-color: transparent; + border-right-color: transparent; +} + +.pmlist li.pm_marked_colour, .pm_marked_colour, +.pmlist li.pm_replied_colour, .pm_replied_colour, +.pmlist li.pm_friend_colour, .pm_friend_colour, +.pmlist li.pm_foe_colour, .pm_foe_colour { + padding: 0; + border: solid 3px transparent; + border-width: 0 3px; +} + +.pm-legend { + border-left-width: 10px; + border-left-style: solid; + border-right-width: 0; + margin-bottom: 3px; + padding-left: 3px; +} + +/* Avatar gallery */ +.gallery label { + position: relative; + float: left; + margin: 10px; + padding: 5px; + width: auto; + border: 1px solid transparent; + text-align: center; +} + +/* Responsive *CP navigation +----------------------------------------*/ +@media only screen and (max-width: 900px), only screen and (max-device-width: 900px) +{ + .nojs .tabs a span, .nojs .minitabs a span { + max-width: 40px; + overflow: hidden; + text-overflow: ellipsis; + letter-spacing: -.5px; + } + + .cp-menu, .navigation, .cp-main { + float: none; + width: auto; + margin: 0; + } + + .navigation { + padding: 0; + margin: 0 auto; + max-width: 320px; + } + + .navigation a { + background-image: none; + } + + .navigation li:first-child a { + border-top-left-radius: 5px; + border-top-right-radius: 5px; + } + + .navigation li:last-child a { + border-bottom-left-radius: 5px; + border-bottom-right-radius: 5px; + } +} + +/* Misc layout styles +---------------------------------------- */ +/* column[1-2] styles are containers for two column layouts */ +.rtl .column1 { + float: right; + clear: right; +} + +.rtl .column2 { + float: left; + clear: left; +} + +/* General classes for placing floating blocks */ +.rtl .left-box { + float: right; + text-align: right; +} + +.rtl .right-box { + float: left; + text-align: left; +} + +.rtl dl.details dt { + float: right; + clear: right; + text-align: left; +} + +.rtl dl.details dd { + margin-right: 0; + margin-left: 0; + padding-right: 5px; + padding-left: 0; + float: right; +} + +*:first-child+html dl.details dd { + margin-right: 30%; + float: none; +} + +* html dl.details dd { + margin-right: 30%; + float: none; +} + +/* RTL imageset entries */ +.rtl .imageset.site_logo { + padding-right: 170px; + padding-left: 0; +} +.rtl .imageset.upload_bar { + padding-right: 280px; + padding-left: 0; +} +.rtl .imageset.poll_left, .rtl .imageset.poll_right { + padding-right: 4px; + padding-left: 0; +} +.rtl .imageset.poll_center { + padding-right: 1px; + padding-left: 0; +} +.rtl .imageset.forum_link, .rtl .imageset.forum_read, .rtl .imageset.forum_read_locked, .rtl .imageset.forum_read_subforum, .rtl .imageset.forum_unread, .rtl .imageset.forum_unread_locked, .rtl .imageset.forum_unread_subforum { + padding-right: 46px; + padding-left: 0; +} +.rtl .imageset.topic_moved, .rtl .imageset.topic_read, .rtl .imageset.topic_read_mine, .rtl .imageset.topic_read_hot, .rtl .imageset.topic_read_hot_mine, .rtl .imageset.topic_read_locked, .rtl .imageset.topic_read_locked_mine, .rtl .imageset.topic_unread, .rtl .imageset.topic_unread_mine, .rtl .imageset.topic_unread_hot, .rtl .imageset.topic_unread_hot_mine, .rtl .imageset.topic_unread_locked, .rtl .imageset.topic_unread_locked_mine, .rtl .imageset.sticky_read, .rtl .imageset.sticky_read_mine, .rtl .imageset.sticky_read_locked, .rtl .imageset.sticky_read_locked_mine, .rtl .imageset.sticky_unread, .rtl .imageset.sticky_unread_mine, .rtl .imageset.sticky_unread_locked, .rtl .imageset.sticky_unread_locked_mine, .rtl .imageset.announce_read, .rtl .imageset.announce_read_mine, .rtl .imageset.announce_read_locked, .rtl .imageset.announce_read_locked_mine, .rtl .imageset.announce_unread, .rtl .imageset.announce_unread_mine, .rtl .imageset.announce_unread_locked, .rtl .imageset.announce_unread_locked_mine, .rtl .imageset.global_read, .rtl .imageset.global_read_mine, .rtl .imageset.global_read_locked, .rtl .imageset.global_read_locked_mine, .rtl .imageset.global_unread, .rtl .imageset.global_unread_mine, .rtl .imageset.global_unread_locked, .rtl .imageset.global_unread_locked_mine, .rtl .imageset.pm_read, .rtl .imageset.pm_unread, .rtl .imageset.icon_topic_reported, .rtl .imageset.icon_topic_unapproved { + padding-right: 19px; + padding-left: 0; +} +.rtl .imageset.icon_post_target, .rtl .imageset.icon_post_target_unread { + padding-right: 12px; + padding-left: 0; +} +.rtl .imageset.icon_topic_attach { + padding-right: 14px; + padding-left: 0; +} +.rtl .imageset.icon_topic_latest, .rtl .imageset.icon_topic_newest { + padding-right: 18px; + padding-left: 0; +} + +#notification_list { + display: none; + position: absolute; + width: 310px; + z-index: 1; + box-shadow: 3px 3px 5px darkgray; +} + +#notification_list .notification_scroll { + max-height: 350px; + overflow-y: auto; + overflow-x: hidden; +} + +#notification_list table { + width: 100%; +} + +#notification_list .notification_title { + padding: 3px; +} + +#notification_list .notification_title:after { + clear: both; + content: ''; + display: block; +} + +#notification_list .header { + padding: 5px; + font-weight: bold; + border: 1px solid #A9B8C2; + border-bottom: 0; +} + +#notification_list > .header > .header_settings { + float: right; + font-weight: normal; + text-transform: none; +} + +#notification_list .header:after { + content: ''; + display: table; + clear: both; +} + +#notification_list .footer { + text-align: center; + font-size: 1.2em; + border: 1px solid #A9B8C2; + border-top: 0; +} + +.notification_list img { + max-width: 50px; + max-height: 50px; +} + +#notification_list .footer > a { + display: block; +} + +#notification_list .notification-time { + font-size: 0.9em; + float: right; +} + +.notification_list .notifications_time { + font-size: 0.8em; +} + + +/* Responsive Design +---------------------------------------- */ + +@media (max-width: 320px) { + select, .inputbox { + max-width: 240px; + } +} + +/* Notifications list +----------------------------------------*/ +@media (max-width: 350px) { + .dropdown-extended .dropdown-contents { + width: auto; + } +} + +@media (max-width: 430px) { + .action-bar .search-box .inputbox { + width: 120px; + } + + .section-viewtopic .search-box .inputbox { + width: 57px; + } + + .action-bar .search-box .inputbox ::-moz-placeholder { + content: "Search..."; + } + + .action-bar .search-box .inputbox :-ms-input-placeholder { + content: "Search..."; + } + + .action-bar .search-box .inputbox ::-webkit-input-placeholder { + content: "Search..."; + } +} + +@media (max-width: 500px) { + dd label { + white-space: normal; + } + + select, .inputbox { + max-width: 260px; + } + + .captcha-panel dd.captcha { + margin-left: 0; + } + + .captcha-panel dd.captcha-image img { + width: 100%; + } + + dl.details dt, dl.details dd { + width: auto; + float: none; + text-align: left; + } + + dl.details dd { + margin-left: 20px; + } + + p.responsive-center { + float: none; + text-align: center; + margin-bottom: 5px; + } + + .action-bar > div { + margin-bottom: 5px; + } + + .action-bar > .pagination { + float: none; + clear: both; + padding-bottom: 1px; + text-align: center; + } + + .action-bar > .pagination li.page-jump { + margin: 0 2px; + } + + p.jumpbox-return { + display: none; + } + + .display-options > label:nth-child(1) { + display: block; + margin-bottom: 5px; + } + + .attach-controls { + margin-top: 5px; + width: 100%; + } + + .quick-links .dropdown-trigger span { + display: none; + } +} + +@media (max-width: 550px) { + ul.topiclist.forums dt { + margin-right: 0; + } + + ul.topiclist.forums dt .list-inner { + margin-right: 0; + } + + ul.topiclist.forums dd.lastpost { + display: none; + } +} + +@media (max-width: 700px) { + .responsive-hide { display: none !important; } + .responsive-show { display: block !important; } + .responsive-show-inline { display: inline !important; } + .responsive-show-inline-block { display: inline-block !important; } + + /* Content wrappers + ----------------------------------------*/ + html { + height: auto; + } + + body { + padding: 0; + } + + .wrap { + border: none; + border-radius: 0; + margin: 0; + min-width: 290px; + padding: 0 5px; + } + + /* Common block wrappers + ----------------------------------------*/ + .headerbar, .navbar, .forabg, .forumbg, .post, .panel { + border-radius: 0; + margin-left: -5px; + margin-right: -5px; + } + + .cp-main .forabg, .cp-main .forumdb, .cp-main .post, .cp-main .panel { + border-radius: 7px; + } + + /* Logo block + ----------------------------------------*/ + .site-description { + float: none; + width: auto; + text-align: center; + } + + .logo { + /* change display value to inline-block to show logo */ + display: none; + float: none; + padding: 10px; + } + + .site-description h1, .site-description p { + text-align: inherit; + float: none; + margin: 5px; + line-height: 1.2em; + overflow: hidden; + text-overflow: ellipsis; + } + + .site-description p, .search-header { + display: none; + } + + /* Navigation + ----------------------------------------*/ + .headerbar + .navbar { + margin-top: -5px; + } + + /* Search + ----------------------------------------*/ + .responsive-search { display: block !important; } + + /* .topiclist lists + ----------------------------------------*/ + li.header dt { + text-align: center; + text-transform: none; + line-height: 1em; + font-size: 1.2em; + padding-bottom: 4px; + } + + ul.topiclist li.header dt, ul.topiclist li.header dt .list-inner { + margin-right: 0 !important; + padding-right: 0; + } + + ul.topiclist li.header dd { + display: none !important; + } + + ul.topiclist dt, ul.topiclist dt .list-inner, + ul.topiclist.missing-column dt, ul.topiclist.missing-column dt .list-inner, + ul.topiclist.two-long-columns dt, ul.topiclist.two-long-columns dt .list-inner, + ul.topiclist.two-columns dt, ul.topiclist.two-columns dt .list-inner { + margin-right: 0; + } + + ul.topiclist dt .list-inner.with-mark { + padding-right: 34px; + } + + ul.topiclist dt .list-inner { + min-height: 28px; + } + + ul.topiclist li.header dt .list-inner { + min-height: 0; + } + + ul.topiclist dd { + display: none; + } + ul.topiclist dd.mark { + display: block; + } + + /* Forums and topics lists + ----------------------------------------*/ + ul.topiclist.forums dt { + margin-right: -250px; + } + + ul.topiclist dd.mark { + display: block; + position: absolute; + right: 5px; + top: 0; + margin: 0; + width: auto; + min-width: 0; + text-align: left; + } + + ul.topiclist.forums dd.topics dfn, ul.topiclist.topics dd.posts dfn { + position: relative; + left: 0; + width: auto; + display: inline; + font-weight: normal; + } + + li.row .responsive-show strong { + font-weight: bold; + color: inherit; + } + + ul.topiclist li.row dt a.subforum { + vertical-align: bottom; + overflow: hidden; + text-overflow: ellipsis; + max-width: 100px; + } + + /* Forums and topics lists + ----------------------------------------*/ + dd.cat-title { + width: 50px; + min-width: 20px; + overflow: hidden; + text-align: left; + line-height: 2.2em; + font-size: 1.1em; + } + + dd.catdiv { + min-width: 20px; + overflow: hidden; + text-align: center; + line-height: 2.2em; + font-size: 1.1em; + } + + dd.topicdetails { + width: 50px; + overflow: hidden; + margin-left: 2px; + margin-right: 2px; + text-align: left; + line-height: 1.2em; + font-size: 1.1em; + } + + dd.forumdesc { + margin-left: 2px; + margin-right: 2px; + text-align: left; + line-height: 1.2em; + font-size: 1.1em; + } + + dd.nav { + overflow: hidden; + text-align: center; + font-size: 1.1em; + } + + dd.views { + min-width: 100px; + overflow: hidden; + text-align: center; + font-size: 1.1em; + } + + dd.answers { + min-width: 60px; + overflow: hidden; + text-align: center; + line-height: 1.2em; + font-size: 1.1em; + } + + dd.forumlink { + min-width: 60px; + text-align: center; + font-size: 1.1em; + } + + dd.lastpost { + width: 50px; + min-width: 10px; + text-align: left; + font-size: 1.1em; + } + + div.legend { + text-align: center; + vertical-align: middle; + line-height: 1.2em; + font-size: 1.1em; + } + + /* Responsive breadcrumbs + ----------------------------------------*/ + .rtl .breadcrumbs .crumb { + float: right; + } + + /* Table styles + ----------------------------------------*/ + .rtl table.table1 thead th { + padding: 0 3px 4px 0; + } + + .rtl table.table1 thead th span { + padding-left: 0; + padding-right: 7px; + } + + .rtl table.table1 tbody th { + text-align: right; + } + + /* Specific column styles */ + .rtl table.table1 .name { text-align: right; } + .rtl table.table1 .joined { text-align: right; } + .rtl table.table1 .active { text-align: right; } + .rtl table.table1 .info { text-align: right; } + .rtl table.table1 thead .autocol { padding-left: 0; padding-right: 1em; } + + .rtl table.table1 span.rank-img { + float: left; + } + + .rtl table.info tbody th { + text-align: left; + } + + .rtl .forumbg table.table1 { + margin: 0 -1px -1px -2px; + } + + /* Misc layout styles + ---------------------------------------- */ + /* column[1-2] styles are containers for two column layouts */ + .rtl .column1 { + float: right; + clear: right; + } + + .rtl .column2 { + float: left; + clear: left; + } + + /* General classes for placing floating blocks */ + .rtl .left-box { + float: right; + text-align: right; + } + + .rtl .right-box { + float: left; + text-align: left; + } + + .rtl dl.details dt { + float: right; + clear: right; + text-align: left; + } + + .rtl dl.details dd { + margin-right: 0; + margin-left: 0; + padding-right: 5px; + padding-left: 0; + float: right; + } + + *:first-child+html dl.details dd { + margin-right: 30%; + float: none; + } + + * html dl.details dd { + margin-right: 30%; + float: none; + } + + /* Pagination + ----------------------------------------*/ + .pagination > ul { + margin: 5px 0 0; + } + + .row .pagination .ellipsis + li { + display: none !important; + } + + /* Responsive tables + ----------------------------------------*/ + table { + border-collapse: collapse; + border-spacing: 0; + } + + table.responsive, table.responsive tbody, table.responsive tr, table.responsive td { + display: block; + } + + table.responsive thead, table.responsive th { + display: none; + } + + table.responsive.show-header thead, table.responsive.show-header th:first-child { + display: block; + width: auto !important; + text-align: left !important; + } + + table.responsive.show-header th:first-child span.rank-img { + display: none; + } + + table.responsive tr { + margin: 2px 0; + } + + table.responsive td { + width: auto !important; + text-align: left !important; + padding: 4px; + } + + table.responsive td.empty { + display: none !important; + } + + table.responsive td > dfn { + display: inline-block !important; + } + + table.responsive td > dfn:after { + content: ':'; + padding-right: 5px; + } + + table.responsive span.rank-img { + float: none; + padding-right: 5px; + } + + table.responsive.memberlist td:first-child input[type="checkbox"] { + float: right; + } + + /* Tabbed menu + Based on: http://www.alistapart.com/articles/slidingdoors2/ + ----------------------------------------*/ + #tabs { + line-height: normal; + margin: 0 0 -6px 7px; + min-width: 600px; + } + + .rtl #tabs { + margin: 0 7px -6px 0; + } + + #tabs ul { + margin:0; + padding: 0; + list-style: none; + } + + #tabs li { + display: inline; + margin: 0; + padding: 0; + font-size: 0.85em; + font-weight: bold; + } + + #tabs a { + float: left; + background:url("images/bg_tabs1.gif") no-repeat 0% -34px; + margin: 0 1px 0 0; + padding: 0 0 0 7px; + text-decoration: none; + position: relative; + } + + .rtl #tabs a { + float: right; + } + + #tabs a span { + float: left; + display: block; + background: url("images/bg_tabs2.gif") no-repeat 100% -34px; + padding: 7px 10px 4px 4px; + color: #767676; + white-space: nowrap; + font-family: Arial, Helvetica, sans-serif; + text-transform: uppercase; + font-weight: bold; + } + + .rtl #tabs a span { + float: right; + } + + /* Commented Backslash Hack hides rule from IE5-Mac \*/ + #tabs a span, .rtl #tabs a span { float:none;} + /* End hack */ + + #tabs a:hover span { + color: #BC2A4D; + } + + #tabs #activetab a { + background-position: 0 0; + border-bottom: 1px solid #DCDEE2; + } + + #tabs #activetab a span { + background-position: 100% 0; + padding-bottom: 5px; + color: #23649F; + } + + #tabs a:hover { + background-position: 0 -69px; + } + + #tabs a:hover span { + background-position: 100% -69px; + } + + #tabs #activetab a:hover span { + color: #115098; + } + + /* Forms + ----------------------------------------*/ + fieldset dt, fieldset.fields1 dt, fieldset.fields2 dt { + width: auto; + float: none; + } + + fieldset dd, fieldset.fields1 dd, fieldset.fields2 dd { + margin-left: 0px; + } + + textarea, dd textarea, .message-box textarea { + width: 100%; + -moz-box-sizing: border-box; + box-sizing: border-box; + } + + dl.pmlist dt { + width: auto !important; + margin-bottom: 5px; + } + + dl.pmlist dd { + display: inline-block; + margin-left: 0 !important; + } + + dl.pmlist dd:first-of-type { + padding-left: 20px; + } + + .smiley-box, .message-box { + float: none; + width: auto; + } + + .smiley-box { + margin-top: 5px; + } + + .bbcode-status { + display: none; + } + + .colour-palette, .colour-palette tbody, .colour-palette tr { + display: block; + } + + .colour-palette td { + display: inline-block; + margin-right: 2px; + } + + .horizontal-palette td:nth-child(2n), .vertical-palette tr:nth-child(2n) { + display: none; + } + + fieldset.quick-login label { + display: block; + margin-bottom: 5px; + white-space: normal; + } + + fieldset.quick-login label > span { + display: inline-block; + min-width: 100px; + } + + fieldset.quick-login input.inputbox { + width: 85%; + max-width: 300px; + margin-left: 20px; + } + + fieldset.quick-login label[for="autologin"] { + display: inline-block; + text-align: right; + min-width: 50%; + } + + /* User profile + ----------------------------------------*/ + .column1, .column2, .left-box.profile-details { + float: none; + width: auto; + } + + /* Polls + ----------------------------------------*/ + fieldset.polls dt { + width: 90%; + } + + fieldset.polls dd.resultbar { + padding-left: 20px; + } + + fieldset.polls dd.poll_option_percent { + width: 20%; + } + + fieldset.polls dd.resultbar, fieldset.polls dd.poll_option_percent { + margin-top: 5px; + } + + /* Post + ----------------------------------------*/ + .postbody { + position: inherit; + } + + .postprofile, .postbody, .search .postbody { + display: block; + width: auto; + float: none; + padding: 0; + min-height: 0; + } + + .post .postprofile { + width: auto; + border-width: 0 0 1px 0; + padding-bottom: 5px; + margin: 0; + margin-bottom: 5px; + min-height: 40px; + overflow: hidden; + } + + .postprofile dd { + display: none; + } + + .postprofile dt, .postprofile dd.profile-rank, .search .postprofile dd { + display: block; + margin: 0; + } + + .postprofile .has-avatar .avatar-container { + margin: 0; + overflow: inherit; + } + + .postprofile .avatar-container:after { + clear: none; + } + + .postprofile .avatar { + margin-right: 5px; + } + + .postprofile .avatar img { + width: auto !important; + height: auto !important; + max-height: 32px; + } + + .has-profile .postbody h3 { + margin-left: 0 !important; + margin-right: 0 !important; + } + + .has-profile .post-buttons { + right: 30px; + top: 15px; + } + + .online { + background-size: 40px; + } + + /* Misc stuff + ----------------------------------------*/ + h2 { + margin-top: .5em; + } + + p { + margin-bottom: .5em; + overflow: hidden; + } + + p.rightside { + margin-bottom: 0; + } + + fieldset.display-options label { + display: block; + clear: both; + margin-bottom: 5px; + } + + dl.mini dd.pm-legend { + float: left; + min-width: 200px; + } + + .topicreview { + margin: 0 -5px; + padding: 0 5px; + } + + fieldset.display-actions { + white-space: normal; + } + + .phpbb_alert { + width: auto; + margin: 0 5px; + } + + .attach-comment dfn { + width: 100%; + } +} + +@media (min-width: 700px) { + .postbody { width: 70%; } +} + +@media (min-width: 850px) { + .postbody { width: 76%; } +} + +@media (max-width: 850px) { + .postprofile { width: 28%; } + + +} + +@media (min-width: 701px) and (max-width: 950px) { + + ul.topiclist dt { + margin-right: -410px; + } + + ul.topiclist dt .list-inner { + margin-right: 410px; + } + + dd.posts, dd.topics, dd.views { + width: 80px; + } +} + + + +/* Show scrollbars for items with overflow on iOS devices +----------------------------------------*/ +.postbody .content::-webkit-scrollbar, .topicreview::-webkit-scrollbar, .post_details::-webkit-scrollbar, .codebox code::-webkit-scrollbar, .attachbox dd::-webkit-scrollbar, .attach-image::-webkit-scrollbar, .dropdown-extended ul::-webkit-scrollbar { + width: 8px; + height: 8px; + -webkit-appearance: none; + background: rgba(0, 0, 0, .1); + border-radius: 3px; +} + +.postbody .content::-webkit-scrollbar-thumb, .topicreview::-webkit-scrollbar-thumb, .post_details::-webkit-scrollbar-thumb, .codebox code::-webkit-scrollbar-thumb, .attachbox dd::-webkit-scrollbar-thumb, .attach-image::-webkit-scrollbar-thumb, .dropdown-extended ul::-webkit-scrollbar-thumb { + background: rgba(0, 0, 0, .3); + border-radius: 3px; +} + +#memberlist tr.inactive, #team tr.inactive { + font-style: italic; +} diff --git a/templates/SwiftBlue/admin/SwiftBlue.css b/templates/SwiftBlue/admin/SwiftBlue.css new file mode 100644 index 0000000..86295aa --- /dev/null +++ b/templates/SwiftBlue/admin/SwiftBlue.css @@ -0,0 +1,12 @@ +@CHARSET "UTF-8"; + +BODY { + margin:5px; +} +TH, TD { + font-size: 68.5%; +} + +.gen { + font-size: 1.1em; +} diff --git a/templates/SwiftBlue/admin/admin.css b/templates/SwiftBlue/admin/admin.css new file mode 100644 index 0000000..56db12e --- /dev/null +++ b/templates/SwiftBlue/admin/admin.css @@ -0,0 +1,45 @@ +fieldset { + border: 0px; +} +div#admintabs { + display:inline; +} +div#admintabs ul { + margin: 0px; + padding: 0px; + font-family: Arial, Helvetica, sans-serif; + font-size: 12px; + font-weight: bold; + color: #000; + line-height: 30px; + white-space: nowrap; +} +div#admintabs li { + margin: 2px; + padding: 2px; + list-style-type: none; + display: inline; + border: 1px solid #777; + background-color: #fff; +} +div#admintabs li a { + text-decoration: none; + padding: 2px 10px; + color: #000; +} +div#admintabs li a:link { + color: #000: +} +div#admintabs li a:visited { + color: #000; +} +div#admintabs li a:hover { + color: #777; +} +div#admintabs li.activetab { + border: 1px solid #777; + background-color: #ddd; +} +div#admintabs li.activetab a, div#tabs li.activetab a:link, div#tabs li.activetab a:visited, div#tabs li.activetab a:hover { + color: #777; +} \ No newline at end of file diff --git a/templates/SwiftBlue/admin/index.htm b/templates/SwiftBlue/admin/index.htm new file mode 100644 index 0000000..ee1f723 --- /dev/null +++ b/templates/SwiftBlue/admin/index.htm @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/templates/SwiftBlue/admin/mainpage_header.html b/templates/SwiftBlue/admin/mainpage_header.html new file mode 100644 index 0000000..2af2e83 --- /dev/null +++ b/templates/SwiftBlue/admin/mainpage_header.html @@ -0,0 +1,31 @@ + + + +{META} + +{SITENAME} - {L_MX_ADMIN} + + + + + + + + +{MX_ADDITIONAL_CSS} +{MX_ICON_CSS} + + + + + + + + + + + +
    logo MX-Publisher

    {ADMIN_TITLE}

    {L_LOGGED_IN_AS} {USERNAME}{L_LOGOUT} ]{L_ADMIN_INDEX} • + {L_PORTAL_INDEX} +
    +

    {L_SKIP}

    diff --git a/templates/SwiftBlue/alternate.css b/templates/SwiftBlue/alternate.css new file mode 100644 index 0000000..20c39b3 --- /dev/null +++ b/templates/SwiftBlue/alternate.css @@ -0,0 +1,134 @@ +/** + * An alternate stylesheet. + * + * @package AutoIndex + * @author Justin Hagstrom + * @version 1.0.0 (February 03, 2005) + * + * @copyright Copyright (C) 2002-2005 Justin Hagstrom + * @license http://www.gnu.org/licenses/gpl.html GNU General Public License (GPL) + * + * @link http://autoindex.sourceforge.net + */ + +/* Body */ +.autoindex_body, html +{ + font-family: verdana, lucidia, sans-serif; + font-size: 13px; + background-color: #FCFCFC; +} + +/* Images */ +.autoindex_body img +{ + border: none; +} + +/* Tables */ +.autoindex_table +{ + width: 100%; + border: none; + border-spacing: 2px; +} +.light_row +{ + background-color: #FEFEFE; + font-size: 12px; +} +.dark_row +{ + background-color: #EEEEEE; + font-size: 12px; +} +.light_row:hover, .dark_row:hover +{ + background-color: #FFF2BF; +} +.autoindex_td +{ + border: 1px solid #FAFAFA; + font-size: 12px; + padding: 1px; + text-align: left; + white-space: nowrap; +} +.autoindex_td_right +{ + border: 1px solid #FAFAFA; + font-size: 12px; + padding: 1px; + text-align: right; + white-space: nowrap; +} +.autoindex_td:hover, .autoindex_td_right:hover +{ + font-size: 12px; + padding: 1px; + border: 1px solid #FFCC00; +} +.autoindex_th +{ + background-color: #FFCC00; + border: 1px solid #AA9339; + font-size: 12px; + padding: 2px; +} + +/* Links */ +.plain_link +{ + color: #000000; + text-decoration: none; +} +.autoindex_a:visited, .autoindex_a:active +{ + color: #00008F; + text-decoration: none; +} +.autoindex_a:link +{ + color: #0000FF; + text-decoration: none; +} +.autoindex_a:hover +{ + color: #392266; + text-decoration: none; +} + +/* Buttons */ +.button +{ + color: #707070; + background-color: #F2F6FC; + font-family: arial, sans-serif; + font-size: 11px; + text-align: left; + vertical-align: middle; + font-weight: bold; + cursor: pointer; + border: 0px outset #CBCBCB; + padding: 3px 10px 3px 10px; +} + +/* Misc. */ +.paragraph +{ + background: #F2F6FC; + color: #000020; + font-size: 13px; +} +.autoindex_hr +{ + color: #000020; + background-color: #000020; + border: none; + width: 75%; + height: 1px; +} +.autoindex_small +{ + font-size: 10px; +} \ No newline at end of file diff --git a/templates/SwiftBlue/bbcode.html b/templates/SwiftBlue/bbcode.html new file mode 100644 index 0000000..6d41ed2 --- /dev/null +++ b/templates/SwiftBlue/bbcode.html @@ -0,0 +1,129 @@ +
      +
    + +
      +
    + +
  • + + + + + + + + + + + + + + + {if:download_count} + + {end if:download_count} + + + + + + {if:description_file} + + {end if:description_file} + + + \ No newline at end of file diff --git a/templates/SwiftBlue/editor.js b/templates/SwiftBlue/editor.js new file mode 100644 index 0000000..5631ab6 --- /dev/null +++ b/templates/SwiftBlue/editor.js @@ -0,0 +1,403 @@ +/** +* bbCode control by subBlue design [ www.subBlue.com ] +* Includes unixsafe colour palette selector by SHS` +*/ + +// Startup variables +var imageTag = false; +var theSelection = false; + +// Check for Browser & Platform for PC & IE specific bits +// More details from: http://www.mozilla.org/docs/web-developer/sniffer/browser_type.html +var clientPC = navigator.userAgent.toLowerCase(); // Get client info +var clientVer = parseInt(navigator.appVersion); // Get browser version + +var is_ie = ((clientPC.indexOf('msie') != -1) && (clientPC.indexOf('opera') == -1)); +var is_win = ((clientPC.indexOf('win') != -1) || (clientPC.indexOf('16bit') != -1)); + +var baseHeight; +onload_functions.push('initInsertions()'); + +/** +* Shows the help messages in the helpline window +*/ +function helpline(help) +{ + document.forms[form_name].helpbox.value = help_line[help]; +} + +/** +* Fix a bug involving the TextRange object. From +* http://www.frostjedi.com/terra/scripts/demo/caretBug.html +*/ +function initInsertions() +{ + var doc; + + if (document.forms[form_name]) + { + doc = document; + } + else + { + doc = opener.document; + } + + var textarea = doc.forms[form_name].elements[text_name]; + + if (is_ie && typeof(baseHeight) != 'number') + { + textarea.focus(); + baseHeight = doc.selection.createRange().duplicate().boundingHeight; + + if (!document.forms[form_name]) + { + document.body.focus(); + } + } +} + +/** +* bbstyle +*/ +function bbstyle(bbnumber) +{ + if (bbnumber != -1) + { + bbfontstyle(bbtags[bbnumber], bbtags[bbnumber+1]); + } + else + { + insert_text('[*]'); + document.forms[form_name].elements[text_name].focus(); + } +} + +/** +* Apply bbcodes +*/ +function bbfontstyle(bbopen, bbclose) +{ + theSelection = false; + + var textarea = document.forms[form_name].elements[text_name]; + + textarea.focus(); + + if ((clientVer >= 4) && is_ie && is_win) + { + // Get text selection + theSelection = document.selection.createRange().text; + + if (theSelection) + { + // Add tags around selection + document.selection.createRange().text = bbopen + theSelection + bbclose; + document.forms[form_name].elements[text_name].focus(); + theSelection = ''; + return; + } + } + else if (document.forms[form_name].elements[text_name].selectionEnd && (document.forms[form_name].elements[text_name].selectionEnd - document.forms[form_name].elements[text_name].selectionStart > 0)) + { + mozWrap(document.forms[form_name].elements[text_name], bbopen, bbclose); + document.forms[form_name].elements[text_name].focus(); + theSelection = ''; + return; + } + + //The new position for the cursor after adding the bbcode + var caret_pos = getCaretPosition(textarea).start; + var new_pos = caret_pos + bbopen.length; + + // Open tag + insert_text(bbopen + bbclose); + + // Center the cursor when we don't have a selection + // Gecko and proper browsers + if (!isNaN(textarea.selectionStart)) + { + textarea.selectionStart = new_pos; + textarea.selectionEnd = new_pos; + } + // IE + else if (document.selection) + { + var range = textarea.createTextRange(); + range.move("character", new_pos); + range.select(); + storeCaret(textarea); + } + + textarea.focus(); + return; +} + +/** +* Insert text at position +*/ +function insert_text(text, spaces, popup) +{ + var textarea; + + if (!popup) + { + textarea = document.forms[form_name].elements[text_name]; + } + else + { + textarea = opener.document.forms[form_name].elements[text_name]; + } + if (spaces) + { + text = ' ' + text + ' '; + } + + if (!isNaN(textarea.selectionStart)) + { + var sel_start = textarea.selectionStart; + var sel_end = textarea.selectionEnd; + + mozWrap(textarea, text, '') + textarea.selectionStart = sel_start + text.length; + textarea.selectionEnd = sel_end + text.length; + } + else if (textarea.createTextRange && textarea.caretPos) + { + if (baseHeight != textarea.caretPos.boundingHeight) + { + textarea.focus(); + storeCaret(textarea); + } + + var caret_pos = textarea.caretPos; + caret_pos.text = caret_pos.text.charAt(caret_pos.text.length - 1) == ' ' ? caret_pos.text + text + ' ' : caret_pos.text + text; + } + else + { + textarea.value = textarea.value + text; + } + if (!popup) + { + textarea.focus(); + } +} + +/** +* Add inline attachment at position +*/ +function attach_inline(index, filename) +{ + insert_text('[attachment=' + index + ']' + filename + '[/attachment]'); + document.forms[form_name].elements[text_name].focus(); +} + +/** +* Add quote text to message +*/ +function addquote(post_id, username) +{ + var message_name = 'message_' + post_id; + var theSelection = ''; + var divarea = false; + + if (document.all) + { + divarea = document.all[message_name]; + } + else + { + divarea = document.getElementById(message_name); + } + + // Get text selection - not only the post content :( + if (window.getSelection) + { + theSelection = window.getSelection().toString(); + } + else if (document.getSelection) + { + theSelection = document.getSelection(); + } + else if (document.selection) + { + theSelection = document.selection.createRange().text; + } + + if (theSelection == '' || typeof theSelection == 'undefined' || theSelection == null) + { + if (divarea.innerHTML) + { + theSelection = divarea.innerHTML.replace(/
    /ig, '\n'); + theSelection = theSelection.replace(//ig, '\n'); + theSelection = theSelection.replace(/<\;/ig, '<'); + theSelection = theSelection.replace(/>\;/ig, '>'); + theSelection = theSelection.replace(/&\;/ig, '&'); + theSelection = theSelection.replace(/ \;/ig, ' '); + } + else if (document.all) + { + theSelection = divarea.innerText; + } + else if (divarea.textContent) + { + theSelection = divarea.textContent; + } + else if (divarea.firstChild.nodeValue) + { + theSelection = divarea.firstChild.nodeValue; + } + } + + if (theSelection) + { + insert_text('[quote="' + username + '"]' + theSelection + '[/quote]'); + } + + return; +} + +/** +* From http://www.massless.org/mozedit/ +*/ +function mozWrap(txtarea, open, close) +{ + var selLength = txtarea.textLength; + var selStart = txtarea.selectionStart; + var selEnd = txtarea.selectionEnd; + var scrollTop = txtarea.scrollTop; + + if (selEnd == 1 || selEnd == 2) + { + selEnd = selLength; + } + + var s1 = (txtarea.value).substring(0,selStart); + var s2 = (txtarea.value).substring(selStart, selEnd) + var s3 = (txtarea.value).substring(selEnd, selLength); + + txtarea.value = s1 + open + s2 + close + s3; + txtarea.selectionStart = selEnd + open.length + close.length; + txtarea.selectionEnd = txtarea.selectionStart; + txtarea.focus(); + txtarea.scrollTop = scrollTop; + + return; +} + +/** +* Insert at Caret position. Code from +* http://www.faqts.com/knowledge_base/view.phtml/aid/1052/fid/130 +*/ +function storeCaret(textEl) +{ + if (textEl.createTextRange) + { + textEl.caretPos = document.selection.createRange().duplicate(); + } +} + +/** +* Color pallette +*/ +function colorPalette(dir, width, height) +{ + var r = 0, g = 0, b = 0; + var numberList = new Array(6); + var color = ''; + + numberList[0] = '00'; + numberList[1] = '40'; + numberList[2] = '80'; + numberList[3] = 'BF'; + numberList[4] = 'FF'; + + document.writeln('
    {USERNAME} {L_WROTE}:
    + + + + + + + + +
    {L_QUOTE}:
    +
    + + + + + + + + + + +
    {L_CODE}:
    +
    + + + + + + + + + + + + + + + + + + + + +{DESCRIPTION} + +{EMAIL} + + + + +
    + + + + +
    + + + +
    + + + + +
    +{GVIDEOLINK}
    +
    + + + +
    + + + +
    +{YOUTUBELINK}

    + + + +
    + + + + + + + + + + +
    + + + +
    +
    +
    + + +
    + + + + + + + \ No newline at end of file diff --git a/templates/SwiftBlue/biblia_online.js b/templates/SwiftBlue/biblia_online.js new file mode 100644 index 0000000..4dc009e --- /dev/null +++ b/templates/SwiftBlue/biblia_online.js @@ -0,0 +1,9 @@ +document.writeln(""); +document.writeln(""); \ No newline at end of file diff --git a/templates/SwiftBlue/default.css b/templates/SwiftBlue/default.css new file mode 100644 index 0000000..c5d7350 --- /dev/null +++ b/templates/SwiftBlue/default.css @@ -0,0 +1,128 @@ +/** + * The default CSS stylesheet used for all templates. + * + * @package AutoIndex + * @author Justin Hagstrom + * @version 1.0.2 (February 05, 2004) + * + * @copyright Copyright (C) 2002-2004 Justin Hagstrom + * @license http://www.gnu.org/licenses/gpl.html GNU General Public License (GPL) + * + * @link http://autoindex.sourceforge.net + */ + +/* Body */ +.autoindex_body, html +{ + font-family: verdana, lucidia, sans-serif; + font-size: 13px; + background-color: #F0F0F0; +} + +/* Images */ +.autoindex_body img +{ + border: none; +} + +/* Tables */ +.autoindex_table +{ + width: 100%; + border: none; + border-spacing: 2px; +} +.light_row +{ + background-color: #F2F6FC; + font-size: 13px; +} +.dark_row +{ + background-color: #DADEEE; + font-size: 13px; +} +.autoindex_td +{ + font-size: 13px; + font-family: verdana, lucidia, sans-serif; + vertical-align: top; + border: 1px solid #7F8FA9; + padding: 0px; + text-align: left; + white-space: nowrap; +} +.autoindex_td_right +{ + font-size: 13px; + font-family: verdana, lucidia, sans-serif; + vertical-align: top; + border: 1px solid #7F8FA9; + padding: 0px; + text-align: right; + white-space: nowrap; +} +.autoindex_th +{ + font-size: 13px; + background-color: #7F8FAD; + border: 1px solid #000010; + padding: 0px; +} + +/* Links */ +.plain_link +{ + color: #000000; + text-decoration: none; +} +.autoindex_a:visited, .autoindex_a:active +{ + color: #00008F; + text-decoration: none; +} +.autoindex_a:link +{ + color: #0000FF; + text-decoration: none; +} +.autoindex_a:hover +{ + color: #0000FF; + text-decoration: overline underline; +} + +/* Buttons */ +.button +{ + color: #707070; + background-color: #F2F6FC; + font-family: sans-serif; + font-size: 11px; + text-align: left; + vertical-align: middle; + font-weight: bold; + cursor: pointer; + border: none; + padding: 3px 10px 3px 10px; +} + +/* Misc. */ +.paragraph +{ + background: #F2F6FC; + font-size: 13px; + color: #000020; +} +.autoindex_hr +{ + color: #000020; + background-color: #000020; + border: none; + width: 75%; + height: 1px; +} +.autoindex_small +{ + font-size: 10px; +} \ No newline at end of file diff --git a/templates/SwiftBlue/documente.js b/templates/SwiftBlue/documente.js new file mode 100644 index 0000000..b393e37 --- /dev/null +++ b/templates/SwiftBlue/documente.js @@ -0,0 +1,22 @@ +var displaymode=0 +var iframecode='' + +if (displaymode==0) +document.write(iframecode) + +function gone(){ +var selectedurl=document.jumpy.example.options[document.jumpy.example.selectedIndex].value +if (document.getElementById&&displaymode==0) +document.getElementById("external").src=selectedurl +else if (document.all&&displaymode==0) +document.all.external.src=selectedurl +else{ +if (!window.win2||win2.closed) +win2=window.open(selectedurl) +//else if win2 already exists +else{ +win2.location=selectedurl +win2.focus() +} +} +} \ No newline at end of file diff --git a/templates/SwiftBlue/dynifs.js b/templates/SwiftBlue/dynifs.js new file mode 100644 index 0000000..579190e --- /dev/null +++ b/templates/SwiftBlue/dynifs.js @@ -0,0 +1,83 @@ +/*************************************************************\ + * DYNIFS - Dynamic IFrame Auto Size v1.0.0 + * + * Copyright (C) 2006, Markus (phpMiX) + * This script is released under GPL License. + * Feel free to use this script (or part of it) wherever you need + * it ...but please, give credit to original author. Thank you. :-) + * We will also appreciate any links you could give us. + * http://www.phpmix.org + * + * Enjoy! ;-) +\*************************************************************/ + +var DYNIFS = { + // Storage for known IFrames. + iframes: {}, + // Here we save any previously installed onresize handler. + oldresize: null, + // Flag that tell us if we have already installed our onresize handler. + ready: false, + // The document dimensions last time onresize was executed. + dim: [-1,-1], + // Timer ID used to defer the actual resize action. + timerID: 0, + // Obtain the dimensions (width,height) of the given document. + getDim: function(d) { + var w=480, h=580, scr_h, off_h; + if( d.height ) { return [d.width,d.height]; } + with( d.body ) { + if( scrollHeight ) { h=scr_h=scrollHeight; w=scrollWidth; } + if( offsetHeight ) { h=off_h=offsetHeight; w=offsetWidth; } + if( scr_h && off_h ) h=Math.max(scr_h, off_h); + } + return [w,h]; + }, + // This is our window.onresize handler. + onresize: function() { + // Invoke any previously installed onresize handler. + if( typeof this.oldresize == 'function' ) { this.oldresize(); } + // Check if the document dimensions really changed. + var dim = this.getDim(document); + if( this.dim[0] == dim[0] && this.dim[1] == dim[1] ) return; + // Defer the resize action to prevent endless loop in quirksmode. + if( this.timerID ) return; + this.timerID = setTimeout('DYNIFS.deferred_resize();', 10); + }, + // This is where the actual IFrame resize is invoked. + deferred_resize: function() { + // Walk the list of known IFrames to see if they need to be resized. + for( var id in this.iframes ) this.resize(id); + // Store resulting document dimensions. + this.dim = this.getDim(document); + // Clear the timer flag. + this.timerID = 0; + }, + // This is invoked when the IFrame is loaded or when the main window is resized. + resize: function(id) { + // Browser compatibility check. + if( !window.frames || !window.frames[id] || !document.getElementById || !document.body ) + return; + // Get references to the IFrame window and layer. + var iframe = window.frames[id]; + var div = document.getElementById(id); + if( !div ) return; + // Save the IFrame id for later use in our onresize handler. + if( !this.iframes[id] ) { + this.iframes[id] = true; + } + // Should we inject our onresize event handler? + if( !this.ready ) { + this.ready = true; + this.oldresize = window.onresize; + window.onresize = new Function('DYNIFS.onresize();'); + } + // This appears to be necessary in MSIE to compute the height + // when the IFrame'd document is in quirksmode. + // OTOH, it doesn't seem to break anything in standards mode, so... + if( document.all ) div.style.height = '0px'; + // Resize the IFrame container. + var dim = this.getDim(iframe.document); + div.style.height = (dim[1]+30) + 'px'; + } +}; \ No newline at end of file diff --git a/templates/SwiftBlue/each_file.tpl b/templates/SwiftBlue/each_file.tpl new file mode 100644 index 0000000..e7ce25f --- /dev/null +++ b/templates/SwiftBlue/each_file.tpl @@ -0,0 +1,39 @@ +
    + {file:if:is_file} /* if it is a file, make a direct link */ + + {end if} + {file:if:is_dir} /* otherwise, for directories, display the folder with autoindex */ + + {end if} + {if:icon_path}[{file:file_ext}]{end if:icon_path} + {file:filename} {file:thumbnail} + {file:new_icon}{file:md5_link}{file:delete_link}{file:rename_link}{file:edit_description_link}{file:ftp_upload_link} + + {file:downloads} + + {file:size} + + {file:date} + + {file:description} +
    '); + + for (r = 0; r < 5; r++) + { + if (dir == 'h') + { + document.writeln(''); + } + + for (g = 0; g < 5; g++) + { + if (dir == 'v') + { + document.writeln(''); + } + + for (b = 0; b < 5; b++) + { + color = String(numberList[r]) + String(numberList[g]) + String(numberList[b]); + document.write(''); + } + + if (dir == 'v') + { + document.writeln(''); + } + } + + if (dir == 'h') + { + document.writeln(''); + } + } + document.writeln('
    '); + document.write('#' + color + ''); + document.writeln('
    '); +} + + +/** +* Caret Position object +*/ +function caretPosition() +{ + var start = null; + var end = null; +} + + +/** +* Get the caret position in an textarea +*/ +function getCaretPosition(txtarea) +{ + var caretPos = new caretPosition(); + + // simple Gecko/Opera way + if(txtarea.selectionStart || txtarea.selectionStart == 0) + { + caretPos.start = txtarea.selectionStart; + caretPos.end = txtarea.selectionEnd; + } + // dirty and slow IE way + else if(document.selection) + { + + // get current selection + var range = document.selection.createRange(); + + // a new selection of the whole textarea + var range_all = document.body.createTextRange(); + range_all.moveToElementText(txtarea); + + // calculate selection start point by moving beginning of range_all to beginning of range + var sel_start; + for (sel_start = 0; range_all.compareEndPoints('StartToStart', range) < 0; sel_start++) + { + range_all.moveStart('character', 1); + } + + txtarea.sel_start = sel_start; + + // we ignore the end value for IE, this is already dirty enough and we don't need it + caretPos.start = txtarea.sel_start; + caretPos.end = txtarea.sel_start; + } + + return caretPos; +} \ No newline at end of file diff --git a/templates/SwiftBlue/error_body.html b/templates/SwiftBlue/error_body.html new file mode 100644 index 0000000..f211ad0 --- /dev/null +++ b/templates/SwiftBlue/error_body.html @@ -0,0 +1,18 @@ + + + + + +
    + + + + + + + + + +
     
    {ERROR_MESSAGE}
     
    + +
    diff --git a/templates/SwiftBlue/forum_fn.js b/templates/SwiftBlue/forum_fn.js new file mode 100644 index 0000000..6694dfb --- /dev/null +++ b/templates/SwiftBlue/forum_fn.js @@ -0,0 +1,257 @@ +/** +* phpBB3 forum functions +*/ + +/** +* Window popup +*/ +function popup(url, width, height, name) +{ + if (!name) + { + name = '_popup'; + } + + window.open(url.replace(/&/g, '&'), name, 'height=' + height + ',resizable=yes,scrollbars=yes, width=' + width); + return false; +} + +/** +* Jump to page +*/ +function jumpto() +{ + var page = prompt(jump_page, on_page); + + if (page !== null && !isNaN(page) && page > 0) + { + document.location.href = base_url.replace(/&/g, '&') + '&start=' + ((page - 1) * per_page); + } +} + +/** +* Mark/unmark checklist +* id = ID of parent container, name = name prefix, state = state [true/false] +*/ +function marklist(id, name, state) +{ + var parent = document.getElementById(id); + if (!parent) + { + eval('parent = document.' + id); + } + + if (!parent) + { + return; + } + + var rb = parent.getElementsByTagName('input'); + + for (var r = 0; r < rb.length; r++) + { + if (rb[r].name.substr(0, name.length) == name) + { + rb[r].checked = state; + } + } +} + +/** +* Resize viewable area for attached image or topic review panel (possibly others to come) +* e = element +*/ +function viewableArea(e, itself) +{ + if (!e) return; + if (!itself) + { + e = e.parentNode; + } + + if (!e.vaHeight) + { + // Store viewable area height before changing style to auto + e.vaHeight = e.offsetHeight; + e.vaMaxHeight = e.style.maxHeight; + e.style.height = 'auto'; + e.style.maxHeight = 'none'; + e.style.overflow = 'visible'; + } + else + { + // Restore viewable area height to the default + e.style.height = e.vaHeight + 'px'; + e.style.overflow = 'auto'; + e.style.maxHeight = e.vaMaxHeight; + e.vaHeight = false; + } +} + +/** +* Set display of page element +* s[-1,0,1] = hide,toggle display,show +*/ +function dE(n, s) +{ + var e = document.getElementById(n); + + if (!s) + { + s = (e.style.display == '' || e.style.display == 'block') ? -1 : 1; + } + e.style.display = (s == 1) ? 'block' : 'none'; +} + +/** +* Alternate display of subPanels +*/ +function subPanels(p) +{ + var i, e, t; + + if (typeof(p) == 'string') + { + show_panel = p; + } + + for (i = 0; i < panels.length; i++) + { + e = document.getElementById(panels[i]); + t = document.getElementById(panels[i] + '-tab'); + + if (e) + { + if (panels[i] == show_panel) + { + e.style.display = 'block'; + if (t) + { + t.className = 'activetab'; + } + } + else + { + e.style.display = 'none'; + if (t) + { + t.className = ''; + } + } + } + } +} + +/** +* Call print preview +*/ +function printPage() +{ + if (is_ie) + { + printPreview(); + } + else + { + window.print(); + } +} + +/** +* Show/hide groups of blocks +* c = CSS style name +* e = checkbox element +* t = toggle dispay state (used to show 'grip-show' image in the profile block when hiding the profiles) +*/ +function displayBlocks(c, e, t) +{ + var s = (e.checked == true) ? 1 : -1; + + if (t) + { + s *= -1; + } + + var divs = document.getElementsByTagName("DIV"); + + for (var d = 0; d < divs.length; d++) + { + if (divs[d].className.indexOf(c) == 0) + { + divs[d].style.display = (s == 1) ? 'none' : 'block'; + } + } +} + +function selectCode(a) +{ + // Get ID of code block + var e = a.parentNode.parentNode.getElementsByTagName('CODE')[0]; + + // Not IE + if (window.getSelection) + { + var s = window.getSelection(); + // Safari + if (s.setBaseAndExtent) + { + s.setBaseAndExtent(e, 0, e, e.innerText.length - 1); + } + // Firefox and Opera + else + { + var r = document.createRange(); + r.selectNodeContents(e); + s.removeAllRanges(); + s.addRange(r); + } + } + // Some older browsers + else if (document.getSelection) + { + var s = document.getSelection(); + var r = document.createRange(); + r.selectNodeContents(e); + s.removeAllRanges(); + s.addRange(r); + } + // IE + else if (document.selection) + { + var r = document.body.createTextRange(); + r.moveToElementText(e); + r.select(); + } +} + +/** +* Play quicktime file by determining it's width/height +* from the displayed rectangle area +*/ +function play_qt_file(obj) +{ + var rectangle = obj.GetRectangle(); + + if (rectangle) + { + rectangle = rectangle.split(','); + var x1 = parseInt(rectangle[0]); + var x2 = parseInt(rectangle[2]); + var y1 = parseInt(rectangle[1]); + var y2 = parseInt(rectangle[3]); + + var width = (x1 < 0) ? (x1 * -1) + x2 : x2 - x1; + var height = (y1 < 0) ? (y1 * -1) + y2 : y2 - y1; + } + else + { + var width = 200; + var height = 0; + } + + obj.width = width; + obj.height = height + 16; + + obj.SetControllerVisible(true); + obj.Play(); +} diff --git a/templates/SwiftBlue/full_page_body.html b/templates/SwiftBlue/full_page_body.html new file mode 100644 index 0000000..45b1eee --- /dev/null +++ b/templates/SwiftBlue/full_page_body.html @@ -0,0 +1,7 @@ + + + + +
    {MESSAGE_TEXT}
    + +
    diff --git a/templates/SwiftBlue/gecko.css b/templates/SwiftBlue/gecko.css new file mode 100644 index 0000000..46c2758 --- /dev/null +++ b/templates/SwiftBlue/gecko.css @@ -0,0 +1,3 @@ +/* + Addon defs for gecko browsers, or redefined +*/ \ No newline at end of file diff --git a/templates/SwiftBlue/global_footer.tpl b/templates/SwiftBlue/global_footer.tpl new file mode 100644 index 0000000..449eaa5 --- /dev/null +++ b/templates/SwiftBlue/global_footer.tpl @@ -0,0 +1,14 @@ + +/* We request that you do not remove the following copyright notice. */ + + + + \ No newline at end of file diff --git a/templates/SwiftBlue/global_header.tpl b/templates/SwiftBlue/global_header.tpl new file mode 100644 index 0000000..0e9e6e2 --- /dev/null +++ b/templates/SwiftBlue/global_header.tpl @@ -0,0 +1,315 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + +{words:index of} {info:dir} @ #Bibliuta + + + + + + + + + + + + + + + diff --git a/templates/SwiftBlue/images/block_icons/block_cache.gif b/templates/SwiftBlue/images/block_icons/block_cache.gif new file mode 100644 index 0000000..c744f36 Binary files /dev/null and b/templates/SwiftBlue/images/block_icons/block_cache.gif differ diff --git a/templates/SwiftBlue/images/block_icons/block_delete.gif b/templates/SwiftBlue/images/block_icons/block_delete.gif new file mode 100644 index 0000000..e30fd28 Binary files /dev/null and b/templates/SwiftBlue/images/block_icons/block_delete.gif differ diff --git a/templates/SwiftBlue/images/block_icons/block_edit.gif b/templates/SwiftBlue/images/block_icons/block_edit.gif new file mode 100644 index 0000000..d69aeab Binary files /dev/null and b/templates/SwiftBlue/images/block_icons/block_edit.gif differ diff --git a/templates/SwiftBlue/images/block_icons/block_edit2.gif b/templates/SwiftBlue/images/block_icons/block_edit2.gif new file mode 100644 index 0000000..01e442b Binary files /dev/null and b/templates/SwiftBlue/images/block_icons/block_edit2.gif differ diff --git a/templates/SwiftBlue/images/block_icons/block_edit_admin.gif b/templates/SwiftBlue/images/block_icons/block_edit_admin.gif new file mode 100644 index 0000000..52b0cfc Binary files /dev/null and b/templates/SwiftBlue/images/block_icons/block_edit_admin.gif differ diff --git a/templates/SwiftBlue/images/block_icons/block_edit_split.gif b/templates/SwiftBlue/images/block_icons/block_edit_split.gif new file mode 100644 index 0000000..71261a2 Binary files /dev/null and b/templates/SwiftBlue/images/block_icons/block_edit_split.gif differ diff --git a/templates/SwiftBlue/images/block_icons/block_hidden.gif b/templates/SwiftBlue/images/block_icons/block_hidden.gif new file mode 100644 index 0000000..eaff0e4 Binary files /dev/null and b/templates/SwiftBlue/images/block_icons/block_hidden.gif differ diff --git a/templates/SwiftBlue/images/block_icons/block_move_down.gif b/templates/SwiftBlue/images/block_icons/block_move_down.gif new file mode 100644 index 0000000..0d804a9 Binary files /dev/null and b/templates/SwiftBlue/images/block_icons/block_move_down.gif differ diff --git a/templates/SwiftBlue/images/block_icons/block_move_left.gif b/templates/SwiftBlue/images/block_icons/block_move_left.gif new file mode 100644 index 0000000..adcabf1 Binary files /dev/null and b/templates/SwiftBlue/images/block_icons/block_move_left.gif differ diff --git a/templates/SwiftBlue/images/block_icons/block_move_right.gif b/templates/SwiftBlue/images/block_icons/block_move_right.gif new file mode 100644 index 0000000..f6fe5af Binary files /dev/null and b/templates/SwiftBlue/images/block_icons/block_move_right.gif differ diff --git a/templates/SwiftBlue/images/block_icons/block_move_up.gif b/templates/SwiftBlue/images/block_icons/block_move_up.gif new file mode 100644 index 0000000..212bea4 Binary files /dev/null and b/templates/SwiftBlue/images/block_icons/block_move_up.gif differ diff --git a/templates/SwiftBlue/images/block_icons/contract.gif b/templates/SwiftBlue/images/block_icons/contract.gif new file mode 100644 index 0000000..a51ecda Binary files /dev/null and b/templates/SwiftBlue/images/block_icons/contract.gif differ diff --git a/templates/SwiftBlue/images/block_icons/expand.gif b/templates/SwiftBlue/images/block_icons/expand.gif new file mode 100644 index 0000000..798e428 Binary files /dev/null and b/templates/SwiftBlue/images/block_icons/expand.gif differ diff --git a/templates/SwiftBlue/images/block_icons/spacer.gif b/templates/SwiftBlue/images/block_icons/spacer.gif new file mode 100644 index 0000000..5bfd67a Binary files /dev/null and b/templates/SwiftBlue/images/block_icons/spacer.gif differ diff --git a/templates/SwiftBlue/images/cellpic.gif b/templates/SwiftBlue/images/cellpic.gif new file mode 100644 index 0000000..47457ef Binary files /dev/null and b/templates/SwiftBlue/images/cellpic.gif differ diff --git a/templates/SwiftBlue/images/cellpic1.gif b/templates/SwiftBlue/images/cellpic1.gif new file mode 100644 index 0000000..1b1f559 Binary files /dev/null and b/templates/SwiftBlue/images/cellpic1.gif differ diff --git a/templates/SwiftBlue/images/cellpic2.jpg b/templates/SwiftBlue/images/cellpic2.jpg new file mode 100644 index 0000000..1d89a1e Binary files /dev/null and b/templates/SwiftBlue/images/cellpic2.jpg differ diff --git a/templates/SwiftBlue/images/cellpic3.gif b/templates/SwiftBlue/images/cellpic3.gif new file mode 100644 index 0000000..3947388 Binary files /dev/null and b/templates/SwiftBlue/images/cellpic3.gif differ diff --git a/templates/SwiftBlue/images/index.htm b/templates/SwiftBlue/images/index.htm new file mode 100644 index 0000000..b977277 --- /dev/null +++ b/templates/SwiftBlue/images/index.htm @@ -0,0 +1,16 @@ + + +SwiftBlue created by BitByBit + + + + + + + + + +
    Visit Us!
    + + + \ No newline at end of file diff --git a/templates/SwiftBlue/images/logo.gif b/templates/SwiftBlue/images/logo.gif new file mode 100644 index 0000000..a1f8059 Binary files /dev/null and b/templates/SwiftBlue/images/logo.gif differ diff --git a/templates/SwiftBlue/images/logo_med.gif b/templates/SwiftBlue/images/logo_med.gif new file mode 100644 index 0000000..1a449d4 Binary files /dev/null and b/templates/SwiftBlue/images/logo_med.gif differ diff --git a/templates/SwiftBlue/images/logo_mxBB.gif b/templates/SwiftBlue/images/logo_mxBB.gif new file mode 100644 index 0000000..a1f8059 Binary files /dev/null and b/templates/SwiftBlue/images/logo_mxBB.gif differ diff --git a/templates/SwiftBlue/images/page_icons/nav_about_us.gif b/templates/SwiftBlue/images/page_icons/nav_about_us.gif new file mode 100644 index 0000000..86fff49 Binary files /dev/null and b/templates/SwiftBlue/images/page_icons/nav_about_us.gif differ diff --git a/templates/SwiftBlue/images/page_icons/nav_announcement.gif b/templates/SwiftBlue/images/page_icons/nav_announcement.gif new file mode 100644 index 0000000..db48e36 Binary files /dev/null and b/templates/SwiftBlue/images/page_icons/nav_announcement.gif differ diff --git a/templates/SwiftBlue/images/page_icons/nav_bible.gif b/templates/SwiftBlue/images/page_icons/nav_bible.gif new file mode 100644 index 0000000..531f778 Binary files /dev/null and b/templates/SwiftBlue/images/page_icons/nav_bible.gif differ diff --git a/templates/SwiftBlue/images/page_icons/nav_calendar.gif b/templates/SwiftBlue/images/page_icons/nav_calendar.gif new file mode 100644 index 0000000..0762f26 Binary files /dev/null and b/templates/SwiftBlue/images/page_icons/nav_calendar.gif differ diff --git a/templates/SwiftBlue/images/page_icons/nav_chatbox.gif b/templates/SwiftBlue/images/page_icons/nav_chatbox.gif new file mode 100644 index 0000000..de95bab Binary files /dev/null and b/templates/SwiftBlue/images/page_icons/nav_chatbox.gif differ diff --git a/templates/SwiftBlue/images/page_icons/nav_develope.gif b/templates/SwiftBlue/images/page_icons/nav_develope.gif new file mode 100644 index 0000000..d052ac3 Binary files /dev/null and b/templates/SwiftBlue/images/page_icons/nav_develope.gif differ diff --git a/templates/SwiftBlue/images/page_icons/nav_download.gif b/templates/SwiftBlue/images/page_icons/nav_download.gif new file mode 100644 index 0000000..8bf6fbc Binary files /dev/null and b/templates/SwiftBlue/images/page_icons/nav_download.gif differ diff --git a/templates/SwiftBlue/images/page_icons/nav_ekklesia.gif b/templates/SwiftBlue/images/page_icons/nav_ekklesia.gif new file mode 100644 index 0000000..f0f3c8d Binary files /dev/null and b/templates/SwiftBlue/images/page_icons/nav_ekklesia.gif differ diff --git a/templates/SwiftBlue/images/page_icons/nav_email.gif b/templates/SwiftBlue/images/page_icons/nav_email.gif new file mode 100644 index 0000000..ab5596a Binary files /dev/null and b/templates/SwiftBlue/images/page_icons/nav_email.gif differ diff --git a/templates/SwiftBlue/images/page_icons/nav_email2.gif b/templates/SwiftBlue/images/page_icons/nav_email2.gif new file mode 100644 index 0000000..0fc38a6 Binary files /dev/null and b/templates/SwiftBlue/images/page_icons/nav_email2.gif differ diff --git a/templates/SwiftBlue/images/page_icons/nav_explorer.gif b/templates/SwiftBlue/images/page_icons/nav_explorer.gif new file mode 100644 index 0000000..e96beb1 Binary files /dev/null and b/templates/SwiftBlue/images/page_icons/nav_explorer.gif differ diff --git a/templates/SwiftBlue/images/page_icons/nav_forum.gif b/templates/SwiftBlue/images/page_icons/nav_forum.gif new file mode 100644 index 0000000..7f3665c Binary files /dev/null and b/templates/SwiftBlue/images/page_icons/nav_forum.gif differ diff --git a/templates/SwiftBlue/images/page_icons/nav_guestbook.gif b/templates/SwiftBlue/images/page_icons/nav_guestbook.gif new file mode 100644 index 0000000..56ca111 Binary files /dev/null and b/templates/SwiftBlue/images/page_icons/nav_guestbook.gif differ diff --git a/templates/SwiftBlue/images/page_icons/nav_help.gif b/templates/SwiftBlue/images/page_icons/nav_help.gif new file mode 100644 index 0000000..2a99f9b Binary files /dev/null and b/templates/SwiftBlue/images/page_icons/nav_help.gif differ diff --git a/templates/SwiftBlue/images/page_icons/nav_home.gif b/templates/SwiftBlue/images/page_icons/nav_home.gif new file mode 100644 index 0000000..1e40fda Binary files /dev/null and b/templates/SwiftBlue/images/page_icons/nav_home.gif differ diff --git a/templates/SwiftBlue/images/page_icons/nav_info.gif b/templates/SwiftBlue/images/page_icons/nav_info.gif new file mode 100644 index 0000000..f15220b Binary files /dev/null and b/templates/SwiftBlue/images/page_icons/nav_info.gif differ diff --git a/templates/SwiftBlue/images/page_icons/nav_login.gif b/templates/SwiftBlue/images/page_icons/nav_login.gif new file mode 100644 index 0000000..578d7d6 Binary files /dev/null and b/templates/SwiftBlue/images/page_icons/nav_login.gif differ diff --git a/templates/SwiftBlue/images/page_icons/nav_members.gif b/templates/SwiftBlue/images/page_icons/nav_members.gif new file mode 100644 index 0000000..6eb50c9 Binary files /dev/null and b/templates/SwiftBlue/images/page_icons/nav_members.gif differ diff --git a/templates/SwiftBlue/images/page_icons/nav_musik.gif b/templates/SwiftBlue/images/page_icons/nav_musik.gif new file mode 100644 index 0000000..258239e Binary files /dev/null and b/templates/SwiftBlue/images/page_icons/nav_musik.gif differ diff --git a/templates/SwiftBlue/images/page_icons/nav_mydoc.gif b/templates/SwiftBlue/images/page_icons/nav_mydoc.gif new file mode 100644 index 0000000..c431a13 Binary files /dev/null and b/templates/SwiftBlue/images/page_icons/nav_mydoc.gif differ diff --git a/templates/SwiftBlue/images/page_icons/nav_news.gif b/templates/SwiftBlue/images/page_icons/nav_news.gif new file mode 100644 index 0000000..2689be6 Binary files /dev/null and b/templates/SwiftBlue/images/page_icons/nav_news.gif differ diff --git a/templates/SwiftBlue/images/page_icons/nav_profile.gif b/templates/SwiftBlue/images/page_icons/nav_profile.gif new file mode 100644 index 0000000..97c56de Binary files /dev/null and b/templates/SwiftBlue/images/page_icons/nav_profile.gif differ diff --git a/templates/SwiftBlue/images/page_icons/nav_promote.gif b/templates/SwiftBlue/images/page_icons/nav_promote.gif new file mode 100644 index 0000000..2303b29 Binary files /dev/null and b/templates/SwiftBlue/images/page_icons/nav_promote.gif differ diff --git a/templates/SwiftBlue/images/page_icons/nav_radio.gif b/templates/SwiftBlue/images/page_icons/nav_radio.gif new file mode 100644 index 0000000..fbaf9bb Binary files /dev/null and b/templates/SwiftBlue/images/page_icons/nav_radio.gif differ diff --git a/templates/SwiftBlue/images/page_icons/nav_rate.gif b/templates/SwiftBlue/images/page_icons/nav_rate.gif new file mode 100644 index 0000000..3552ee4 Binary files /dev/null and b/templates/SwiftBlue/images/page_icons/nav_rate.gif differ diff --git a/templates/SwiftBlue/images/page_icons/nav_register.gif b/templates/SwiftBlue/images/page_icons/nav_register.gif new file mode 100644 index 0000000..6bf2389 Binary files /dev/null and b/templates/SwiftBlue/images/page_icons/nav_register.gif differ diff --git a/templates/SwiftBlue/images/page_icons/nav_search.gif b/templates/SwiftBlue/images/page_icons/nav_search.gif new file mode 100644 index 0000000..deb9abf Binary files /dev/null and b/templates/SwiftBlue/images/page_icons/nav_search.gif differ diff --git a/templates/SwiftBlue/images/page_icons/nav_settings.gif b/templates/SwiftBlue/images/page_icons/nav_settings.gif new file mode 100644 index 0000000..dfec9f2 Binary files /dev/null and b/templates/SwiftBlue/images/page_icons/nav_settings.gif differ diff --git a/templates/SwiftBlue/images/page_icons/nav_sponsors.gif b/templates/SwiftBlue/images/page_icons/nav_sponsors.gif new file mode 100644 index 0000000..dcabd4c Binary files /dev/null and b/templates/SwiftBlue/images/page_icons/nav_sponsors.gif differ diff --git a/templates/SwiftBlue/images/page_icons/nav_statistics.gif b/templates/SwiftBlue/images/page_icons/nav_statistics.gif new file mode 100644 index 0000000..53c489e Binary files /dev/null and b/templates/SwiftBlue/images/page_icons/nav_statistics.gif differ diff --git a/templates/SwiftBlue/images/page_icons/nav_theme.gif b/templates/SwiftBlue/images/page_icons/nav_theme.gif new file mode 100644 index 0000000..d112f77 Binary files /dev/null and b/templates/SwiftBlue/images/page_icons/nav_theme.gif differ diff --git a/templates/SwiftBlue/images/page_icons/nav_theme2.gif b/templates/SwiftBlue/images/page_icons/nav_theme2.gif new file mode 100644 index 0000000..f31eb55 Binary files /dev/null and b/templates/SwiftBlue/images/page_icons/nav_theme2.gif differ diff --git a/templates/SwiftBlue/images/page_icons/nav_weblinks.gif b/templates/SwiftBlue/images/page_icons/nav_weblinks.gif new file mode 100644 index 0000000..0f3d576 Binary files /dev/null and b/templates/SwiftBlue/images/page_icons/nav_weblinks.gif differ diff --git a/templates/SwiftBlue/images/page_icons/plus.gif b/templates/SwiftBlue/images/page_icons/plus.gif new file mode 100644 index 0000000..0a35bfb Binary files /dev/null and b/templates/SwiftBlue/images/page_icons/plus.gif differ diff --git a/templates/SwiftBlue/images/page_icons/spacer.gif b/templates/SwiftBlue/images/page_icons/spacer.gif new file mode 100644 index 0000000..616c5e4 Binary files /dev/null and b/templates/SwiftBlue/images/page_icons/spacer.gif differ diff --git a/templates/SwiftBlue/images/page_icons/thumb_globe.gif b/templates/SwiftBlue/images/page_icons/thumb_globe.gif new file mode 100644 index 0000000..a4a760a Binary files /dev/null and b/templates/SwiftBlue/images/page_icons/thumb_globe.gif differ diff --git a/templates/SwiftBlue/images/page_icons/thumb_news.gif b/templates/SwiftBlue/images/page_icons/thumb_news.gif new file mode 100644 index 0000000..35bc027 Binary files /dev/null and b/templates/SwiftBlue/images/page_icons/thumb_news.gif differ diff --git a/templates/SwiftBlue/images/spacer.gif b/templates/SwiftBlue/images/spacer.gif new file mode 100644 index 0000000..616c5e4 Binary files /dev/null and b/templates/SwiftBlue/images/spacer.gif differ diff --git a/templates/SwiftBlue/images/subscribe.gif b/templates/SwiftBlue/images/subscribe.gif new file mode 100644 index 0000000..bd35c9d Binary files /dev/null and b/templates/SwiftBlue/images/subscribe.gif differ diff --git a/templates/SwiftBlue/images/whosonline.gif b/templates/SwiftBlue/images/whosonline.gif new file mode 100644 index 0000000..b7c007e Binary files /dev/null and b/templates/SwiftBlue/images/whosonline.gif differ diff --git a/templates/SwiftBlue/index.htm b/templates/SwiftBlue/index.htm new file mode 100644 index 0000000..ee1f723 --- /dev/null +++ b/templates/SwiftBlue/index.htm @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/templates/SwiftBlue/intro2.js b/templates/SwiftBlue/intro2.js new file mode 100644 index 0000000..fc8af4a --- /dev/null +++ b/templates/SwiftBlue/intro2.js @@ -0,0 +1,6 @@ +document.writeln(""); +document.writeln(""); +document.writeln(""); +document.writeln(""); +document.writeln(""); +document.writeln(""); diff --git a/templates/SwiftBlue/jumpbox.html b/templates/SwiftBlue/jumpbox.html new file mode 100644 index 0000000..2000e92 --- /dev/null +++ b/templates/SwiftBlue/jumpbox.html @@ -0,0 +1,6 @@ + +
    + + + +
    {L_JUMP_TO}: {S_JUMPBOX_SELECT} 
    diff --git a/templates/SwiftBlue/login_body.html b/templates/SwiftBlue/login_body.html new file mode 100644 index 0000000..7576ca9 --- /dev/null +++ b/templates/SwiftBlue/login_body.html @@ -0,0 +1,50 @@ + + + + +
    + +
    + + + + + + + + +
    {L_ENTER_PASSWORD}
    + + + + + + + + + + + + + + + + + + + + + + +
     
    {L_USERNAME}: + +
    {L_PASSWORD}: + +
    {L_AUTO_LOGIN}:
    + {S_HIDDEN_FIELDS} + +
    {L_SEND_PASSWORD}
    + +
    + +
    \ No newline at end of file diff --git a/templates/SwiftBlue/message_body.html b/templates/SwiftBlue/message_body.html new file mode 100644 index 0000000..2b0e84a --- /dev/null +++ b/templates/SwiftBlue/message_body.html @@ -0,0 +1,28 @@ + + + + +
    + + + + + + + + +
    {MESSAGE_TITLE}
    + + + + + + + + + +
     
    {MESSAGE_TEXT}
     
    + +
    + +
    diff --git a/templates/SwiftBlue/mx_main_layout.html b/templates/SwiftBlue/mx_main_layout.html new file mode 100644 index 0000000..3558017 --- /dev/null +++ b/templates/SwiftBlue/mx_main_layout.html @@ -0,0 +1,114 @@ + + + + + + + +
    + + + + + + + + + + {layout_column.blocks.sub_col.INNER_SPACE} + + + + + +
    + + + + + + +
    + + + + + + +
    + + + + + + + + + + + + + + + + + + + + +
    +  {layout_column.blocks.show_title.L_TITLE}  + +
    +
    + + + + + + + + + +
    + {layout_column.blocks.edit.hidden_block.HIDDEN_BLOCK} + + {layout_column.blocks.edit.EDIT_IMG} + {layout_column.blocks.edit.S_HIDDEN_FORM_FIELDS} +
    +
    +
    +
    + +
    +
    + + +
    + + + + +
    + {layout_column.blocks.BLOCK} +
    +
    + +
    + + +
    {layout_column.blocks.block_stats.L_BLOCK_UPDATED}{layout_column.blocks.block_stats.EDITOR_NAME} ({layout_column.blocks.block_stats.EDIT_TIME})
    +
    + + + +
    + + + +
    + + + + +
    \ No newline at end of file diff --git a/templates/SwiftBlue/overall_footer.html b/templates/SwiftBlue/overall_footer.html new file mode 100644 index 0000000..838117d --- /dev/null +++ b/templates/SwiftBlue/overall_footer.html @@ -0,0 +1,30 @@ + +
    {page_last_updated.L_PAGE_UPDATED} {page_last_updated.TIME} {page_last_updated.NAME} 
    + +
    + + + {editcp_exists.ADMIN_OPTIONS} +
    + +{ADMIN_LINK}
    + +{POWERED_BY} MX-Publisher (MXP) {MX_VERSION} © 2001-2008 & phpBB {PHPBB_VERSION} © 2001, 2003 phpBB Group | {MXBB_EXTRA} +
    + + + + +{EXECUTION_STATS} +{MX_ADDITIONAL_FOOTER_TEXT} + + \ No newline at end of file diff --git a/templates/SwiftBlue/overall_header.html b/templates/SwiftBlue/overall_header.html new file mode 100644 index 0000000..acc4134 --- /dev/null +++ b/templates/SwiftBlue/overall_header.html @@ -0,0 +1,188 @@ + + + + + + + + + + + +{META} +{NAV_LINKS} + +{SITENAME} :: {PAGE_TITLE} + + + + + + + + + + + + + + + + +{MX_ADDITIONAL_CSS_FILES} +{MX_ICON_CSS} + + + + + + + + + + + + + + + +{MX_ADDITIONAL_JS_FILES} +{MX_ADDITIONAL_HEADER_TEXT} + + + + + + + + +
    + + + + + #Bibliuta @ Undernet + + + + + + + + + + + + + + + +
    {L_INDEX}{PAGE_ICON}{PAGE_TITLE}{SITENAME}
    {SITE_DESCRIPTION}
    + + + + + + + + + + + + + + + + + + + + + +
    {L_HOME}{L_FORUM}{L_PROFILE}{L_SEARCH}{L_MEMBERLIST}{L_USERGROUPS}{PRIVATE_MESSAGE_INFO}
    {L_HOME}{L_FORUM}{L_PROFILE}{L_SEARCH}{L_MEMBERLIST}{L_USERGROUPS}{L_PRIVATEMSGS}
    +
    {CURRENT_TIME}
    {L_INDEX}
    + + + + + + + + + + + + +
    {L_LOGIN_LOGOUT}{L_LOGIN_LOGOUT} {L_REGISTER}{L_REGISTER} +
    + {L_SEARCH}: + + + + + +
    +
     
    + + + + + + + +
    + + {LAST_VISIT_DATE}
    + + {CURRENT_TIME}
    +
    + + {L_SEARCH_NEW}
    {L_SEARCH_SELF}
    + + {L_SEARCH_UNANSWERED} +
    + diff --git a/templates/SwiftBlue/overall_header_navigation.html b/templates/SwiftBlue/overall_header_navigation.html new file mode 100644 index 0000000..61ac066 --- /dev/null +++ b/templates/SwiftBlue/overall_header_navigation.html @@ -0,0 +1,188 @@ + + + + + + + + + + + +{META} +{NAV_LINKS} + +{SITENAME} :: {PAGE_TITLE} + + + + + + + + + + + + + + + + +{MX_ADDITIONAL_CSS_FILES} +{MX_ICON_CSS} + + + + + + + + + + + + + + + +{MX_ADDITIONAL_JS_FILES} +{MX_ADDITIONAL_HEADER_TEXT} + + + + + + +
    + + +
    + + + + + #Bibliuta @ Undernet + + + + + + + + + + + + + + + + + + + + + + +
    {L_INDEX}{PAGE_ICON}{PAGE_TITLE}{SITENAME}
    {SITE_DESCRIPTION}
    + {OVERALL_NAVIGATION} +
    +
    +
    + + + + +
    + {editcp.EDIT_IMG} + {editcp.S_HIDDEN_FORM_FIELDS} +
    +
    +
    +
    {CURRENT_TIME}
    {L_INDEX}
    + + + + + + + + + + + + +
    {L_LOGIN_LOGOUT}{L_LOGIN_LOGOUT} {L_REGISTER}{L_REGISTER} +
    + {L_SEARCH}: + + + + + +
    +
     
    + + + + + + + +
    + + {LAST_VISIT_DATE}
    + + {CURRENT_TIME}
    +
    + + {L_SEARCH_NEW}
    {L_SEARCH_SELF}
    + + {L_SEARCH_UNANSWERED} +
    + diff --git a/templates/SwiftBlue/overall_header_navigation_phpbb.html b/templates/SwiftBlue/overall_header_navigation_phpbb.html new file mode 100644 index 0000000..270f792 --- /dev/null +++ b/templates/SwiftBlue/overall_header_navigation_phpbb.html @@ -0,0 +1,213 @@ + + + + + + + + + + + +{META} +{NAV_LINKS} + +{SITENAME} :: {PAGE_TITLE} + + + + + + + + + + + + + + + + +{MX_ADDITIONAL_CSS_FILES} +{MX_ICON_CSS} + + + + + + + + + + + + + + + +{MX_ADDITIONAL_JS_FILES} +{MX_ADDITIONAL_HEADER_TEXT} + + + + + + + + +
    + + + + + #Bibliuta @ Undernet + + + + + + + + + + + + + + + + + + + + + + + + + +
    {L_INDEX}{PAGE_ICON}{PAGE_TITLE}{SITENAME}
    {SITE_DESCRIPTION}
    + {OVERALL_NAVIGATION} +
    + + + + + + + + + + + + + + + + + + + + + +
    {L_HOME}{L_FORUM}{L_PROFILE}{L_SEARCH}{L_MEMBERLIST}{L_USERGROUPS}{PRIVATE_MESSAGE_INFO}
    {L_HOME}{L_FORUM}{L_PROFILE}{L_SEARCH}{L_MEMBERLIST}{L_USERGROUPS}{L_PRIVATEMSGS}
    +
    +
    +
    + + + + +
    + {editcp.EDIT_IMG} + {editcp.S_HIDDEN_FORM_FIELDS} +
    +
    +
    +
    {CURRENT_TIME}
    {L_INDEX}
    + + + + + + + + + + + + +
    {L_LOGIN_LOGOUT}{L_LOGIN_LOGOUT} {L_REGISTER}{L_REGISTER} +
    + {L_SEARCH}: + + + + + +
    +
     
    + + + + + + + +
    + + {LAST_VISIT_DATE}
    + + {CURRENT_TIME}
    +
    + + {L_SEARCH_NEW}
    {L_SEARCH_SELF}
    + + {L_SEARCH_UNANSWERED} +
    + diff --git a/templates/SwiftBlue/overall_header_navigation_phpbb2.html b/templates/SwiftBlue/overall_header_navigation_phpbb2.html new file mode 100644 index 0000000..a76f82b --- /dev/null +++ b/templates/SwiftBlue/overall_header_navigation_phpbb2.html @@ -0,0 +1,215 @@ + + + + + + + + +{META} +{NAV_LINKS} + +{SITENAME} :: {PAGE_TITLE} + + + + + + + + + + + + + + + + +{MX_ADDITIONAL_CSS_FILES} +{MX_ICON_CSS} + + + + + + + + + +{MX_ADDITIONAL_JS_FILES} +{MX_ADDITIONAL_HEADER_TEXT} + + + + + + +
    + + + +
    + + + + + +
    + + + + + + + + + + + + + +
    + {OVERALL_NAVIGATION} +
    + + + + + + + + + + + + +
    + {L_HOME} + + {L_FORUM} + + + {L_PROFILE} + + + {L_FAQ} + + {L_MEMBERLIST} + + {L_USERGROUPS} + + + {L_PRIVATEMSGS} + +
    +
    +
    +
    + + + + +
    + {editcp.EDIT_IMG} + {editcp.S_HIDDEN_FORM_FIELDS} +
    +
    +
    +
    + + + + + + + + +
    + {L_LOGIN_LOGOUT} + + + {L_REGISTER} + + +
    + {L_SEARCH}: + + + + + +
    +
     
    + + + + + + + +
    + + {LAST_VISIT_DATE}
    + + {CURRENT_TIME}
    +
    + + {L_SEARCH_NEW}
    {L_SEARCH_SELF}
    + + {L_SEARCH_UNANSWERED} +
    + diff --git a/templates/SwiftBlue/overall_header_phpbb3.html b/templates/SwiftBlue/overall_header_phpbb3.html new file mode 100644 index 0000000..96204e5 --- /dev/null +++ b/templates/SwiftBlue/overall_header_phpbb3.html @@ -0,0 +1,235 @@ + + + + + + + + + + + + + + + +{META} +{SITENAME} • <!-- IF S_IN_MCP -->{L_MCP} • <!-- ELSEIF S_IN_UCP -->{L_UCP} • <!-- ENDIF -->{PAGE_TITLE} + + + + + + + + + +
    + +
    + + + + + +
    {SITE_LOGO_IMG}

    {SITENAME}

    {SITE_DESCRIPTION}
    +
    + + + +
    + + + + + +
    {LAST_VISIT_DATE}{CURRENT_TIME}
    +
    + +
    + +
    + + + + + +
    + + + +
    diff --git a/templates/SwiftBlue/overall_noheader.html b/templates/SwiftBlue/overall_noheader.html new file mode 100644 index 0000000..03fdc32 --- /dev/null +++ b/templates/SwiftBlue/overall_noheader.html @@ -0,0 +1,37 @@ + + + + + +{META} +{NAV_LINKS} +{SITENAME} :: {PAGE_TITLE} + + + + + + + + + + + + + + + + + + + + + + diff --git a/templates/SwiftBlue/posting_smilies.html b/templates/SwiftBlue/posting_smilies.html new file mode 100644 index 0000000..7028535 --- /dev/null +++ b/templates/SwiftBlue/posting_smilies.html @@ -0,0 +1,45 @@ + + + + + + + +
    + + + + + + + + + +
    {L_EMOTICONS}
    + + + + + + + + + + + + +
    {smilies_row.smilies_col.SMILEY_DESC}
    {L_MORE_SMILIES}

    {L_CLOSE_WINDOW}
    diff --git a/templates/SwiftBlue/rollout.js b/templates/SwiftBlue/rollout.js new file mode 100644 index 0000000..f5772c0 --- /dev/null +++ b/templates/SwiftBlue/rollout.js @@ -0,0 +1,32 @@ +function rollup_contract(in_buttonSwitch, in_listID, path) +{ + if (document.getElementById) { + listID = document.getElementById(in_listID); + } + else { + return; + } + + if (listID.style.display == '') { + listID.style.display = 'none'; + in_buttonSwitch.innerHTML = ''; + rollup_record_state(in_listID, 0); + } + else { + listID.style.display = ''; + in_buttonSwitch.innerHTML = ''; + rollup_record_state(in_listID, 1); + } + + if (window.event) { + window.event.cancelBubble=true; + } +} + +function rollup_record_state(in_listID, status) +{ + var expDate = new Date(); + // expires in 1 year + expDate.setTime(expDate.getTime() + 31536000000); + document.cookie = in_listID + "=" + escape(status) + "; expires=" + expDate.toGMTString(); +} diff --git a/templates/SwiftBlue/rollout_main.js b/templates/SwiftBlue/rollout_main.js new file mode 100644 index 0000000..ef5aaa8 --- /dev/null +++ b/templates/SwiftBlue/rollout_main.js @@ -0,0 +1,46 @@ +function rollup_contract_main(in_buttonSwitch, in_listID, path) +{ + var in_listID; + + if (document.getElementsByName) { + var listID = document.getElementsByName(in_listID); + } + else { + return; + } + + for (var i=0;i'; + var send_cookie = 0; + } + else { + listID[i].style.display = ''; + in_buttonSwitch.innerHTML = ''; + var send_cookie = 1; + } + + if (window.event) { + window.event.cancelBubble=true; + } + } + + if (send_cookie == 1) { + rollup_record_state_main(in_listID, 1); + } + else { + rollup_record_state_main(in_listID, 0); + } + + +} + +function rollup_record_state_main(in_listID, status) +{ + var expDate = new Date(); + // expires in 1 year + expDate.setTime(expDate.getTime() + 31536000000); + document.cookie = in_listID + "=" + escape(status) + "; expires=" + expDate.toGMTString(); +} diff --git a/templates/SwiftBlue/styleswitcher.js b/templates/SwiftBlue/styleswitcher.js new file mode 100644 index 0000000..c68215d --- /dev/null +++ b/templates/SwiftBlue/styleswitcher.js @@ -0,0 +1,161 @@ + +function fontsizeup() +{ + var active = getActiveStyleSheet(); + + switch (active) + { + case 'A--': + setActiveStyleSheet('A-'); + break; + + case 'A-': + setActiveStyleSheet('A'); + break; + + case 'A': + setActiveStyleSheet('A+'); + break; + + case 'A+': + setActiveStyleSheet('A++'); + break; + + case 'A++': + setActiveStyleSheet('A'); + break; + + default: + setActiveStyleSheet('A'); + break; + } +} + +function fontsizedown() +{ + active = getActiveStyleSheet(); + + switch (active) + { + case 'A++' : + setActiveStyleSheet('A+'); + break; + + case 'A+' : + setActiveStyleSheet('A'); + break; + + case 'A' : + setActiveStyleSheet('A-'); + break; + + case 'A-' : + setActiveStyleSheet('A--'); + break; + + case 'A--' : + break; + + default : + setActiveStyleSheet('A--'); + break; + } +} + +function setActiveStyleSheet(title) +{ + var i, a, main; + + for (i = 0; (a = document.getElementsByTagName('link')[i]); i++) + { + if (a.getAttribute('rel').indexOf('style') != -1 && a.getAttribute('title')) + { + a.disabled = true; + if (a.getAttribute('title') == title) + { + a.disabled = false; + } + } + } +} + +function getActiveStyleSheet() +{ + var i, a; + + for (i = 0; (a = document.getElementsByTagName('link')[i]); i++) + { + if (a.getAttribute('rel').indexOf('style') != -1 && a.getAttribute('title') && !a.disabled) + { + return a.getAttribute('title'); + } + } + + return null; +} + +function getPreferredStyleSheet() +{ + return ('A-'); +} + +function createCookie(name, value, days) +{ + if (days) + { + var date = new Date(); + date.setTime(date.getTime() + (days*24*60*60*1000)); + var expires = '; expires=' + date.toGMTString(); + } + else + { + expires = ''; + } + + document.cookie = name + '=' + value + expires + '; path=/'; +} + +function readCookie(name) +{ + var nameEQ = name + '='; + var ca = document.cookie.split(';'); + + for (var i = 0; i < ca.length; i++) + { + var c = ca[i]; + + while (c.charAt(0) == ' ') + { + c = c.substring(1, c.length); + } + + if (c.indexOf(nameEQ) == 0) + { + return c.substring(nameEQ.length, c.length); + } + } + + return null; +} + +function load_cookie() +{ + var cookie = readCookie('style_cookie'); + var title = cookie ? cookie : getPreferredStyleSheet(); + setActiveStyleSheet(title); +} + +function unload_cookie() +{ + var title = getActiveStyleSheet(); + createCookie('style_cookie', title, 365); +} + +onload_functions.push('load_cookie()'); +onunload_functions.push('unload_cookie()'); + +/* +var cookie = readCookie("style"); +var title = cookie ? cookie : getPreferredStyleSheet(); +setActiveStyleSheet(title); +*/ diff --git a/templates/SwiftBlue/table_footer.tpl b/templates/SwiftBlue/table_footer.tpl new file mode 100644 index 0000000..68aed75 --- /dev/null +++ b/templates/SwiftBlue/table_footer.tpl @@ -0,0 +1,46 @@ +
    + + + + /* We request that you do not remove the link to the AutoIndex website. + This not only gives respect to the large amount of time given freely by the + developer, but also helps build interest, traffic, and use of AutoIndex. */ + + +{if:entries_per_page} +

    + {words:page} + {info:previous_page_link} + {info:current_page_number} + {info:next_page_link} + {words:of} {info:last_page_number} +

    +{end if:entries_per_page} + + +{if:archive} + +{end if:archive} + + +

    + + + {if:search_enabled} + + {end if:search_enabled} + {if:use_login_system} + + {end if:use_login_system} + +
    +
    + {if:icon_path}{words:search} {end if:icon_path}{words:search}: + {info:search_box} +
    +
    +
    + {if:icon_path}{words:login} {end if:icon_path}{words:account}: + {info:login_box} +
    +
    \ No newline at end of file diff --git a/templates/SwiftBlue/table_header.tpl b/templates/SwiftBlue/table_header.tpl new file mode 100644 index 0000000..ce10ed6 --- /dev/null +++ b/templates/SwiftBlue/table_header.tpl @@ -0,0 +1,122 @@ + + + + + + + + + + + +
    + + + #Bibliuta @ Undernet + + + + + + +
    + beitdina.net +  {words:index of} {info:dir} @ #Bibliuta
    beitdina.net
    Portalul canalului #Bibliuta de pe Undernet 
    + + + + + + + +
      +
    + Căutare: + + + + + +
    +
     
    +
    + +
    {words:index of} {info:path_nav}
    +
    + + + + + {if:download_count} + + {end if:download_count} + + + + + + {if:description_file} + + {end if:description_file} + + + \ No newline at end of file diff --git a/templates/SwiftBlue/wallpapers.js b/templates/SwiftBlue/wallpapers.js new file mode 100644 index 0000000..f0eafc7 --- /dev/null +++ b/templates/SwiftBlue/wallpapers.js @@ -0,0 +1,9 @@ +document.writeln(""); +document.writeln(""); \ No newline at end of file diff --git a/templates/default/alternate.css b/templates/default/alternate.css new file mode 100644 index 0000000..20c39b3 --- /dev/null +++ b/templates/default/alternate.css @@ -0,0 +1,134 @@ +/** + * An alternate stylesheet. + * + * @package AutoIndex + * @author Justin Hagstrom + * @version 1.0.0 (February 03, 2005) + * + * @copyright Copyright (C) 2002-2005 Justin Hagstrom + * @license http://www.gnu.org/licenses/gpl.html GNU General Public License (GPL) + * + * @link http://autoindex.sourceforge.net + */ + +/* Body */ +.autoindex_body, html +{ + font-family: verdana, lucidia, sans-serif; + font-size: 13px; + background-color: #FCFCFC; +} + +/* Images */ +.autoindex_body img +{ + border: none; +} + +/* Tables */ +.autoindex_table +{ + width: 100%; + border: none; + border-spacing: 2px; +} +.light_row +{ + background-color: #FEFEFE; + font-size: 12px; +} +.dark_row +{ + background-color: #EEEEEE; + font-size: 12px; +} +.light_row:hover, .dark_row:hover +{ + background-color: #FFF2BF; +} +.autoindex_td +{ + border: 1px solid #FAFAFA; + font-size: 12px; + padding: 1px; + text-align: left; + white-space: nowrap; +} +.autoindex_td_right +{ + border: 1px solid #FAFAFA; + font-size: 12px; + padding: 1px; + text-align: right; + white-space: nowrap; +} +.autoindex_td:hover, .autoindex_td_right:hover +{ + font-size: 12px; + padding: 1px; + border: 1px solid #FFCC00; +} +.autoindex_th +{ + background-color: #FFCC00; + border: 1px solid #AA9339; + font-size: 12px; + padding: 2px; +} + +/* Links */ +.plain_link +{ + color: #000000; + text-decoration: none; +} +.autoindex_a:visited, .autoindex_a:active +{ + color: #00008F; + text-decoration: none; +} +.autoindex_a:link +{ + color: #0000FF; + text-decoration: none; +} +.autoindex_a:hover +{ + color: #392266; + text-decoration: none; +} + +/* Buttons */ +.button +{ + color: #707070; + background-color: #F2F6FC; + font-family: arial, sans-serif; + font-size: 11px; + text-align: left; + vertical-align: middle; + font-weight: bold; + cursor: pointer; + border: 0px outset #CBCBCB; + padding: 3px 10px 3px 10px; +} + +/* Misc. */ +.paragraph +{ + background: #F2F6FC; + color: #000020; + font-size: 13px; +} +.autoindex_hr +{ + color: #000020; + background-color: #000020; + border: none; + width: 75%; + height: 1px; +} +.autoindex_small +{ + font-size: 10px; +} \ No newline at end of file diff --git a/templates/default/default.css b/templates/default/default.css new file mode 100644 index 0000000..cc4f333 --- /dev/null +++ b/templates/default/default.css @@ -0,0 +1,127 @@ +/** + * The default CSS stylesheet used for all templates. + * + * @package AutoIndex + * @author Justin Hagstrom + * @version 1.0.2 (February 05, 2004) + * + * @copyright Copyright (C) 2002-2004 Justin Hagstrom + * @license http://www.gnu.org/licenses/gpl.html GNU General Public License (GPL) + * + * @link http://autoindex.sourceforge.net + */ + +/* Body */ +.autoindex_body, html +{ + font-family: verdana, lucidia, sans-serif; + font-size: 13px; + background-color: #F0F0F0; +} + +/* Images */ +.autoindex_body img +{ + border: none; +} + +/* Tables */ +.autoindex_table +{ + width: 100%; + border: none; + border-spacing: 2px; +} +.light_row +{ + background-color: #F2F6FC; + font-size: 13px; +} +.dark_row +{ + background-color: #DADEEE; + font-size: 13px; +} +.autoindex_td +{ + font-size: 13px; + font-family: verdana, lucidia, sans-serif; + vertical-align: top; + border: 1px solid #7F8FA9; + padding: 0px; + text-align: left; + white-space: nowrap; +} +.autoindex_td_right +{ + font-size: 13px; + font-family: verdana, lucidia, sans-serif; + vertical-align: top; + border: 1px solid #7F8FA9; + padding: 0px; + text-align: right; + white-space: nowrap; +} +.autoindex_th +{ + font-size: 13px; + background-color: #7F8FAD; + border: 1px solid #000010; + padding: 0px; +} + +/* Links */ +.plain_link +{ + color: #000000; + text-decoration: none; +} +.autoindex_a:link +{ + color: #0000FF; + text-decoration: none; +} +.autoindex_a:visited, .autoindex_a:active, .autoindex_a:hover +{ + color: #00008F; + text-decoration: none; +} +.light_row:hover, .dark_row:hover +{ + background-color: #FFFFA8; +} + +/* Buttons */ +.button +{ + color: #707070; + background-color: #F2F6FC; + font-family: sans-serif; + font-size: 11px; + text-align: left; + vertical-align: middle; + font-weight: bold; + cursor: pointer; + border: none; + padding: 3px 10px 3px 10px; +} + +/* Misc. */ +.paragraph +{ + background: #F2F6FC; + font-size: 13px; + color: #000020; +} +.autoindex_hr +{ + color: #000020; + background-color: #000020; + border: none; + width: 75%; + height: 1px; +} +.autoindex_small +{ + font-size: 10px; +} \ No newline at end of file diff --git a/templates/default/each_file (alternative with direct links).tpl b/templates/default/each_file (alternative with direct links).tpl new file mode 100644 index 0000000..92252fb --- /dev/null +++ b/templates/default/each_file (alternative with direct links).tpl @@ -0,0 +1,30 @@ + + + + {if:download_count} + + {end if:download_count} + + + {if:description_file} + + {end if:description_file} + \ No newline at end of file diff --git a/templates/default/each_file.tpl b/templates/default/each_file.tpl new file mode 100644 index 0000000..afb4332 --- /dev/null +++ b/templates/default/each_file.tpl @@ -0,0 +1,25 @@ + + + + {if:download_count} + + {end if:download_count} + + + {if:description_file} + + {end if:description_file} + \ No newline at end of file diff --git a/templates/default/global_footer.tpl b/templates/default/global_footer.tpl new file mode 100644 index 0000000..449eaa5 --- /dev/null +++ b/templates/default/global_footer.tpl @@ -0,0 +1,14 @@ + +/* We request that you do not remove the following copyright notice. */ + + + + \ No newline at end of file diff --git a/templates/default/global_header.tpl b/templates/default/global_header.tpl new file mode 100644 index 0000000..59c17f2 --- /dev/null +++ b/templates/default/global_header.tpl @@ -0,0 +1,10 @@ + + + + + {words:index of} {info:dir} + + + + + diff --git a/templates/default/table_footer.tpl b/templates/default/table_footer.tpl new file mode 100644 index 0000000..be44376 --- /dev/null +++ b/templates/default/table_footer.tpl @@ -0,0 +1,68 @@ + + + + {if:download_count} + + {end if:download_count} + + + {if:description_file} + + {end if:description_file} + +
    + {words:file} + + {words:downloads} + + {words:size} + + {words:date} + + {words:description} +
    + {file:if:is_file} /* if it is a file, make a direct link */ + + {end if} + {file:if:is_dir} /* otherwise, for directories, display the folder with autoindex */ + + {end if} + {if:icon_path}[{file:file_ext}]{end if:icon_path} + {file:filename} {file:thumbnail} + {file:new_icon}{file:md5_link}{file:delete_link}{file:rename_link}{file:edit_description_link}{file:ftp_upload_link} + + {file:downloads} + + {file:size} + + {file:date} + + {file:description} +
    + + {if:icon_path}[{file:file_ext}]{end if:icon_path} + {file:filename} {file:thumbnail} + {file:new_icon}{file:md5_link}{file:delete_link}{file:rename_link}{file:edit_description_link}{file:ftp_upload_link} + + {file:downloads} + + {file:size} + + {file:date} + + {file:description} +
    + {info:total_files} {words:files} - {info:total_folders} {words:folders} + + {words:total downloads}: {info:total_downloads} + + {words:total size}: {info:total_size} + +   + +   +
    + + /* We request that you do not remove the link to the AutoIndex website. + This not only gives respect to the large amount of time given freely by the + developer, but also helps build interest, traffic, and use of AutoIndex. */ + + +{if:entries_per_page} +

    + {words:page} + {info:previous_page_link} + {info:current_page_number} + {info:next_page_link} + {words:of} {info:last_page_number} +

    +{end if:entries_per_page} + + +{if:archive} + +{end if:archive} + + +

    + + + {if:search_enabled} + + {end if:search_enabled} + {if:use_login_system} + + {end if:use_login_system} + +
    +
    + {if:icon_path}{words:search} {end if:icon_path}{words:search}: + {info:search_box} +
    +
    +
    + {if:icon_path}{words:login} {end if:icon_path}{words:account}: + {info:login_box} +
    +
    diff --git a/templates/default/table_header.tpl b/templates/default/table_header.tpl new file mode 100644 index 0000000..9710e9f --- /dev/null +++ b/templates/default/table_header.tpl @@ -0,0 +1,23 @@ +

    {words:index of} {info:path_nav}
    + + + + {if:download_count} + + {end if:download_count} + + + {if:description_file} + + {end if:description_file} + diff --git a/templates/index.htm b/templates/index.htm new file mode 100644 index 0000000..ee1f723 --- /dev/null +++ b/templates/index.htm @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/templates/readme.html b/templates/readme.html new file mode 100644 index 0000000..f434fa7 --- /dev/null +++ b/templates/readme.html @@ -0,0 +1,184 @@ + + + + + AutoIndex PHP Script: Template Readme + + + + + +

    + AutoIndex PHP Script +

    +
    + Template Readme +
    +

    +   +

    + +
    +

    + This is a list of all the variables that can be used in the template files. +

    +

    +   +

    +
    + global_header.tpl / global_footer.tpl +
    +

    + Info about the current directory: +

    +
    +	{info:dir}	the path of the current directory, including the base dir
    +	{info:subdir}	the path of the current directory, not including the base dir
    +	{info:version}	the version of AutoIndex
    +	{info:page_time}	the time (in milliseconds) it took to generate the page
    +
    +

    + All words from the language file: +

    +
    +	{words:foo}
    +	... see language file for all options
    +
    +

    + All settings from the config file: +

    +
    +	{config:foo}
    +	... see AutoIndex.conf.php for all options
    +
    +

    + You can include another specific file using the {include} command: +

    +
    +	{include:filename}
    +
    +

    + Anything between /* */ will not be displayed in the HTML output. +

    +

    +   +

    +
    + table_header.tpl / table_footer.tpl +
    +

    + All previously mentioned variables, plus: +

    +

    + Info about current directory: +

    +
    +	{info:path_nav}
    +	{info:total_files}
    +	{info:total_folders}
    +	{info:total_size}
    +	{info:total_downloads}
    +	{info:search_box}
    +	{info:login_box}
    +	{info:archive_link}
    +	{info:previous_page_link}
    +	{info:next_page_link}
    +	{info:current_page_number}
    +	{info:last_page_number}
    +
    +

    + If-statements: +

    +
    +	{if:show_dir_size}
    +	{if:search_enabled}
    +	{if:use_login_system}
    +	{if:must_login_to_download}
    +	{if:days_new}
    +	{if:thumbnail_height}
    +	{if:log_file}
    +	{if:description_file}
    +	{if:download_count}
    +	{if:entries_per_page}
    +
    +

    + To end an if-statement, use {end if:varibale} +
    For example, {if:days_new} ... {end if:days_new} +

    +

    + Sort modes: +

    +
    +	{sort:filename}
    +	{sort:size}
    +	{sort:m_time}
    +	{sort:description}
    +	{sort:downloads}
    +
    +

    +   +

    +
    + each_file.tpl +
    +

    + All previously mentioned variables, plus: +

    +

    + Properties for individual files: +

    +
    +	{file:filename}		the name of the file or folder
    +	{file:link}		the link to the file (using the ?dir and ?file parameters in the URL)
    +	{file:file_ext}		the file extension ("dir" for a directory)
    +	{file:size}		the size (formatted as a string)
    +	{file:bytes}		the size (in bytes)
    +	{file:date}		the date modified (formatted as a string)
    +	{file:a_time}		date and time accessed
    +	{file:m_time}		date and time modified
    +	{file:num_subfiles}	for a directory, the number of files it contains
    +		use {file:if:is_real_dir}{file:num_subfiles}{end if}
    +	{file:thumbnail}	for images, it will display a thumbnail
    +	{file:md5_link}		a link to get the md5sum of the file
    +	{file:downloads}	the number of times this file has been downloaded
    +	{file:description}	the description of the current file
    +	{file:icon}		the icon image for the filetype
    +	{file:parent_dir}	the name of the file's parent directory
    +	{file:tr_class}		this returns "light_row" or "dark_row" for every other file
    +	{file:if:is_file} ... {end if}		true if it is a file
    +	{file:if:is_dir} ... {end if}		true if it is a folder or link to parent directory
    +	{file:if:is_real_dir} ... {end if}	true if it is a folder
    +	{file:if:is_parent_dir} ... {end if}	true if it is a link to parent directory
    +	{do_every:x} ... {end do_every} where x is a number.
    +		The code in between will be displayed every x files.
    +
    +
    + + + \ No newline at end of file diff --git a/templates/simple_image_gallery/default.css b/templates/simple_image_gallery/default.css new file mode 100644 index 0000000..c5d7350 --- /dev/null +++ b/templates/simple_image_gallery/default.css @@ -0,0 +1,128 @@ +/** + * The default CSS stylesheet used for all templates. + * + * @package AutoIndex + * @author Justin Hagstrom + * @version 1.0.2 (February 05, 2004) + * + * @copyright Copyright (C) 2002-2004 Justin Hagstrom + * @license http://www.gnu.org/licenses/gpl.html GNU General Public License (GPL) + * + * @link http://autoindex.sourceforge.net + */ + +/* Body */ +.autoindex_body, html +{ + font-family: verdana, lucidia, sans-serif; + font-size: 13px; + background-color: #F0F0F0; +} + +/* Images */ +.autoindex_body img +{ + border: none; +} + +/* Tables */ +.autoindex_table +{ + width: 100%; + border: none; + border-spacing: 2px; +} +.light_row +{ + background-color: #F2F6FC; + font-size: 13px; +} +.dark_row +{ + background-color: #DADEEE; + font-size: 13px; +} +.autoindex_td +{ + font-size: 13px; + font-family: verdana, lucidia, sans-serif; + vertical-align: top; + border: 1px solid #7F8FA9; + padding: 0px; + text-align: left; + white-space: nowrap; +} +.autoindex_td_right +{ + font-size: 13px; + font-family: verdana, lucidia, sans-serif; + vertical-align: top; + border: 1px solid #7F8FA9; + padding: 0px; + text-align: right; + white-space: nowrap; +} +.autoindex_th +{ + font-size: 13px; + background-color: #7F8FAD; + border: 1px solid #000010; + padding: 0px; +} + +/* Links */ +.plain_link +{ + color: #000000; + text-decoration: none; +} +.autoindex_a:visited, .autoindex_a:active +{ + color: #00008F; + text-decoration: none; +} +.autoindex_a:link +{ + color: #0000FF; + text-decoration: none; +} +.autoindex_a:hover +{ + color: #0000FF; + text-decoration: overline underline; +} + +/* Buttons */ +.button +{ + color: #707070; + background-color: #F2F6FC; + font-family: sans-serif; + font-size: 11px; + text-align: left; + vertical-align: middle; + font-weight: bold; + cursor: pointer; + border: none; + padding: 3px 10px 3px 10px; +} + +/* Misc. */ +.paragraph +{ + background: #F2F6FC; + font-size: 13px; + color: #000020; +} +.autoindex_hr +{ + color: #000020; + background-color: #000020; + border: none; + width: 75%; + height: 1px; +} +.autoindex_small +{ + font-size: 10px; +} \ No newline at end of file diff --git a/templates/simple_image_gallery/each_file.tpl b/templates/simple_image_gallery/each_file.tpl new file mode 100644 index 0000000..d8d2bc3 --- /dev/null +++ b/templates/simple_image_gallery/each_file.tpl @@ -0,0 +1,7 @@ + +{do_every:4}{end do_every} \ No newline at end of file diff --git a/templates/simple_image_gallery/global_footer.tpl b/templates/simple_image_gallery/global_footer.tpl new file mode 100644 index 0000000..449eaa5 --- /dev/null +++ b/templates/simple_image_gallery/global_footer.tpl @@ -0,0 +1,14 @@ + +/* We request that you do not remove the following copyright notice. */ + + + + \ No newline at end of file diff --git a/templates/simple_image_gallery/global_header.tpl b/templates/simple_image_gallery/global_header.tpl new file mode 100644 index 0000000..55cd592 --- /dev/null +++ b/templates/simple_image_gallery/global_header.tpl @@ -0,0 +1,9 @@ + + + + + {words:index of} {info:dir} + + + + diff --git a/templates/simple_image_gallery/table_footer.tpl b/templates/simple_image_gallery/table_footer.tpl new file mode 100644 index 0000000..807d6fc --- /dev/null +++ b/templates/simple_image_gallery/table_footer.tpl @@ -0,0 +1,44 @@ +
    + {words:file} + + {words:downloads} + + {words:size} + + {words:date} + + {words:description} +
    + + {file:if:is_dir}{if:icon_path}{words:thumbnail of} {file:filename}{end if:icon_path}{end if} {file:thumbnail} +
    {file:filename}
    {file:new_icon}{file:md5_link}{file:delete_link}{file:rename_link}{file:edit_description_link}{file:ftp_upload_link} + {if:description_file}
    {file:description}{end if:description_file} +
    + + /* We request that you do not remove the link to the AutoIndex website. + This not only gives respect to the large amount of time given freely by the + developer, but also helps build interest, traffic, and use of AutoIndex. */ + + +{if:entries_per_page} +

    + {words:page} + {info:previous_page_link} + {info:current_page_number} + {info:next_page_link} + {words:of} {info:last_page_number} +

    +{end if:entries_per_page} + + +{if:archive} + +{end if:archive} + + +

    + + + {if:search_enabled} + + {end if:search_enabled} + {if:use_login_system} + + {end if:use_login_system} + +
    +
    + {if:icon_path}{words:search} {end if:icon_path}{words:search}: + {info:search_box} +
    +
    +
    + {if:icon_path}{words:login} {end if:icon_path}{words:account}: + {info:login_box} +
    +
    \ No newline at end of file diff --git a/templates/simple_image_gallery/table_header.tpl b/templates/simple_image_gallery/table_header.tpl new file mode 100644 index 0000000..02d4b26 --- /dev/null +++ b/templates/simple_image_gallery/table_header.tpl @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/templates/spacer.gif b/templates/spacer.gif new file mode 100644 index 0000000..e69de29