This commit is contained in:
Marc Delisle
2009-12-31 13:09:18 +00:00
parent 87b994743b
commit f3833884e4
894 changed files with 0 additions and 287313 deletions

11
CREDITS
View File

@@ -1,11 +0,0 @@
$Id$
phpMyAdmin - Credits
====================
Please have a look to the Documentation.txt or
Documentation.html files, or visit
http://www.phpmyadmin.net/home_page/team.php and
http://www.phpmyadmin.net/home_page/about.php

312
ChangeLog
View File

@@ -1,312 +0,0 @@
----------------------
phpMyAdmin - ChangeLog
----------------------
$Id$
$HeadURL: https://phpmyadmin.svn.sourceforge.net/svnroot/phpmyadmin/trunk/phpMyAdmin/ChangeLog $
3.3.0.0 (not yet released)
+ rfe #2308632 [edit] Use hex for (var)binary fields,
thanks to Maarten Dieleman - maartendieleman
+ patch #2794819 [navi] Filter for displayed table names,
thanks to Michael Valushko - dylfin
- bug #2794840 [core] Cannot redeclare pma_tableheader()
- rfe #2726479 [core] configurable maximal length of URL
+ patch #2724755 [display] Full/partial text links (big T) are back,
thanks to nullbarriere - nullbarriere
- bug [display] handle NavigationBarIconic as documented for navi buttons
+ rfe #2726479 [export] Export tables preselect
+ patch #2805828 [export] PHP array export plugin,
thanks to Geoffray Warnants - amnsk
+ patch #2798592 [import] Progress bar,
thanks to Tomas Srnka - tomassrnka
- bug [gui] Generate Password not working for 'Change Login Information', only for 'Change password'
+ [lang] Arabic update, thanks to Meno25 - meno25
+ rfe #2822190 [structure] BOOLEAN is standard SQL
+ [lang] German update, thanks to knittl
+ [lang] German update, thanks to virsacer
+ rfe #2813867 [structure] Default sorting order in list of tables
+ [import] Added MySQL type-detection functionality to import library,
thanks to Derek Schaefer
+ [import] Added ODS, Excel XLS, Excel XLSX, and XML import modules,
thanks to Derek Schaefer
+ [export] Added Excel XLSX export module,
thanks to Derek Schaefer
+ [core] Added ability for tracking changes made through phpMyAdmin
+ rfe #2839504 [engines] Support InnoDB plugin's new row formats
+ [core] Added ability for synchronizing databases among servers.
+ [lang] #2843101 Dutch update, thanks to scavenger2008
+ [lang] Galician update, thanks to Xosé Calvo - xosecalvo
+ [export] Added MediaWiki export module,
thanks to Derek Schaefer - drummingds1
+ [lang] Turkish update, thanks to Burak Yavuz
+ [auth] Add custom port configuration in signon, thanks to Gary Smith
- [core] Removed context from the error handler
- bug #2883633 [export] Export of InnoDB table is incomplete
+ rfe #2862575 [status] Order query statistics by % desc, skip rows with 0
+ rfe #2823686 [interface] Increase default height of query window
+ rfe #2129902 [structure] Don't hide indexes
+ patch #2812070 [interface] Allow selecting a range of rows by holding shift, thanks to Joolee
3.2.5.0 (not yet released)
- patch #2903400 [bookmarks] Status of bookmark table,
thanks to Virsacer - virsacer
- bug [history] QueryHistoryDB is not respected
- bug #2905629 [auth] Blowfish secret is not hashed
- bug #2910000 [gui] ShowServerInfo should hide all server info from main page
- bug #2910568 [structure] Table size for ARCHIVE tables is not displayed
- patch #2899969 [core] Session lock blocks working from a second window,
thanks to Greg Roach - fisharebest
- patch #2915168 [import] Incorrect parsing of DELIMITER keyword,
thanks to Greg Roach - fisharebest
- patch #2918831 [export] Missing backquotes on reserved words,
thanks to Virsacer - virsacer
- [core] Fix broken cleanup of $_GET
3.2.4.0 (2009-12-02)
- bug [engines] Innodb_buffer_pool_pages_latched no longer returned in status
- bug #2890451 [setup] Inconsistent generated "designer_coords"
- bug #2890443 [mysqli] "No index used in query" exception is reported
- bug #2891250 [ob] Garbled data in navi frame (PHP 5.2.11 bug)
- bug #2887357 [core] Slow loading times with large databases (partial fix)
- bug #2893931 [lang] Typo and empty message
+ [lang] Russian update, thanks to Victor Volkov
- bug #2823599 [edit] UUID Primary Key wrongly updated
- bug #2895894 [structure] Empty default value not set properly
- bug #2897536 [parser] Copying table with bit field with default
- bug #2893221 [core] Statement may not be safe to log in statement format
3.2.3.0 (2009-10-30)
- patch #2856664 [export] Date, time, and datetime column types now export correctly to
OpenOffice Spreadsheet, thanks to Thomas Pulickal - jemajoign
- patch #2859788 [parser] Double-character delimiters (bug #2846239),
thanks to Thomas Pulickal - jemajoign
- bug #2832600 [export] Slow export when having lots of databases
- bug #2537766 [import] Comments are stripped when editing store procedures
- bug #2852370 [operations] Renaming database deletes triggers
- bug #2872247 [interface] Failed opening required 'mysql_charsets.lib.php', thanks to CyberLeo Kitsana - cyberleo
- bug [structure] "In use" table incorrectly reported as "view"
- bug #2879909 [interface] Removed double htmlspecialchars when editing enum column
- bug #2868328 [relations] Adding foreign key when table name contains a dot
- bug #2883381 [doc] Side effects of MemoryLimit setting
- bug #2826128 [display] Inverting sort order when expression contains a function name
3.2.2.1 (2009-10-12)
- [security] XSS and SQL injection, thanks to Herman van Rink
3.2.2.0 (2009-09-13)
- bug #2825293 [structure] Default value for a BIT column
- bug [display] Red arrows were reversed in the list of tables
- bug #2813879 [export] Duplicate empty lines when exporting without comments
- bug #2825919 [export] Trigger export with database name
- bug #2823996 [data] Cannot edit row with no PK and a BIT field
- bug [export] Exporting results of a query which contains a LIMIT clause
inside a subquery
- bug #2837722 [export] Run complex SQL then export does not work
- bug #2839548 [export] Triggers order on export
- bug #2826986 [display] Order by BLOB and range display
- bug [display] After clicking on Show Function or Function, the UPDATE query
is not shown after execution
- bug [structure] Missing validation for BINARY and VARBINARY
3.2.1.0 (2009-08-09)
- bug #2799009 Login with ipv6 IP address breaks redirect
- bug #2796066 [priv] Inconsistent display of databases list
- bug #2802870 [display] Incorrect overhead value for InnoDB
- bug [display] Incorrect display in replication status,
thanks to Tomas Srnka - tomassrnka
- bug #1601625 [display] The Ignore checkbox is not unchecked for ENUM
- bug #2809930 [setup] Notice: Undefined variable: k in setup/index.php
- bug [features] Incorrect report of missing relational features
- [security] XSS: Insufficient output sanitizing (not exploitable without a valid token)
thanks to Sven Vetsch/Disenchant for informing us in a responsible manner
- bug #2634827 [import] Using DELIMITER produces infinite cycle
+ new language files: uzbek_cyrillic and urbek_latin
- bug #2814109 [search] Right frame is blank
- bug #2816840 [priv] Cannot change a user's details
- bug #2816165 [display] Executed query not always displayed
- bug #2819944 [setup] Incorrect mention of designer_coords
- bug #2821757 [insert] "Insert another new row" no longer worked
+ [lang] Norwegian update, thanks to Sven-Erik Andersen
- bug [core] PMA_pow() can support negative exponents in the pow() case
+ [lang] Brazilian Portuguese update, thanks to Fabio Bucior - fabiobucior
- patch #2822384 [docs] Missing auth_type in docs-example,
thanks to Jürgen Wind - windkiel
- patch #2819728 [display] Slider effect jumping to top of page,
thanks to Jan Radem - summsel
- bug [display] Incorrect computation of overhead stats in server view
for tables under the InnoDB engine
+ [lang] Swedish update, thanks to Björn T. Hallberg
3.2.0.1 (2009-06-30)
- [security] XSS: Insufficient output sanitizing in bookmarks
3.2.0.0 (2009-06-15)
- [core] better support for vendor customisation (based on what Debian needs)
+ rfe #2127987 warn when session.gc_maxlifetime is less than cookie validity
+ rfe #2100910 configurable default charset for import
+ rfe #1913541 link to InnoDB status when error 150 occurs
+ rfe #1927189 strip ` from column names on import
+ rfe #1821619 LeftFrameDBSeparator can be an array
+ patch #1821619 [privileges] Extra back reference when editing table-specific
privileges, thanks to Herman van Rink - helmo
+ patch #2356575 [display] Sortable database columns,
thanks to Bryce Thornton - brycethornton
- patch #2486825 [lang] Wrong string in setup script hints,
thanks to Isaac Bennetch - ibennetch
- patch #2498350 [cleanup] XHTML cleanup, thanks to Virsacer - virsacer
+ patch #2494192 [display] Possibility of disabling the sliders,
thanks to Virsacer - virsacer
+ patch #2506831 [privileges] Create user for existing database,
thanks to Herman van Rink and Virsacer
+ patch #2505255 [privileges] Cleanup, thanks to Virsacer - virsacer
- bug #2414056 [auth] AllowNoPasswordRoot error message is too vague
- patch #2596230 [XHTML] View table headers/footers completely,
thanks to Virsacer - virsacer
- patch #2602633 [core] support column name having square brackets,
thanks to Herman van Rink - helmo
+ [lang] Lithuanian update, thanks to Rytis Slatkevicius - rytis_s
+ [auth] New setting AllowNoPassword (supercedes AllowNoPasswordRoot) that
applies to all accounts (even the anonymous user)
- patch #2652972 [relation] Missing code with hashing for relationship
editing, thanks to knittl - knittl
+ rfe #2123386 Added option to disable mcrypt warning.
- bug #2648502 Request-URI Too Large error from Location header
+ rfe #1731967 Check for relations support on main page.
+ rfe #2186820 Explanation for using Host table.
+ rfe #1369509 Link to download more themes.
+ rfe #1666487 Add option to generate password on change password page.
+ rfe #1694104 Allow logging of user status with Apache.
- patch #2649087 None default is different than other None in some languages.
+ [lang] Chinese Simplified update, thanks to Shanyan Baishui - rimyxp
- patch #2550286 [display] Sort arrows problem, thanks to Virsacer - virsacer
- [security] warn about existence of config directory on main page
+ patch #2706761 [lang] Polish update,
thanks to Pawel Smolinski - zipoking
+ patch #2715142 [export] (rfe 2416960, escape new line in CSV export)
thanks to Derek Schaefer - drummingds1
- patch #2727250 Optimizations for PHP loops
thanks to Haeber
- bug #2650776 [import] SQL_MODE not saved during Partial Import
- patch #1863739 [auth] cache control missing (PHP-CGI), thanks to stmfd
- patch #2750541 [parser] Incorrect parsing of constraints in ALTER TABLE,
thanks to Yannick Betemps - arkhee
+ patch #2735162 [status] Server status - replication,
thanks to Tomas Srnka - tomassrnka
+ patch #2745215 [edit] Multi-row change with "]" improved,
thanks to Virsacer - virsacer
+ rfe #2657696 Automatically copy generated password
- bug #2787162 [interface] Table with name 'log_views' is incorrectly displayed as a view
+ patch #2665440 Detect mcrypt initialization failure
+ [lang] Galician update, thanks to Xosé Calvo - xosecalvo
+ [lang] Swedish update, thanks to Björn T. Hallberg
+ [lang] Norwegian update, thanks to Sven-Erik Andersen
+ [lang] Catalan update, thanks to Xavier Navarro
+ [lang] Finnish update, thanks to Jouni Kahkonen
+ [lang] Hungarian update, thanks to Jozsef Tamas Herczeg - dodika
3.1.6.0 (not released)
- bug #2785912 [doc] no ON UPDATE CURRENT_TIMESTAMP in list of attributes
3.1.5.0 (2009-05-15)
- patch #2739001 [export] XML does not allow spaces in element names,
thanks to Derek Schaefer - drummingds1
- bug #2780722 [import] Incorrect maximum file size
- bug #2780356 [calendar] Null checkbox not unchecked when date is chosen
- bug [calendar] js error "window.parent.addEvent is not a function"
- patch #2773818 [export] Invalid "Content-Encoding" header,
thanks to abignale - abignale
- bug #2787162 [interface] Table with name 'log_views' is incorrectly displayed as a view
- bug #2784400 [parser] INVOKER not understood by parser
- [core] Compatibility with PHP 5.3.0RC2
3.1.4.0 (2009-04-25)
+ patch #1808339 [doc] Apache SSLOptions and StdEnvVars FAQ,
thanks to JT Justman - jtjustman
- bug #2491017 [operations] ANSI mode not supported (db rename and table move)
- bug #2609346 [operations] Fix copying views.
- rfe #2127983 Readd documentation link, it does not protect against anything.
- bug #1675249 [doc] Apache reverse proxy and cookies FAQ
- bug #2682140 UUID() and CURRENT_USER() should not accept arguments
- patch #2682833 [core] Fatal error: Call to a member function isDisplayed(),
thanks to Christian Rodriguez - judas_iscariote
- patch #2702772 [lang] Duplicate sentence in Polish,
thanks to Pawel Smolinski - zipoking
- patch #2709040 [doc] Wrong link in ChangeLog formatter,
thanks to Petr Vorel - pevik
- patch #2715417 [interface] Fixed truncation of enum/set values containing parenthesis
thanks to Marco Moreno - mmoreno
+ [lang] Spanish update, thanks to Daniel Hinostroza
- bug #2724844 Add Fields: Add index is missing quotes
thanks to Luke Armstrong
- bug #2740550 [interface] Using textarea CharEditing drops default values
- bug #2729191 [config] CheckConfigurationPermissions = false is worthless
- bug #2687046 [export] Structure export: Null always YES
- [doc] typos, thanks to Cédric Corazza
3.1.3.2 (2009-04-14)
- [security] Insufficient output sanitizing when generating configuration file
3.1.3.1 (2009-03-24)
- [security] HTTP Response Splitting and file inclusion vulnerabilities
- [security] XSS vulnerability on export page
- [security] Insufficient output sanitizing when generating configuration file
3.1.3.0 (2009-02-28)
+ [lang] Turkish update, thanks to Burak Yavuz
- patch #2496403 [display] Multi-row change with "]",
thanks to Virsacer - virsacer
- bug #2027720 [parser] Missing space after BINARY used as cast
- patch #2520747 [core] E_DEPRECATED compatibility for PHP 5.3,
thanks to Giovanni Giacobbi - themnemonic
- bug [display] Message "Bookmark created" is not displaying
+ [display] Show AUTO_INCREMENT instead of A_I when in vertical mode
- patch #2538358 [display] Conditions for relational display field,
thanks to Virsacer - virsacer
+ [lang] Mongolian update, thanks to Bayarsaikhan Enkhtaivan - bayaraa
- patch #2553372 [display] DB comment tooltips not shown on navi,
thanks to Erdem - ahard
- patch #2561433 [structure] Display true number of rows in a view
if it contains less than MaxExactCountViews,
thanks to Virsacer - virsacer
+ [lang] Polish update, thanks to Fixer - fixeron
- bug #2568722 [designer] Compound key not shown
- patch #2550323 [XHTML] in server_databases.php, thanks to Virsacer - virsacer
- patch #2358861 [navi] Row count tooltip wrong for information_schema,
thanks to Herman van Rink - helmo
- bug #2565948 [core] Changing the connection collation changed the client
charset.
+ [lang] Romanian update, thanks to Sergiu Bivol - sbivol
- patch #1760205 [data] Insert as new row: BLOB is lost,
thanks to Herman van Rink - helmo
+ [lang] Georgian update, thanks to George Machitidze
3.1.2.0 (2009-01-19)
- bug #1253252 [display] Can't NULL a column with relation defined
- bug #2009500 [SQL] Small improvements in generated SQL (partial fix)
- bug #1963184 [export] YAML export improvement,
thanks to Bryce Thornton - brycethornton
+ [lang] Dutch update, thanks to Herman van Rink - helmo
- patch #2407785 [cleanup] ereg*() deprecated in PHP 5.3,
thanks to Alex Frase - atfrase
- bug #2417058 [properties] Edit fields: losing auto-increment setting
- patch #2444082 [changelog] changelog.php linkifies one link wrong,
thanks to Robert Xiao - nneonneo
- bug #2363653 [properties] Various problems with table structure
- bug [display] BIT field contents disappear when edited
+ [lang] Czech update, thanks to Ondřej Vadinský.
- bug #2461735 [operations] Table operations adds "row_format"
- bug #2445213 [export] Commas for CSV Excel 2008 for Mac
- bug #2397877 [core] ForceSSL and http auth_type
- bug #2473127 [display] Deleting rows displays tbl structure, not contents
- patch #2478940 [core] PHP 5.2+ warning does not work,
thanks to Jürgen Wind - windkiel
- bug #2416418 [privileges] Escaping special characters
--- Older ChangeLogs can be found on our project website ---
http://www.phpmyadmin.net/old-stuff/ChangeLogs/
# vim: et ts=4 sw=4 sts=4
# vim: ft=changelog fenc=utf-8 encoding=utf-8
# vim: fde=getline(v\:lnum-1)=~'^\\s*$'&&getline(v\:lnum)=~'\\S'?'>1'\:1&&v\:lnum>8&&getline(v\:lnum)!~'^#'
# vim: fdn=1 fdm=expr

File diff suppressed because it is too large Load Diff

View File

@@ -1,9 +0,0 @@
$Id$
phpMyAdmin - Installation
-------------------------
Please have a look to the Documentation.txt or
Documentation.html files.

340
LICENSE
View File

@@ -1,340 +0,0 @@
GNU GENERAL PUBLIC LICENSE
Version 2, June 1991
Copyright (C) 1989, 1991 Free Software Foundation, Inc.
51 Franklin St, 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.
Preamble
The licenses for most software are designed to take away your
freedom to share and change it. By contrast, the GNU General Public
License is intended to guarantee your freedom to share and change free
software--to make sure the software is free for all its users. This
General Public License applies to most of the Free Software
Foundation's software and to any other program whose authors commit to
using it. (Some other Free Software Foundation software is covered by
the GNU Library General Public License instead.) You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
this service if you wish), that you receive source code or can get it
if you want it, that you can change the software or use pieces of it
in new free programs; and that you know you can do these things.
To protect your rights, we need to make restrictions that forbid
anyone to deny you these rights or to ask you to surrender the rights.
These restrictions translate to certain responsibilities for you if you
distribute copies of the software, or if you modify it.
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must give the recipients all the rights that
you have. You must make sure that they, too, receive or can get the
source code. And you must show them these terms so they know their
rights.
We protect your rights with two steps: (1) copyright the software, and
(2) offer you this license which gives you legal permission to copy,
distribute and/or modify the software.
Also, for each author's protection and ours, we want to make certain
that everyone understands that there is no warranty for this free
software. If the software is modified by someone else and passed on, we
want its recipients to know that what they have is not the original, so
that any problems introduced by others will not reflect on the original
authors' reputations.
Finally, any free program is threatened constantly by software
patents. We wish to avoid the danger that redistributors of a free
program will individually obtain patent licenses, in effect making the
program proprietary. To prevent this, we have made it clear that any
patent must be licensed for everyone's free use or not licensed at all.
The precise terms and conditions for copying, distribution and
modification follow.
GNU GENERAL PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
0. This License applies to any program or other work which contains
a notice placed by the copyright holder saying it may be distributed
under the terms of this General Public License. The "Program", below,
refers to any such program or work, and a "work based on the Program"
means either the Program or any derivative work under copyright law:
that is to say, a work containing the Program or a portion of it,
either verbatim or with modifications and/or translated into another
language. (Hereinafter, translation is included without limitation in
the term "modification".) Each licensee is addressed as "you".
Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope. The act of
running the Program is not restricted, and the output from the Program
is covered only if its contents constitute a work based on the
Program (independent of having been made by running the Program).
Whether that is true depends on what the Program does.
1. You may copy and distribute verbatim copies of the Program's
source code as you receive it, in any medium, provided that you
conspicuously and appropriately publish on each copy an appropriate
copyright notice and disclaimer of warranty; keep intact all the
notices that refer to this License and to the absence of any warranty;
and give any other recipients of the Program a copy of this License
along with the Program.
You may charge a fee for the physical act of transferring a copy, and
you may at your option offer warranty protection in exchange for a fee.
2. You may modify your copy or copies of the Program or any portion
of it, thus forming a work based on the Program, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:
a) You must cause the modified files to carry prominent notices
stating that you changed the files and the date of any change.
b) You must cause any work that you distribute or publish, that in
whole or in part contains or is derived from the Program or any
part thereof, to be licensed as a whole at no charge to all third
parties under the terms of this License.
c) If the modified program normally reads commands interactively
when run, you must cause it, when started running for such
interactive use in the most ordinary way, to print or display an
announcement including an appropriate copyright notice and a
notice that there is no warranty (or else, saying that you provide
a warranty) and that users may redistribute the program under
these conditions, and telling the user how to view a copy of this
License. (Exception: if the Program itself is interactive but
does not normally print such an announcement, your work based on
the Program is not required to print an announcement.)
These requirements apply to the modified work as a whole. If
identifiable sections of that work are not derived from the Program,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works. But when you
distribute the same sections as part of a whole which is a work based
on the Program, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote it.
Thus, it is not the intent of this section to claim rights or contest
your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
collective works based on the Program.
In addition, mere aggregation of another work not based on the Program
with the Program (or with a work based on the Program) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.
3. You may copy and distribute the Program (or a work based on it,
under Section 2) in object code or executable form under the terms of
Sections 1 and 2 above provided that you also do one of the following:
a) Accompany it with the complete corresponding machine-readable
source code, which must be distributed under the terms of Sections
1 and 2 above on a medium customarily used for software interchange; or,
b) Accompany it with a written offer, valid for at least three
years, to give any third party, for a charge no more than your
cost of physically performing source distribution, a complete
machine-readable copy of the corresponding source code, to be
distributed under the terms of Sections 1 and 2 above on a medium
customarily used for software interchange; or,
c) Accompany it with the information you received as to the offer
to distribute corresponding source code. (This alternative is
allowed only for noncommercial distribution and only if you
received the program in object code or executable form with such
an offer, in accord with Subsection b above.)
The source code for a work means the preferred form of the work for
making modifications to it. For an executable work, complete source
code means all the source code for all modules it contains, plus any
associated interface definition files, plus the scripts used to
control compilation and installation of the executable. However, as a
special exception, the source code distributed need not include
anything that is normally distributed (in either source or binary
form) with the major components (compiler, kernel, and so on) of the
operating system on which the executable runs, unless that component
itself accompanies the executable.
If distribution of executable or object code is made by offering
access to copy from a designated place, then offering equivalent
access to copy the source code from the same place counts as
distribution of the source code, even though third parties are not
compelled to copy the source along with the object code.
4. You may not copy, modify, sublicense, or distribute the Program
except as expressly provided under this License. Any attempt
otherwise to copy, modify, sublicense or distribute the Program is
void, and will automatically terminate your rights under this License.
However, parties who have received copies, or rights, from you under
this License will not have their licenses terminated so long as such
parties remain in full compliance.
5. You are not required to accept this License, since you have not
signed it. However, nothing else grants you permission to modify or
distribute the Program or its derivative works. These actions are
prohibited by law if you do not accept this License. Therefore, by
modifying or distributing the Program (or any work based on the
Program), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Program or works based on it.
6. Each time you redistribute the Program (or any work based on the
Program), the recipient automatically receives a license from the
original licensor to copy, distribute or modify the Program subject to
these terms and conditions. You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties to
this License.
7. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not distribute the Program at all. For example, if a patent
license would not permit royalty-free redistribution of the Program by
all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Program.
If any portion of this section is held invalid or unenforceable under
any particular circumstance, the balance of the section is intended to
apply and the section as a whole is intended to apply in other
circumstances.
It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system, which is
implemented by public license practices. Many people have made
generous contributions to the wide range of software distributed
through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing
to distribute software through any other system and a licensee cannot
impose that choice.
This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.
8. If the distribution and/or use of the Program is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Program under this License
may add an explicit geographical distribution limitation excluding
those countries, so that distribution is permitted only in or among
countries not thus excluded. In such case, this License incorporates
the limitation as if written in the body of this License.
9. The Free Software Foundation may publish revised and/or new versions
of the General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the Program
specifies a version number of this License which applies to it and "any
later version", you have the option of following the terms and conditions
either of that version or of any later version published by the Free
Software Foundation. If the Program does not specify a version number of
this License, you may choose any version ever published by the Free Software
Foundation.
10. If you wish to incorporate parts of the Program into other free
programs whose distribution conditions are different, write to the author
to ask for permission. For software which is copyrighted by the Free
Software Foundation, write to the Free Software Foundation; we sometimes
make exceptions for this. Our decision will be guided by the two goals
of preserving the free status of all derivatives of our free software and
of promoting the sharing and reuse of software generally.
NO WARRANTY
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
REPAIR OR CORRECTION.
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGES.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
convey the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
<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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 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.

74
README
View File

@@ -1,74 +0,0 @@
$Id$
phpMyAdmin - Readme
===================
A set of PHP-scripts to manage MySQL over the web.
Version 3.3.0-dev
-----------------
http://www.phpmyadmin.net/
Copyright (C) 1998-2000 Tobias Ratschiller <tobias_at_ratschiller.com>
Copyright (C) 2001-2009 Marc Delisle <marc_at_infomarc.info>
Olivier Müller <om_at_omnis.ch>
Robin Johnson <robbat2_at_users.sourceforge.net>
Alexander M. Turek <me_at_derrabus.de>
Michal Čihař <michal_at_cihar.com>
Garvin Hicking <me_at_supergarv.de>
Michael Keck <mkkeck_at_users.sourceforge.net>
Sebastian Mendel <cybot_tm_at_users.sourceforge.net>
[check Documentation.txt/.html file for more details]
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License version 2,
as published by the Free Software Foundation.
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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
Requirements:
php 5.2 or later
MySQL 5.0 or later
a web-browser (doh!)
Summary:
phpMyAdmin is intended to handle the administration of MySQL over the web.
For a summary of features, please see the Documentation.txt/.html file.
Download:
You can get the newest version at http://www.phpmyadmin.net/.
Credits:
Please see the Documentation.txt/.html file.
Installation:
Please see the Documentation.txt/.html file.
ChangeLog:
Now in ChangeLog
Documentation:
Basic documentation available in Documentation.txt/.html
Support:
See reference about support forums under http://www.phpmyadmin.net/
Enjoy!
The phpMyAdmin Devel team
PS: Please, don't send us emails with question like "How do I compile
PHP with MySQL-support". We just don't have the time to be your
free helpdesk.
Please send your questions to the appropriate mailinglists / forums.
Before contacting us, please read the Documentation.html (esp. the
FAQ part).

View File

@@ -1,19 +0,0 @@
$Id: README 10967 2007-12-08 12:46:36Z lem9 $
phpMyAdmin - hints for distributing phpMyAdmin
==============================================
This document is intended to give advices to people who want to
redistribute phpMyAdmin inside other software package such as Linux
distribution or some all in one package including web server and MySQL
server.
Generally you can customize some basic aspects (paths to some files and
behavior) in libraries/vendor_config.php.
For example if you want setup script to generate config file in var,
change SETUP_CONFIG_FILE to /var/lib/phpmyadmin/config.inc.php and you
will also probably want to skip directory writable check, so set
SETUP_DIR_WRITABLE to false.
# vim: et ts=4 sw=4 sts=4 tw=72 spell spelllang=en_us

10
TODO
View File

@@ -1,10 +0,0 @@
$Id$
phpMyAdmin - Todo
=================
We are currently using the Sourceforge Tracker as Todo list:
http://sourceforge.net/tracker/?atid=377411&group_id=23067&func=browse
-- swix/20010704

View File

@@ -1,290 +0,0 @@
<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
* display selection for relational field values
*
* @version $Id$
* @package phpMyAdmin
*/
/**
* Gets a core script and starts output buffering work
*/
require_once './libraries/common.inc.php';
PMA_checkParameters(array('db', 'table', 'field'));
require_once './libraries/ob.lib.php';
PMA_outBufferPre();
require_once './libraries/header_http.inc.php';
/**
* Displays the frame
*/
$per_page = 200;
require_once './libraries/relation.lib.php'; // foreign keys
require_once './libraries/transformations.lib.php'; // Transformations
$cfgRelation = PMA_getRelationsParam();
$foreigners = ($cfgRelation['relwork'] ? PMA_getForeigners($db, $table) : FALSE);
$override_total = TRUE;
if (!isset($pos)) {
$pos = 0;
}
$foreign_limit = 'LIMIT ' . $pos . ', ' . $per_page . ' ';
if (isset($foreign_navig) && $foreign_navig == $strShowAll) {
unset($foreign_limit);
}
$foreignData = PMA_getForeignData($foreigners, $field, $override_total, isset($foreign_filter) ? $foreign_filter : '', $foreign_limit);
if (isset($pk)) {
$pk_uri = '&amp;pk=' . urlencode($pk);
?>
<input type="hidden" name="pk" value="<?php echo htmlspecialchars($pk); ?>" />
<?php
} else {
$pk_uri = '';
}
$gotopage = '';
$showall = '';
if (is_array($foreignData['disp_row'])) {
if ($cfg['ShowAll'] && ($foreignData['the_total'] > $per_page)) {
$showall = '<input type="submit" name="foreign_navig" value="' . $strShowAll . '" />';
}
$session_max_rows = $per_page;
$pageNow = @floor($pos / $session_max_rows) + 1;
$nbTotalPage = @ceil($foreignData['the_total'] / $session_max_rows);
if ($foreignData['the_total'] > $per_page) {
$gotopage = PMA_pageselector(
'browse_foreigners.php?field=' . urlencode($field) .
'&amp;' . PMA_generate_common_url($db, $table)
. $pk_uri .
'&amp;fieldkey=' . (isset($fieldkey) ? urlencode($fieldkey) : '') .
'&amp;foreign_filter=' . (isset($foreign_filter) ? urlencode($foreign_filter) : '') .
'&amp;',
$session_max_rows,
$pageNow,
$nbTotalPage,
200,
5,
5,
20,
10,
$GLOBALS['strPageNumber']
);
}
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xml:lang="<?php echo $available_languages[$lang][2]; ?>"
lang="<?php echo $available_languages[$lang][2]; ?>"
dir="<?php echo $text_dir; ?>">
<head>
<title>phpMyAdmin</title>
<meta http-equiv="Content-Type" content="text/html; charset=<?php echo $charset; ?>" />
<link rel="stylesheet" type="text/css"
href="phpmyadmin.css.php?<?php echo PMA_generate_common_url('', ''); ?>&amp;js_frame=right&amp;nocache=<?php echo $_SESSION['PMA_Config']->getThemeUniqueValue(); ?>" />
<script src="./js/functions.js" type="text/javascript"></script>
<script type="text/javascript">
//<![CDATA[
self.focus();
function formupdate(field, key) {
if (opener && opener.document && opener.document.insertForm) {
var field = 'field_' + field;
<?php if (isset($pk)) { ?>
var element_name = field + '[multi_edit][<?php echo htmlspecialchars($pk); ?>][]';
<?php } else { ?>
var element_name = field + '[]';
<?php } ?>
<?php if (isset($fieldkey) && is_numeric($fieldkey)) { ?>
var element_name_alt = field + '[<?php echo $fieldkey; ?>]';
<?php } else { ?>
var element_name_alt = field + '[0]';
<?php } ?>
if (opener.document.insertForm.elements[element_name]) {
// Edit/Insert form
opener.document.insertForm.elements[element_name].value = key;
self.close();
return false;
} else if (opener.document.insertForm.elements[element_name_alt]) {
// Search form
opener.document.insertForm.elements[element_name_alt].value = key;
self.close();
return false;
}
}
alert('<?php echo PMA_jsFormat($strWindowNotFound); ?>');
}
//]]>
</script>
</head>
<body id="body_browse_foreigners">
<form action="browse_foreigners.php" method="post">
<fieldset>
<?php echo PMA_generate_common_hidden_inputs($db, $table); ?>
<input type="hidden" name="field" value="<?php echo htmlspecialchars($field); ?>" />
<input type="hidden" name="fieldkey"
value="<?php echo isset($fieldkey) ? htmlspecialchars($fieldkey) : ''; ?>" />
<?php if (isset($pk)) { ?>
<input type="hidden" name="pk" value="<?php echo htmlspecialchars($pk); ?>" />
<?php } ?>
<span class="formelement">
<label for="input_foreign_filter"><?php echo $strSearch . ':'; ?></label>
<input type="text" name="foreign_filter" id="input_foreign_filter"
value="<?php echo isset($foreign_filter) ? htmlspecialchars($foreign_filter) : ''; ?>" />
<input type="submit" name="submit_foreign_filter" value="<?php echo $strGo;?>" />
</span>
<span class="formelement">
<?php echo $gotopage; ?>
</span>
<span class="formelement">
<?php echo $showall; ?>
</span>
</fieldset>
</form>
<table width="100%">
<?php
if (is_array($foreignData['disp_row'])) {
$header = '<tr>
<th>' . $strKeyname . '</th>
<th>' . $strDescription . '</th>
<td width="20%"></td>
<th>' . $strDescription . '</th>
<th>' . $strKeyname . '</th>
</tr>';
echo '<thead>' . $header . '</thead>' . "\n"
.'<tfoot>' . $header . '</tfoot>' . "\n"
.'<tbody>' . "\n";
$values = array();
$keys = array();
foreach ($foreignData['disp_row'] as $relrow) {
if ($foreignData['foreign_display'] != FALSE) {
$values[] = $relrow[$foreignData['foreign_display']];
} else {
$values[] = '';
}
$keys[] = $relrow[$foreignData['foreign_field']];
}
asort($keys);
$hcount = 0;
$odd_row = true;
$val_ordered_current_row = 0;
$val_ordered_current_equals_data = false;
$key_ordered_current_equals_data = false;
foreach ($keys as $key_ordered_current_row => $value) {
//for ($i = 0; $i < $count; $i++) {
$hcount++;
if ($cfg['RepeatCells'] > 0 && $hcount > $cfg['RepeatCells']) {
echo $header;
$hcount = 0;
$odd_row = true;
}
$key_ordered_current_key = $keys[$key_ordered_current_row];
$key_ordered_current_val = $values[$key_ordered_current_row];
$val_ordered_current_key = $keys[$val_ordered_current_row];
$val_ordered_current_val = $values[$val_ordered_current_row];
$val_ordered_current_row++;
if (PMA_strlen($val_ordered_current_val) <= $cfg['LimitChars']) {
$val_ordered_current_val = htmlspecialchars($val_ordered_current_val);
$val_ordered_current_val_title = '';
} else {
$val_ordered_current_val_title =
htmlspecialchars($val_ordered_current_val);
$val_ordered_current_val =
htmlspecialchars(PMA_substr($val_ordered_current_val, 0,
$cfg['LimitChars']) . '...');
}
if (PMA_strlen($key_ordered_current_val) <= $cfg['LimitChars']) {
$key_ordered_current_val = htmlspecialchars($key_ordered_current_val);
$key_ordered_current_val_title = '';
} else {
$key_ordered_current_val_title =
htmlspecialchars($key_ordered_current_val);
$key_ordered_current_val =
htmlspecialchars(PMA_substr($key_ordered_current_val, 0,
$cfg['LimitChars']) . '...');
}
if (! empty($data)) {
$val_ordered_current_equals_data = $val_ordered_current_key == $data;
$key_ordered_current_equals_data = $key_ordered_current_key == $data;
}
?>
<tr class="<?php echo $odd_row ? 'odd' : 'even'; $odd_row = ! $odd_row; ?>">
<td nowrap="nowrap">
<?php
echo ($key_ordered_current_equals_data ? '<strong>' : '')
.'<a href="#" title="' . $strUseThisValue
. ($key_ordered_current_val_title != '' ? ': ' . $key_ordered_current_val_title : '') . '"'
.' onclick="formupdate(\'' . md5($field) . '\', \''
. PMA_jsFormat($key_ordered_current_key, false) . '\'); return false;">'
.htmlspecialchars($key_ordered_current_key) . '</a>' . ($key_ordered_current_equals_data ? '</strong>' : '');
?></td>
<td>
<?php
echo ($key_ordered_current_equals_data ? '<strong>' : '')
. '<a href="#" title="' . $strUseThisValue . ($key_ordered_current_val_title != '' ? ': '
. $key_ordered_current_val_title : '') . '" onclick="formupdate(\''
. md5($field) . '\', \'' . PMA_jsFormat($key_ordered_current_key, false) . '\'); return false;">'
. $key_ordered_current_val . '</a>' . ($key_ordered_current_equals_data ? '</strong>' : '');
?></td>
<td width="20%">
<img src="<?php echo $GLOBALS['pmaThemeImage'] . 'spacer.png'; ?>"
alt="" width="1" height="1"></td>
<td>
<?php
echo ($val_ordered_current_equals_data ? '<strong>' : '')
. '<a href="#" title="' . $strUseThisValue . ($val_ordered_current_val_title != '' ? ': '
. $val_ordered_current_val_title : '') . '" onclick="formupdate(\'' . md5($field)
. '\', \'' . PMA_jsFormat($val_ordered_current_key, false) . '\'); return false;">'
. $val_ordered_current_val . '</a>' . ($val_ordered_current_equals_data ? '</strong>' : '');
?></td>
<td nowrap="nowrap">
<?php
echo ($val_ordered_current_equals_data ? '<strong>' : '') . '<a href="#" title="'
. $strUseThisValue . ($val_ordered_current_val_title != '' ? ': ' . $val_ordered_current_val_title : '')
. '" onclick="formupdate(\'' . md5($field) . '\', \''
. PMA_jsFormat($val_ordered_current_key, false) . '\'); return false;">' . htmlspecialchars($val_ordered_current_key)
. '</a>' . ($val_ordered_current_equals_data ? '</strong>' : '');
?></td>
</tr>
<?php
} // end while
}
?>
</tbody>
</table>
</body>
</html>

View File

@@ -1,101 +0,0 @@
<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
* @author Raj Kissu Rajandran
* @version 1.0
* @package BLOBStreaming
*/
/**
* Core library.
*/
require_once './libraries/common.inc.php';
/**
* @var string contains database name
*/
$bsDB = isset($_REQUEST['bs_db']) ? urldecode($_REQUEST['bs_db']) : NULL;
/**
* @var string contains table name
*/
$bsTable = isset($_REQUEST['bs_table']) ? urldecode($_REQUEST['bs_table']) : NULL;
/**
* @var string contains BLOB reference
*/
$bsReference = isset($_REQUEST['bs_reference']) ? urldecode($_REQUEST['bs_reference']) : NULL;
/**
* @var string contains MIME type
*/
$bsNewMIMEType = isset($_REQUEST['bs_new_mime_type']) ? urldecode($_REQUEST['bs_new_mime_type']) : NULL;
// necessary variables exist
if ($bsDB && $bsTable && $bsReference && $bsNewMIMEType)
{
// load PMA configuration
$PMA_Config = $_SESSION['PMA_Config'];
// if PMA configuration exists
if (!empty($PMA_Config))
{
// if BS plugins exist
if ($PMA_Config->get('BLOBSTREAMING_PLUGINS_EXIST'))
{
$pbms_ref_tbl = $PMA_Config->get('PBMS_NAME') . '_reference';
$pbms_cust_content_type_tbl = $PMA_Config->get('PBMS_NAME') . '_custom_content_type';
// if specified DB is selected
if (PMA_DBI_select_db($bsDB))
{
$query = "SELECT * FROM " . PMA_backquote($pbms_ref_tbl);
$query .= " WHERE Blob_url='" . PMA_sqlAddslashes($bsReference) . "'";
$result = PMA_DBI_query($query);
// if record exists
if ($data = PMA_DBI_fetch_assoc($result))
{
$query = "SELECT count(*) FROM " . PMA_backquote($pbms_cust_content_type_tbl);
$query .= " WHERE Blob_url='" . PMA_sqlAddslashes($bsReference) . "'";
$result = PMA_DBI_query($query);
// if record exists
if ($data = PMA_DBI_fetch_assoc($result))
{
if (1 == $data['count(*)'])
{
$query = "UPDATE " . PMA_backquote($pbms_cust_content_type_tbl) . " SET Content_type='";
$query .= PMA_sqlAddslashes($bsNewMIMEType) . "' WHERE Blob_url='" . PMA_sqlAddslashes($bsReference) . "'";
}
else
{
$query = "INSERT INTO " . PMA_backquote($pbms_cust_content_type_tbl) . " (Blob_url, Content_type)";
$query .= " VALUES('" . PMA_sqlAddslashes($bsReference) . "', '" . PMA_sqlAddslashes($bsNewMIMEType) . "')";
}
$result = PMA_DBI_query($query);
// if query execution succeeded
if ($result)
{
// determine redirector page
$newLoc = $cfg['PmaAbsoluteUri'] . 'sql.php?' . PMA_generate_common_url ('','', '&') . (isset($bsDB) ? '&db=' . urlencode($bsDB) : '') . (isset($bsTable) ? '&table=' . urlencode($bsTable) : '') . (isset($token) ? '&token=' . urlencode($token) : '') . (isset($goto) ? '&goto=' . urlencode($goto) : '') . '&reload=1&purge=1';
// redirect to specified page
?>
<script>
window.location = "<?php echo $newLoc ?>";
</script>
<?php
} // end if ($result)
} // end if ($data = PMA_DBI_fetch_assoc($result))
} // end if ($data = PMA_DBI_fetch_assoc($result))
} // end if (PMA_DBI_select_db($bsDB))
} // end if ($PMA_Config->get('BLOBSTREAMING_PLUGINS_EXIST'))
} // end if (!empty($PMA_Config))
} // end if ($bsDB && $bsTable && $bsReference && $bsNewMIMEType)
?>

View File

@@ -1,70 +0,0 @@
<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
* @author Raj Kissu Rajandran
* @version 1.0
* @package BLOBStreaming
*/
/**
* Core library.
*/
require_once './libraries/common.inc.php';
// load PMA configuration
$PMA_Config = $_SESSION['PMA_Config'];
// retrieve BS server variables from PMA configuration
$bs_server = $PMA_Config->get('BLOBSTREAMING_SERVER');
if (empty($bs_server)) die('No blob streaming server configured!');
// Check URL parameters
PMA_checkParameters(array('reference', 'c_type'));
// Increase time limit, because fetching blob might take some time
set_time_limit(0);
$reference = $_REQUEST['reference'];
/*
* FIXME: Maybe it would be better to check MIME type against whitelist as
* this code sems to support only few MIME types (check
* function PMA_BS_CreateReferenceLink in libraries/blobstreaming.lib.php).
*/
$c_type = preg_replace('/[^A-Za-z0-9/_-]/', '_', $_REQUEST['c_type']);
$filename = 'http://' . $bs_server . '/' . $reference;
$hdrs = get_headers($filename, 1);
if ($hdrs === FALSE) die('Failed to fetch headers');
$fHnd = fopen($filename, "rb");
if ($fHnd === FALSE) die('Failed to open remote URL');
$f_size = $hdrs['Content-Length'];
header("Expires: 0");
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");
header("Content-type: $c_type");
header('Content-length: ' . $f_size);
header("Content-disposition: attachment; filename=" . basename($filename));
$pos = 0;
$content = "";
while (!feof($fHnd)) {
$content .= fread($fHnd, $f_size);
$pos = strlen($content);
if ($pos >= $f_size)
break;
}
echo $content;
flush();
fclose($fHnd);

View File

@@ -1,77 +0,0 @@
<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
* @author Raj Kissu Rajandran
* @version 1.0
* @package BLOBStreaming
*/
/**
* Core library.
*/
require_once './libraries/common.inc.php';
/*
* @var string contains media type of BLOB reference
*/
$mediaType = isset($_REQUEST['media_type']) ? $_REQUEST['media_type'] : NULL;
/*
* @var string indicates whether media type is of custom type
*/
$customType = isset($_REQUEST['custom_type']) ? $_REQUEST['custom_type'] : false;
/*
* @var string contains BLOB reference
*/
$bsReference = isset($_REQUEST['bs_reference']) ? $_REQUEST['bs_reference'] : NULL;
// if media type and BS reference are specified
if (isset($mediaType) && isset($bsReference))
{
// load PMA configuration
$PMA_Config = $_SESSION['PMA_Config'];
// if PMA configuration exists
if (!empty($PMA_Config))
{
// retrieve BS server variables from PMA configuration
$bs_server = $PMA_Config->get('BLOBSTREAMING_SERVER');
if (empty($bs_server)) die('No blob streaming server configured!');
$bs_file_path = "http://" . $bs_server . '/' . $bsReference;
if (isset($customType) && $customType)
$bs_file_path = 'bs_disp_as_mime_type.php' . PMA_generate_common_url(array('reference' => $bsReference, 'c_type' => $mediaType));
?>
<html>
<head>
</head>
<body>
<?php
// supported media types
switch ($mediaType)
{
// audio content
case 'audio/mpeg':
?><embed width=620 height=100 src="<?php echo htmlspecialchars($bs_file_path); ?>" autostart=true></embed><?php
break;
// video content
case 'application/x-flash-video':
case 'video/mpeg':
?><embed width=620 height=460 src="<?php echo htmlspecialchars($bs_file_path); ?>" autostart=true></embed><?php
break;
default:
// do nothing
}
?>
</body>
</html>
<?php
} // end if (!empty($PMA_Config))
} // end if (isset($mediaType) && isset($bsReference))
?>

View File

@@ -1,32 +0,0 @@
<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
*
* @version $Id$
* @package phpMyAdmin
*/
/**
*
*/
require_once './libraries/common.inc.php';
require_once './libraries/header_http.inc.php';
$page_title = $strCalendar;
require './libraries/header_meta_style.inc.php';
$GLOBALS['js_include'][] = 'common.js';
$GLOBALS['js_include'][] = 'tbl_change.js';
require './libraries/header_scripts.inc.php';
?>
<script type="text/javascript">
//<![CDATA[
var month_names = new Array("<?php echo implode('","', $month); ?>");
var day_names = new Array("<?php echo implode('","', $day_of_week); ?>");
var submit_text = "<?php echo $strGo . ' (' . $strTime . ')'; ?>";
//]]>
</script>
</head>
<body onload="initCalendar();">
<div id="calendar_data"></div>
<div id="clock_data"></div>
</body>
</html>

View File

@@ -1,108 +0,0 @@
<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
* Simple script to set correct charset for changelog
*
* @version $Id$
* @package phpMyAdmin
*/
/**
* Load paths.
*/
require('./libraries/vendor_config.php');
/**
* Read changelog.
*/
if (substr(CHANGELOG_FILE, -3) == '.gz') {
ob_start();
readgzfile(CHANGELOG_FILE);
$changelog = ob_get_contents();
ob_end_clean();
} else {
$changelog = file_get_contents(CHANGELOG_FILE);
}
/**
* Whole changelog in variable.
*/
$changelog = htmlspecialchars($changelog);
$replaces = array(
'@(http://[./a-zA-Z0-9.-_-]*[/a-zA-Z0-9_])@'
=> '<a href="\\1">\\1</a>',
// sourceforge users
'/([0-9]{4}-[0-9]{2}-[0-9]{2}) (.+[^ ]) +&lt;(.*)@users.sourceforge.net&gt;/i'
=> '\\1 <a href="https://sourceforge.net/users/\\3/">\\2</a>',
'/thanks to ([^\(\r\n]+) \(([-\w]+)\)/i'
=> 'thanks to <a href="https://sourceforge.net/users/\\2/">\\1</a>',
'/thanks to ([^\(\r\n]+) -\s+([-\w]+)/i'
=> 'thanks to <a href="https://sourceforge.net/users/\\2/">\\1</a>',
// mail adresse
'/([0-9]{4}-[0-9]{2}-[0-9]{2}) (.+[^ ]) +&lt;(.*@.*)&gt;/i'
=> '\\1 <a href="mailto:\\3">\\2</a>',
// linking patches
'/patch\s*#?([0-9]{6,})/i'
=> '<a href="https://sourceforge.net/support/tracker.php?aid=\\1">patch #\\1</a>',
// linking RFE
'/(?:rfe|feature)\s*#?([0-9]{6,})/i'
=> '<a href="https://sourceforge.net/support/tracker.php?aid=\\1">RFE #\\1</a>',
// linking files
'/(\s+)([\\/a-z_0-9\.]+\.(?:php3?|html|pl|js|sh))/i'
=> '\\1<a href="http://phpmyadmin.svn.sourceforge.net/viewvc/phpmyadmin/trunk/phpMyAdmin/\\2?annotate=HEAD">\\2</a>',
// FAQ entries
'/FAQ ([0-9]+)\.([0-9a-z]+)/i'
=> '<a href="http://localhost/phpMyAdmin/Documentation.html#faq\\1_\\2">FAQ \\1.\\2</a>',
// linking bugs
'/bug\s*#?([0-9]{6,})/i'
=> '<a href="https://sourceforge.net/support/tracker.php?aid=\\1">bug #\\1</a>',
// all other 6+ digit numbers are treated as bugs
'/(?<!BUG|RFE|patch) #?([0-9]{6,})/i'
=> ' <a href="https://sourceforge.net/support/tracker.php?aid=\\1">bug #\\1</a>',
// CVE/CAN entries
'/((CAN|CVE)-[0-9]+-[0-9]+)/'
=> '<a href="http://cve.mitre.org/cgi-bin/cvename.cgi?name=\\1">\\1</a>',
// Highlight releases (with links)
'/(( ### )(([0-9]+)\.([0-9]+)\.([0-9]+)\.([0-9]+) (.*)))/'
=> '<a name="\\4_\\5_\\6_\\7"></a>\\2<a href="http://svn.sourceforge.net/viewvc/phpmyadmin/tags/RELEASE_\\4_\\5_\\6_\\7/phpMyAdmin">\\4.\\5.\\6.\\7 \\8</a>',
'/(( ### )(([0-9]+)\.([0-9]+)\.([0-9]+) (.*)))/'
=> '<a name="\\4_\\5_\\6_\\7"></a>\\2<a href="http://svn.sourceforge.net/viewvc/phpmyadmin/tags/RELEASE_\\4_\\5_\\6/phpMyAdmin">\\4.\\5.\\6 \\7</a>',
// Highlight releases (not linkable)
'/( ### )(.*)/'
=> '\\1<b>\\2</b>',
);
header('Content-type: text/html; charset=utf-8');
echo '<?xml version="1.0" encoding="utf-8"?'.'>';
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en" dir="ltr">
<head>
<link rel="icon" href="./favicon.ico" type="image/x-icon" />
<link rel="shortcut icon" href="./favicon.ico" type="image/x-icon" />
<title>phpMyAdmin - ChangeLog</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>
<h1>phpMyAdmin - ChangeLog</h1>
<?php
echo '<pre>';
echo preg_replace(array_keys($replaces), $replaces, $changelog);
echo '</pre>';
?>
</body>
</html>

View File

@@ -1,28 +0,0 @@
<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
*
* @version $Id$
* @package phpMyAdmin
*/
/**
* Gets some core libraries
*/
require_once './libraries/common.inc.php';
$GLOBALS['js_include'][] = 'functions.js';
require_once './libraries/header.inc.php';
require_once './libraries/relation.lib.php';
/**
* Gets the relation settings
*/
$cfgRelation = PMA_getRelationsParam(TRUE);
/**
* Displays the footer
*/
require_once './libraries/footer.inc.php';
?>

View File

@@ -1,72 +0,0 @@
<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
* phpMyAdmin sample configuration, you can use it as base for
* manual configuration. For easier setup you can use setup/
*
* All directives are explained in Documentation.html and on phpMyAdmin
* wiki <http://wiki.phpmyadmin.net>.
*
* @version $Id$
* @package phpMyAdmin
*/
/*
* This is needed for cookie based authentication to encrypt password in
* cookie
*/
$cfg['blowfish_secret'] = ''; /* YOU MUST FILL IN THIS FOR COOKIE AUTH! */
/*
* Servers configuration
*/
$i = 0;
/*
* First server
*/
$i++;
/* Authentication type */
$cfg['Servers'][$i]['auth_type'] = 'cookie';
/* Server parameters */
$cfg['Servers'][$i]['host'] = 'localhost';
$cfg['Servers'][$i]['connect_type'] = 'tcp';
$cfg['Servers'][$i]['compress'] = false;
/* Select mysqli if your server has it */
$cfg['Servers'][$i]['extension'] = 'mysql';
$cfg['Servers'][$i]['AllowNoPassword'] = false;
/* rajk - for blobstreaming */
$cfg['Servers'][$i]['bs_garbage_threshold'] = 50;
$cfg['Servers'][$i]['bs_repository_threshold'] = '32M';
$cfg['Servers'][$i]['bs_temp_blob_timeout'] = 600;
$cfg['Servers'][$i]['bs_temp_log_threshold'] = '32M';
/* User for advanced features */
// $cfg['Servers'][$i]['controluser'] = 'pma';
// $cfg['Servers'][$i]['controlpass'] = 'pmapass';
/* Advanced phpMyAdmin features */
// $cfg['Servers'][$i]['pmadb'] = 'phpmyadmin';
// $cfg['Servers'][$i]['bookmarktable'] = 'pma_bookmark';
// $cfg['Servers'][$i]['relation'] = 'pma_relation';
// $cfg['Servers'][$i]['table_info'] = 'pma_table_info';
// $cfg['Servers'][$i]['table_coords'] = 'pma_table_coords';
// $cfg['Servers'][$i]['pdf_pages'] = 'pma_pdf_pages';
// $cfg['Servers'][$i]['column_info'] = 'pma_column_info';
// $cfg['Servers'][$i]['history'] = 'pma_history';
// $cfg['Servers'][$i]['tracking'] = 'pma_tracking';
// $cfg['Servers'][$i]['designer_coords'] = 'pma_designer_coords';
/* Contrib / Swekey authentication */
// $cfg['Servers'][$i]['auth_swekey_config'] = '/etc/swekey-pma.conf';
/*
* End of servers configuration
*/
/*
* Directories for saving/loading files from server
*/
$cfg['UploadDir'] = '';
$cfg['SaveDir'] = '';
?>

View File

@@ -1,12 +0,0 @@
$Id$
This directory contains various stuff contributed by users that might be
useful to other. There is no guarantee it will work for you.
Current content of this directory:
packaging - Contains files needed for creating packages for various
distributions. Please prefer official packages from your vendor if
possible.
vim: expandtab ts=4 sw=4 sts=4 tw=78

View File

@@ -1,19 +0,0 @@
RewriteEngine on
# Allow only GET and POST verbs
RewriteCond %{REQUEST_METHOD} !^(GET|POST)$ [NC,OR]
# Ban Typical Vulnerability Scanners and others
# Kick out Script Kiddies
RewriteCond %{HTTP_USER_AGENT} ^(java|curl|wget).* [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^.*(libwww-perl|curl|wget|python|nikto|wkito|pikto|scan|acunetix).* [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^.*(winhttp|HTTrack|clshttp|archiver|loader|email|harvest|extract|grab|miner).* [NC,OR]
# Ban Search Engines, Crawlers to your administrative panel
# No reasons to access from bots
# Ultimately Better than the useless robots.txt
# Did google respect robots.txt?
# Try google: intitle:phpMyAdmin intext:"Welcome to phpMyAdmin *.*.*" intext:"Log in" -wiki -forum -forums -questions intext:"Cookies must be enabled"
RewriteCond %{HTTP_USER_AGENT} ^.*(AdsBot-Google|ia_archiver|Scooter|Ask.Jeeves|Baiduspider|Exabot|FAST.Enterprise.Crawler|FAST-WebCrawler|www\.neomo\.de|Gigabot|Mediapartners-Google|Google.Desktop|Feedfetcher-Google|Googlebot|heise-IT-Markt-Crawler|heritrix|ibm.com\cs/crawler|ICCrawler|ichiro|MJ12bot|MetagerBot|msnbot-NewsBlogs|msnbot|msnbot-media|NG-Search|lucene.apache.org|NutchCVS|OmniExplorer_Bot|online.link.validator|psbot0|Seekbot|Sensis.Web.Crawler|SEO.search.Crawler|Seoma.\[SEO.Crawler\]|SEOsearch|Snappy|www.urltrends.com|www.tkl.iis.u-tokyo.ac.jp/~crawler|SynooBot|crawleradmin.t-info@telekom.de|TurnitinBot|voyager|W3.SiteSearch.Crawler|W3C-checklink|W3C_Validator|www.WISEnutbot.com|yacybot|Yahoo-MMCrawler|Yahoo\!.DE.Slurp|Yahoo\!.Slurp|YahooSeeker).* [NC]
RewriteRule .* - [F]

View File

@@ -1,12 +0,0 @@
#
# MySQL server administration.
#
Alias /phpMyAdmin /var/www/myadmin
<Directory /var/www/myadmin>
DirectoryIndex index.php
Options Indexes Includes ExecCGI
AllowOverride None
Order deny,allow
Allow from all
</Directory>

View File

@@ -1,163 +0,0 @@
%define _myadminpath /var/www/myadmin
%define pkgrelease rc1
%define microrelease 1
Name: phpMyAdmin
Version: 2.8.0
Release: %{pkgrelease}.%{microrelease}
License: GPL
Group: Applications/Databases/Interfaces
Source0: http://prdownloads.sourceforge.net/phpmyadmin/%{name}-%{version}-%{pkgrelease}.tar.bz2
Source1: phpMyAdmin-http.conf
URL: http://sourceforge.net/projects/phpmyadmin/
Requires: mysql
Requires: php-mysql
Buildarch: noarch
BuildRoot: %{_tmppath}/%{name}-root
Summary: phpMyAdmin - web-based MySQL administration
%description
phpMyAdmin can manage a whole MySQL-server (needs a super-user) but
also a single database. To accomplish the latter you'll need a
properly set up MySQL-user which can read/write only the desired
database. It's up to you to look up the appropiate part in the MySQL
manual. Currently phpMyAdmin can:
- create and drop databases
- create, copy, drop and alter tables
- delete, edit and add fields
- execute any SQL-statement, even batch-queries
- manage keys on fields
- load text files into tables
- create (*) and read dumps of tables
- export (*) and import data to CSV values
- administer multiple servers and single databases
- check referencial integrity
- create complex queries automatically connecting required tables
- create PDF graphics of your database layout
- communicate in more than 38 different languages
%prep
%setup -q -n %{name}-%{version}-%{pkgrelease}
%build
%install
[ "${RPM_BUILD_ROOT}" != "/" ] && [ -d "${RPM_BUILD_ROOT}" ] && \
rm -rf "${RPM_BUILD_ROOT}"
# Create directories.
install -d "${RPM_BUILD_ROOT}%{_myadminpath}"/{css,js,lang,libraries,themes}
install -d "${RPM_BUILD_ROOT}%{_myadminpath}"/libraries/{auth,dbg,dbi,engines}
install -d "${RPM_BUILD_ROOT}%{_myadminpath}"/libraries/{export,tcpdf,import}
install -d "${RPM_BUILD_ROOT}%{_myadminpath}"/libraries/transformations
install -d "${RPM_BUILD_ROOT}%{_myadminpath}"/libraries/tcpdf/font
install -d "${RPM_BUILD_ROOT}%{_myadminpath}"/themes/{darkblue_orange,original}
install -d "${RPM_BUILD_ROOT}%{_myadminpath}"/themes/darkblue_orange/{css,img}
install -d "${RPM_BUILD_ROOT}%{_myadminpath}"/themes/original/{css,img}
# Install files.
install libraries/config.default.php \
"${RPM_BUILD_ROOT}%{_myadminpath}"/config.inc.php
install *.{php,ico} "${RPM_BUILD_ROOT}%{_myadminpath}"/
install ChangeLog LICENSE README "${RPM_BUILD_ROOT}%{_myadminpath}"/
install Documentation.html docs.css "${RPM_BUILD_ROOT}%{_myadminpath}"/
install css/* "${RPM_BUILD_ROOT}%{_myadminpath}/css"/
install js/* "${RPM_BUILD_ROOT}%{_myadminpath}/js"/
install lang/*.php "${RPM_BUILD_ROOT}%{_myadminpath}/lang"/
install libraries/*.php "${RPM_BUILD_ROOT}%{_myadminpath}/libraries"/
install libraries/auth/*.php "${RPM_BUILD_ROOT}%{_myadminpath}/libraries/auth"/
install libraries/dbg/*.php "${RPM_BUILD_ROOT}%{_myadminpath}/libraries/dbg"/
install libraries/dbi/*.php "${RPM_BUILD_ROOT}%{_myadminpath}/libraries/dbi"/
install libraries/engines/*.php \
"${RPM_BUILD_ROOT}%{_myadminpath}/libraries/engines"/
install libraries/export/*.php \
"${RPM_BUILD_ROOT}%{_myadminpath}/libraries/export"/
install libraries/tcpdf/*.php "${RPM_BUILD_ROOT}%{_myadminpath}/libraries/tcpdf"/
install libraries/tcpdf/font/*.{php,z} \
"${RPM_BUILD_ROOT}%{_myadminpath}/libraries/tcpdf/font"/
install libraries/import/*.php \
"${RPM_BUILD_ROOT}%{_myadminpath}/libraries/import"/
install libraries/transformations/*.php \
"${RPM_BUILD_ROOT}%{_myadminpath}/libraries/transformations"/
install themes/darkblue_orange/*.{php,png} \
"${RPM_BUILD_ROOT}%{_myadminpath}/themes/darkblue_orange"/
install themes/darkblue_orange/css/*.php \
"${RPM_BUILD_ROOT}%{_myadminpath}/themes/darkblue_orange/css"/
install themes/darkblue_orange/img/*.{png,ico} \
"${RPM_BUILD_ROOT}%{_myadminpath}/themes/darkblue_orange/img"/
install themes/original/*.{php,png} \
"${RPM_BUILD_ROOT}%{_myadminpath}/themes/original"/
install themes/original/css/*.php \
"${RPM_BUILD_ROOT}%{_myadminpath}/themes/original/css"/
install themes/original/img/*.{png,ico} \
"${RPM_BUILD_ROOT}%{_myadminpath}/themes/original/img"/
# Create documentation directories.
DOCROOT="${RPM_BUILD_ROOT}%{_docdir}/%{name}-%{version}"
install -d "${DOCROOT}"
install -d "${DOCROOT}"/{lang,scripts,transformations}
# Install documentation files.
install RELEASE-DATE-* "${DOCROOT}"/
install CREDITS ChangeLog INSTALL LICENSE "${DOCROOT}"/
install README TODO "${DOCROOT}"/
install Documentation.* docs.css "${DOCROOT}"/
install translators.html "${DOCROOT}"/
install lang/*.sh "${DOCROOT}"/lang/
install scripts/* "${DOCROOT}"/scripts/
install libraries/tcpdf/README "${DOCROOT}"/README.tcpdf
install libraries/import/README "${DOCROOT}"/README.import
install libraries/transformations/README "${DOCROOT}"/transformations/
install libraries/transformations/TEMPLATE* "${DOCROOT}"/transformations/
install libraries/transformations/*.sh "${DOCROOT}"/transformations/
# Install configuration file for Apache.
install -d "${RPM_BUILD_ROOT}%{_sysconfdir}/httpd/conf.d"
install "%{SOURCE1}" \
"${RPM_BUILD_ROOT}%{_sysconfdir}/httpd/conf.d/phpMyAdmin.conf"
# Generate non-configuration file list.
(cd "${RPM_BUILD_ROOT}"; ls -d ."%{_myadminpath}"/*) |
sed -e '/\/config\.inc\.php$/d' -e 's/^.//' > files.list
%clean
[ "${RPM_BUILD_ROOT}" != "/" ] && [ -d "${RPM_BUILD_ROOT}" ] && \
rm -rf "${RPM_BUILD_ROOT}"
%files -f files.list
%defattr(644, root, root, 755)
%doc %{_docdir}/%{name}-%{version}
%dir %{_myadminpath}
%attr(640,root,apache) %config(noreplace) %verify(not size mtime md5) %{_myadminpath}/config.inc.php
%config(noreplace) %verify(not size mtime md5) %{_sysconfdir}/httpd/conf.d/*
%changelog
* Thu Feb 23 2006 Patrick Monnerat <pm@datasphere.ch>
- Version 2.8.0-rc1.1.
* Thu Dec 22 2005 Patrick Monnerat <patrick.monnerat@econophone.ch>
- Path "nullpw" to allow trying connection with null password after failure.
- Version 2.7.0-pl1.1.
* Mon Aug 22 2005 Patrick Monnerat <patrick.monnerat@econophone.ch>
- Version 2.6.3-pl1.
* Wed Jul 21 2004 Patrick Monnerat <patrick.monnerat@econophone.ch>
- Version 2.5.7-pl1.
* Fri Nov 22 2002 Patrick Monnerat <patrick.monnerat@econophone.ch>
- Version 2.3.0-rc1.

View File

@@ -1,44 +0,0 @@
# This is a typical file used to enable Swekey hardware authentication.
#
# To activate the Swekey authentication add the following line to your config.inc.php file.
# $cfg['Servers'][$i]['auth_swekey_config'] = '/etc/swekey-pma.conf';
# Then rename this file "swekey-pma.conf" and copy it to the /etc directory.
# Add all the Swekey ids you want to grant access to in the file.
# After each Swekey id put the corresponding user name.
#
# If you don't know the id of a Swekey just visit http://www.swekey.com?sel=support
# while your Swekey is connected.
#
# If you need to purchase a Swekey please visit http://phpmyadmin.net/auth_key
# since this link provides funding to PhpMyAdmin.
#
0000000000000000000000000000763A:root
000000000000000000000000000089E4:steve
0000000000000000000000000000231E:scott
#
# It is recommended to include the following lines to contact the
# authentication servers in SSL mode.
#
SERVER_CHECK=https://auth-check-ssl.musbe.net
SERVER_RNDTOKEN=https://auth-rnd-gen-ssl.musbe.net
SERVER_STATUS=https://auth-status-ssl.musbe.net
#
# The path of the root certificate file used to ensure a secure
# communication with the authentication servers in SSL mode.
# If not specified, will use musbe-ca.crt found in your
# phpMyAdmin/libraries/auth/swekey.
#
#CA_FILE=/var/http-root/phpmyadmin/libraries/auth/swekey/musbe-ca.crt
#
# If your server receives many login requests, you can enable the random
# token caching to accelerate the authentication process.
# Token caching is enabled by default.
#
#ENABLE_TOKEN_CACHE=0

View File

@@ -1,53 +0,0 @@
<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
*
* @version $Id$
* @package phpMyAdmin
*/
/**
* Gets some core libraries
*/
require_once './libraries/common.inc.php';
$GLOBALS['js_include'][] = 'functions.js';
require_once './libraries/mysql_charsets.lib.php';
PMA_checkParameters(array('new_db'));
/**
* Defines the url to return to in case of error in a sql statement
*/
$err_url = 'main.php?' . PMA_generate_common_url();
/**
* Builds and executes the db creation sql query
*/
$sql_query = 'CREATE DATABASE ' . PMA_backquote($new_db);
if (!empty($db_collation)) {
list($db_charset) = explode('_', $db_collation);
if (in_array($db_charset, $mysql_charsets) && in_array($db_collation, $mysql_collations[$db_charset])) {
$sql_query .= ' DEFAULT' . PMA_generateCharsetQueryPart($db_collation);
}
unset($db_charset, $db_collation);
}
$sql_query .= ';';
$result = PMA_DBI_try_query($sql_query);
if (! $result) {
$message = PMA_Message::rawError(PMA_DBI_getError());
// avoid displaying the not-created db name in header or navi panel
$GLOBALS['db'] = '';
$GLOBALS['table'] = '';
require_once './libraries/header.inc.php';
require_once './main.php';
} else {
$message = PMA_Message::success('strDatabaseHasBeenCreated');
$message->addParam($new_db);
$GLOBALS['db'] = $new_db;
require_once './libraries/header.inc.php';
require_once './' . $cfg['DefaultTabDatabase'];
}
?>

View File

@@ -1,325 +0,0 @@
<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
*
* @version $Id$
* @package phpMyAdmin
*/
/**
* Gets the variables sent or posted to this script, then displays headers
*/
require_once './libraries/common.inc.php';
if (!isset($selected_tbl)) {
require_once './libraries/header.inc.php';
}
/**
* Gets the relations settings
*/
require_once './libraries/relation.lib.php';
require_once './libraries/transformations.lib.php';
$cfgRelation = PMA_getRelationsParam();
/**
* Check parameters
*/
PMA_checkParameters(array('db'));
/**
* Defines the url to return to in case of error in a sql statement
*/
if (strlen($table)) {
$err_url = 'tbl_sql.php?' . PMA_generate_common_url($db, $table);
} else {
$err_url = 'db_sql.php?' . PMA_generate_common_url($db);
}
if ($cfgRelation['commwork']) {
$comment = PMA_getDbComment($db);
/**
* Displays DB comment
*/
if ($comment) {
?>
<p> <?php echo $strDBComment; ?>
<i><?php echo htmlspecialchars($comment); ?></i></p>
<?php
} // end if
}
/**
* Selects the database and gets tables names
*/
PMA_DBI_select_db($db);
$rowset = PMA_DBI_query('SHOW TABLES FROM ' . PMA_backquote($db) . ';', null, PMA_DBI_QUERY_STORE);
$count = 0;
while ($row = PMA_DBI_fetch_assoc($rowset)) {
$myfieldname = 'Tables_in_' . htmlspecialchars($db);
$table = $row[$myfieldname];
$comments = PMA_getComments($db, $table);
if ($count != 0) {
echo '<div style="page-break-before: always;">' . "\n";
} else {
echo '<div>' . "\n";
}
echo '<h2>' . $table . '</h2>' . "\n";
/**
* Gets table informations
*/
// The 'show table' statement works correct since 3.23.03
$num_rows = PMA_Table::sGetStatusInfo($db, $table, 'TABLE_ROWS');
$show_comment = PMA_Table::sGetStatusInfo($db, $table, 'TABLE_COMMENT');
/**
* Gets table keys and retains them
*/
PMA_DBI_select_db($db);
$result = PMA_DBI_query('SHOW KEYS FROM ' . PMA_backquote($table) . ';');
$primary = '';
$indexes = array();
$lastIndex = '';
$indexes_info = array();
$indexes_data = array();
$pk_array = array(); // will be use to emphasis prim. keys in the table
// view
while ($row = PMA_DBI_fetch_assoc($result)) {
// Backups the list of primary keys
if ($row['Key_name'] == 'PRIMARY') {
$primary .= $row['Column_name'] . ', ';
$pk_array[$row['Column_name']] = 1;
}
// Retains keys informations
if ($row['Key_name'] != $lastIndex){
$indexes[] = $row['Key_name'];
$lastIndex = $row['Key_name'];
}
$indexes_info[$row['Key_name']]['Sequences'][] = $row['Seq_in_index'];
$indexes_info[$row['Key_name']]['Non_unique'] = $row['Non_unique'];
if (isset($row['Cardinality'])) {
$indexes_info[$row['Key_name']]['Cardinality'] = $row['Cardinality'];
}
// I don't know what does following column mean....
// $indexes_info[$row['Key_name']]['Packed'] = $row['Packed'];
$indexes_info[$row['Key_name']]['Comment'] = $row['Comment'];
$indexes_data[$row['Key_name']][$row['Seq_in_index']]['Column_name'] = $row['Column_name'];
if (isset($row['Sub_part'])) {
$indexes_data[$row['Key_name']][$row['Seq_in_index']]['Sub_part'] = $row['Sub_part'];
}
} // end while
if ($result) {
PMA_DBI_free_result($result);
}
/**
* Gets fields properties
*/
$result = PMA_DBI_query('SHOW FIELDS FROM ' . PMA_backquote($table) . ';', null, PMA_DBI_QUERY_STORE);
$fields_cnt = PMA_DBI_num_rows($result);
if (PMA_MYSQL_INT_VERSION < 50025) {
// We need this to correctly learn if a TIMESTAMP is NOT NULL, since
// SHOW FULL FIELDS or INFORMATION_SCHEMA incorrectly says NULL
// and SHOW CREATE TABLE says NOT NULL
// http://bugs.mysql.com/20910.
$show_create_table = PMA_DBI_fetch_value(
'SHOW CREATE TABLE ' . PMA_backquote($db) . '.' . PMA_backquote($table),
0, 1);
$analyzed_sql = PMA_SQP_analyze(PMA_SQP_parse($show_create_table));
}
// Check if we can use Relations (Mike Beck)
if (!empty($cfgRelation['relation'])) {
// Find which tables are related with the current one and write it in
// an array
$res_rel = PMA_getForeigners($db, $table);
if (count($res_rel) > 0) {
$have_rel = TRUE;
} else {
$have_rel = FALSE;
}
} else {
$have_rel = FALSE;
} // end if
/**
* Displays the comments of the table if MySQL >= 3.23
*/
if (!empty($show_comment)) {
echo $strTableComments . ': ' . htmlspecialchars($show_comment) . '<br /><br />';
}
/**
* Displays the table structure
*/
?>
<table width="100%" class="print">
<tr><th width="50"><?php echo $strField; ?></th>
<th width="80"><?php echo $strType; ?></th>
<?php /* <th width="50"><?php echo $strAttr; ?></th>*/ ?>
<th width="40"><?php echo $strNull; ?></th>
<th width="70"><?php echo $strDefault; ?></th>
<?php /* <th width="50"><?php echo $strExtra; ?></th>*/ ?>
<?php
if ($have_rel) {
echo ' <th>' . $strLinksTo . '</th>' . "\n";
}
echo ' <th>' . $strComments . '</th>' . "\n";
if ($cfgRelation['mimework']) {
echo ' <th>MIME</th>' . "\n";
}
?>
</tr>
<?php
$odd_row = true;
while ($row = PMA_DBI_fetch_assoc($result)) {
if ($row['Null'] == '') {
$row['Null'] = 'NO';
}
$type = $row['Type'];
// reformat mysql query output - staybyte - 9. June 2001
// loic1: set or enum types: slashes single quotes inside options
if (preg_match('@^(set|enum)\((.+)\)$@i', $type, $tmp)) {
$tmp[2] = substr(preg_replace('@([^,])\'\'@', '\\1\\\'', ',' . $tmp[2]), 1);
$type = $tmp[1] . '(' . str_replace(',', ', ', $tmp[2]) . ')';
$type_nowrap = '';
$binary = 0;
$unsigned = 0;
$zerofill = 0;
} else {
$binary = stristr($row['Type'], 'binary');
$unsigned = stristr($row['Type'], 'unsigned');
$zerofill = stristr($row['Type'], 'zerofill');
$type_nowrap = ' nowrap="nowrap"';
$type = preg_replace('@BINARY@i', '', $type);
$type = preg_replace('@ZEROFILL@i', '', $type);
$type = preg_replace('@UNSIGNED@i', '', $type);
if (empty($type)) {
$type = ' ';
}
}
$strAttribute = ' ';
if ($binary) {
$strAttribute = 'BINARY';
}
if ($unsigned) {
$strAttribute = 'UNSIGNED';
}
if ($zerofill) {
$strAttribute = 'UNSIGNED ZEROFILL';
}
if (!isset($row['Default'])) {
if ($row['Null'] != 'NO') {
$row['Default'] = '<i>NULL</i>';
}
} else {
$row['Default'] = htmlspecialchars($row['Default']);
}
$field_name = htmlspecialchars($row['Field']);
if (PMA_MYSQL_INT_VERSION < 50025
&& ! empty($analyzed_sql[0]['create_table_fields'][$field_name]['type'])
&& $analyzed_sql[0]['create_table_fields'][$field_name]['type'] == 'TIMESTAMP'
&& $analyzed_sql[0]['create_table_fields'][$field_name]['timestamp_not_null']) {
// here, we have a TIMESTAMP that SHOW FULL FIELDS reports as having the
// NULL attribute, but SHOW CREATE TABLE says the contrary. Believe
// the latter.
/**
* @todo merge this logic with the one in tbl_structure.php
* or move it in a function similar to PMA_DBI_get_columns_full()
* but based on SHOW CREATE TABLE because information_schema
* cannot be trusted in this case (MySQL bug)
*/
$row['Null'] = 'NO';
}
?>
<tr class="<?php echo $odd_row ? 'odd' : 'even'; $odd_row = ! $odd_row; ?>">
<td nowrap="nowrap">
<?php
if (isset($pk_array[$row['Field']])) {
echo '<u>' . $field_name . '</u>';
} else {
echo $field_name;
}
?>
</td>
<td<?php echo $type_nowrap; ?> xml:lang="en" dir="ltr"><?php echo $type; ?></td>
<?php /* <td<?php echo $type_nowrap; ?>><?php echo $strAttribute; ?></td>*/ ?>
<td><?php echo (($row['Null'] == 'NO') ? $strNo : $strYes); ?></td>
<td nowrap="nowrap"><?php if (isset($row['Default'])) { echo $row['Default']; } ?></td>
<?php /* <td<?php echo $type_nowrap; ?>><?php echo $row['Extra']; ?></td>*/ ?>
<?php
if ($have_rel) {
echo ' <td>';
if (isset($res_rel[$field_name])) {
echo htmlspecialchars($res_rel[$field_name]['foreign_table'] . ' -> ' . $res_rel[$field_name]['foreign_field']);
}
echo '</td>' . "\n";
}
echo ' <td>';
if (isset($comments[$field_name])) {
echo htmlspecialchars($comments[$field_name]);
}
echo '</td>' . "\n";
if ($cfgRelation['mimework']) {
$mime_map = PMA_getMIME($db, $table, true);
echo ' <td>';
if (isset($mime_map[$field_name])) {
echo htmlspecialchars(str_replace('_', '/', $mime_map[$field_name]['mimetype']));
}
echo '</td>' . "\n";
}
?>
</tr>
<?php
} // end while
PMA_DBI_free_result($result);
$count++;
?>
</table>
</div>
<?php
} //ends main while
/**
* Displays the footer
*/
?>
<script type="text/javascript">
//<![CDATA[
function printPage()
{
document.getElementById('print').style.visibility = 'hidden';
// Do print the page
if (typeof(window.print) != 'undefined') {
window.print();
}
document.getElementById('print').style.visibility = '';
}
//]]>
</script>
<?php
echo '<br /><br /><input type="button" id="print" value="' . $strPrint . '" onclick="printPage()" />';
require_once './libraries/footer.inc.php';
?>

View File

@@ -1,77 +0,0 @@
<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
* dumps a database
*
* @version $Id$
* @uses libraries/db_common.inc.php
* @uses libraries/db_info.inc.php
* @uses libraries/display_export.lib.php
* @uses $tables from libraries/db_info.inc.php
* @package phpMyAdmin
*/
/**
* Gets some core libraries
*/
require_once './libraries/common.inc.php';
// $sub_part is also used in db_info.inc.php to see if we are coming from
// db_export.php, in which case we don't obey $cfg['MaxTableList']
$sub_part = '_export';
require_once './libraries/db_common.inc.php';
$url_query .= '&amp;goto=db_export.php';
require_once './libraries/db_info.inc.php';
/**
* Displays the form
*/
$export_page_title = $strViewDumpDB;
// exit if no tables in db found
if ($num_tables < 1) {
PMA_Message::error('strNoTablesFound')->display();
require './libraries/footer.inc.php';
exit;
} // end if
$checkall_url = 'db_export.php?'
. PMA_generate_common_url($db)
. '&amp;goto=db_export.php';
$multi_values = '<div align="center">';
$multi_values .= '<a href="' . $checkall_url . '" onclick="setSelectOptions(\'dump\', \'table_select[]\', true); return false;">' . $strSelectAll . '</a>
/
<a href="' . $checkall_url . '&amp;unselectall=1" onclick="setSelectOptions(\'dump\', \'table_select[]\', false); return false;">' . $strUnselectAll . '</a><br />';
$multi_values .= '<select name="table_select[]" size="10" multiple="multiple">';
$multi_values .= "\n";
if (!empty($selected_tbl) && empty($table_select)) {
$table_select = $selected_tbl;
}
foreach ($tables as $each_table) {
if (! empty($unselectall)
|| (! empty($table_select) && !in_array($each_table['Name'], $table_select))) {
$is_selected = '';
} else {
$is_selected = ' selected="selected"';
}
$table_html = htmlspecialchars($each_table['Name']);
$multi_values .= ' <option value="' . $table_html . '"'
. $is_selected . '>'
. str_replace(' ', '&nbsp;', $table_html) . '</option>' . "\n";
} // end for
$multi_values .= "\n";
$multi_values .= '</select></div><br />';
$export_type = 'database';
require_once './libraries/display_export.lib.php';
/**
* Displays the footer
*/
require_once './libraries/footer.inc.php';
?>

View File

@@ -1,33 +0,0 @@
<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
*
* @version $Id$
* @package phpMyAdmin
*/
/**
*
*/
require_once './libraries/common.inc.php';
/**
* Load mootools for upload progress bar
*/
$GLOBALS['js_include'][] = 'mootools.js';
/**
* Gets tables informations and displays top links
*/
require './libraries/db_common.inc.php';
require './libraries/db_info.inc.php';
$import_type = 'database';
require './libraries/display_import.lib.php';
/**
* Displays the footer
*/
require './libraries/footer.inc.php';
?>

View File

@@ -1,690 +0,0 @@
<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
* handles miscellaneous db operations:
* - move/rename
* - copy
* - changing collation
* - changing comment
* - adding tables
* - viewing PDF schemas
*
* @version $Id$
* @package phpMyAdmin
*/
/**
* requirements
*/
require_once './libraries/common.inc.php';
require_once './libraries/Table.class.php';
require_once './libraries/mysql_charsets.lib.php';
// add blobstreaming library functions
require_once "./libraries/blobstreaming.lib.php";
/**
* Rename/move or copy database
*/
if (strlen($db) && (! empty($db_rename) || ! empty($db_copy))) {
if (! empty($db_rename)) {
$move = true;
} else {
$move = false;
}
if (!isset($newname) || !strlen($newname)) {
$message = PMA_Message::error('strDatabaseEmpty');
} else {
$sql_query = ''; // in case target db exists
$_error = false;
if ($move ||
(isset($create_database_before_copying) && $create_database_before_copying)) {
// lower_case_table_names=1 `DB` becomes `db`
$lower_case_table_names = PMA_DBI_fetch_value('SHOW VARIABLES LIKE "lower_case_table_names"', 0, 1);
if ($lower_case_table_names === '1') {
$newname = strtolower($newname);
}
$local_query = 'CREATE DATABASE ' . PMA_backquote($newname);
if (isset($db_collation)) {
$local_query .= ' DEFAULT' . PMA_generateCharsetQueryPart($db_collation);
}
$local_query .= ';';
$sql_query = $local_query;
PMA_DBI_query($local_query);
// rebuild the database list because PMA_Table::moveCopy
// checks in this list if the target db exists
$GLOBALS['pma']->databases->build();
}
if (isset($GLOBALS['add_constraints'])) {
$GLOBALS['sql_constraints_query_full_db'] = '';
}
$tables_full = PMA_DBI_get_tables_full($db);
$views = array();
foreach ($tables_full as $each_table => $tmp) {
// to be able to rename a db containing views, we
// first collect in $views all the views we find and we
// will handle them after the tables
/**
* @todo support a view of a view
*/
if (PMA_Table::isView($db, $each_table)) {
$views[] = $each_table;
continue;
}
$back = $sql_query;
$sql_query = '';
// value of $what for this table only
$this_what = $what;
// do not copy the data from a Merge table
// note: on the calling FORM, 'data' means 'structure and data'
if ($tables_full[$each_table]['Engine'] == 'MRG_MyISAM') {
if ($this_what == 'data') {
$this_what = 'structure';
}
if ($this_what == 'dataonly') {
$this_what = 'nocopy';
}
}
if ($this_what != 'nocopy') {
// keep the triggers from the original db+table
// (third param is empty because delimiters are only intended
// for importing via the mysql client or our Import feature)
$triggers = PMA_DBI_get_triggers($db, $each_table, '');
if (! PMA_Table::moveCopy($db, $each_table, $newname, $each_table,
isset($this_what) ? $this_what : 'data', $move, 'db_copy'))
{
$_error = true;
// $sql_query is filled by PMA_Table::moveCopy()
$sql_query = $back . $sql_query;
break;
}
// apply the triggers to the destination db+table
if ($triggers) {
PMA_DBI_select_db($newname);
foreach ($triggers as $trigger) {
PMA_DBI_query($trigger['create']);
}
unset($trigger);
}
unset($triggers);
if (isset($GLOBALS['add_constraints'])) {
$GLOBALS['sql_constraints_query_full_db'] .= $GLOBALS['sql_constraints_query'];
unset($GLOBALS['sql_constraints_query']);
}
}
// $sql_query is filled by PMA_Table::moveCopy()
$sql_query = $back . $sql_query;
} // end (foreach)
unset($each_table);
// handle the views
if (! $_error) {
foreach ($views as $view) {
if (! PMA_Table::moveCopy($db, $view, $newname, $view,
'structure', $move, 'db_copy')) {
$_error = true;
break;
}
}
}
unset($view, $views);
// now that all tables exist, create all the accumulated constraints
if (! $_error && isset($GLOBALS['add_constraints'])) {
/**
* @todo this works with mysqli but not with mysql, because
* mysql extension does not accept more than one statement; maybe
* interface with the sql import plugin that handles statement delimiter
*/
PMA_DBI_query($GLOBALS['sql_constraints_query_full_db']);
// and prepare to display them
$GLOBALS['sql_query'] .= "\n" . $GLOBALS['sql_constraints_query_full_db'];
unset($GLOBALS['sql_constraints_query_full_db']);
}
if (PMA_MYSQL_INT_VERSION >= 50000) {
// here I don't use DELIMITER because it's not part of the
// language; I have to send each statement one by one
// to avoid selecting alternatively the current and new db
// we would need to modify the CREATE definitions to qualify
// the db name
$procedure_names = PMA_DBI_get_procedures_or_functions($db, 'PROCEDURE');
if ($procedure_names) {
foreach($procedure_names as $procedure_name) {
PMA_DBI_select_db($db);
$tmp_query = PMA_DBI_get_definition($db, 'PROCEDURE', $procedure_name);
// collect for later display
$GLOBALS['sql_query'] .= "\n" . $tmp_query;
PMA_DBI_select_db($newname);
PMA_DBI_query($tmp_query);
}
}
$function_names = PMA_DBI_get_procedures_or_functions($db, 'FUNCTION');
if ($function_names) {
foreach($function_names as $function_name) {
PMA_DBI_select_db($db);
$tmp_query = PMA_DBI_get_definition($db, 'FUNCTION', $function_name);
// collect for later display
$GLOBALS['sql_query'] .= "\n" . $tmp_query;
PMA_DBI_select_db($newname);
PMA_DBI_query($tmp_query);
}
}
}
// go back to current db, just in case
PMA_DBI_select_db($db);
// Duplicate the bookmarks for this db (done once for each db)
if (! $_error && $db != $newname) {
$get_fields = array('user', 'label', 'query');
$where_fields = array('dbase' => $db);
$new_fields = array('dbase' => $newname);
PMA_Table::duplicateInfo('bookmarkwork', 'bookmark', $get_fields,
$where_fields, $new_fields);
}
if (! $_error && $move) {
/**
* cleanup pmadb stuff for this db
*/
require_once './libraries/relation_cleanup.lib.php';
PMA_relationsCleanupDatabase($db);
// if someday the RENAME DATABASE reappears, do not DROP
$local_query = 'DROP DATABASE ' . PMA_backquote($db) . ';';
$sql_query .= "\n" . $local_query;
PMA_DBI_query($local_query);
$message = PMA_Message::success('strRenameDatabaseOK');
$message->addParam($db);
$message->addParam($newname);
} elseif (! $_error) {
$message = PMA_Message::success('strCopyDatabaseOK');
$message->addParam($db);
$message->addParam($newname);
}
$reload = true;
/* Change database to be used */
if (! $_error && $move) {
$db = $newname;
} elseif (! $_error) {
if (isset($switch_to_new) && $switch_to_new == 'true') {
PMA_setCookie('pma_switch_to_new', 'true');
$db = $newname;
} else {
PMA_setCookie('pma_switch_to_new', '');
}
}
if ($_error && ! isset($message)) {
$message = PMA_Message::error();
}
}
}
/*
* Enable/Disable/Repair BLOB Repository Monitoring for current database
*/
if (strlen($db) > 0 && !empty($db_blob_streaming_op))
{
// load PMA_Config
$PMA_Config = $_SESSION['PMA_Config'];
if (!empty($PMA_Config))
{
if ($PMA_Config->get('PBXT_NAME') !== strtolower($db))
{
// if Blobstreaming plugins exist, begin checking for Blobstreaming tables
if ($PMA_Config->get('BLOBSTREAMING_PLUGINS_EXIST'))
{
$bs_tables = $PMA_Config->get('BLOBSTREAMABLE_DATABASES');
$bs_tables = $bs_tables[$db];
$oneBSTableExists = FALSE;
// check if at least one blobstreaming table exists
foreach ($bs_tables as $table_key=>$tbl)
if ($bs_tables[$table_key]['Exists'])
{
$oneBSTableExists = TRUE;
break;
}
switch ($db_blob_streaming_op)
{
// enable BLOB repository monitoring
case "enable":
// if blobstreaming tables do not exist, create them
if (!$oneBSTableExists)
PMA_BS_CreateTables($db);
break;
// disable BLOB repository monitoring
case "disable":
// if at least one blobstreaming table exists, execute drop
if ($oneBSTableExists)
PMA_BS_DropTables($db);
break;
// repair BLOB repository
case "repair":
// check if a blobstreaming table is missing
foreach ($bs_tables as $table_key=>$tbl)
if (!$bs_tables[$table_key]['Exists'])
{
PMA_DBI_select_db($db);
PMA_DBI_query(PMA_BS_GetTableStruct($table_key));
}
}
// refresh side menu
PMA_sendHeaderLocation($cfg['PmaAbsoluteUri'] . 'db_operations.php?' . PMA_generate_common_url ('','', '&') . (isset($db) ? '&db=' . urlencode($db) : '') . (isset($token) ? '&token=' . urlencode($token) : '') . (isset($goto) ? '&goto=' . urlencode($goto) : '') . 'reload=1&purge=1');
} // end if ($PMA_Config->get('BLOBSTREAMING_PLUGINS_EXIST'))
} // end if ($PMA_Config->get('PBXT_NAME') !== strtolower($db))
}
}
/**
* Settings for relations stuff
*/
require_once './libraries/relation.lib.php';
$cfgRelation = PMA_getRelationsParam();
/**
* Check if comments were updated
* (must be done before displaying the menu tabs)
*/
if (isset($_REQUEST['comment'])) {
PMA_setDbComment($db, $comment);
}
/**
* Prepares the tables list if the user where not redirected to this script
* because there is no table in the database ($is_info is true)
*/
if (empty($is_info)) {
require './libraries/db_common.inc.php';
$url_query .= '&amp;goto=db_operations.php';
// Gets the database structure
$sub_part = '_structure';
require './libraries/db_info.inc.php';
echo "\n";
if (isset($message)) {
PMA_showMessage($message, $sql_query);
unset($message);
}
}
$db_collation = PMA_getDbCollation($db);
if ($db == 'information_schema') {
$is_information_schema = true;
} else {
$is_information_schema = false;
}
if (!$is_information_schema) {
require './libraries/display_create_table.lib.php';
if ($cfgRelation['commwork']) {
/**
* database comment
*/
?>
<form method="post" action="db_operations.php">
<?php echo PMA_generate_common_hidden_inputs($db); ?>
<fieldset>
<legend>
<?php echo PMA_getIcon('b_comment.png', $strDBComment, false, true); ?>
</legend>
<input type="text" name="comment" class="textfield" size="30"
value="<?php
echo htmlspecialchars(PMA_getDBComment($db)); ?>" />
<input type="submit" value="<?php echo $strGo; ?>" />
</fieldset>
</form>
<?php
}
/**
* rename database
*/
?>
<form method="post" action="db_operations.php"
onsubmit="return emptyFormElements(this, 'newname')">
<?php
if (isset($db_collation)) {
echo '<input type="hidden" name="db_collation" value="' . $db_collation
.'" />' . "\n";
}
?>
<input type="hidden" name="what" value="data" />
<input type="hidden" name="db_rename" value="true" />
<?php echo PMA_generate_common_hidden_inputs($db); ?>
<fieldset>
<legend>
<?php
if ($cfg['PropertiesIconic']) {
echo '<img class="icon" src="' . $pmaThemeImage . 'b_edit.png"'
.' alt="" width="16" height="16" />';
}
echo $strDBRename . ':';
?>
</legend>
<input type="text" name="newname" size="30" class="textfield" value="" />
<?php
echo '(' . $strCommand . ': ';
/**
* @todo (see explanations above in a previous todo)
*/
//if (PMA_MYSQL_INT_VERSION >= XYYZZ) {
// echo 'RENAME DATABASE';
//} else {
echo 'INSERT INTO ... SELECT';
//}
echo ')'; ?>
<input type="submit" value="<?php echo $strGo; ?>" onclick="return confirmLink(this, 'CREATE DATABASE ... <?php echo $strAndThen; ?> DROP DATABASE <?php echo PMA_jsFormat($db); ?>')" />
</fieldset>
</form>
<?php
/**
* Copy database
*/
?>
<form method="post" action="db_operations.php"
onsubmit="return emptyFormElements(this, 'newname')">
<?php
if (isset($db_collation)) {
echo '<input type="hidden" name="db_collation" value="' . $db_collation
.'" />' . "\n";
}
echo '<input type="hidden" name="db_copy" value="true" />' . "\n";
echo PMA_generate_common_hidden_inputs($db);
?>
<fieldset>
<legend>
<?php
if ($cfg['PropertiesIconic']) {
echo '<img class="icon" src="' . $pmaThemeImage . 'b_edit.png"'
.' alt="" width="16" height="16" />';
}
echo $strDBCopy . ':';
$drop_clause = 'DROP TABLE / DROP VIEW';
?>
</legend>
<input type="text" name="newname" size="30" class="textfield" value="" /><br />
<?php
$choices = array(
'structure' => $strStrucOnly,
'data' => $strStrucData,
'dataonly' => $strDataOnly);
PMA_display_html_radio('what', $choices, 'data', true);
unset($choices);
?>
<input type="checkbox" name="create_database_before_copying" value="1"
id="checkbox_create_database_before_copying"
style="vertical-align: middle" checked="checked" />
<label for="checkbox_create_database_before_copying">
<?php echo $strCreateDatabaseBeforeCopying; ?></label><br />
<input type="checkbox" name="drop_if_exists" value="true"
id="checkbox_drop" style="vertical-align: middle" />
<label for="checkbox_drop"><?php echo sprintf($strAddClause, $drop_clause); ?></label><br />
<input type="checkbox" name="sql_auto_increment" value="1" checked="checked"
id="checkbox_auto_increment" style="vertical-align: middle" />
<label for="checkbox_auto_increment">
<?php echo $strAddAutoIncrement; ?></label><br />
<input type="checkbox" name="add_constraints" value="1"
id="checkbox_constraints" style="vertical-align: middle" />
<label for="checkbox_constraints">
<?php echo $strAddConstraints; ?></label><br />
<?php
unset($drop_clause);
if (isset($_COOKIE) && isset($_COOKIE['pma_switch_to_new'])
&& $_COOKIE['pma_switch_to_new'] == 'true') {
$pma_switch_to_new = 'true';
}
?>
<input type="checkbox" name="switch_to_new" value="true"
id="checkbox_switch"
<?php echo ((isset($pma_switch_to_new) && $pma_switch_to_new == 'true') ? ' checked="checked"' : ''); ?>
style="vertical-align: middle" />
<label for="checkbox_switch"><?php echo $strSwitchToDatabase; ?></label>
</fieldset>
<fieldset class="tblFooters">
<input type="submit" name="submit_copy" value="<?php echo $strGo; ?>" />
</fieldset>
</form>
<?php
/*
* BLOB streaming support
*/
// load PMA_Config
$PMA_Config = $_SESSION['PMA_Config'];
// if all blobstreaming plugins exist, begin checking for blobstreaming tables
if (!empty($PMA_Config))
{
if ($PMA_Config->get('PBXT_NAME') !== strtolower($db))
{
if ($PMA_Config->get('BLOBSTREAMING_PLUGINS_EXIST'))
{
$bs_tables = $PMA_Config->get('BLOBSTREAMABLE_DATABASES');
$bs_tables = $bs_tables[$db];
$oneBSTableExists = FALSE;
$allBSTablesExist = TRUE;
// first check that all blobstreaming tables do not exist
foreach ($bs_tables as $table_key=>$tbl)
if ($bs_tables[$table_key]['Exists'])
$oneBSTableExists = TRUE;
else
$allBSTablesExist = FALSE;
?>
<form method="post" action="./db_operations.php">
<?php echo PMA_generate_common_hidden_inputs($db); ?>
<fieldset>
<legend>
<?php echo PMA_getIcon('b_edit.png', $strBLOBRepository, false, true); ?>
</legend>
<?php echo $strStatus; ?>:
<?php
// if the blobstreaming tables exist, provide option to disable the BLOB repository
if ($allBSTablesExist)
{
?>
<?php echo $strBLOBRepositoryEnabled; ?>
</fieldset>
<fieldset class="tblFooters">
<input type="hidden" name="db_blob_streaming_op" value="disable" />
<input type="submit" onclick="return confirmDisableRepository('<?php echo $db; ?>');" value="<?php echo $strBLOBRepositoryDisable; ?>" />
</fieldset>
<?php
}
else
{
// if any of the blobstreaming tables are missing, provide option to repair the BLOB repository
if ($oneBSTableExists && !$allBSTablesExist)
{
?>
<?php echo $strBLOBRepositoryDamaged; ?>
</fieldset>
<fieldset class="tblFooters">
<input type="hidden" name="db_blob_streaming_op" value="repair" />
<input type="submit" value="<?php echo $strBLOBRepositoryRepair; ?>" />
</fieldset>
<?php
}
// if none of the blobstreaming tables exist, provide option to enable BLOB repository
else
{
?>
<?php echo $strBLOBRepositoryDisabled; ?>
</fieldset>
<fieldset class="tblFooters">
<input type="hidden" name="db_blob_streaming_op" value="enable" />
<input type="submit" value="<?php echo $strBLOBRepositoryEnable; ?>" />
</fieldset>
<?php
}
} // end if ($allBSTablesExist)
?>
</form>
<?php
} // end if ($PMA_Config->get('BLOBSTREAMING_PLUGINS_EXIST'))
} // end if ($PMA_Config->get('PBXT_NAME') !== strtolower($db))
}
/**
* Change database charset
*/
echo '<form method="post" action="./db_operations.php">' . "\n"
. PMA_generate_common_hidden_inputs($db, $table)
. '<fieldset>' . "\n"
. ' <legend>';
if ($cfg['PropertiesIconic']) {
echo '<img class="icon" src="' . $pmaThemeImage . 's_asci.png"'
.' alt="" width="16" height="16" />';
}
echo ' <label for="select_db_collation">' . $strCollation . ':</label>' . "\n"
. ' </legend>' . "\n"
. PMA_generateCharsetDropdownBox(PMA_CSDROPDOWN_COLLATION,
'db_collation', 'select_db_collation', $db_collation, false, 3)
. ' <input type="submit" name="submitcollation"'
. ' value="' . $strGo . '" style="vertical-align: middle" />' . "\n"
. '</fieldset>' . "\n"
. '</form>' . "\n";
if ($num_tables > 0
&& !$cfgRelation['allworks'] && $cfg['PmaNoRelation_DisableWarning'] == false) {
$message = PMA_Message::notice('strRelationNotWorking');
$message->addParam('<a href="' . $cfg['PmaAbsoluteUri'] . 'chk_rel.php?' . $url_query . '">', false);
$message->addParam('</a>', false);
/* Show error if user has configured something, notice elsewhere */
if (!empty($cfg['Servers'][$server]['pmadb'])) {
$message->isError(true);
}
$message->display();
} // end if
} // end if (!$is_information_schema)
// not sure about displaying the PDF dialog in case db is information_schema
if ($cfgRelation['pdfwork'] && $num_tables > 0) { ?>
<!-- Work on PDF Pages -->
<?php
// We only show this if we find something in the new pdf_pages table
$test_query = '
SELECT *
FROM ' . PMA_backquote($GLOBALS['cfgRelation']['db']) . '.' . PMA_backquote($cfgRelation['pdf_pages']) . '
WHERE db_name = \'' . PMA_sqlAddslashes($db) . '\'';
$test_rs = PMA_query_as_controluser($test_query, null, PMA_DBI_QUERY_STORE);
if ($test_rs && PMA_DBI_num_rows($test_rs) > 0) { ?>
<!-- PDF schema -->
<form method="post" action="pdf_schema.php">
<fieldset>
<legend>
<?php
echo PMA_generate_common_hidden_inputs($db);
if ($cfg['PropertiesIconic']) {
echo '<img class="icon" src="' . $pmaThemeImage . 'b_view.png"'
.' alt="" width="16" height="16" />';
}
echo $strDisplayPDF;
?>:
</legend>
<label for="pdf_page_number_opt"><?php echo $strPageNumber; ?></label>
<select name="pdf_page_number" id="pdf_page_number_opt">
<?php
while ($pages = @PMA_DBI_fetch_assoc($test_rs)) {
echo ' <option value="' . $pages['page_nr'] . '">'
. $pages['page_nr'] . ': ' . htmlspecialchars($pages['page_descr']) . '</option>' . "\n";
} // end while
PMA_DBI_free_result($test_rs);
unset($test_rs);
?>
</select><br />
<input type="checkbox" name="show_grid" id="show_grid_opt" />
<label for="show_grid_opt"><?php echo $strShowGrid; ?></label><br />
<input type="checkbox" name="show_color" id="show_color_opt"
checked="checked" />
<label for="show_color_opt"><?php echo $strShowColor; ?></label><br />
<input type="checkbox" name="show_table_dimension" id="show_table_dim_opt" />
<label for="show_table_dim_opt"><?php echo $strShowTableDimension; ?>
</label><br />
<input type="checkbox" name="all_tab_same_wide" id="all_tab_same_wide" />
<label for="all_tab_same_wide"><?php echo $strAllTableSameWidth; ?>
</label><br />
<input type="checkbox" name="with_doc" id="with_doc" checked="checked" />
<label for="with_doc"><?php echo $strDataDict; ?></label><br />
<input type="checkbox" name="show_keys" id="show_keys" />
<label for="show_keys"><?php echo $strShowKeys; ?></label><br />
<label for="orientation_opt"><?php echo $strShowDatadictAs; ?></label>
<select name="orientation" id="orientation_opt">
<option value="L"><?php echo $strLandscape;?></option>
<option value="P"><?php echo $strPortrait;?></option>
</select><br />
<label for="paper_opt"><?php echo $strPaperSize; ?></label>
<select name="paper" id="paper_opt">
<?php
foreach ($cfg['PDFPageSizes'] AS $key => $val) {
echo '<option value="' . $val . '"';
if ($val == $cfg['PDFDefaultPageSize']) {
echo ' selected="selected"';
}
echo ' >' . $val . '</option>' . "\n";
}
?>
</select>
</fieldset>
<fieldset class="tblFooters">
<input type="submit" value="<?php echo $strGo; ?>" />
</fieldset>
</form>
<?php
} // end if
echo '<br /><a href="pdf_pages.php?' . $url_query . '">';
if ($cfg['PropertiesIconic']) {
echo '<img class="icon" src="' . $pmaThemeImage . 'b_edit.png"'
.' alt="" width="16" height="16" />';
}
echo $strEditPDFPages . '</a>';
} // end if
/**
* Displays the footer
*/
require_once './libraries/footer.inc.php';
?>

View File

@@ -1,270 +0,0 @@
<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
*
* @version $Id$
* @package phpMyAdmin
*/
/**
*
*/
require_once './libraries/common.inc.php';
/**
* Gets the variables sent or posted to this script, then displays headers
*/
$print_view = true;
require_once './libraries/header.inc.php';
PMA_checkParameters(array('db'));
/**
* Defines the url to return to in case of error in a sql statement
*/
$err_url = 'db_sql.php?' . PMA_generate_common_url($db);
/**
* Settings for relations stuff
*/
require_once './libraries/relation.lib.php';
$cfgRelation = PMA_getRelationsParam();
/**
* Gets the list of the table in the current db and informations about these
* tables if possible
*
* @todo merge this speedup _optionaly_ into PMA_DBI_get_tables_full()
*
// staybyte: speedup view on locked tables - 11 June 2001
// Special speedup for newer MySQL Versions (in 4.0 format changed)
if ($cfg['SkipLockedTables'] == true) {
$result = PMA_DBI_query('SHOW OPEN TABLES FROM ' . PMA_backquote($db) . ';');
// Blending out tables in use
if ($result != false && PMA_DBI_num_rows($result) > 0) {
while ($tmp = PMA_DBI_fetch_row($result)) {
// if in use memorize tablename
if (preg_match('@in_use=[1-9]+@i', $tmp[0])) {
$sot_cache[$tmp[0]] = true;
}
}
PMA_DBI_free_result($result);
if (isset($sot_cache)) {
$result = PMA_DBI_query('SHOW TABLES FROM ' . PMA_backquote($db) . ';', null, PMA_DBI_QUERY_STORE);
if ($result != false && PMA_DBI_num_rows($result) > 0) {
while ($tmp = PMA_DBI_fetch_row($result)) {
if (!isset($sot_cache[$tmp[0]])) {
$sts_result = PMA_DBI_query('SHOW TABLE STATUS FROM ' . PMA_backquote($db) . ' LIKE \'' . addslashes($tmp[0]) . '\';');
$sts_tmp = PMA_DBI_fetch_assoc($sts_result);
$tables[] = $sts_tmp;
} else { // table in use
$tables[] = array('Name' => $tmp[0]);
}
}
PMA_DBI_free_result($result);
$sot_ready = true;
}
}
unset($tmp, $result);
}
}
if (! isset($sot_ready)) {
$result = PMA_DBI_query('SHOW TABLE STATUS FROM ' . PMA_backquote($db) . ';');
if (PMA_DBI_num_rows($result) > 0) {
while ($sts_tmp = PMA_DBI_fetch_assoc($result)) {
$tables[] = $sts_tmp;
}
PMA_DBI_free_result($result);
unset($res);
}
}
*/
/**
* If there is at least one table, displays the printer friendly view, else
* an error message
*/
$tables = PMA_DBI_get_tables_full($db);
$num_tables = count($tables);
echo '<br />';
// 1. No table
if ($num_tables == 0) {
echo $strNoTablesFound;
}
// 2. Shows table informations on mysql >= 3.23.03 - staybyte - 11 June 2001
else {
?>
<table>
<thead>
<tr>
<th><?php echo $strTable; ?></th>
<th><?php echo $strRecords; ?></th>
<th><?php echo $strType; ?></th>
<?php
if ($cfg['ShowStats']) {
echo '<th>' . $strSize . '</th>';
}
?>
<th><?php echo $strComments; ?></th>
</tr>
</thead>
<tbody>
<?php
$sum_entries = $sum_size = 0;
$odd_row = true;
foreach ($tables as $sts_data) {
if (strtoupper($sts_data['ENGINE']) == 'MRG_MYISAM'
|| strtoupper($sts_data['ENGINE']) == 'FEDERATED') {
$merged_size = true;
} else {
$merged_size = false;
}
$sum_entries += $sts_data['TABLE_ROWS'];
?>
<tr class="<?php echo $odd_row ? 'odd' : 'even'; ?>">
<th>
<?php echo htmlspecialchars($sts_data['TABLE_NAME']); ?>
</th>
<?php
if (isset($sts_data['TABLE_ROWS'])) {
?>
<td align="right">
<?php
if ($merged_size) {
echo '<i>' . PMA_formatNumber($sts_data['TABLE_ROWS'], 0) . '</i>' . "\n";
} else {
echo PMA_formatNumber($sts_data['TABLE_ROWS'], 0) . "\n";
}
?>
</td>
<td nowrap="nowrap">
<?php echo $sts_data['ENGINE']; ?>
</td>
<?php
if ($cfg['ShowStats']) {
$tblsize = $sts_data['Data_length'] + $sts_data['Index_length'];
$sum_size += $tblsize;
list($formated_size, $unit) = PMA_formatByteDown($tblsize, 3, 1);
?>
<td align="right" nowrap="nowrap">
<?php echo $formated_size . ' ' . $unit; ?>
</td>
<?php
} // end if
} else {
?>
<td colspan="3" align="center">
<?php echo $strInUse; ?>
</td>
<?php
}
?>
<td>
<?php
if (! empty($sts_data['Comment'])) {
echo htmlspecialchars($sts_data['Comment']);
$needs_break = '<br />';
} else {
$needs_break = '';
}
if (! empty($sts_data['Create_time'])
|| ! empty($sts_data['Update_time'])
|| ! empty($sts_data['Check_time'])) {
echo $needs_break;
?>
<table width="100%">
<?php
if (! empty($sts_data['Create_time'])) {
?>
<tr>
<td align="right"><?php echo $strStatCreateTime . ': '; ?></td>
<td align="right"><?php echo PMA_localisedDate(strtotime($sts_data['Create_time'])); ?></td>
</tr>
<?php
}
if (! empty($sts_data['Update_time'])) {
?>
<tr>
<td align="right"><?php echo $strStatUpdateTime . ': '; ?></td>
<td align="right"><?php echo PMA_localisedDate(strtotime($sts_data['Update_time'])); ?></td>
</tr>
<?php
}
if (! empty($sts_data['Check_time'])) {
?>
<tr>
<td align="right"><?php echo $strStatCheckTime . ': '; ?></td>
<td align="right"><?php echo PMA_localisedDate(strtotime($sts_data['Check_time'])); ?></td>
</tr>
<?php
}
?>
</table>
<?php
}
?>
</td>
</tr>
<?php
}
?>
<tr>
<th align="center">
<?php echo sprintf($strTables, PMA_formatNumber($num_tables, 0)); ?>
</th>
<th align="right" nowrap="nowrap">
<?php echo PMA_formatNumber($sum_entries, 0); ?>
</th>
<th align="center">
--
</th>
<?php
if ($cfg['ShowStats']) {
list($sum_formated, $unit) = PMA_formatByteDown($sum_size, 3, 1);
?>
<th align="right" nowrap="nowrap">
<?php echo $sum_formated . ' ' . $unit; ?>
</th>
<?php
}
?>
<th></th>
</tr>
</tbody>
</table>
<?php
}
/**
* Displays the footer
*/
?>
<script type="text/javascript">
//<![CDATA[
function printPage()
{
// Do print the page
if (typeof(window.print) != 'undefined') {
window.print();
}
}
//]]>
</script>
<br /><br />
<input type="button" class="print_ignore"
id="print" value="<?php echo $strPrint; ?>" onclick="printPage()" />
<?php
require_once './libraries/footer.inc.php';
?>

View File

@@ -1,945 +0,0 @@
<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
* query by example the whole database
*
* @version $Id$
* @package phpMyAdmin
*/
/**
* requirements
*/
require_once './libraries/common.inc.php';
require_once './libraries/Table.class.php';
require_once './libraries/relation.lib.php';
/**
* Gets the relation settings
*/
$cfgRelation = PMA_getRelationsParam();
/**
* A query has been submitted -> execute it, else display the headers
*/
if (isset($_REQUEST['submit_sql']) && ! empty($sql_query)) {
$goto = 'db_sql.php';
$zero_rows = htmlspecialchars($GLOBALS['strSuccess']);
require './sql.php';
exit;
} else {
$sub_part = '_qbe';
require './libraries/db_common.inc.php';
$url_query .= '&amp;goto=db_qbe.php';
$url_params['goto'] = 'db_qbe.php';
require './libraries/db_info.inc.php';
}
if (isset($_REQUEST['submit_sql'])
&& ! preg_match('@^SELECT@i', $sql_query)) {
PMA_Message::warning('strHaveToShow')->display();
}
/**
* Initialize some variables
*/
$col_cnt = PMA_ifSetOr($_REQUEST['col_cnt'], 3, 'numeric');
$add_col = PMA_ifSetOr($_REQUEST['add_col'], 0, 'numeric');
$add_row = PMA_ifSetOr($_REQUEST['add_row'], 0, 'numeric');
$rows = PMA_ifSetOr($_REQUEST['rows'], 0, 'numeric');
$ins_col = PMA_ifSetOr($_REQUEST['ins_col'], null, 'array');
$del_col = PMA_ifSetOr($_REQUEST['del_col'], null, 'array');
$prev_criteria = isset($_REQUEST['prev_criteria'])
? $_REQUEST['prev_criteria']
: array();
$criteria = isset($_REQUEST['criteria'])
? $_REQUEST['criteria']
: array_fill(0, $col_cnt, '');
$ins_row = isset($_REQUEST['ins_row'])
? $_REQUEST['ins_row']
: array_fill(0, $col_cnt, '');
$del_row = isset($_REQUEST['del_row'])
? $_REQUEST['del_row']
: array_fill(0, $col_cnt, '');
$and_or_row = isset($_REQUEST['and_or_row'])
? $_REQUEST['and_or_row']
: array_fill(0, $col_cnt, '');
$and_or_col = isset($_REQUEST['and_or_col'])
? $_REQUEST['and_or_col']
: array_fill(0, $col_cnt, '');
// minimum width
$form_column_width = 12;
$col = max($col_cnt + $add_col, 0);
$row = max($rows + $add_row, 0);
// The tables list sent by a previously submitted form
if (PMA_isValid($_REQUEST['TableList'], 'array')) {
foreach ($_REQUEST['TableList'] as $each_table) {
$tbl_names[$each_table] = ' selected="selected"';
}
} // end if
// this was a work in progress, deactivated for now
//$columns = PMA_DBI_get_columns_full($GLOBALS['db']);
//$tables = PMA_DBI_get_columns_full($GLOBALS['db']);
/**
* Prepares the form
*/
$tbl_result = PMA_DBI_query('SHOW TABLES FROM ' . PMA_backquote($db) . ';', null, PMA_DBI_QUERY_STORE);
$tbl_result_cnt = PMA_DBI_num_rows($tbl_result);
if (0 == $tbl_result_cnt) {
PMA_Message::error('strNoTablesFound')->display();
require_once './libraries/footer.inc.php';
exit;
}
// The tables list gets from MySQL
while (list($tbl) = PMA_DBI_fetch_row($tbl_result)) {
$fld_results = PMA_DBI_get_fields($db, $tbl);
if (empty($tbl_names[$tbl]) && !empty($_REQUEST['TableList'])) {
$tbl_names[$tbl] = '';
} else {
$tbl_names[$tbl] = ' selected="selected"';
} // end if
// The fields list per selected tables
if ($tbl_names[$tbl] == ' selected="selected"') {
$each_table = PMA_backquote($tbl);
$fld[] = $each_table . '.*';
foreach ($fld_results as $each_field) {
$each_field = $each_table . '.' . PMA_backquote($each_field['Field']);
$fld[] = $each_field;
// increase the width if necessary
$form_column_width = max(strlen($each_field), $form_column_width);
} // end foreach
} // end if
} // end while
PMA_DBI_free_result($tbl_result);
// largest width found
$realwidth = $form_column_width . 'ex';
/**
* Displays the Query by example form
*/
/**
* Enter description here...
*
* @param array $columns
* @param numeric $column_number
* @param string $selected
*/
function showColumnSelectCell($columns, $column_number, $selected = '')
{
?>
<td align="center">
<select name="Field[<?php echo $column_number; ?>]" size="1">
<option value="">&nbsp;</option>
<?php
foreach ($columns as $column) {
if ($column === $selected) {
$sel = ' selected="selected"';
} else {
$sel = '';
}
echo '<option value="' . htmlspecialchars($column) . '"' . $sel . '>'
. str_replace(' ', '&nbsp;', htmlspecialchars($column)) . '</option>' . "\n";
}
?>
</select>
</td>
<?php
}
?>
<form action="db_qbe.php" method="post">
<fieldset>
<table class="data" style="width: 100%;">
<tr class="odd noclick">
<th><?php echo $strField; ?>:</th>
<?php
$z = 0;
for ($x = 0; $x < $col; $x++) {
if (isset($ins_col[$x]) && $ins_col[$x] == 'on') {
showColumnSelectCell($fld, $z);
$z++;
}
if (! empty($del_col) && isset($del_col[$x]) && $del_col[$x] == 'on') {
continue;
}
$selected = '';
if (isset($Field[$x])) {
$selected = $Field[$x];
$curField[$z] = $Field[$x];
}
showColumnSelectCell($fld, $z, $selected);
$z++;
} // end for
?>
</tr>
<!-- Sort row -->
<tr class="even noclick">
<th><?php echo $strSort; ?>:</th>
<?php
$z = 0;
for ($x = 0; $x < $col; $x++) {
if (!empty($ins_col) && isset($ins_col[$x]) && $ins_col[$x] == 'on') {
?>
<td align="center">
<select style="width: <?php echo $realwidth; ?>" name="Sort[<?php echo $z; ?>]" size="1">
<option value="">&nbsp;</option>
<option value="ASC"><?php echo $strAscending; ?></option>
<option value="DESC"><?php echo $strDescending; ?></option>
</select>
</td>
<?php
$z++;
} // end if
echo "\n";
if (!empty($del_col) && isset($del_col[$x]) && $del_col[$x] == 'on') {
continue;
}
?>
<td align="center">
<select style="width: <?php echo $realwidth; ?>" name="Sort[<?php echo $z; ?>]" size="1">
<option value="">&nbsp;</option>
<?php
echo "\n";
// If they have chosen all fields using the * selector,
// then sorting is not available
// Robbat2 - Fix for Bug #570698
if (isset($Sort[$x]) && isset($Field[$x])
&& substr($Field[$x], -2) == '.*') {
$Sort[$x] = '';
} //end if
if (isset($Sort[$x]) && $Sort[$x] == 'ASC') {
$curSort[$z] = $Sort[$x];
$sel = ' selected="selected"';
} else {
$sel = '';
} // end if
echo ' ';
echo '<option value="ASC"' . $sel . '>' . $strAscending . '</option>' . "\n";
if (isset($Sort[$x]) && $Sort[$x] == 'DESC') {
$curSort[$z] = $Sort[$x];
$sel = ' selected="selected"';
} else {
$sel = '';
} // end if
echo ' ';
echo '<option value="DESC"' . $sel . '>' . $strDescending . '</option>' . "\n";
?>
</select>
</td>
<?php
$z++;
echo "\n";
} // end for
?>
</tr>
<!-- Show row -->
<tr class="odd noclick">
<th><?php echo $strShow; ?>:</th>
<?php
$z = 0;
for ($x = 0; $x < $col; $x++) {
if (!empty($ins_col) && isset($ins_col[$x]) && $ins_col[$x] == 'on') {
?>
<td align="center">
<input type="checkbox" name="Show[<?php echo $z; ?>]" />
</td>
<?php
$z++;
} // end if
echo "\n";
if (!empty($del_col) && isset($del_col[$x]) && $del_col[$x] == 'on') {
continue;
}
if (isset($Show[$x])) {
$checked = ' checked="checked"';
$curShow[$z] = $Show[$x];
} else {
$checked = '';
}
?>
<td align="center">
<input type="checkbox" name="Show[<?php echo $z; ?>]"<?php echo $checked; ?> />
</td>
<?php
$z++;
echo "\n";
} // end for
?>
</tr>
<!-- Criteria row -->
<tr class="even noclick">
<th><?php echo $strCriteria; ?>:</th>
<?php
$z = 0;
for ($x = 0; $x < $col; $x++) {
if (!empty($ins_col) && isset($ins_col[$x]) && $ins_col[$x] == 'on') {
?>
<td align="center">
<input type="text" name="criteria[<?php echo $z; ?>]" value="" class="textfield" style="width: <?php echo $realwidth; ?>" size="20" />
</td>
<?php
$z++;
} // end if
echo "\n";
if (!empty($del_col) && isset($del_col[$x]) && $del_col[$x] == 'on') {
continue;
}
if (isset($criteria[$x])) {
$stripped_Criteria = $criteria[$x];
}
if ((empty($prev_criteria) || !isset($prev_criteria[$x]))
|| $prev_criteria[$x] != htmlspecialchars($stripped_Criteria)) {
$curCriteria[$z] = $stripped_Criteria;
} else {
$curCriteria[$z] = $prev_criteria[$x];
}
?>
<td align="center">
<input type="hidden" name="prev_criteria[<?php echo $z; ?>]" value="<?php echo htmlspecialchars($curCriteria[$z]); ?>" />
<input type="text" name="criteria[<?php echo $z; ?>]" value="<?php echo htmlspecialchars($stripped_Criteria); ?>" class="textfield" style="width: <?php echo $realwidth; ?>" size="20" />
</td>
<?php
$z++;
echo "\n";
} // end for
?>
</tr>
<!-- And/Or columns and rows -->
<?php
$w = 0;
$odd_row = true;
for ($y = 0; $y <= $row; $y++) {
if (isset($ins_row[$y]) && $ins_row[$y] == 'on') {
$chk['or'] = ' checked="checked"';
$chk['and'] = '';
?>
<tr class="<?php echo $odd_row ? 'odd' : 'even'; ?> noclick">
<td align="<?php echo $cell_align_right; ?>" nowrap="nowrap">
<!-- Row controls -->
<table cellpadding="0" cellspacing="0" border="0">
<tr>
<td align="<?php echo $cell_align_right; ?>" nowrap="nowrap">
<small><?php echo $strQBEIns; ?>:</small>
<input type="checkbox" name="ins_row[<?php echo $w; ?>]" />
</td>
<td align="<?php echo $cell_align_right; ?>">
<strong><?php echo $strAnd; ?>:</strong>
</td>
<td>
<input type="radio" name="and_or_row[<?php echo $w; ?>]" value="and"<?php echo $chk['and']; ?> />
&nbsp;
</td>
</tr>
<tr>
<td align="<?php echo $cell_align_right; ?>" nowrap="nowrap">
<small><?php echo $strQBEDel; ?>:</small>
<input type="checkbox" name="del_row[<?php echo $w; ?>]" />
</td>
<td align="<?php echo $cell_align_right; ?>">
<strong><?php echo $strOr; ?>:</strong>
</td>
<td>
<input type="radio" name="and_or_row[<?php echo $w; ?>]" value="or"<?php echo $chk['or']; ?> />
&nbsp;
</td>
</tr>
</table>
</td>
<?php
$z = 0;
for ($x = 0; $x < $col; $x++) {
if (isset($ins_col[$x]) && $ins_col[$x] == 'on') {
echo "\n";
$or = 'Or' . $w . '[' . $z . ']';
?>
<td align="center">
<textarea cols="20" rows="2" style="width: <?php echo $realwidth; ?>" name="<?php echo $or; ?>" dir="<?php echo $text_dir; ?>"></textarea>
</td>
<?php
$z++;
} // end if
if (isset($del_col[$x]) && $del_col[$x] == 'on') {
continue;
}
echo "\n";
$or = 'Or' . $w . '[' . $z . ']';
?>
<td align="center">
<textarea cols="20" rows="2" style="width: <?php echo $realwidth; ?>" name="<?php echo $or; ?>" dir="<?php echo $text_dir; ?>"></textarea>
</td>
<?php
$z++;
} // end for
$w++;
echo "\n";
?>
</tr>
<?php
$odd_row =! $odd_row;
} // end if
if (isset($del_row[$y]) && $del_row[$y] == 'on') {
continue;
}
if (isset($and_or_row[$y])) {
$curAndOrRow[$w] = $and_or_row[$y];
}
if (isset($and_or_row[$y]) && $and_or_row[$y] == 'and') {
$chk['and'] = ' checked="checked"';
$chk['or'] = '';
} else {
$chk['or'] = ' checked="checked"';
$chk['and'] = '';
}
echo "\n";
?>
<tr class="<?php echo $odd_row ? 'odd' : 'even'; ?> noclick">
<td align="<?php echo $cell_align_right; ?>" nowrap="nowrap">
<!-- Row controls -->
<table border="0" cellpadding="0" cellspacing="0">
<tr>
<td align="<?php echo $cell_align_right; ?>" nowrap="nowrap">
<small><?php echo $strQBEIns; ?>:</small>
<input type="checkbox" name="ins_row[<?php echo $w; ?>]" />
</td>
<td align="<?php echo $cell_align_right; ?>">
<strong><?php echo $strAnd; ?>:</strong>
</td>
<td>
<input type="radio" name="and_or_row[<?php echo $w; ?>]" value="and"<?php echo $chk['and']; ?> />
</td>
</tr>
<tr>
<td align="<?php echo $cell_align_right; ?>" nowrap="nowrap">
<small><?php echo $strQBEDel; ?>:</small>
<input type="checkbox" name="del_row[<?php echo $w; ?>]" />
</td>
<td align="<?php echo $cell_align_right; ?>">
<strong><?php echo $strOr; ?>:</strong>
</td>
<td>
<input type="radio" name="and_or_row[<?php echo $w; ?>]" value="or"<?php echo $chk['or']; ?> />
</td>
</tr>
</table>
</td>
<?php
$z = 0;
for ($x = 0; $x < $col; $x++) {
if (!empty($ins_col) && isset($ins_col[$x]) && $ins_col[$x] == 'on') {
echo "\n";
$or = 'Or' . $w . '[' . $z . ']';
?>
<td align="center">
<textarea cols="20" rows="2" style="width: <?php echo $realwidth; ?>" name="<?php echo $or; ?>" dir="<?php echo $text_dir; ?>"></textarea>
</td>
<?php
$z++;
} // end if
if (!empty($del_col) && isset($del_col[$x]) && $del_col[$x] == 'on') {
continue;
}
echo "\n";
$or = 'Or' . $y;
if (!isset(${$or})) {
${$or} = '';
}
if (!empty(${$or}) && isset(${$or}[$x])) {
$stripped_or = ${$or}[$x];
} else {
$stripped_or = '';
}
?>
<td align="center">
<textarea cols="20" rows="2" style="width: <?php echo $realwidth; ?>" name="Or<?php echo $w . '[' . $z . ']'; ?>" dir="<?php echo $text_dir; ?>"><?php echo htmlspecialchars($stripped_or); ?></textarea>
</td>
<?php
if (!empty(${$or}) && isset(${$or}[$x])) {
${'cur' . $or}[$z] = ${$or}[$x];
}
$z++;
} // end for
$w++;
echo "\n";
?>
</tr>
<?php
echo "\n";
$odd_row =! $odd_row;
} // end for
?>
<!-- Modify columns -->
<tr class="even noclick">
<th><?php echo $strModify; ?>:</th>
<?php
$z = 0;
for ($x = 0; $x < $col; $x++) {
if (!empty($ins_col) && isset($ins_col[$x]) && $ins_col[$x] == 'on') {
$curAndOrCol[$z] = $and_or_col[$y];
if ($and_or_col[$z] == 'or') {
$chk['or'] = ' checked="checked"';
$chk['and'] = '';
} else {
$chk['and'] = ' checked="checked"';
$chk['or'] = '';
}
?>
<td align="center">
<strong><?php echo $strOr; ?>:</strong>
<input type="radio" name="and_or_col[<?php echo $z; ?>]" value="or"<?php echo $chk['or']; ?> />
&nbsp;&nbsp;<strong><?php echo $strAnd; ?>:</strong>
<input type="radio" name="and_or_col[<?php echo $z; ?>]" value="and"<?php echo $chk['and']; ?> />
<br />
<?php echo $strQBEIns . "\n"; ?>
<input type="checkbox" name="ins_col[<?php echo $z; ?>]" />
&nbsp;&nbsp;<?php echo $strQBEDel . "\n"; ?>
<input type="checkbox" name="del_col[<?php echo $z; ?>]" />
</td>
<?php
$z++;
} // end if
echo "\n";
if (!empty($del_col) && isset($del_col[$x]) && $del_col[$x] == 'on') {
continue;
}
if (isset($and_or_col[$y])) {
$curAndOrCol[$z] = $and_or_col[$y];
}
if (isset($and_or_col[$z]) && $and_or_col[$z] == 'or') {
$chk['or'] = ' checked="checked"';
$chk['and'] = '';
} else {
$chk['and'] = ' checked="checked"';
$chk['or'] = '';
}
?>
<td align="center">
<strong><?php echo $strOr; ?>:</strong>
<input type="radio" name="and_or_col[<?php echo $z; ?>]" value="or"<?php echo $chk['or']; ?> />
&nbsp;&nbsp;<strong><?php echo $strAnd; ?>:</strong>
<input type="radio" name="and_or_col[<?php echo $z; ?>]" value="and"<?php echo $chk['and']; ?> />
<br />
<?php echo $strQBEIns . "\n"; ?>
<input type="checkbox" name="ins_col[<?php echo $z; ?>]" />
&nbsp;&nbsp;<?php echo $strQBEDel . "\n"; ?>
<input type="checkbox" name="del_col[<?php echo $z; ?>]" />
</td>
<?php
$z++;
echo "\n";
} // end for
?>
</tr>
</table>
<!-- Other controls -->
<?php
$w--;
$url_params['db'] = $db;
$url_params['col_cnt'] = $z;
$url_params['rows'] = $w;
echo PMA_generate_common_hidden_inputs($url_params);
?>
</fieldset>
<fieldset class="tblFooters">
<table border="0" cellpadding="2" cellspacing="1">
<tr>
<td nowrap="nowrap">
<?php echo $strAddDeleteRow; ?>:
<select size="1" name="add_row" style="vertical-align: middle">
<option value="-3">-3</option>
<option value="-2">-2</option>
<option value="-1">-1</option>
<option value="0" selected="selected">0</option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
</select>
</td>
<td width="10">&nbsp;</td>
<td nowrap="nowrap"><?php echo $strAddDeleteColumn; ?>:
<select size="1" name="add_col" style="vertical-align: middle">
<option value="-3">-3</option>
<option value="-2">-2</option>
<option value="-1">-1</option>
<option value="0" selected="selected">0</option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
</select>
</td>
<td width="10">&nbsp;</td>
<!-- Generates a query -->
<td><input type="submit" name="modify" value="<?php echo $strUpdateQuery; ?>" /></td>
</tr>
</table>
</fieldset>
<table>
<tr><td>
<fieldset>
<legend><?php echo $strUseTables; ?></legend>
<?php
$strTableListOptions = '';
$numTableListOptions = 0;
foreach ($tbl_names as $key => $val) {
$strTableListOptions .= ' ';
$strTableListOptions .= '<option value="' . htmlspecialchars($key) . '"' . $val . '>'
. str_replace(' ', '&nbsp;', htmlspecialchars($key)) . '</option>' . "\n";
$numTableListOptions++;
}
?>
<select name="TableList[]" multiple="multiple" id="listTable"
size="<?php echo ($numTableListOptions > 30) ? '15' : '7'; ?>">
<?php echo $strTableListOptions; ?>
</select>
</fieldset>
<fieldset class="tblFooters">
<input type="submit" name="modify" value="<?php echo $strUpdateQuery; ?>" />
</fieldset>
</td>
<td width="20">&nbsp;</td>
<td>
<fieldset>
<legend><?php echo sprintf($strQueryOnDb, PMA_getDbLink($db)); ?>
</legend>
<textarea cols="80" name="sql_query" id="textSqlquery"
rows="<?php echo ($numTableListOptions > 30) ? '15' : '7'; ?>"
dir="<?php echo $text_dir; ?>">
<?php
// 1. SELECT
$last_select = 0;
if (!isset($qry_select)) {
$qry_select = '';
}
for ($x = 0; $x < $col; $x++) {
if (!empty($curField[$x]) && isset($curShow[$x]) && $curShow[$x] == 'on') {
if ($last_select) {
$qry_select .= ', ';
}
$qry_select .= $curField[$x];
$last_select = 1;
}
} // end for
if (!empty($qry_select)) {
echo 'SELECT ' . htmlspecialchars($qry_select) . "\n";
}
// 2. FROM
// Create LEFT JOINS out of Relations
// Code originally by Mike Beck <mike.beck@ibmiller.de>
// If we can use Relations we could make some left joins.
// First find out if relations are available in this database.
// First we need the really needed Tables - those in TableList might still be
// all Tables.
if (isset($Field) && count($Field) > 0) {
// Initialize some variables
$tab_all = array();
$col_all = array();
$tab_wher = array();
$tab_know = array();
$tab_left = array();
$col_where = array();
$fromclause = '';
// We only start this if we have fields, otherwise it would be dumb
foreach ($Field as $value) {
$parts = explode('.', $value);
if (!empty($parts[0]) && !empty($parts[1])) {
$tab_raw = $parts[0];
$tab = str_replace('`', '', $tab_raw);
$tab_all[$tab] = $tab;
$col_raw = $parts[1];
$col_all[] = $tab . '.' . str_replace('`', '', $col_raw);
}
} // end while
// Check 'where' clauses
if ($cfgRelation['relwork'] && count($tab_all) > 0) {
// Now we need all tables that we have in the where clause
$crit_cnt = count($criteria);
for ($x = 0; $x < $crit_cnt; $x++) {
$curr_tab = explode('.', $Field[$x]);
if (!empty($curr_tab[0]) && !empty($curr_tab[1])) {
$tab_raw = $curr_tab[0];
$tab = str_replace('`', '', $tab_raw);
$col_raw = $curr_tab[1];
$col1 = str_replace('`', '', $col_raw);
$col1 = $tab . '.' . $col1;
// Now we know that our array has the same numbers as $criteria
// we can check which of our columns has a where clause
if (!empty($criteria[$x])) {
if (substr($criteria[$x], 0, 1) == '=' || stristr($criteria[$x], 'is')) {
$col_where[$col] = $col1;
$tab_wher[$tab] = $tab;
}
} // end if
} // end if
} // end for
// Cleans temp vars w/o further use
unset($tab_raw);
unset($col_raw);
unset($col1);
if (count($tab_wher) == 1) {
// If there is exactly one column that has a decent where-clause
// we will just use this
$master = key($tab_wher);
} else {
// Now let's find out which of the tables has an index
// (When the control user is the same as the normal user
// because he is using one of his databases as pmadb,
// the last db selected is not always the one where we need to work)
PMA_DBI_select_db($db);
foreach ($tab_all as $tab) {
$ind_rs = PMA_DBI_query('SHOW INDEX FROM ' . PMA_backquote($tab) . ';');
while ($ind = PMA_DBI_fetch_assoc($ind_rs)) {
$col1 = $tab . '.' . $ind['Column_name'];
if (isset($col_all[$col1])) {
if ($ind['non_unique'] == 0) {
if (isset($col_where[$col1])) {
$col_unique[$col1] = 'Y';
} else {
$col_unique[$col1] = 'N';
}
} else {
if (isset($col_where[$col1])) {
$col_index[$col1] = 'Y';
} else {
$col_index[$col1] = 'N';
}
}
}
} // end while (each col of tab)
} // end while (each tab)
// now we want to find the best.
if (isset($col_unique) && count($col_unique) > 0) {
$col_cand = $col_unique;
$needsort = 1;
} elseif (isset($col_index) && count($col_index) > 0) {
$col_cand = $col_index;
$needsort = 1;
} elseif (isset($col_where) && count($col_where) > 0) {
$col_cand = $tab_wher;
$needsort = 0;
} else {
$col_cand = $tab_all;
$needsort = 0;
}
// If we came up with $col_unique (very good) or $col_index (still
// good) as $col_cand we want to check if we have any 'Y' there
// (that would mean that they were also found in the whereclauses
// which would be great). if yes, we take only those
if ($needsort == 1) {
foreach ($col_cand as $col => $is_where) {
$tab = explode('.', $col);
$tab = $tab[0];
if ($is_where == 'Y') {
$vg[$col] = $tab;
} else {
$sg[$col] = $tab;
}
}
if (isset($vg)) {
$col_cand = $vg;
// Candidates restricted in index+where
} else {
$col_cand = $sg;
// None of the candidates where in a where-clause
}
}
// If our array of candidates has more than one member we'll just
// find the smallest table.
// Of course the actual query would be faster if we check for
// the Criteria which gives the smallest result set in its table,
// but it would take too much time to check this
if (count($col_cand) > 1) {
// Of course we only want to check each table once
$checked_tables = $col_cand;
foreach ($col_cand as $tab) {
if ($checked_tables[$tab] != 1) {
$tsize[$tab] = PMA_Table::countRecords($db, $tab, false);
$checked_tables[$tab] = 1;
}
$csize[$tab] = $tsize[$tab];
}
asort($csize);
reset($csize);
$master = key($csize); // Smallest
} else {
reset($col_cand);
$master = current($col_cand); // Only one single candidate
}
} // end if (exactly one where clause)
$tab_left = $tab_all;
unset($tab_left[$master]);
$tab_know[$master] = $master;
$run = 0;
$emerg = '';
while (count($tab_left) > 0) {
if ($run % 2 == 0) {
PMA_getRelatives('master');
} else {
PMA_getRelatives('foreign');
}
$run++;
if ($run > 5) {
foreach ($tab_left as $tab) {
$emerg .= ', ' . PMA_backquote($tab);
unset($tab_left[$tab]);
}
}
} // end while
$qry_from = PMA_backquote($master) . $emerg . $fromclause;
} // end if ($cfgRelation['relwork'] && count($tab_all) > 0)
} // end count($Field) > 0
// In case relations are not defined, just generate the FROM clause
// from the list of tables, however we don't generate any JOIN
if (empty($qry_from) && isset($tab_all)) {
$qry_from = implode(', ', $tab_all);
}
// Now let's see what we got
if (!empty($qry_from)) {
echo 'FROM ' . htmlspecialchars($qry_from) . "\n";
}
// 3. WHERE
$qry_where = '';
$criteria_cnt = 0;
for ($x = 0; $x < $col; $x++) {
if (!empty($curField[$x]) && !empty($curCriteria[$x]) && $x && isset($last_where) && isset($curAndOrCol)) {
$qry_where .= ' ' . strtoupper($curAndOrCol[$last_where]) . ' ';
}
if (!empty($curField[$x]) && !empty($curCriteria[$x])) {
$qry_where .= '(' . $curField[$x] . ' ' . $curCriteria[$x] . ')';
$last_where = $x;
$criteria_cnt++;
}
} // end for
if ($criteria_cnt > 1) {
$qry_where = '(' . $qry_where . ')';
}
// OR rows ${'cur' . $or}[$x]
if (!isset($curAndOrRow)) {
$curAndOrRow = array();
}
for ($y = 0; $y <= $row; $y++) {
$criteria_cnt = 0;
$qry_orwhere = '';
$last_orwhere = '';
for ($x = 0; $x < $col; $x++) {
if (!empty($curField[$x]) && !empty(${'curOr' . $y}[$x]) && $x) {
$qry_orwhere .= ' ' . strtoupper($curAndOrCol[$last_orwhere]) . ' ';
}
if (!empty($curField[$x]) && !empty(${'curOr' . $y}[$x])) {
$qry_orwhere .= '(' . $curField[$x]
. ' '
. ${'curOr' . $y}[$x]
. ')';
$last_orwhere = $x;
$criteria_cnt++;
}
} // end for
if ($criteria_cnt > 1) {
$qry_orwhere = '(' . $qry_orwhere . ')';
}
if (!empty($qry_orwhere)) {
$qry_where .= "\n"
. strtoupper(isset($curAndOrRow[$y]) ? $curAndOrRow[$y] . ' ' : '')
. $qry_orwhere;
} // end if
} // end for
if (!empty($qry_where) && $qry_where != '()') {
echo 'WHERE ' . htmlspecialchars($qry_where) . "\n";
} // end if
// 4. ORDER BY
$last_orderby = 0;
if (!isset($qry_orderby)) {
$qry_orderby = '';
}
for ($x = 0; $x < $col; $x++) {
if ($last_orderby && $x && !empty($curField[$x]) && !empty($curSort[$x])) {
$qry_orderby .= ', ';
}
if (!empty($curField[$x]) && !empty($curSort[$x])) {
// if they have chosen all fields using the * selector,
// then sorting is not available
// Robbat2 - Fix for Bug #570698
if (substr($curField[$x], -2) != '.*') {
$qry_orderby .= $curField[$x] . ' ' . $curSort[$x];
$last_orderby = 1;
}
}
} // end for
if (!empty($qry_orderby)) {
echo 'ORDER BY ' . htmlspecialchars($qry_orderby) . "\n";
}
?>
</textarea>
</fieldset>
<fieldset class="tblFooters">
<input type="submit" name="submit_sql" value="<?php echo $strRunQuery; ?>" />
</fieldset>
</td>
</tr>
</table>
</form>
<?php
/**
* Displays the footer
*/
require_once './libraries/footer.inc.php';
?>

View File

@@ -1,373 +0,0 @@
<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
* searchs the entire database
*
* @todo make use of UNION when searching multiple tables
* @todo display executed query, optional?
* @uses $cfg['UseDbSearch']
* @uses $GLOBALS['db']
* @uses $GLOBALS['strAccessDenied']
* @uses $GLOBALS['strSearchOption1']
* @uses $GLOBALS['strSearchOption2']
* @uses $GLOBALS['strSearchOption3']
* @uses $GLOBALS['strSearchOption4']
* @uses $GLOBALS['strSearchResultsFor']
* @uses $GLOBALS['strNumSearchResultsInTable']
* @uses $GLOBALS['strBrowse']
* @uses $GLOBALS['strDelete']
* @uses $GLOBALS['strNumSearchResultsTotal']
* @uses $GLOBALS['strSearchFormTitle']
* @uses $GLOBALS['strSearchNeedle']
* @uses $GLOBALS['strSearchType']
* @uses $GLOBALS['strSplitWordsWithSpace']
* @uses $GLOBALS['strSearchInTables']
* @uses $GLOBALS['strUnselectAll']
* @uses $GLOBALS['strSelectAll']
* @uses PMA_DBI_get_tables()
* @uses PMA_sqlAddslashes()
* @uses PMA_getSearchSqls()
* @uses PMA_DBI_fetch_value()
* @uses PMA_linkOrButton()
* @uses PMA_generate_common_url()
* @uses PMA_generate_common_hidden_inputs()
* @uses PMA_showMySQLDocu()
* @uses $_REQUEST['search_str']
* @uses $_REQUEST['submit_search']
* @uses $_REQUEST['search_option']
* @uses $_REQUEST['table_select']
* @uses $_REQUEST['unselectall']
* @uses $_REQUEST['selectall']
* @uses $_REQUEST['field_str']
* @uses is_string()
* @uses htmlspecialchars()
* @uses array_key_exists()
* @uses is_array()
* @uses array_intersect()
* @uses sprintf()
* @uses in_array()
* @version $Id$
* @author Thomas Chaumeny <chaume92 at aol.com>
* @package phpMyAdmin
*/
/**
*
*/
require_once './libraries/common.inc.php';
/**
* Gets some core libraries and send headers
*/
require './libraries/db_common.inc.php';
/**
* init
*/
// If config variable $GLOBALS['cfg']['Usedbsearch'] is on false : exit.
if (! $GLOBALS['cfg']['UseDbSearch']) {
PMA_mysqlDie($GLOBALS['strAccessDenied'], '', false, $err_url);
} // end if
$url_query .= '&amp;goto=db_search.php';
$url_params['goto'] = 'db_search.php';
/**
* @global array list of tables from the current database
* but do not clash with $tables coming from db_info.inc.php
*/
$tables_names_only = PMA_DBI_get_tables($GLOBALS['db']);
$search_options = array(
'1' => $GLOBALS['strSearchOption1'],
'2' => $GLOBALS['strSearchOption2'],
'3' => $GLOBALS['strSearchOption3'],
'4' => $GLOBALS['strSearchOption4'],
);
if (empty($_REQUEST['search_option']) || ! is_string($_REQUEST['search_option'])
|| ! array_key_exists($_REQUEST['search_option'], $search_options)) {
$search_option = 1;
unset($_REQUEST['submit_search']);
} else {
$search_option = (int) $_REQUEST['search_option'];
$option_str = $search_options[$_REQUEST['search_option']];
}
if (empty($_REQUEST['search_str']) || ! is_string($_REQUEST['search_str'])) {
unset($_REQUEST['submit_search']);
$searched = '';
} else {
$searched = htmlspecialchars($_REQUEST['search_str']);
// For "as regular expression" (search option 4), we should not treat
// this as an expression that contains a LIKE (second parameter of
// PMA_sqlAddslashes()).
//
// Usage example: If user is seaching for a literal $ in a regexp search,
// he should enter \$ as the value.
$search_str = PMA_sqlAddslashes($_REQUEST['search_str'], ($search_option == 4 ? false : true));
}
$tables_selected = array();
if (empty($_REQUEST['table_select']) || ! is_array($_REQUEST['table_select'])) {
unset($_REQUEST['submit_search']);
} elseif (! isset($_REQUEST['selectall']) && ! isset($_REQUEST['unselectall'])) {
$tables_selected = array_intersect($_REQUEST['table_select'], $tables_names_only);
}
if (isset($_REQUEST['selectall'])) {
$tables_selected = $tables_names_only;
} elseif (isset($_REQUEST['unselectall'])) {
$tables_selected = array();
}
if (empty($_REQUEST['field_str']) || ! is_string($_REQUEST['field_str'])) {
unset($field_str);
} else {
$field_str = PMA_sqlAddslashes($_REQUEST['field_str'], true);
}
/**
* Displays top links
*/
$sub_part = '';
require './libraries/db_info.inc.php';
/**
* 1. Main search form has been submitted
*/
if (isset($_REQUEST['submit_search'])) {
/**
* Builds the SQL search query
*
* @todo can we make use of fulltextsearch IN BOOLEAN MODE for this?
* @uses PMA_DBI_query
* PMA_backquote
* PMA_DBI_free_result
* PMA_DBI_fetch_assoc
* $GLOBALS['db']
* explode
* count
* strlen
* @param string the table name
* @param string restrict the search to this field
* @param string the string to search
* @param integer type of search (1 -> 1 word at least, 2 -> all words,
* 3 -> exact string, 4 -> regexp)
*
* @return array 3 SQL querys (for count, display and delete results)
*
* @global string the url to return to in case of errors
* @global string charset connection
*/
function PMA_getSearchSqls($table, $field, $search_str, $search_option)
{
global $err_url;
// Statement types
$sqlstr_select = 'SELECT';
$sqlstr_delete = 'DELETE';
// Fields to select
$tblfields = PMA_DBI_fetch_result('SHOW FIELDS FROM ' . PMA_backquote($table) . ' FROM ' . PMA_backquote($GLOBALS['db']),
null, 'Field');
// Table to use
$sqlstr_from = ' FROM ' . PMA_backquote($GLOBALS['db']) . '.' . PMA_backquote($table);
$search_words = (($search_option > 2) ? array($search_str) : explode(' ', $search_str));
$search_wds_cnt = count($search_words);
$like_or_regex = (($search_option == 4) ? 'REGEXP' : 'LIKE');
$automatic_wildcard = (($search_option < 3) ? '%' : '');
$fieldslikevalues = array();
foreach ($search_words as $search_word) {
// Eliminates empty values
if (strlen($search_word) === 0) {
continue;
}
$thefieldlikevalue = array();
foreach ($tblfields as $tblfield) {
if (! isset($field) || strlen($field) == 0 || $tblfield == $field) {
$thefieldlikevalue[] = PMA_backquote($tblfield)
. ' ' . $like_or_regex . ' '
. "'" . $automatic_wildcard
. $search_word
. $automatic_wildcard . "'";
}
} // end for
if (count($thefieldlikevalue) > 0) {
$fieldslikevalues[] = implode(' OR ', $thefieldlikevalue);
}
} // end for
$implode_str = ($search_option == 1 ? ' OR ' : ' AND ');
if ( empty($fieldslikevalues)) {
// this could happen when the "inside field" does not exist
// in any selected tables
$sqlstr_where = ' WHERE FALSE';
} else {
$sqlstr_where = ' WHERE (' . implode(') ' . $implode_str . ' (', $fieldslikevalues) . ')';
}
unset($fieldslikevalues);
// Builds complete queries
$sql['select_fields'] = $sqlstr_select . ' * ' . $sqlstr_from . $sqlstr_where;
// here, I think we need to still use the COUNT clause, even for
// VIEWs, anyway we have a WHERE clause that should limit results
$sql['select_count'] = $sqlstr_select . ' COUNT(*) AS `count`' . $sqlstr_from . $sqlstr_where;
$sql['delete'] = $sqlstr_delete . $sqlstr_from . $sqlstr_where;
return $sql;
} // end of the "PMA_getSearchSqls()" function
/**
* Displays the results
*/
$this_url_params = array(
'db' => $GLOBALS['db'],
'goto' => 'db_sql.php',
'pos' => 0,
'is_js_confirmed' => 0,
);
// Displays search string
echo '<br />' . "\n"
.'<table class="data">' . "\n"
.'<caption class="tblHeaders">' . "\n"
.sprintf($GLOBALS['strSearchResultsFor'],
$searched, $option_str) . "\n"
.'</caption>' . "\n";
$num_search_result_total = 0;
$odd_row = true;
foreach ($tables_selected as $each_table) {
// Gets the SQL statements
$newsearchsqls = PMA_getSearchSqls($each_table, (! empty($field_str) ? $field_str : ''), $search_str, $search_option);
// Executes the "COUNT" statement
$res_cnt = PMA_DBI_fetch_value($newsearchsqls['select_count']);
$num_search_result_total += $res_cnt;
$sql_query .= $newsearchsqls['select_count'];
echo '<tr class="' . ($odd_row ? 'odd' : 'even') . '">'
.'<td>' . sprintf($GLOBALS['strNumSearchResultsInTable'], $res_cnt,
htmlspecialchars($each_table)) . "</td>\n";
if ($res_cnt > 0) {
$this_url_params['sql_query'] = $newsearchsqls['select_fields'];
echo '<td>' . PMA_linkOrButton(
'sql.php' . PMA_generate_common_url($this_url_params),
$GLOBALS['strBrowse'], '') . "</td>\n";
$this_url_params['sql_query'] = $newsearchsqls['delete'];
echo '<td>' . PMA_linkOrButton(
'sql.php' . PMA_generate_common_url($this_url_params),
$GLOBALS['strDelete'], $newsearchsqls['delete']) . "</td>\n";
} else {
echo '<td>&nbsp;</td>' . "\n"
.'<td>&nbsp;</td>' . "\n";
}// end if else
$odd_row = ! $odd_row;
echo '</tr>' . "\n";
} // end for
echo '</table>' . "\n";
if (count($tables_selected) > 1) {
echo '<p>' . sprintf($GLOBALS['strNumSearchResultsTotal'],
$num_search_result_total) . '</p>' . "\n";
}
} // end 1.
/**
* 2. Displays the main search form
*/
?>
<a name="db_search"></a>
<form method="post" action="db_search.php" name="db_search">
<?php echo PMA_generate_common_hidden_inputs($GLOBALS['db']); ?>
<fieldset>
<legend><?php echo $GLOBALS['strSearchFormTitle']; ?></legend>
<table class="formlayout">
<tr><td><?php echo $GLOBALS['strSearchNeedle']; ?></td>
<td><input type="text" name="search_str" size="60"
value="<?php echo $searched; ?>" /></td>
</tr>
<tr><td align="right" valign="top">
<?php echo $GLOBALS['strSearchType']; ?></td>
<td><?php
$choices = array(
'1' => $GLOBALS['strSearchOption1'] . PMA_showHint($GLOBALS['strSplitWordsWithSpace']),
'2' => $GLOBALS['strSearchOption2'] . PMA_showHint($GLOBALS['strSplitWordsWithSpace']),
'3' => $GLOBALS['strSearchOption3'],
'4' => $GLOBALS['strSearchOption4'] . ' ' . PMA_showMySQLDocu('Regexp', 'Regexp')
);
// 4th parameter set to true to add line breaks
// 5th parameter set to false to avoid htmlspecialchars() escaping in the label
// since we have some HTML in some labels
PMA_display_html_radio('search_option', $choices, $search_option, true, false);
unset($choices);
?>
</td>
</tr>
<tr><td align="right" valign="top">
<?php echo $GLOBALS['strSearchInTables']; ?></td>
<td rowspan="2">
<?php
echo ' <select name="table_select[]" size="6" multiple="multiple">' . "\n";
foreach ($tables_names_only as $each_table) {
if (in_array($each_table, $tables_selected)) {
$is_selected = ' selected="selected"';
} else {
$is_selected = '';
}
echo ' <option value="' . htmlspecialchars($each_table) . '"'
. $is_selected . '>'
. str_replace(' ', '&nbsp;', htmlspecialchars($each_table)) . '</option>' . "\n";
} // end while
echo ' </select>' . "\n";
$alter_select =
'<a href="db_search.php' . PMA_generate_common_url(array_merge($url_params, array('selectall' => 1))) . '#db_search"'
. ' onclick="setSelectOptions(\'db_search\', \'table_select[]\', true); return false;">' . $GLOBALS['strSelectAll'] . '</a>'
. '&nbsp;/&nbsp;'
. '<a href="db_search.php' . PMA_generate_common_url(array_merge($url_params, array('unselectall' => 1))) . '#db_search"'
. ' onclick="setSelectOptions(\'db_search\', \'table_select[]\', false); return false;">' . $GLOBALS['strUnselectAll'] . '</a>';
?>
</td>
</tr>
<tr><td align="right" valign="bottom">
<?php echo $alter_select; ?></td>
</tr>
<tr><td align="right">
<?php echo $GLOBALS['strSearchInField']; ?></td>
<td><input type="text" name="field_str" size="60"
value="<?php echo ! empty($field_str) ? $field_str : ''; ?>" /></td>
</tr>
</table>
</fieldset>
<fieldset class="tblFooters">
<input type="submit" name="submit_search" value="<?php echo $GLOBALS['strGo']; ?>"
id="buttonGo" />
</fieldset>
</form>
<?php
/**
* Displays the footer
*/
require_once './libraries/footer.inc.php';
?>

View File

@@ -1,46 +0,0 @@
<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
*
* @version $Id$
* @package phpMyAdmin
*/
/**
*
*/
require_once './libraries/common.inc.php';
/**
* Runs common work
*/
require './libraries/db_common.inc.php';
require_once './libraries/sql_query_form.lib.php';
// After a syntax error, we return to this script
// with the typed query in the textarea.
$goto = 'db_sql.php';
$back = 'db_sql.php';
/**
* Gets informations about the database and, if it is empty, move to the
* "db_structure.php" script where table can be created
*/
require './libraries/db_info.inc.php';
if ($num_tables == 0 && empty($db_query_force)) {
$sub_part = '';
$is_info = TRUE;
require './db_structure.php';
exit();
}
/**
* Query box, bookmark, insert data from textfile
*/
PMA_sqlQueryForm(true, false, isset($_REQUEST['delimiter']) ? $_REQUEST['delimiter'] : ';');
/**
* Displays the footer
*/
require_once './libraries/footer.inc.php';
?>

View File

@@ -1,610 +0,0 @@
<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
*
* @version $Id$
* @package phpMyAdmin
*/
/**
*
*/
require_once './libraries/common.inc.php';
require_once './libraries/Table.class.php';
$GLOBALS['js_include'][] = 'mootools.js';
/**
* Prepares the tables list if the user where not redirected to this script
* because there is no table in the database ($is_info is true)
*/
if (empty($is_info)) {
// Drops/deletes/etc. multiple tables if required
if ((!empty($submit_mult) && isset($selected_tbl))
|| isset($mult_btn)) {
$action = 'db_structure.php';
$err_url = 'db_structure.php?'. PMA_generate_common_url($db);
// see bug #2794840; in this case, code path is:
// db_structure.php -> libraries/mult_submits.inc.php -> sql.php
// -> db_structure.php and if we got an error on the multi submit,
// we must display it here and not call again mult_submits.inc.php
if (! isset($error) || FALSE === $error) {
require './libraries/mult_submits.inc.php';
}
if (empty($message)) {
$message = PMA_Message::success();
}
}
require './libraries/db_common.inc.php';
$url_query .= '&amp;goto=db_structure.php';
// Gets the database structure
$sub_part = '_structure';
require './libraries/db_info.inc.php';
require_once './libraries/replication.inc.php';
}
// 1. No tables
if ($num_tables == 0) {
echo '<p>' . $strNoTablesFound . '</p>' . "\n";
if (empty($db_is_information_schema)) {
require './libraries/display_create_table.lib.php';
} // end if (Create Table dialog)
/**
* Displays the footer
*/
require_once './libraries/footer.inc.php';
exit;
}
// else
// 2. Shows table informations - staybyte - 11 June 2001
require_once './libraries/bookmark.lib.php';
require_once './libraries/mysql_charsets.lib.php';
$db_collation = PMA_getDbCollation($db);
// in a separate file to avoid redeclaration of functions in some code paths
require_once './libraries/db_structure.lib.php';
$titles = array();
if (true == $cfg['PropertiesIconic']) {
$titles['Browse'] = '<img class="icon" width="16" height="16" src="' .$pmaThemeImage . 'b_browse.png" alt="' . $strBrowse . '" title="' . $strBrowse . '" />';
$titles['NoBrowse'] = '<img class="icon" width="16" height="16" src="' .$pmaThemeImage . 'bd_browse.png" alt="' . $strBrowse . '" title="' . $strBrowse . '" />';
$titles['Search'] = '<img class="icon" width="16" height="16" src="' .$pmaThemeImage . 'b_select.png" alt="' . $strSearch . '" title="' . $strSearch . '" />';
$titles['NoSearch'] = '<img class="icon" width="16" height="16" src="' .$pmaThemeImage . 'bd_select.png" alt="' . $strSearch . '" title="' . $strSearch . '" />';
$titles['Insert'] = '<img class="icon" width="16" height="16" src="' .$pmaThemeImage . 'b_insrow.png" alt="' . $strInsert . '" title="' . $strInsert . '" />';
$titles['NoInsert'] = '<img class="icon" width="16" height="16" src="' .$pmaThemeImage . 'bd_insrow.png" alt="' . $strInsert . '" title="' . $strInsert . '" />';
$titles['Structure'] = '<img class="icon" width="16" height="16" src="' .$pmaThemeImage . 'b_props.png" alt="' . $strStructure . '" title="' . $strStructure . '" />';
$titles['Drop'] = '<img class="icon" width="16" height="16" src="' .$pmaThemeImage . 'b_drop.png" alt="' . $strDrop . '" title="' . $strDrop . '" />';
$titles['NoDrop'] = '<img class="icon" width="16" height="16" src="' .$pmaThemeImage . 'bd_drop.png" alt="' . $strDrop . '" title="' . $strDrop . '" />';
$titles['Empty'] = '<img class="icon" width="16" height="16" src="' .$pmaThemeImage . 'b_empty.png" alt="' . $strEmpty . '" title="' . $strEmpty . '" />';
$titles['NoEmpty'] = '<img class="icon" width="16" height="16" src="' .$pmaThemeImage . 'bd_empty.png" alt="' . $strEmpty . '" title="' . $strEmpty . '" />';
if ('both' === $cfg['PropertiesIconic']) {
$titles['Browse'] .= $strBrowse;
$titles['Search'] .= $strSearch;
$titles['NoBrowse'] .= $strBrowse;
$titles['NoSearch'] .= $strSearch;
$titles['Insert'] .= $strInsert;
$titles['NoInsert'] .= $strInsert;
$titles['Structure'] .= $strStructure;
$titles['Drop'] .= $strDrop;
$titles['NoDrop'] .= $strDrop;
$titles['Empty'] .= $strEmpty;
$titles['NoEmpty'] .= $strEmpty;
}
} else {
$titles['Browse'] = $strBrowse;
$titles['Search'] = $strSearch;
$titles['NoBrowse'] = $strBrowse;
$titles['NoSearch'] = $strSearch;
$titles['Insert'] = $strInsert;
$titles['NoInsert'] = $strInsert;
$titles['Structure'] = $strStructure;
$titles['Drop'] = $strDrop;
$titles['NoDrop'] = $strDrop;
$titles['Empty'] = $strEmpty;
$titles['NoEmpty'] = $strEmpty;
}
/**
* Displays the tables list
*/
$_url_params = array(
'pos' => $pos,
'db' => $db);
// Add the sort options if they exists
if (isset($_REQUEST['sort'])) {
$_url_params['sort'] = $_REQUEST['sort'];
}
if (isset($_REQUEST['sort_order'])) {
$_url_params['sort_order'] = $_REQUEST['sort_order'];
}
PMA_listNavigator($total_num_tables, $pos, $_url_params, 'db_structure.php', 'frame_content', $GLOBALS['cfg']['MaxTableList']);
?>
<form method="post" action="db_structure.php" name="tablesForm" id="tablesForm">
<?php
echo PMA_generate_common_hidden_inputs($db);
PMA_TableHeader($db_is_information_schema, $server_slave_status);
$i = $sum_entries = 0;
$sum_size = (double) 0;
$overhead_size = (double) 0;
$overhead_check = '';
$checked = !empty($checkall) ? ' checked="checked"' : '';
$num_columns = $cfg['PropertiesNumColumns'] > 1 ? ceil($num_tables / $cfg['PropertiesNumColumns']) + 1 : 0;
$row_count = 0;
$hidden_fields = array();
$odd_row = true;
$sum_row_count_pre = '';
// added by rajk - for blobstreaming
$PMA_Config = $_SESSION['PMA_Config'];
if (!empty($PMA_Config))
$session_bs_tables = $PMA_Config->get('BLOBSTREAMING_TABLES'); // list of blobstreaming tables
$tableReductionCount = 0; // the amount to reduce the table count by
foreach ($tables as $keyname => $each_table) {
if (isset($session_bs_tables))
{
// compare table name against blobstreaming tables
foreach ($session_bs_tables as $table_key=>$table_val)
// if the table is a blobstreaming table, reduce table count and skip outer foreach loop
if ($table_key == $keyname)
{
$tableReductionCount++;
continue 2;
}
}
// loic1: Patch from Joshua Nye <josh at boxcarmedia.com> to get valid
// statistics whatever is the table type
$table_is_view = false;
$table_encoded = urlencode($each_table['TABLE_NAME']);
// Sets parameters for links
$tbl_url_query = $url_query . '&amp;table=' . $table_encoded;
// do not list the previous table's size info for a view
$formatted_size = '-';
$unit = '';
switch ( $each_table['ENGINE']) {
// MyISAM, ISAM or Heap table: Row count, data size and index size
// are accurate; data size is accurate for ARCHIVE
case 'MyISAM' :
case 'ISAM' :
case 'HEAP' :
case 'MEMORY' :
case 'ARCHIVE' :
if ($db_is_information_schema) {
$each_table['Rows'] = PMA_Table::countRecords($db,
$each_table['Name']);
}
if ($is_show_stats) {
$tblsize = doubleval($each_table['Data_length']) + doubleval($each_table['Index_length']);
$sum_size += $tblsize;
list($formatted_size, $unit) = PMA_formatByteDown($tblsize, 3, ($tblsize > 0) ? 1 : 0);
if (isset($each_table['Data_free']) && $each_table['Data_free'] > 0) {
list($formatted_overhead, $overhead_unit) = PMA_formatByteDown($each_table['Data_free'], 3, ($each_table['Data_free'] > 0) ? 1 : 0);
$overhead_size += $each_table['Data_free'];
}
}
break;
case 'InnoDB' :
// InnoDB table: Row count is not accurate but data and index
// sizes are.
if ($each_table['TABLE_ROWS'] < $GLOBALS['cfg']['MaxExactCount']) {
$each_table['COUNTED'] = true;
$each_table['TABLE_ROWS'] = PMA_Table::countRecords($db,
$each_table['TABLE_NAME'], $force_exact = true,
$is_view = false);
} else {
$each_table['COUNTED'] = false;
}
if ($is_show_stats) {
$tblsize = $each_table['Data_length'] + $each_table['Index_length'];
$sum_size += $tblsize;
list($formatted_size, $unit) = PMA_formatByteDown($tblsize, 3, ($tblsize > 0) ? 1 : 0);
}
//$display_rows = ' - ';
break;
case 'MRG_MyISAM' :
case 'BerkeleyDB' :
// Merge or BerkleyDB table: Only row count is accurate.
if ($is_show_stats) {
$formatted_size = ' - ';
$unit = '';
}
break;
// for a view, the ENGINE is sometimes reported as null,
// or on some servers it's reported as "SYSTEM VIEW"
case null :
case 'SYSTEM VIEW' :
// if table is broken, Engine is reported as null, so one more test
if ($each_table['TABLE_TYPE'] == 'VIEW') {
// countRecords() takes care of $cfg['MaxExactCountViews']
$each_table['TABLE_ROWS'] = PMA_Table::countRecords($db,
$each_table['TABLE_NAME'], $force_exact = true,
$is_view = true);
$table_is_view = true;
}
break;
default :
// Unknown table type.
if ($is_show_stats) {
$formatted_size = 'unknown';
$unit = '';
}
} // end switch
$sum_entries += $each_table['TABLE_ROWS'];
if (isset($each_table['Collation'])) {
$collation = '<dfn title="'
. PMA_getCollationDescr($each_table['Collation']) . '">'
. $each_table['Collation'] . '</dfn>';
} else {
$collation = '---';
}
if ($is_show_stats) {
if (isset($formatted_overhead)) {
$overhead = '<a href="tbl_structure.php?'
. $tbl_url_query . '#showusage">' . $formatted_overhead
. ' ' . $overhead_unit . '</a>' . "\n";
unset($formatted_overhead);
$overhead_check .=
"document.getElementById('checkbox_tbl_" . ($i + 1) . "').checked = true;";
} else {
$overhead = '-';
}
} // end if
$alias = (!empty($tooltip_aliasname) && isset($tooltip_aliasname[$each_table['TABLE_NAME']]))
? str_replace(' ', '&nbsp;', htmlspecialchars($tooltip_truename[$each_table['TABLE_NAME']]))
: str_replace(' ', '&nbsp;', htmlspecialchars($each_table['TABLE_NAME']));
$truename = (!empty($tooltip_truename) && isset($tooltip_truename[$each_table['TABLE_NAME']]))
? str_replace(' ', '&nbsp;', htmlspecialchars($tooltip_truename[$each_table['TABLE_NAME']]))
: str_replace(' ', '&nbsp;', htmlspecialchars($each_table['TABLE_NAME']));
$i++;
$row_count++;
if ($table_is_view) {
$hidden_fields[] = '<input type="hidden" name="views[]" value="' . htmlspecialchars($each_table['TABLE_NAME']) . '" />';
}
if ($each_table['TABLE_ROWS'] > 0) {
$browse_table = '<a href="sql.php?' . $tbl_url_query . '&amp;pos=0">' . $titles['Browse'] . '</a>';
$search_table = '<a href="tbl_select.php?' . $tbl_url_query . '">' . $titles['Search'] . '</a>';
} else {
$browse_table = $titles['NoBrowse'];
$search_table = $titles['NoSearch'];
}
if (! $db_is_information_schema) {
if (! empty($each_table['TABLE_ROWS'])) {
$empty_table = '<a href="sql.php?' . $tbl_url_query
. '&amp;sql_query=';
$empty_table .= urlencode('TRUNCATE ' . PMA_backquote($each_table['TABLE_NAME']))
. '&amp;zero_rows='
. urlencode(sprintf($strTableHasBeenEmptied, htmlspecialchars($each_table['TABLE_NAME'])))
. '" onclick="return confirmLink(this, \'TRUNCATE ';
$empty_table .= PMA_jsFormat($each_table['TABLE_NAME']) . '\')">' . $titles['Empty'] . '</a>';
} else {
$empty_table = $titles['NoEmpty'];
}
$drop_query = 'DROP '
. ($table_is_view ? 'VIEW' : 'TABLE')
. ' ' . PMA_backquote($each_table['TABLE_NAME']);
$drop_message = sprintf(
$table_is_view ? $strViewHasBeenDropped : $strTableHasBeenDropped,
str_replace(' ', '&nbsp;', htmlspecialchars($each_table['TABLE_NAME'])));
}
$tracking_icon = '';
if (PMA_Tracker::isActive()) {
if (PMA_Tracker::isTracked($GLOBALS["db"], $truename)) {
$tracking_icon = '<a href="tbl_tracking.php?' . $url_query.'&amp;table=' . $truename . '"><img class="icon" width="14" height="14" src="' . $pmaThemeImage . 'eye.png" alt="' . $strTrackingIsActive . '" title="' . $strTrackingIsActive . '" /></a>';
} elseif (PMA_Tracker::getVersion($GLOBALS["db"], $truename) > 0) {
$tracking_icon = '<a href="tbl_tracking.php?' . $url_query . '&amp;table=' . $truename . '"><img class="icon" width="14" height="14" src="' . $pmaThemeImage . 'eye_grey.png" alt="' . $strTrackingIsNotActive . '" title="' . $strTrackingIsNotActive . '" /></a>';
}
}
if ($num_columns > 0 && $num_tables > $num_columns
&& (($row_count % $num_columns) == 0)) {
$row_count = 1;
$odd_row = true;
?>
</tr>
</tbody>
</table>
<?php
PMA_TableHeader(false, $server_slave_status);
}
$ignored = false;
$do = false;
if ($server_slave_status) {
////////////////////////////////////////////////////////////////
if ((strlen(array_search($truename, $server_slave_Do_Table)) > 0)
|| (strlen(array_search($db, $server_slave_Do_DB))>0)
|| (count($server_slave_Do_DB)==1 && count($server_slave_Ignore_DB)==1)
) {
$do = true;
}
foreach ($server_slave_Wild_Do_Table as $table) {
if (($db == PMA_replication_strout($table)) && (ereg("^".substr(PMA_replication_strout($table, true), 0, strlen(PMA_replication_strout($table, true))-1), $truename)))
$do = true;
}
////////////////////////////////////////////////////////////////////
if ((strlen(array_search($truename, $server_slave_Ignore_Table))>0) || (strlen(array_search($db, $server_slave_Ignore_DB))>0)) {
$ignored = true;
}
foreach ($server_slave_Wild_Ignore_Table as $table) {
if (($db == PMA_replication_strout($table)) && (ereg("^".substr(PMA_replication_strout($table, true), 0, strlen(PMA_replication_strout($table, true))-1), $truename)))
$ignored = true;
}
}/* elseif ($server_master_status) {
if ((strlen(array_search($db, $server_master_Do_DB))>0) || count($server_master_Do_DB)==1)
$do = true;
elseif ((strlen(array_search($db, $server_master_Ignore_DB))>0) || count($server_master_Ignore_DB)==1)
$ignored = true;
}*/
?>
<tr class="<?php echo $odd_row ? 'odd' : 'even'; $odd_row = ! $odd_row; ?>">
<td align="center">
<input type="checkbox" name="selected_tbl[]"
value="<?php echo htmlspecialchars($each_table['TABLE_NAME']); ?>"
id="checkbox_tbl_<?php echo $i; ?>"<?php echo $checked; ?> /></td>
<th><label for="checkbox_tbl_<?php echo $i; ?>"
title="<?php echo $alias; ?>" style="<?php echo $ignored ? ' ignored' : ''; ?>"><?php echo $truename; ?></label>
<label><?php echo $tracking_icon; ?></label>
</th>
<?php if ($server_slave_status) { ?><td align="center"><?php echo $ignored ? ' <img class="icon" src="' . $pmaThemeImage . 's_cancel.png" width="16" height="16" alt="NOT REPLICATED" />' : ''. $do ? ' <img class="icon" src="' . $pmaThemeImage . 's_success.png" width="16" height="16" alt="REPLICATED" />' : ''; ?></td><?php } ?>
<td align="center"><?php echo $browse_table; ?></td>
<td align="center">
<a href="tbl_structure.php?<?php echo $tbl_url_query; ?>">
<?php echo $titles['Structure']; ?></a></td>
<td align="center"><?php echo $search_table; ?></td>
<?php if (! $db_is_information_schema) { ?>
<td align="center">
<a href="tbl_change.php?<?php echo $tbl_url_query; ?>">
<?php echo $titles['Insert']; ?></a></td>
<td align="center"><?php echo $empty_table; ?></td>
<td align="center">
<a href="sql.php?<?php echo $tbl_url_query;
?>&amp;reload=1&amp;purge=1&amp;sql_query=<?php
echo urlencode($drop_query); ?>&amp;zero_rows=<?php
echo urlencode($drop_message); ?>"
onclick="return confirmLink(this, '<?php echo PMA_jsFormat($drop_query, false); ?>')">
<?php echo $titles['Drop']; ?></a></td>
<?php } // end if (! $db_is_information_schema)
// there is a null value in the ENGINE
// - when the table needs to be repaired, or
// - when it's a view
// so ensure that we'll display "in use" below for a table
// that needs to be repaired
if (isset($each_table['TABLE_ROWS']) && ($each_table['ENGINE'] != null || $table_is_view)) {
if ($table_is_view) {
if ($each_table['TABLE_ROWS'] >= $GLOBALS['cfg']['MaxExactCountViews']){
$row_count_pre = '~';
$sum_row_count_pre = '~';
$show_superscript = PMA_showHint(PMA_sanitize(sprintf($strViewHasAtLeast, '[a@./Documentation.html#cfg_MaxExactCountViews@_blank]', '[/a]')));
}
} elseif($each_table['ENGINE'] == 'InnoDB' && (! $each_table['COUNTED'])) {
// InnoDB table: we did not get an accurate row count
$row_count_pre = '~';
$sum_row_count_pre = '~';
$show_superscript = '';
} else {
$row_count_pre = '';
$show_superscript = '';
}
?>
<td class="value"><?php echo $row_count_pre . PMA_formatNumber($each_table['TABLE_ROWS'], 0) . $show_superscript; ?></td>
<?php if (!($cfg['PropertiesNumColumns'] > 1)) { ?>
<td nowrap="nowrap"><?php echo ($table_is_view ? $strView : $each_table['ENGINE']); ?></td>
<?php if (isset($collation)) { ?>
<td nowrap="nowrap"><?php echo $collation ?></td>
<?php } ?>
<?php } ?>
<?php if ($is_show_stats) { ?>
<td class="value"><a
href="tbl_structure.php?<?php echo $tbl_url_query; ?>#showusage"
><?php echo $formatted_size . ' ' . $unit; ?></a></td>
<td class="value"><?php echo $overhead; ?></td>
<?php } // end if ?>
<?php } elseif ($table_is_view) { ?>
<td class="value">-</td>
<td><?php echo $strView; ?></td>
<td>---</td>
<?php if ($is_show_stats) { ?>
<td class="value">-</td>
<td class="value">-</td>
<?php } ?>
<?php } else { ?>
<td colspan="<?php echo ($structure_tbl_col_cnt - ($db_is_information_schema ? 5 : 8)) ?>"
align="center">
<?php echo $strInUse; ?></td>
<?php } // end if (isset($each_table['TABLE_ROWS'])) else ?>
</tr>
<?php
} // end foreach
// Show Summary
if ($is_show_stats) {
list($sum_formatted, $unit) = PMA_formatByteDown($sum_size, 3, 1);
list($overhead_formatted, $overhead_unit) =
PMA_formatByteDown($overhead_size, 3, 1);
}
?>
</tbody>
<tbody>
<tr><th></th>
<th align="center" nowrap="nowrap">
<?php
// for blobstreaming - if the number of tables is 0, set tableReductionCount to 0
// (we don't want negative numbers here) - rajk
if ($num_tables == 0)
$tableReductionCount = 0;
echo sprintf($strTables, PMA_formatNumber($num_tables - $tableReductionCount, 0));
?>
</th>
<?php
if ($server_slave_status) {
echo ' <th>' . $GLOBALS['strReplication'] . '</th>' . "\n";
}
?>
<th colspan="<?php echo ($db_is_information_schema ? 3 : 6) ?>" align="center">
<?php echo $strSum; ?></th>
<th class="value"><?php echo $sum_row_count_pre . PMA_formatNumber($sum_entries, 0); ?></th>
<?php
if (!($cfg['PropertiesNumColumns'] > 1)) {
$default_engine = PMA_DBI_get_default_engine();
echo ' <th align="center">' . "\n"
. ' <dfn title="'
. sprintf($strDefaultEngine, $default_engine) . '">' .$default_engine . '</dfn></th>' . "\n";
// we got a case where $db_collation was empty
echo ' <th align="center">' . "\n";
if (! empty($db_collation)) {
echo ' <dfn title="'
. PMA_getCollationDescr($db_collation) . ' (' . $strDefault . ')">' . $db_collation
. '</dfn>';
}
echo '</th>';
}
if ($is_show_stats) {
?>
<th class="value"><?php echo $sum_formatted . ' ' . $unit; ?></th>
<th class="value"><?php echo $overhead_formatted . ' ' . $overhead_unit; ?></th>
<?php
}
?>
</tr>
</tbody>
</table>
<div class="clearfloat">
<?php
// Check all tables url
$checkall_url = 'db_structure.php?' . PMA_generate_common_url($db);
?>
<img class="selectallarrow" src="<?php echo $pmaThemeImage .'arrow_'.$text_dir.'.png'; ?>"
width="38" height="22" alt="<?php echo $strWithChecked; ?>" />
<a href="<?php echo $checkall_url; ?>&amp;checkall=1"
onclick="if (markAllRows('tablesForm')) return false;">
<?php echo $strCheckAll; ?></a>
/
<a href="<?php echo $checkall_url; ?>"
onclick="if (unMarkAllRows('tablesForm')) return false;">
<?php echo $strUncheckAll; ?></a>
<?php if ($overhead_check != '') { ?>
/
<a href="#" onclick="unMarkAllRows('tablesForm');
<?php echo $overhead_check; ?> return false;">
<?php echo $strCheckOverhead; ?></a>
<?php } ?>
<select name="submit_mult" onchange="this.form.submit();" style="margin: 0 3em 0 3em;">
<?php
echo ' <option value="' . $strWithChecked . '" selected="selected">'
. $strWithChecked . '</option>' . "\n";
echo ' <option value="' . $strEmpty . '" >'
. $strEmpty . '</option>' . "\n";
echo ' <option value="' . $strDrop . '" >'
. $strDrop . '</option>' . "\n";
echo ' <option value="' . $strPrintView . '" >'
. $strPrintView . '</option>' . "\n";
echo ' <option value="' . $strCheckTable . '" >'
. $strCheckTable . '</option>' . "\n";
echo ' <option value="' . $strOptimizeTable . '" >'
. $strOptimizeTable . '</option>' . "\n";
echo ' <option value="' . $strRepairTable . '" >'
. $strRepairTable . '</option>' . "\n";
echo ' <option value="' . $strAnalyzeTable . '" >'
. $strAnalyzeTable . '</option>' . "\n";
echo ' <option value="' . $strExport . '" >'
. $strExport . '</option>' . "\n";
?>
</select>
<script type="text/javascript">
<!--
// Fake js to allow the use of the <noscript> tag
//-->
</script>
<noscript>
<input type="submit" value="<?php echo $strGo; ?>" />
</noscript>
<?php echo implode("\n", $hidden_fields) . "\n"; ?>
</div>
</form>
<?php
// display again the table list navigator
PMA_listNavigator($total_num_tables, $pos, $_url_params, 'db_structure.php', 'frame_content', $GLOBALS['cfg']['MaxTableList']);
?>
<hr />
<?php
// Routines
require './libraries/db_routines.inc.php';
// Events
if (PMA_MYSQL_INT_VERSION > 50100) {
require './libraries/db_events.inc.php';
}
/**
* Work on the database
* redesigned 2004-05-08 by mkkeck
*/
/* DATABASE WORK */
/* Printable view of a table */
echo '<p>';
echo '<a href="db_printview.php?' . $url_query . '">';
if ($cfg['PropertiesIconic']) {
echo '<img class="icon" src="' . $pmaThemeImage
.'b_print.png" width="16" height="16" alt="" />';
}
echo $strPrintView . '</a> ';
echo '<a href="./db_datadict.php?' . $url_query . '">';
if ($cfg['PropertiesIconic']) {
echo '<img class="icon" src="' . $pmaThemeImage
.'b_tblanalyse.png" width="16" height="16" alt="" />';
}
echo $strDataDict . '</a>';
echo '</p>';
if (empty($db_is_information_schema)) {
require './libraries/display_create_table.lib.php';
} // end if (Create Table dialog)
/**
* Displays the footer
*/
require_once './libraries/footer.inc.php';
?>

View File

@@ -1,206 +0,0 @@
<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
* @version $Id$
* @author Alexander Rutkowski
* @package phpMyAdmin
*/
// Run common work
require_once './libraries/common.inc.php';
require_once './libraries/Table.class.php';
require './libraries/db_common.inc.php';
$url_query .= '&amp;goto=tbl_tracking.php&amp;back=db_tracking.php';
// Get the database structure
$sub_part = '_structure';
require './libraries/db_info.inc.php';
// Get relation settings
require_once './libraries/relation.lib.php';
// Work to do?
// (here, do not use $_REQUEST['db] as it can be crafted)
if (isset($_REQUEST['delete_tracking']) && isset($_REQUEST['table'])) {
PMA_Tracker::deleteTracking($GLOBALS['db'], $_REQUEST['table']);
}
// Get tracked data about the database
$data = PMA_Tracker::getTrackedData($_REQUEST['db'], '', '1');
// No tables present and no log exist
if ($num_tables == 0 && count($data['ddlog']) == 0) {
echo '<p>' . $strNoTablesFound . '</p>' . "\n";
if (empty($db_is_information_schema)) {
require './libraries/display_create_table.lib.php';
}
// Display the footer
require_once './libraries/footer.inc.php';
exit;
}
// ---------------------------------------------------------------------------
/*
* Display top menu links
*/
require_once './libraries/db_links.inc.php';
// Prepare statement to get HEAD version
$all_tables_query = ' SELECT table_name, MAX(version) as version FROM ' .
PMA_backquote($GLOBALS['cfg']['Server']['pmadb']) . '.' .
PMA_backquote($GLOBALS['cfg']['Server']['tracking']) .
' WHERE ' . PMA_backquote('db_name') . ' = \'' . PMA_sqlAddslashes($_REQUEST['db']) . '\' ' .
' GROUP BY '. PMA_backquote('table_name') .
' ORDER BY '. PMA_backquote('table_name') .' ASC';
$all_tables_result = PMA_query_as_controluser($all_tables_query);
// If a HEAD version exists
if (PMA_DBI_num_rows($all_tables_result) > 0) {
?>
<h3><?php echo $strTrackingTrackedTables;?></h3>
<table id="versions" class="data">
<thead>
<tr>
<th><?php echo $strDatabase;?></th>
<th><?php echo $strTable;?></th>
<th><?php echo $strTrackingThLastVersion;?></th>
<th><?php echo $strTrackingThCreated;?></th>
<th><?php echo $strTrackingThUpdated;?></th>
<th><?php echo $strStatus;?></th>
<th><?php echo $strAction;?></th>
<th><?php echo $strShow;?></th>
</tr>
</thead>
<tbody>
<?php
// Print out information about versions
$drop_image_or_text = '';
if (true == $GLOBALS['cfg']['PropertiesIconic']) {
$drop_image_or_text .= '<img class="icon" width="16" height="16" src="' . $pmaThemeImage . 'b_drop.png" alt="' . $strDeleteTrackingData . '" title="' . $strDeleteTrackingData . '" />';
}
if ('both' === $GLOBALS['cfg']['PropertiesIconic'] || false === $GLOBALS['cfg']['PropertiesIconic']) {
$drop_image_or_text .= $strDrop;
}
$style = 'odd';
while ($one_result = PMA_DBI_fetch_array($all_tables_result)) {
list($table_name, $version_number) = $one_result;
$table_query = ' SELECT * FROM ' .
PMA_backquote($GLOBALS['cfg']['Server']['pmadb']) . '.' .
PMA_backquote($GLOBALS['cfg']['Server']['tracking']) .
' WHERE `db_name` = \'' . PMA_sqlAddslashes($_REQUEST['db']) . '\' AND `table_name` = \'' . PMA_sqlAddslashes($table_name) . '\' AND `version` = \'' . $version_number . '\'';
$table_result = PMA_query_as_controluser($table_query);
$version_data = PMA_DBI_fetch_array($table_result);
if ($version_data['tracking_active'] == 1) {
$version_status = $strTrackingStatusActive;
} else {
$version_status = $strTrackingStatusNotActive;
}
$tmp_link = 'tbl_tracking.php?' . $url_query . '&amp;table=' . htmlspecialchars($version_data['table_name']);
$delete_link = 'db_tracking.php?' . $url_query . '&amp;table=' . htmlspecialchars($version_data['table_name']) . '&amp;delete_tracking=true&amp';
?>
<tr class="<?php echo $style;?>">
<td><?php echo htmlspecialchars($version_data['db_name']);?></td>
<td><?php echo htmlspecialchars($version_data['table_name']);?></td>
<td><?php echo $version_data['version'];?></td>
<td><?php echo $version_data['date_created'];?></td>
<td><?php echo $version_data['date_updated'];?></td>
<td><?php echo $version_status;?></td>
<td><a href="<?php echo $delete_link;?>" onclick="return confirmLink(this, '<?php echo PMA_jsFormat($strDeleteTrackingData, false); ?>')"><?php echo $drop_image_or_text; ?></a></td>
<td> <a href="<?php echo $tmp_link; ?>"><?php echo $strTrackingVersions;?></a>
| <a href="<?php echo $tmp_link; ?>&amp;report=true&amp;version=<?php echo $version_data['version'];?>"><?php echo $strTrackingReport;?></a>
| <a href="<?php echo $tmp_link; ?>&amp;snapshot=true&amp;version=<?php echo $version_data['version'];?>"><?php echo $strTrackingStructureSnapshot;?></a></td>
</tr>
<?php
if ($style == 'even') {
$style = 'odd';
} else {
$style = 'even';
}
}
unset($tmp_link);
?>
</tbody>
</table>
<?php
}
// Get list of tables
$table_list = PMA_getTableList($GLOBALS['db']);
// For each table try to get the tracking version
foreach ($table_list as $key => $value) {
if (PMA_Tracker::getVersion($GLOBALS['db'], $value['Name']) == -1) {
$my_tables[] = $value['Name'];
}
}
// If untracked tables exist
if (isset($my_tables)) {
?>
<h3><?php echo $strTrackingUntrackedTables;?></h3>
<table id="noversions" class="data">
<thead>
<tr>
<th width="300"><?php echo $strTable;?></th>
<th></th>
</tr>
</thead>
<tbody>
<?php
// Print out list of untracked tables
$style = 'odd';
foreach ($my_tables as $key => $tablename) {
if (PMA_Tracker::getVersion($GLOBALS['db'], $tablename) == -1) {
$my_link = '<a href="tbl_tracking.php?' . $url_query . '&amp;table=' . htmlspecialchars($tablename) .'">';
if ($cfg['PropertiesIconic']) {
$my_link .= '<img class="icon" src="' . $pmaThemeImage . 'eye.png" width="16" height="16" alt="' . $strTrackingTrackTable . '" /> ';
}
$my_link .= $strTrackingTrackTable . '</a>';
?>
<tr class="<?php echo $style;?>">
<td><?php echo htmlspecialchars($tablename);?></td>
<td><?php echo $my_link;?></td>
</tr>
<?php
if ($style == 'even') {
$style = 'odd';
} else {
$style = 'even';
}
}
}
?>
</tbody>
</table>
<?php
}
// If available print out database log
if (count($data['ddlog']) > 0) {
$log = '';
foreach ($data['ddlog'] as $entry) {
$log .= '# ' . $entry['date'] . ' ' . $entry['username'] . "\n" . $entry['statement'] . "\n";
}
PMA_showMessage($strTrackingDatabaseLog, $log);
}
/**
* Display the footer
*/
require_once './libraries/footer.inc.php';
?>

256
docs.css
View File

@@ -1,256 +0,0 @@
/* $Id$ */
/* Stylesheet for phpMyAdmin documentation */
/* vim: expandtab ts=4 sw=4 sts=4 tw=78
*/
body {
background-color: #ffffff;
font-family: sans-serif;
color: #000000;
margin: 0;
padding: 0;
background: url('themes/original/img/logo_right.png') no-repeat fixed bottom right;
}
img {
border: 0;
}
#header {
margin: 0px;
padding: 1em 0.5em 0.5em 1em;
background: #036;
border: 0px;
border-bottom: 1px solid black;
}
#header h1 {
padding: 0;
margin: 0;
margin-right: 1em;
color: white;
}
#header h1 a {
color: #7584b3;
}
#header h1 a .myadmin {
color: #ffad17;
}
#body {
margin: 2em 1em 1em 1em;
padding: 0px;
padding-right: 13em;
}
ul#footer {
padding: 0;
margin: 0;
max-width: 100%;
}
#footer li {
font-size: smaller;
list-style: none;
float: left;
padding: 1em;
color: gray;
border: none;
}
#footer li.logo {
padding: 0.5em;
}
#footer a {
color: #c19e66;
}
abbr, acronym {
border-bottom: 1px dotted;
}
abbr, acronym {
cursor: help;
}
a {
text-decoration: none;
color: #c17d11;
}
a:hover {
text-decoration: underline;
color: #8f5902;
}
sup {
font-size: 0.7em;
}
sup:before {
content: ' [';
}
sup:after {
content: ']';
}
ul.header {
background: url(themes/original/img/docs_menu_bg.png) transparent fixed;
position: fixed;
top: 3em;
left: auto;
width: 8.5em;
right: 2em;
text-align: center;
margin: 1em;
padding: 1em;
border: 1px solid black;
}
ul.header li {
margin: 0;
padding: 0;
display: block;
}
ul.header a {
text-decoration: none;
font-size: medium;
color: #036;
background-color: transparent;
font-weight: bolder;
display: block;
}
ul.header a:hover {
color: #000099;
background-color: #99CCFF;
}
h2 {
color: #727e0a;
max-width: 70em;
}
h3 {
color: #727e0a;
max-width: 70em;
}
h4, h5 {
color: #727e0a;
max-width: 70em;
}
h4 a {
color: #727e0a;
}
p {
max-width: 70em;
margin: 1em;
}
table {
margin: 1em;
border: none;
}
table tr,table td,table th {
border: none;
}
table.translators {
text-align: center;
display: table; margin-left: auto; margin-right: auto;
border-collapse: collapse;
}
table.translators th {
color: #000000;
background-color: #d3dce3;
}
table.translators td, table.translators th {
border: 1px solid #000000;
padding: 5px;
}
ul, dl, ol {
margin: 1em;
max-width: 70em;
}
ul ul, ol ul {
margin-bottom: 0;
}
li {
margin-top: 0.5em;
}
pre {
margin: 1em;
border: 1px solid silver;
color: #000000;
background-color: #eeeeee;
padding: 0.5em;
max-width: 70em;
}
/* no more intend inside li */
li pre {
margin: 1em 0 1em 0;
}
pre.wrap {
white-space: normal;
}
dt {
font-weight: bold;
margin-left: 2em;
}
dd {
margin-left: 4em;
margin-bottom: 1em;
}
.configrule {
font-family: monospace;
}
dt.configrule {
font-weight: bold;
}
.important {
color: #bb0000;
background-color: #ffeeee;
padding: 0 0.5em 0 0.5em;
}
p.important {
border: 1px dotted #ff0000;
padding: 0.5em;
}
p.footnote {
margin: 0 5% 2px 7%;
padding-top: 3em;
}
p.footnote:first-line {
margin-left: -2%;
}
/* Block to mark separate translation string */
div.l10n {
display: inline;
}

View File

@@ -1,357 +0,0 @@
<html>
<head>
<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
<meta name=Generator content="Microsoft Word 11 (filtered)">
<title> <20>Synchronize<7A> feature in </title>
<style>
<!--
/* Font Definitions */
@font-face
{font-family:Tahoma;
panose-1:2 11 6 4 3 5 4 4 2 4;}
@font-face
{font-family:Cambria;
panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
{font-family:Calibri;
panose-1:2 15 5 2 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
{margin-top:0in;
margin-right:0in;
margin-bottom:10.0pt;
margin-left:0in;
line-height:115%;
font-size:11.0pt;
font-family:Calibri;}
h1
{margin-top:24.0pt;
margin-right:0in;
margin-bottom:0in;
margin-left:0in;
margin-bottom:.0001pt;
line-height:115%;
page-break-after:avoid;
font-size:14.0pt;
font-family:Cambria;
color:#365F91;}
h2
{margin-top:10.0pt;
margin-right:0in;
margin-bottom:0in;
margin-left:0in;
margin-bottom:.0001pt;
line-height:115%;
page-break-after:avoid;
font-size:13.0pt;
font-family:Cambria;
color:#4F81BD;}
h3
{margin-right:0in;
margin-left:0in;
font-size:13.5pt;
font-family:"Times New Roman";}
strong
{font-family:"Times New Roman";}
p.MsoAcetate, li.MsoAcetate, div.MsoAcetate
{margin:0in;
margin-bottom:.0001pt;
font-size:8.0pt;
font-family:Tahoma;}
span.Heading3Char
{font-family:"Times New Roman";
font-weight:bold;}
span.BalloonTextChar
{font-family:Tahoma;}
span.Heading1Char
{font-family:Cambria;
color:#365F91;
font-weight:bold;}
p.NoSpacing, li.NoSpacing, div.NoSpacing
{margin:0in;
margin-bottom:.0001pt;
font-size:11.0pt;
font-family:Calibri;}
span.IntenseEmphasis
{font-family:"Times New Roman";
color:#4F81BD;
font-weight:bold;
font-style:italic;}
span.Heading2Char
{font-family:Cambria;
color:#4F81BD;
font-weight:bold;}
@page Section1
{size:8.5in 11.0in;
margin:1.0in 1.0in 1.0in 1.0in;}
div.Section1
{page:Section1;}
-->
</style>
</head>
<body lang=EN-US>
<div class=Section1>
<p class=MsoNormal><b><span style='font-size:13.0pt;line-height:115%;
font-family:Cambria;color:#4F81BD'><img width=22 height=21 id="Picture 45"
src="Synchronization_User%20Manual_files/image001.jpg"
alt="C:\xampp\htdocs\Branch\zahra\themes\original\img\s_sync.png"></span></b><span
class=Heading2Char><span style='font-size:13.0pt;line-height:115%'><EFBFBD><EFBFBD>Synchronize<EFBFBD></span></span>
feature in <img width=134 height=23 id="Picture 44"
src="Synchronization_User%20Manual_files/image002.gif"
alt="C:\xampp\htdocs\Branch\zahra\themes\original\img\logo_left.png"></p>
This feature is helpful for developers who need to replicate their databases<65> structure as well as data.
Moreover, this feature not only helps replication but also facilitates the user to keep his/her database in sync with another database. Other than the full database, certain tables of the databases can also be synchronized.
<h3><span class=IntenseEmphasis><span style='font-size:12.0pt;font-weight:normal;
font-style:normal'><strong>How to Synchronize:</strong></span></span></h3>
The synchronize tab is visible upfront in the right pane, the last link on the top of the home page.
<p class=MsoNormal><img width=682 height=421 id="Picture 1"
src="Synchronization_User%20Manual_files/image003.gif"></p>
<p class=MsoNormal>Press on the Synchronize tab and a form will be displayed.</p>
<p class=MsoNormal><img width=666 height=398 id="Picture 46"
src="Synchronization_User%20Manual_files/image004.jpg"></p>
<p class=MsoNormal><EFBFBD><span
class=Heading2Char><span style='font-size:13.0pt;line-height:115%'>Db Authentication Form?</span></span></p>
<p class=MsoNormal> You need to fill in the host name of the server, the
username and password of an user account already there in MySQL. Port is by default populated with 3306 (MySQL default port). Then the name of the
database should be mentioned at the end.All the information other than the port needs to be filled explicitly for the source as well as target servers.</p>
<p class=MsoNormal>A filled form is displayed underneath:</p>
<p class=MsoNormal><img width=653 height=394 id="Picture 7"
src="Synchronization_User%20Manual_files/image005.jpg"><span
class=Heading2Char><span style='font-size:13.0pt;line-height:115%'><EFBFBD></span></span></p>
<p class=MsoNormal><span
class=Heading2Char><span style='font-size:13.0pt;line-height:115%'>Invalid entries
during DB Authentication:</span></span></p>
<p class=MsoNormal>The user will not be allowed to by pass this page if any of
the values like Host name, Username and Database name remain unfilled and the
user presses <20>Go<47> button. An alert<72> would occur as follows, not allowing the user to
move to the next page. On the other hand, the password field can remain empty.
</p>
<p class=MsoNormal><img width=640 height=384 id="Picture 10"
src="Synchronization_User%20Manual_files/image006.jpg"></p>
<p class=MsoNormal>If any wrong information is provided by the user like wrong
password, username or hostname then the connection is not established with the
corresponding database and an error message is seen as follows.</p>
<p class=MsoNormal><img width=653 height=394 id="Picture 13"
src="Synchronization_User%20Manual_files/image007.jpg"></p>
<p class=MsoNormal>If the user enters a database name that does not exist, then
even an error message occurs as follows and the user needs to re-enter all the
information.</p>
<p class=MsoNormal><img width=653 height=391 id="Picture 16"
src="Synchronization_User%20Manual_files/image008.jpg"></p>
<p class=MsoNormal></p>
<h2>After passing DB Authentication:</h2>
<p class=MsoNormal>After successfully by passing authentication phase, the source and
target database table names will be displayed. It will be a tabular
representation like this.</p>
<p class=MsoNormal><img width=614 height=368 id="Picture 19"
src="Synchronization_User%20Manual_files/image009.jpg"></p>
<h2>Left Column:<3A>Source Database<73></h2>
<p class=MsoNormal>On the left, are listed the source database table names.<2E>
Some of the names have a <20>+<2B> plus sign preceding them. This shows that these
tables are only present in source database and they need to be added to the
target database in order to synchronize the target database.While those table name that are not preceded by a <20>+<2B> sign
are also present in target database.</p>
<h2><EFBFBD>Middle Column:<3A>Difference<63></h2>
The column in the middle shows the difference between the source and target corresponding tables.The difference is depicted by the red and green buttons.
<p class=MsoNormal><img width=35 height=35 id="Picture 26"
src="Synchronization_User%20Manual_files/image010.gif"
alt="C:\xampp\htdocs\Branch\zahra\themes\original\img\new_struct.jpg">The
presence of this button against any source table name shows that there is a
structure difference between the corresponding source and the target tables. If
at the same time, the source table name is preceded by a <20>+<2B>plus, then the
presence of this button shows that the table needs to be created in target
database.<2E> </p>
<p class=MsoNormal><img width=35 height=35 id="Picture 24"
src="Synchronization_User%20Manual_files/image011.jpg"
alt="C:\xampp\htdocs\Branch\zahra\themes\original\img\new_data.jpg"><EFBFBD>The
presence of this button against any source table name shows that there is a
data difference between the corresponding source and target table. If at the
same time, the source table name is preceded by a <20>+<2B>plus, then the presence of
this button shows that the table needs to be created and populated in target
database.<2E> </p>
<p class=MsoNormal>&nbsp;</p>
<p class=MsoNormal><img width=33 height=31 id="Picture 27"
src="Synchronization_User%20Manual_files/image012.jpg"
alt="C:\xampp\htdocs\Branch\zahra\themes\original\img\new_struct_selected.jpg"><EFBFBD>After
clicking the red button with S printed on, it turns to grey showing that the structure difference
of that particular table has been selected by the user.</p>
<p class=MsoNormal><img width=33 height=31 id="Picture 25"
src="Synchronization_User%20Manual_files/image013.jpg"
alt="C:\xampp\htdocs\Branch\zahra\themes\original\img\new_data_selected.jpg"><EFBFBD>After
clicking the red button with a D printed on, it turns to grey showing that the data difference of
that particular table has been selected by the user.</p>
<h2>Right Column: <20>Target Database<73></h2>
<p class=MsoNormal>On the right, are listed the target database table names.
There are few table names that have <20>(not present)<29> appended after their names.
This means that these tables are to be created in target database in order to
synchronize target database with source database. Some tables<65> names have a <20>-<2D>
minus sign preceding them. This shows that these tables are only present in
target database and they will remain unchanged in the target database. </p>
<p class=MsoNormal>While those table names that are not preceded by any sign,
or do not have <20>(not present)<29> appended after them are already synchronized.</p>
<p class=MsoNormal><img width=678 height=408 id="Picture 28"
src="Synchronization_User%20Manual_files/image014.jpg"></p>
<h2>Detailed Difference Table:</h2>
<p class=MsoNormal><EFBFBD>The above view shows that for those tables whose structure
or data differences have been selected (depicted by grey buttons <img width=18
height=17 src="Synchronization_User%20Manual_files/image015.jpg"
alt="C:\xampp\htdocs\Branch\zahra\themes\original\img\new_struct_selected.jpg"><EFBFBD>or
<img width=17 height=16 src="Synchronization_User%20Manual_files/image016.jpg"
alt="C:\xampp\htdocs\Branch\zahra\themes\original\img\new_data_selected.jpg">),<2C>
there exists a description in the second table underneath the table showing
source and target database table names.<2E> The description becomes visible only
when a red or green button against any table is pressed.</p>
<h2>Table:</h2>
<p class=MsoNormal>Displays the <b>Table Name</b> column only to show the name
of the table.</p>
<h2>Structure Difference:</h2>
<p class=MsoNormal><EFBFBD>It elaborates the difference in structure like</p>
<p class=MsoNormal><b>Create Table: </b>When the table needs to be created in
the target database, then only a <img width=16 height=16 id="Picture 31"
src="Synchronization_User%20Manual_files/image017.gif"
alt="C:\xampp\htdocs\Branch\zahra\themes\original\img\s_success.png"><EFBFBD>tick is
seen in the create table column of the description table.<2E> </p>
<p class=MsoNormal><b>Add Column(s):</b><EFBFBD> Shows the number of columns to be
added.</p>
<p class=MsoNormal><b>Remove Column(s):</b> Shows the number of columns to be
removed.</p>
<p class=MsoNormal><b>Alter Column(s):<3A> </b>Shows the number of columns to be
altered.</p>
<p class=MsoNormal><b>Apply Index(s): </b><EFBFBD>Shows the number of indexes to be
applied.</p>
<p class=MsoNormal><b>Remove Index(s):</b><EFBFBD> Shows the number of indexes to be
removed.</p>
<h2>Data Difference:</h2>
<p class=MsoNormal>It elaborates the difference in data like </p>
<p class=MsoNormal><b>Update Row(s):</b> Shows the number of rows to be
updated.</p>
<p class=MsoNormal><b>Insert Row(s): </b>Shows the number of rows to be
inserted. </p>
<p class=MsoNormal>When the selected buttons (depicted by grey buttons <img
width=18 height=17 src="Synchronization_User%20Manual_files/image015.jpg"
alt="C:\xampp\htdocs\Branch\zahra\themes\original\img\new_struct_selected.jpg"><EFBFBD>or<img
width=17 height=16 src="Synchronization_User%20Manual_files/image016.jpg"
alt="C:\xampp\htdocs\Branch\zahra\themes\original\img\new_data_selected.jpg">)
are pressed again, the buttons become deselected (depicted by colored buttons <img
width=23 height=23 src="Synchronization_User%20Manual_files/image019.jpg"
alt="C:\xampp\htdocs\Branch\zahra\themes\original\img\new_struct.jpg"><EFBFBD>or<img
width=23 height=23 src="Synchronization_User%20Manual_files/image020.jpg"
alt="C:\xampp\htdocs\Branch\zahra\themes\original\img\new_data.jpg">) and the
description from the second table regarding those table has been removed.</p>
<h2><span style='font-weight:normal'><img width=666 height=416 id="Picture 41"
src="Synchronization_User%20Manual_files/image021.jpg"></span></h2>
<h2>Check Box in Footer:</h2>
<p class=MsoNormal>A checkbox is also visible in the above view. It has a <20><b>Would
you like to delete all the previous rows from the target tables?</b><EFBFBD></p>
<p class=MsoNormal>By checking this check box, the user assures the deletion of
any previous rows residing in the target tables that are to be synchronized.
This means that before any value gets inserted or updated in the target tables,
any previously residing rows will be deleted.</p>
<h2>Apply Selected Changes Button in Footer: </h2>
<p class=MsoNormal>The <20>Apply Selected Changes<65> button, as it is clear from the
name, applies only selected tables<65> changes i.e. it allows user to synchronize
selective tables between the source and the target databases.</p>
<p class=MsoNormal>After pressing <20>Apply Selected Changes<65> button, the view
becomes<EFBFBD> </p>
<p class=MsoNormal><img width=666 height=401 id="Picture 35"
src="Synchronization_User%20Manual_files/image022.jpg"></p>
<p class=MsoNormal>The <20>course<73> table in the above view, now only shows data
difference depicted by<img width=23 height=23
src="Synchronization_User%20Manual_files/image020.jpg"
alt="C:\xampp\htdocs\Branch\zahra\themes\original\img\new_data.jpg">. This
shows that the previously selected structure difference in that table has been
applied in target database table <20>course<73> because we pressed the <20>Apply
Selected Changes<65> button after selection. </p>
<p class=MsoNormal><EFBFBD>Apply Selected Changes<65> button allows the user to synchronize
tables<EFBFBD> data and structure according to his/her requirement or desire.</p>
<p class=MsoNormal>Whenever <20>Apply Selected Changes<65> button is pressed and the
page is reloaded, the checkbox becomes unchecked. This means that the user gets
a choice to delete the previous rows of a certain set of tables and not from
all the tables. </p>
<h2>Synchronize databases button in Footer:</h2>
<p class=MsoNormal><EFBFBD>Synchronize databases<65> button in the footer completely
synchronizes the target database with the source database irrespective of which
tables are selected for which type of synchronization.</p>
<p class=MsoNormal><EFBFBD><EFBFBD>Synchronize databases<65> button if pressed after <20>Apply
Selected Changes<65> button has been pressed once or twice or several times, will
apply all the remaining changes that have not been selected earlier.</p>
<p class=MsoNormal>The view after <20>Synchronize databases<65> button has been
pressed look like this:</p>
<p class=MsoNormal><img width=666 height=399 id="Picture 49"
src="Synchronization_User%20Manual_files/image023.jpg"></p>
<p class=MsoNormal>The lower half of the page displays the list of queries that
have been executed in order to synchronize the databases while the upper half
displays the source and target database table names.</p>
</div>
</body>
</html>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 863 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 47 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 45 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 780 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 738 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 550 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 916 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 888 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 50 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 43 KiB

View File

@@ -1,86 +0,0 @@
<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
* phpMyAdmin fatal error display page
*
* @version $Id$
* @package phpMyAdmin
*/
/**
* Input sanitizing.
*/
require_once './libraries/sanitizing.lib.php';
/* Get variables */
if (! empty($_REQUEST['lang']) && is_string($_REQUEST['lang'])) {
$lang = htmlspecialchars($_REQUEST['lang']);
} else {
$lang = 'en';
}
if (! empty($_REQUEST['dir']) && is_string($_REQUEST['dir'])) {
$dir = htmlspecialchars($_REQUEST['dir']);
} else {
$dir = 'ltr';
}
if (! empty($_REQUEST['type']) && is_string($_REQUEST['type'])) {
$type = htmlspecialchars($_REQUEST['type']);
} else {
$type = 'error';
}
// force utf-8 to avoid XSS with crafted URL and utf-7 in charset parameter
$charset = 'utf-8';
header('Content-Type: text/html; charset=' . $charset);
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="<?php echo $lang; ?>" dir="<?php echo $dir; ?>">
<head>
<link rel="icon" href="./favicon.ico" type="image/x-icon" />
<link rel="shortcut icon" href="./favicon.ico" type="image/x-icon" />
<title>phpMyAdmin</title>
<meta http-equiv="Content-Type" content="text/html; charset=<?php echo $charset; ?>" />
<style type="text/css">
<!--
html {
padding: 0;
margin: 0;
}
body {
font-family: sans-serif;
font-size: small;
color: #000000;
background-color: #F5F5F5;
margin: 1em;
}
h1 {
margin: 0;
padding: 0.3em;
font-size: 1.4em;
font-weight: bold;
color: #ffffff;
background-color: #ff0000;
}
p {
margin: 0;
padding: 0.5em;
border: 0.1em solid red;
background-color: #ffeeee;
}
//-->
</style>
</head>
<body>
<h1>phpMyAdmin - <?php echo $type; ?></h1>
<p><?php
if (function_exists('get_magic_quotes_gpc') && get_magic_quotes_gpc()) {
echo PMA_sanitize(stripslashes($_REQUEST['error']));
} else {
echo PMA_sanitize($_REQUEST['error']);
}
?></p>
</body>
</html>

View File

@@ -1,682 +0,0 @@
<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
* @todo too much die here, or?
* @version $Id$
* @package phpMyAdmin
*/
/**
* Get the variables sent or posted to this script and a core script
*/
require_once './libraries/common.inc.php';
require_once './libraries/zip.lib.php';
require_once './libraries/plugin_interface.lib.php';
PMA_checkParameters(array('what', 'export_type'));
// Scan plugins
$export_list = PMA_getPlugins('./libraries/export/', array('export_type' => $export_type, 'single_table' => isset($single_table)));
// Backward compatbility
$type = $what;
// Check export type
if (!isset($export_list[$type])) {
die('Bad type!');
}
/**
* valid compression methods
*/
$compression_methods = array(
'zip',
'gzip',
'bzip',
);
/**
* init and variable checking
*/
$compression = false;
$onserver = false;
$save_on_server = false;
$buffer_needed = false;
if (empty($_REQUEST['asfile'])) {
$asfile = false;
} else {
$asfile = true;
if (in_array($_REQUEST['compression'], $compression_methods)) {
$compression = $_REQUEST['compression'];
$buffer_needed = true;
}
if (!empty($_REQUEST['onserver'])) {
$onserver = $_REQUEST['onserver'];
// Will we save dump on server?
$save_on_server = ! empty($cfg['SaveDir']) && $onserver;
}
}
// Does export require to be into file?
if (isset($export_list[$type]['force_file']) && ! $asfile) {
$message = PMA_Message::error('strExportMustBeFile');
$GLOBALS['js_include'][] = 'functions.js';
require_once './libraries/header.inc.php';
if ($export_type == 'server') {
$active_page = 'server_export.php';
require './server_export.php';
} elseif ($export_type == 'database') {
$active_page = 'db_export.php';
require './db_export.php';
} else {
$active_page = 'tbl_export.php';
require './tbl_export.php';
}
exit();
}
// Generate error url and check for needed variables
if ($export_type == 'server') {
$err_url = 'server_export.php?' . PMA_generate_common_url();
} elseif ($export_type == 'database' && strlen($db)) {
$err_url = 'db_export.php?' . PMA_generate_common_url($db);
// Check if we have something to export
if (isset($table_select)) {
$tables = $table_select;
} else {
$tables = array();
}
} elseif ($export_type == 'table' && strlen($db) && strlen($table)) {
$err_url = 'tbl_export.php?' . PMA_generate_common_url($db, $table);
} else {
die('Bad parameters!');
}
// Get the functions specific to the export type
require './libraries/export/' . PMA_securePath($type) . '.php';
/**
* Increase time limit for script execution and initializes some variables
*/
@set_time_limit($cfg['ExecTimeLimit']);
if (!empty($cfg['MemoryLimit'])) {
@ini_set('memory_limit', $cfg['MemoryLimit']);
}
// Start with empty buffer
$dump_buffer = '';
$dump_buffer_len = 0;
// We send fake headers to avoid browser timeout when buffering
$time_start = time();
/**
* Output handler for all exports, if needed buffering, it stores data into
* $dump_buffer, otherwise it prints thems out.
*
* @param string the insert statement
*
* @return bool Whether output suceeded
*/
function PMA_exportOutputHandler($line)
{
global $time_start, $dump_buffer, $dump_buffer_len, $save_filename;
// Kanji encoding convert feature
if ($GLOBALS['output_kanji_conversion']) {
$line = PMA_kanji_str_conv($line, $GLOBALS['knjenc'], isset($GLOBALS['xkana']) ? $GLOBALS['xkana'] : '');
}
// If we have to buffer data, we will perform everything at once at the end
if ($GLOBALS['buffer_needed']) {
$dump_buffer .= $line;
if ($GLOBALS['onfly_compression']) {
$dump_buffer_len += strlen($line);
if ($dump_buffer_len > $GLOBALS['memory_limit']) {
if ($GLOBALS['output_charset_conversion']) {
$dump_buffer = PMA_convert_string($GLOBALS['charset'], $GLOBALS['charset_of_file'], $dump_buffer);
}
// as bzipped
if ($GLOBALS['compression'] == 'bzip' && @function_exists('bzcompress')) {
$dump_buffer = bzcompress($dump_buffer);
}
// as a gzipped file
elseif ($GLOBALS['compression'] == 'gzip' && @function_exists('gzencode')) {
// without the optional parameter level because it bug
$dump_buffer = gzencode($dump_buffer);
}
if ($GLOBALS['save_on_server']) {
$write_result = @fwrite($GLOBALS['file_handle'], $dump_buffer);
if (!$write_result || ($write_result != strlen($dump_buffer))) {
$GLOBALS['message'] = PMA_Message::error('strNoSpace');
$GLOBALS['message']->addParam($save_filename);
return false;
}
} else {
echo $dump_buffer;
}
$dump_buffer = '';
$dump_buffer_len = 0;
}
} else {
$time_now = time();
if ($time_start >= $time_now + 30) {
$time_start = $time_now;
header('X-pmaPing: Pong');
} // end if
}
} else {
if ($GLOBALS['asfile']) {
if ($GLOBALS['output_charset_conversion']) {
$line = PMA_convert_string($GLOBALS['charset'], $GLOBALS['charset_of_file'], $line);
}
if ($GLOBALS['save_on_server'] && strlen($line) > 0) {
$write_result = @fwrite($GLOBALS['file_handle'], $line);
if (!$write_result || ($write_result != strlen($line))) {
$GLOBALS['message'] = PMA_Message::error('strNoSpace');
$GLOBALS['message']->addParam($save_filename);
return false;
}
$time_now = time();
if ($time_start >= $time_now + 30) {
$time_start = $time_now;
header('X-pmaPing: Pong');
} // end if
} else {
// We export as file - output normally
echo $line;
}
} else {
// We export as html - replace special chars
echo htmlspecialchars($line);
}
}
return true;
} // end of the 'PMA_exportOutputHandler()' function
// Defines the default <CR><LF> format. For SQL always use \n as MySQL wants this on all platforms.
if ($what == 'sql') {
$crlf = "\n";
} else {
$crlf = PMA_whichCrlf();
}
$output_kanji_conversion = function_exists('PMA_kanji_str_conv') && $type != 'xls';
// Do we need to convert charset?
$output_charset_conversion = $asfile && $cfg['AllowAnywhereRecoding']
&& isset($charset_of_file) && $charset_of_file != $charset
&& $type != 'xls';
// Use on the fly compression?
$onfly_compression = $GLOBALS['cfg']['CompressOnFly'] && ($compression == 'gzip' || $compression == 'bzip');
if ($onfly_compression) {
$memory_limit = trim(@ini_get('memory_limit'));
// 2 MB as default
if (empty($memory_limit)) {
$memory_limit = 2 * 1024 * 1024;
}
if (strtolower(substr($memory_limit, -1)) == 'm') {
$memory_limit = (int)substr($memory_limit, 0, -1) * 1024 * 1024;
} elseif (strtolower(substr($memory_limit, -1)) == 'k') {
$memory_limit = (int)substr($memory_limit, 0, -1) * 1024;
} elseif (strtolower(substr($memory_limit, -1)) == 'g') {
$memory_limit = (int)substr($memory_limit, 0, -1) * 1024 * 1024 * 1024;
} else {
$memory_limit = (int)$memory_limit;
}
// Some of memory is needed for other thins and as treshold.
// Nijel: During export I had allocated (see memory_get_usage function)
// approx 1.2MB so this comes from that.
if ($memory_limit > 1500000) {
$memory_limit -= 1500000;
}
// Some memory is needed for compression, assume 1/3
$memory_limit /= 8;
}
// Generate filename and mime type if needed
if ($asfile) {
$pma_uri_parts = parse_url($cfg['PmaAbsoluteUri']);
if ($export_type == 'server') {
if (isset($remember_template)) {
PMA_setCookie('pma_server_filename_template', $filename_template);
}
$filename = str_replace('__SERVER__', $GLOBALS['cfg']['Server']['host'], strftime($filename_template));
} elseif ($export_type == 'database') {
if (isset($remember_template)) {
PMA_setCookie('pma_db_filename_template', $filename_template);
}
$filename = str_replace('__DB__', $db, str_replace('__SERVER__', $GLOBALS['cfg']['Server']['host'], strftime($filename_template)));
} else {
if (isset($remember_template)) {
PMA_setCookie('pma_table_filename_template', $filename_template);
}
$filename = str_replace('__TABLE__', $table, str_replace('__DB__', $db, str_replace('__SERVER__', $GLOBALS['cfg']['Server']['host'], strftime($filename_template))));
}
// convert filename to iso-8859-1, it is safer
if (!(isset($cfg['AllowAnywhereRecoding']) && $cfg['AllowAnywhereRecoding'] )) {
$filename = PMA_convert_string($charset, 'iso-8859-1', $filename);
} else {
$filename = PMA_convert_string($convcharset, 'iso-8859-1', $filename);
}
// Grab basic dump extension and mime type
$filename .= '.' . $export_list[$type]['extension'];
$mime_type = $export_list[$type]['mime_type'];
// If dump is going to be compressed, set correct mime_type and add
// compression to extension
if ($compression == 'bzip') {
$filename .= '.bz2';
$mime_type = 'application/x-bzip2';
} elseif ($compression == 'gzip') {
$filename .= '.gz';
$mime_type = 'application/x-gzip';
} elseif ($compression == 'zip') {
$filename .= '.zip';
$mime_type = 'application/zip';
}
}
// Open file on server if needed
if ($save_on_server) {
$save_filename = PMA_userDir($cfg['SaveDir']) . preg_replace('@[/\\\\]@', '_', $filename);
unset($message);
if (file_exists($save_filename) && empty($onserverover)) {
$message = PMA_Message::error('strFileAlreadyExists');
$message->addParam($save_filename);
} else {
if (is_file($save_filename) && !is_writable($save_filename)) {
$message = PMA_Message::error('strNoPermission');
$message->addParam($save_filename);
} else {
if (!$file_handle = @fopen($save_filename, 'w')) {
$message = PMA_Message::error('strNoPermission');
$message->addParam($save_filename);
}
}
}
if (isset($message)) {
$GLOBALS['js_include'][] = 'functions.js';
require_once './libraries/header.inc.php';
if ($export_type == 'server') {
$active_page = 'server_export.php';
require './server_export.php';
} elseif ($export_type == 'database') {
$active_page = 'db_export.php';
require './db_export.php';
} else {
$active_page = 'tbl_export.php';
require './tbl_export.php';
}
exit();
}
}
/**
* Send headers depending on whether the user chose to download a dump file
* or not
*/
if (!$save_on_server) {
if ($asfile) {
// Download
// (avoid rewriting data containing HTML with anchors and forms;
// this was reported to happen under Plesk)
@ini_set('url_rewriter.tags','');
header('Content-Type: ' . $mime_type);
header('Expires: ' . gmdate('D, d M Y H:i:s') . ' GMT');
// lem9: Tested behavior of
// IE 5.50.4807.2300
// IE 6.0.2800.1106 (small glitch, asks twice when I click Open)
// IE 6.0.2900.2180
// Firefox 1.0.6
// in http and https
header('Content-Disposition: attachment; filename="' . $filename . '"');
if (PMA_USR_BROWSER_AGENT == 'IE') {
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
} else {
header('Pragma: no-cache');
// test case: exporting a database into a .gz file with Safari
// would produce files not having the current time
// (added this header for Safari but should not harm other browsers)
header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT');
}
} else {
// HTML
if ($export_type == 'database') {
$num_tables = count($tables);
if ($num_tables == 0) {
$message = PMA_Message::error('strNoTablesFound');
$GLOBALS['js_include'][] = 'functions.js';
require_once './libraries/header.inc.php';
$active_page = 'db_export.php';
require './db_export.php';
exit();
}
}
$backup_cfgServer = $cfg['Server'];
require_once './libraries/header.inc.php';
$cfg['Server'] = $backup_cfgServer;
unset($backup_cfgServer);
echo "\n" . '<div align="' . $cell_align_left . '">' . "\n";
//echo ' <pre>' . "\n";
echo ' <form name="nofunction">' . "\n"
// remove auto-select for now: there is no way to select
// only a part of the text; anyway, it should obey
// $cfg['TextareaAutoSelect']
//. ' <textarea name="sqldump" cols="50" rows="30" onclick="this.select();" id="textSQLDUMP" wrap="OFF">' . "\n";
. ' <textarea name="sqldump" cols="50" rows="30" id="textSQLDUMP" wrap="OFF">' . "\n";
} // end download
}
// Fake loop just to allow skip of remain of this code by break, I'd really
// need exceptions here :-)
do {
// Add possibly some comments to export
if (!PMA_exportHeader()) {
break;
}
// Will we need relation & co. setup?
$do_relation = isset($GLOBALS[$what . '_relation']);
$do_comments = isset($GLOBALS[$what . '_comments']);
$do_mime = isset($GLOBALS[$what . '_mime']);
if ($do_relation || $do_comments || $do_mime) {
require_once './libraries/relation.lib.php';
$cfgRelation = PMA_getRelationsParam();
}
if ($do_mime) {
require_once './libraries/transformations.lib.php';
}
// Include dates in export?
$do_dates = isset($GLOBALS[$what . '_dates']);
/**
* Builds the dump
*/
// Gets the number of tables if a dump of a database has been required
if ($export_type == 'server') {
if (isset($db_select)) {
$tmp_select = implode($db_select, '|');
$tmp_select = '|' . $tmp_select . '|';
}
// Walk over databases
foreach ($GLOBALS['pma']->databases as $current_db) {
if ((isset($tmp_select) && strpos(' ' . $tmp_select, '|' . $current_db . '|'))
|| !isset($tmp_select)) {
if (!PMA_exportDBHeader($current_db)) {
break 2;
}
if (!PMA_exportDBCreate($current_db)) {
break 2;
}
$tables = PMA_DBI_get_tables($current_db);
$views = array();
foreach ($tables as $table) {
// if this is a view, collect it for later; views must be exported
// after the tables
$is_view = PMA_Table::isView($current_db, $table);
if ($is_view) {
$views[] = $table;
}
if (isset($GLOBALS[$what . '_structure'])) {
// for a view, export a stand-in definition of the table
// to resolve view dependencies
if (!PMA_exportStructure($current_db, $table, $crlf, $err_url, $do_relation, $do_comments, $do_mime, $do_dates, $is_view ? 'stand_in' : 'create_table', $export_type)) {
break 3;
}
}
if (isset($GLOBALS[$what . '_data']) && ! $is_view) {
$local_query = 'SELECT * FROM ' . PMA_backquote($current_db) . '.' . PMA_backquote($table);
if (!PMA_exportData($current_db, $table, $crlf, $err_url, $local_query)) {
break 3;
}
}
// now export the triggers (needs to be done after the data because
// triggers can modify already imported tables)
if (isset($GLOBALS[$what . '_structure'])) {
if (!PMA_exportStructure($current_db, $table, $crlf, $err_url, $do_relation, $do_comments, $do_mime, $do_dates, 'triggers', $export_type)) {
break 2;
}
}
}
foreach($views as $view) {
// no data export for a view
if (isset($GLOBALS[$what . '_structure'])) {
if (!PMA_exportStructure($current_db, $view, $crlf, $err_url, $do_relation, $do_comments, $do_mime, $do_dates, 'create_view', $export_type)) {
break 3;
}
}
}
if (!PMA_exportDBFooter($current_db)) {
break 2;
}
}
}
} elseif ($export_type == 'database') {
if (!PMA_exportDBHeader($db)) {
break;
}
$i = 0;
$views = array();
// $tables contains the choices from the user (via $table_select)
foreach ($tables as $table) {
// if this is a view, collect it for later; views must be exported after
// the tables
$is_view = PMA_Table::isView($db, $table);
if ($is_view) {
$views[] = $table;
}
if (isset($GLOBALS[$what . '_structure'])) {
// for a view, export a stand-in definition of the table
// to resolve view dependencies
if (!PMA_exportStructure($db, $table, $crlf, $err_url, $do_relation, $do_comments, $do_mime, $do_dates, $is_view ? 'stand_in' : 'create_table', $export_type)) {
break 2;
}
}
if (isset($GLOBALS[$what . '_data']) && ! $is_view) {
$local_query = 'SELECT * FROM ' . PMA_backquote($db) . '.' . PMA_backquote($table);
if (!PMA_exportData($db, $table, $crlf, $err_url, $local_query)) {
break 2;
}
}
// now export the triggers (needs to be done after the data because
// triggers can modify already imported tables)
if (isset($GLOBALS[$what . '_structure'])) {
if (!PMA_exportStructure($db, $table, $crlf, $err_url, $do_relation, $do_comments, $do_mime, $do_dates, 'triggers', $export_type)) {
break 2;
}
}
}
foreach ($views as $view) {
// no data export for a view
if (isset($GLOBALS[$what . '_structure'])) {
if (!PMA_exportStructure($db, $view, $crlf, $err_url, $do_relation, $do_comments, $do_mime, $do_dates, 'create_view', $export_type)) {
break 2;
}
}
}
if (!PMA_exportDBFooter($db)) {
break;
}
} else {
if (!PMA_exportDBHeader($db)) {
break;
}
// We export just one table
// $allrows comes from the form when "Dump all rows" has been selected
if ($allrows == '0' && $limit_to > 0 && $limit_from >= 0) {
$add_query = ' LIMIT '
. (($limit_from > 0) ? $limit_from . ', ' : '')
. $limit_to;
} else {
$add_query = '';
}
$is_view = PMA_Table::isView($db, $table);
if (isset($GLOBALS[$what . '_structure'])) {
if (!PMA_exportStructure($db, $table, $crlf, $err_url, $do_relation, $do_comments, $do_mime, $do_dates, $is_view ? 'create_view' : 'create_table', $export_type)) {
break;
}
}
// If this is an export of a single view, we have to export data;
// for example, a PDF report
if (isset($GLOBALS[$what . '_data'])) {
if (!empty($sql_query)) {
// only preg_replace if needed
if (!empty($add_query)) {
// remove trailing semicolon before adding a LIMIT
$sql_query = preg_replace('%;\s*$%', '', $sql_query);
}
$local_query = $sql_query . $add_query;
PMA_DBI_select_db($db);
} else {
$local_query = 'SELECT * FROM ' . PMA_backquote($db) . '.' . PMA_backquote($table) . $add_query;
}
if (!PMA_exportData($db, $table, $crlf, $err_url, $local_query)) {
break;
}
}
// now export the triggers (needs to be done after the data because
// triggers can modify already imported tables)
if (isset($GLOBALS[$what . '_structure'])) {
if (!PMA_exportStructure($db, $table, $crlf, $err_url, $do_relation, $do_comments, $do_mime, $do_dates, 'triggers', $export_type)) {
break 2;
}
}
if (!PMA_exportDBFooter($db)) {
break;
}
}
if (!PMA_exportFooter()) {
break;
}
} while (false);
// End of fake loop
if ($save_on_server && isset($message)) {
$GLOBALS['js_include'][] = 'functions.js';
require_once './libraries/header.inc.php';
if ($export_type == 'server') {
$active_page = 'server_export.php';
require './server_export.php';
} elseif ($export_type == 'database') {
$active_page = 'db_export.php';
require './db_export.php';
} else {
$active_page = 'tbl_export.php';
require './tbl_export.php';
}
exit();
}
/**
* Send the dump as a file...
*/
if (!empty($asfile)) {
// Convert the charset if required.
if ($output_charset_conversion) {
$dump_buffer = PMA_convert_string($GLOBALS['charset'], $GLOBALS['charset_of_file'], $dump_buffer);
}
// Do the compression
// 1. as a zipped file
if ($compression == 'zip') {
if (@function_exists('gzcompress')) {
$zipfile = new zipfile();
$zipfile -> addFile($dump_buffer, substr($filename, 0, -4));
$dump_buffer = $zipfile -> file();
}
}
// 2. as a bzipped file
elseif ($compression == 'bzip') {
if (@function_exists('bzcompress')) {
$dump_buffer = bzcompress($dump_buffer);
}
}
// 3. as a gzipped file
elseif ($compression == 'gzip') {
if (@function_exists('gzencode') && !@ini_get('zlib.output_compression')) {
// without the optional parameter level because it bug
$dump_buffer = gzencode($dump_buffer);
}
}
/* If ve saved on server, we have to close file now */
if ($save_on_server) {
$write_result = @fwrite($file_handle, $dump_buffer);
fclose($file_handle);
if (strlen($dump_buffer) !=0 && (!$write_result || ($write_result != strlen($dump_buffer)))) {
$message = new PMA_Message('strNoSpace', PMA_Message::ERROR, $save_filename);
} else {
$message = new PMA_Message('strDumpSaved', PMA_Message::SUCCESS, $save_filename);
}
$GLOBALS['js_include'][] = 'functions.js';
require_once './libraries/header.inc.php';
if ($export_type == 'server') {
$active_page = 'server_export.php';
require_once './server_export.php';
} elseif ($export_type == 'database') {
$active_page = 'db_export.php';
require_once './db_export.php';
} else {
$active_page = 'tbl_export.php';
require_once './tbl_export.php';
}
exit();
} else {
echo $dump_buffer;
}
}
/**
* Displays the dump...
*/
else {
/**
* Close the html tags and add the footers in dump is displayed on screen
*/
//echo ' </pre>' . "\n";
echo '</textarea>' . "\n"
. ' </form>' . "\n";
echo '</div>' . "\n";
echo "\n";
?>
<script type="text/javascript">
//<![CDATA[
var bodyWidth=null; var bodyHeight=null;
if (document.getElementById('textSQLDUMP')) {
bodyWidth = self.innerWidth;
bodyHeight = self.innerHeight;
if (!bodyWidth && !bodyHeight) {
if (document.compatMode && document.compatMode == "BackCompat") {
bodyWidth = document.body.clientWidth;
bodyHeight = document.body.clientHeight;
} else if (document.compatMode && document.compatMode == "CSS1Compat") {
bodyWidth = document.documentElement.clientWidth;
bodyHeight = document.documentElement.clientHeight;
}
}
document.getElementById('textSQLDUMP').style.width=(bodyWidth-50) + 'px';
document.getElementById('textSQLDUMP').style.height=(bodyHeight-100) + 'px';
}
//]]>
</script>
<?php
require_once './libraries/footer.inc.php';
} // end if
?>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

View File

@@ -1,452 +0,0 @@
<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
* Core script for import, this is just the glue around all other stuff
*
* @uses PMA_Bookmark_getList()
* @version $Id$
* @package phpMyAdmin
*/
/**
* Get the variables sent or posted to this script and a core script
*/
require_once './libraries/common.inc.php';
//require_once './libraries/display_import_functions.lib.php';
$GLOBALS['js_include'][] = 'functions.js';
$GLOBALS['js_include'][] = 'mootools.js';
// reset import messages for ajax request
$_SESSION['Import_message']['message'] = null;
$_SESSION['Import_message']['go_back_url'] = null;
// default values
$GLOBALS['reload'] = false;
// Are we just executing plain query or sql file? (eg. non import, but query box/window run)
if (!empty($sql_query)) {
// run SQL query
$import_text = $sql_query;
$import_type = 'query';
$format = 'sql';
// refresh left frame on changes in table or db structure
if (preg_match('/^(CREATE|ALTER|DROP)\s+(VIEW|TABLE|DATABASE|SCHEMA)\s+/i', $sql_query)) {
$GLOBALS['reload'] = true;
}
$sql_query = '';
} elseif (!empty($sql_localfile)) {
// run SQL file on server
$local_import_file = $sql_localfile;
$import_type = 'queryfile';
$format = 'sql';
unset($sql_localfile);
} elseif (!empty($sql_file)) {
// run uploaded SQL file
$import_file = $sql_file;
$import_type = 'queryfile';
$format = 'sql';
unset($sql_file);
} elseif (!empty($id_bookmark)) {
// run bookmark
$import_type = 'query';
$format = 'sql';
}
// If we didn't get any parameters, either user called this directly, or
// upload limit has been reached, let's assume the second possibility.
;
if ($_POST == array() && $_GET == array()) {
require_once './libraries/header.inc.php';
$message = PMA_Message::error('strUploadLimit');
$message->addParam('[a@./Documentation.html#faq1_16@_blank]');
$message->addParam('[/a]');
// so we can obtain the message
$_SESSION['Import_message']['message'] = $message->getDisplay();
$_SESSION['Import_message']['go_back_url'] = $goto;
$message->display();
require './libraries/footer.inc.php';
}
// Check needed parameters
PMA_checkParameters(array('import_type', 'format'));
// We don't want anything special in format
$format = PMA_securePath($format);
// Import functions
require_once './libraries/import.lib.php';
// Create error and goto url
if ($import_type == 'table') {
$err_url = 'tbl_import.php?' . PMA_generate_common_url($db, $table);
$_SESSION['Import_message']['go_back_url'] = $err_url;
$goto = 'tbl_import.php';
} elseif ($import_type == 'database') {
$err_url = 'db_import.php?' . PMA_generate_common_url($db);
$_SESSION['Import_message']['go_back_url'] = $err_url;
$goto = 'db_import.php';
} elseif ($import_type == 'server') {
$err_url = 'server_import.php?' . PMA_generate_common_url();
$_SESSION['Import_message']['go_back_url'] = $err_url;
$goto = 'server_import.php';
} else {
if (empty($goto) || !preg_match('@^(server|db|tbl)(_[a-z]*)*\.php$@i', $goto)) {
if (strlen($table) && strlen($db)) {
$goto = 'tbl_structure.php';
} elseif (strlen($db)) {
$goto = 'db_structure.php';
} else {
$goto = 'server_sql.php';
}
}
if (strlen($table) && strlen($db)) {
$common = PMA_generate_common_url($db, $table);
} elseif (strlen($db)) {
$common = PMA_generate_common_url($db);
} else {
$common = PMA_generate_common_url();
}
$err_url = $goto
. '?' . $common
. (preg_match('@^tbl_[a-z]*\.php$@', $goto) ? '&amp;table=' . urlencode($table) : '');
$_SESSION['Import_message']['go_back_url'] = $err_url;
}
if (strlen($db)) {
PMA_DBI_select_db($db);
}
@set_time_limit($cfg['ExecTimeLimit']);
if (!empty($cfg['MemoryLimit'])) {
@ini_set('memory_limit', $cfg['MemoryLimit']);
}
$timestamp = time();
if (isset($allow_interrupt)) {
$maximum_time = ini_get('max_execution_time');
} else {
$maximum_time = 0;
}
// set default values
$timeout_passed = FALSE;
$error = FALSE;
$read_multiply = 1;
$finished = FALSE;
$offset = 0;
$max_sql_len = 0;
$file_to_unlink = '';
$sql_query = '';
$sql_query_disabled = FALSE;
$go_sql = FALSE;
$executed_queries = 0;
$run_query = TRUE;
$charset_conversion = FALSE;
$reset_charset = FALSE;
$bookmark_created = FALSE;
// Bookmark Support: get a query back from bookmark if required
if (!empty($id_bookmark)) {
require_once './libraries/bookmark.lib.php';
switch ($action_bookmark) {
case 0: // bookmarked query that have to be run
$import_text = PMA_Bookmark_get($db, $id_bookmark, 'id', isset($action_bookmark_all));
if (isset($bookmark_variable) && !empty($bookmark_variable)) {
$import_text = preg_replace('|/\*(.*)\[VARIABLE\](.*)\*/|imsU', '${1}' . PMA_sqlAddslashes($bookmark_variable) . '${2}', $import_text);
}
// refresh left frame on changes in table or db structure
if (preg_match('/^(CREATE|ALTER|DROP)\s+(VIEW|TABLE|DATABASE|SCHEMA)\s+/i', $import_text)) {
$GLOBALS['reload'] = true;
}
break;
case 1: // bookmarked query that have to be displayed
$import_text = PMA_Bookmark_get($db, $id_bookmark);
$run_query = FALSE;
break;
case 2: // bookmarked query that have to be deleted
$import_text = PMA_Bookmark_get($db, $id_bookmark);
PMA_Bookmark_delete($db, $id_bookmark);
$run_query = FALSE;
$error = TRUE; // this is kind of hack to skip processing the query
break;
}
} // end bookmarks reading
// Do no run query if we show PHP code
if (isset($GLOBALS['show_as_php'])) {
$run_query = FALSE;
$go_sql = TRUE;
}
// Store the query as a bookmark before executing it if bookmarklabel was given
if (!empty($bkm_label) && !empty($import_text)) {
require_once './libraries/bookmark.lib.php';
$bfields = array(
'dbase' => $db,
'user' => $cfg['Bookmark']['user'],
'query' => urlencode($import_text),
'label' => $bkm_label
);
// Should we replace bookmark?
if (isset($bkm_replace)) {
$bookmarks = PMA_Bookmark_getList($db);
foreach ($bookmarks as $key => $val) {
if ($val == $bkm_label) {
PMA_Bookmark_delete($db, $key);
}
}
}
PMA_Bookmark_save($bfields, isset($bkm_all_users));
$bookmark_created = TRUE;
} // end store bookmarks
// We can not read all at once, otherwise we can run out of memory
$memory_limit = trim(@ini_get('memory_limit'));
// 2 MB as default
if (empty($memory_limit)) {
$memory_limit = 2 * 1024 * 1024;
}
// In case no memory limit we work on 10MB chunks
if ($memory_limit == -1) {
$memory_limit = 10 * 1024 * 1024;
}
// Calculate value of the limit
if (strtolower(substr($memory_limit, -1)) == 'm') {
$memory_limit = (int)substr($memory_limit, 0, -1) * 1024 * 1024;
} elseif (strtolower(substr($memory_limit, -1)) == 'k') {
$memory_limit = (int)substr($memory_limit, 0, -1) * 1024;
} elseif (strtolower(substr($memory_limit, -1)) == 'g') {
$memory_limit = (int)substr($memory_limit, 0, -1) * 1024 * 1024 * 1024;
} else {
$memory_limit = (int)$memory_limit;
}
$read_limit = $memory_limit / 8; // Just to be sure, there might be lot of memory needed for uncompression
// handle filenames
if (!empty($local_import_file) && !empty($cfg['UploadDir'])) {
// sanitize $local_import_file as it comes from a POST
$local_import_file = PMA_securePath($local_import_file);
$import_file = PMA_userDir($cfg['UploadDir']) . $local_import_file;
} elseif (empty($import_file) || !is_uploaded_file($import_file)) {
$import_file = 'none';
}
// Do we have file to import?
if ($import_file != 'none' && !$error) {
// work around open_basedir and other limitations
$open_basedir = @ini_get('open_basedir');
// If we are on a server with open_basedir, we must move the file
// before opening it. The doc explains how to create the "./tmp"
// directory
if (!empty($open_basedir)) {
$tmp_subdir = (PMA_IS_WINDOWS ? '.\\tmp\\' : './tmp/');
if (is_writable($tmp_subdir)) {
$import_file_new = $tmp_subdir . basename($import_file);
if (move_uploaded_file($import_file, $import_file_new)) {
$import_file = $import_file_new;
$file_to_unlink = $import_file_new;
}
$size = filesize($import_file);
}
}
/**
* Handle file compression
* @todo duplicate code exists in File.class.php
*/
$compression = PMA_detectCompression($import_file);
if ($compression === FALSE) {
$message = PMA_Message::error('strFileCouldNotBeRead');
$error = TRUE;
} else {
switch ($compression) {
case 'application/bzip2':
if ($cfg['BZipDump'] && @function_exists('bzopen')) {
$import_handle = @bzopen($import_file, 'r');
} else {
$message = PMA_Message::error('strUnsupportedCompressionDetected');
$message->addParam($compression);
$error = TRUE;
}
break;
case 'application/gzip':
if ($cfg['GZipDump'] && @function_exists('gzopen')) {
$import_handle = @gzopen($import_file, 'r');
} else {
$message = PMA_Message::error('strUnsupportedCompressionDetected');
$message->addParam($compression);
$error = TRUE;
}
break;
case 'application/zip':
if ($cfg['ZipDump'] && @function_exists('zip_open')) {
/**
* Load interface for zip extension.
*/
include_once './libraries/zip_extension.lib.php';
$result = PMA_getZipContents($import_file);
if (! empty($result['error'])) {
$message = PMA_Message::rawError($result['error']);
$error = TRUE;
} else {
$import_text = $result['data'];
}
} else {
$message = PMA_Message::error('strUnsupportedCompressionDetected');
$message->addParam($compression);
$error = TRUE;
}
break;
case 'none':
$import_handle = @fopen($import_file, 'r');
break;
default:
$message = PMA_Message::error('strUnsupportedCompressionDetected');
$message->addParam($compression);
$error = TRUE;
break;
}
}
// use isset() because zip compression type does not use a handle
if (!$error && isset($import_handle) && $import_handle === FALSE) {
$message = PMA_Message::error('strFileCouldNotBeRead');
$error = TRUE;
}
} elseif (!$error) {
if (!isset($import_text) || empty($import_text)) {
$message = PMA_Message::error('strNoDataReceived');
$error = TRUE;
}
}
// so we can obtain the message
//$_SESSION['Import_message'] = $message->getDisplay();
// Convert the file's charset if necessary
if ($cfg['AllowAnywhereRecoding'] && isset($charset_of_file)) {
if ($charset_of_file != $charset) {
$charset_conversion = TRUE;
}
} elseif (isset($charset_of_file) && $charset_of_file != 'utf8') {
PMA_DBI_query('SET NAMES \'' . $charset_of_file . '\'');
// We can not show query in this case, it is in different charset
$sql_query_disabled = TRUE;
$reset_charset = TRUE;
}
// Something to skip?
if (!$error && isset($skip)) {
$original_skip = $skip;
while ($skip > 0) {
PMA_importGetNextChunk($skip < $read_limit ? $skip : $read_limit);
$read_multiply = 1; // Disable read progresivity, otherwise we eat all memory!
$skip -= $read_limit;
}
unset($skip);
}
if (!$error) {
// Check for file existance
if (!file_exists('./libraries/import/' . $format . '.php')) {
$error = TRUE;
$message = PMA_Message::error('strCanNotLoadImportPlugins');
} else {
// Do the real import
$plugin_param = $import_type;
require './libraries/import/' . $format . '.php';
}
}
if (! $error && FALSE !== $import_handle && NULL !== $import_handle) {
fclose($import_handle);
}
// Cleanup temporary file
if ($file_to_unlink != '') {
unlink($file_to_unlink);
}
// Reset charset back, if we did some changes
if ($reset_charset) {
PMA_DBI_query('SET CHARACTER SET utf8');
PMA_DBI_query('SET SESSION collation_connection =\'' . $collation_connection . '\'');
}
// Show correct message
if (!empty($id_bookmark) && $action_bookmark == 2) {
$message = PMA_Message::success('strBookmarkDeleted');
$display_query = $import_text;
$error = FALSE; // unset error marker, it was used just to skip processing
} elseif (!empty($id_bookmark) && $action_bookmark == 1) {
$message = PMA_Message::notice('strShowingBookmark');
} elseif ($bookmark_created) {
$special_message = '[br]' . sprintf($strBookmarkCreated, htmlspecialchars($bkm_label));
} elseif ($finished && !$error) {
if ($import_type == 'query') {
$message = PMA_Message::success();
} else {
if ($import_notice) {
$message = PMA_Message::success('<em>'.$GLOBALS['strImportSuccessfullyFinished'].'</em>');
$message->addParam($executed_queries);
$message->addString($import_notice);
} else {
$message = PMA_Message::success('strImportSuccessfullyFinished');
$message->addParam($executed_queries);
}
}
}
// Did we hit timeout? Tell it user.
if ($timeout_passed) {
$message = PMA_Message::error('strTimeoutPassed');
if ($offset == 0 || (isset($original_skip) && $original_skip == $offset)) {
$message->addString('strTimeoutNothingParsed');
}
}
// if there is any message, copy it into $_SESSION as well, so we can obtain it by AJAX call
if (isset($message)) {
$_SESSION['Import_message']['message'] = $message->getDisplay();
// $_SESSION['Import_message']['go_back_url'] = $goto.'?'. PMA_generate_common_url();
}
// Parse and analyze the query, for correct db and table name
// in case of a query typed in the query window
require_once './libraries/parse_analyze.lib.php';
// There was an error?
if (isset($my_die)) {
foreach ($my_die AS $key => $die) {
PMA_mysqlDie($die['error'], $die['sql'], '', $err_url, $error);
}
}
if ($go_sql) {
require './sql.php';
} else {
$active_page = $goto;
require './' . $goto;
}
exit();
?>

View File

@@ -1,33 +0,0 @@
<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
*
* @version $Id$
* @package phpMyAdmin
*/
require_once './libraries/common.inc.php';
require_once './libraries/display_import_ajax.lib.php';
// AJAX requests can't be cached!
header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1
header("Expires: Sat, 11 Jan 1991 06:30:00 GMT"); // Date in the past
// $GLOBALS["message"] is used for asking for an import message
if (isset($GLOBALS["message"]) && $GLOBALS["message"]) {
header('Content-type: text/html');
while ($_SESSION['Import_message']['message'] == null) { // wait until message is available
usleep(250000); // 0.25 sec
}
echo $_SESSION['Import_message']['message'];
echo '<fieldset class="tblFooters">' . "\n";
echo ' [ <a href="' . $_SESSION['Import_message']['go_back_url'] . '">' . $GLOBALS["strBack"] . '</a> ]' . "\n";
echo '</fieldset>'."\n";
} else {
PMA_importAjaxStatus($GLOBALS["id"]);
}
?>

192
index.php
View File

@@ -1,192 +0,0 @@
<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
* forms frameset
*
* @version $Id$
* @uses $GLOBALS['strNoFrames']
* @uses $GLOBALS['cfg']['QueryHistoryDB']
* @uses $GLOBALS['cfg']['Server']['user']
* @uses $GLOBALS['cfg']['DefaultTabServer'] as src for the mainframe
* @uses $GLOBALS['cfg']['DefaultTabDatabase'] as src for the mainframe
* @uses $GLOBALS['cfg']['NaviWidth'] for navi frame width
* @uses $GLOBALS['collation_connection'] from $_REQUEST (grab_globals.lib.php)
* or common.inc.php
* @uses $GLOBALS['available_languages'] from common.inc.php (select_lang.lib.php)
* @uses $GLOBALS['db']
* @uses $GLOBALS['charset']
* @uses $GLOBALS['lang']
* @uses $GLOBALS['text_dir']
* @uses $_ENV['HTTP_HOST']
* @uses PMA_getRelationsParam()
* @uses PMA_purgeHistory()
* @uses PMA_generate_common_url()
* @uses PMA_VERSION
* @uses session_write_close()
* @uses time()
* @uses PMA_getenv()
* @uses header() to send charset
* @package phpMyAdmin
*/
/**
* Gets core libraries and defines some variables
*/
require_once './libraries/common.inc.php';
/**
* Includes the ThemeManager if it hasn't been included yet
*/
require_once './libraries/relation.lib.php';
// free the session file, for the other frames to be loaded
session_write_close();
// Gets the host name
if (empty($HTTP_HOST)) {
if (PMA_getenv('HTTP_HOST')) {
$HTTP_HOST = PMA_getenv('HTTP_HOST');
} else {
$HTTP_HOST = '';
}
}
// purge querywindow history
$cfgRelation = PMA_getRelationsParam();
if ($GLOBALS['cfg']['QueryHistoryDB'] && $cfgRelation['historywork']) {
PMA_purgeHistory($GLOBALS['cfg']['Server']['user']);
}
unset($cfgRelation);
/**
* pass variables to child pages
*/
$drops = array('lang', 'server', 'convcharset', 'collation_connection',
'db', 'table');
foreach ($drops as $each_drop) {
if (array_key_exists($each_drop, $_GET)) {
unset($_GET[$each_drop]);
}
}
unset($drops, $each_drop);
if (! strlen($GLOBALS['db'])) {
$main_target = $GLOBALS['cfg']['DefaultTabServer'];
} elseif (! strlen($GLOBALS['table'])) {
$_GET['db'] = $GLOBALS['db'];
$main_target = $GLOBALS['cfg']['DefaultTabDatabase'];
} else {
$_GET['db'] = $GLOBALS['db'];
$_GET['table'] = $GLOBALS['table'];
$main_target = $GLOBALS['cfg']['DefaultTabTable'];
}
$url_query = PMA_generate_common_url($_GET);
if (isset($GLOBALS['target']) && is_string($GLOBALS['target']) && !empty($GLOBALS['target']) && in_array($GLOBALS['target'], $goto_whitelist)) {
$main_target = $GLOBALS['target'];
}
$main_target .= $url_query;
$lang_iso_code = $GLOBALS['available_languages'][$GLOBALS['lang']][2];
// start output
header('Content-Type: text/html; charset=' . $GLOBALS['charset']);
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xml:lang="<?php echo $lang_iso_code; ?>"
lang="<?php echo $lang_iso_code; ?>"
dir="<?php echo $GLOBALS['text_dir']; ?>">
<head>
<link rel="icon" href="./favicon.ico" type="image/x-icon" />
<link rel="shortcut icon" href="./favicon.ico" type="image/x-icon" />
<title>phpMyAdmin <?php echo PMA_VERSION; ?> -
<?php echo htmlspecialchars($HTTP_HOST); ?></title>
<meta http-equiv="Content-Type"
content="text/html; charset=<?php echo $GLOBALS['charset']; ?>" />
<meta name="robots" content="noindex,nofollow" />
<script type="text/javascript">
// <![CDATA[
// definitions used in common.js
var common_query = '<?php echo PMA_escapeJsString(PMA_generate_common_url('', '', '&'));?>';
var opendb_url = '<?php echo PMA_escapeJsString($GLOBALS['cfg']['DefaultTabDatabase']); ?>';
var safari_browser = <?php echo PMA_USR_BROWSER_AGENT == 'SAFARI' ? 'true' : 'false' ?>;
var querywindow_height = <?php echo PMA_escapeJsString($GLOBALS['cfg']['QueryWindowHeight']); ?>;
var querywindow_width = <?php echo PMA_escapeJsString($GLOBALS['cfg']['QueryWindowWidth']); ?>;
var collation_connection = '<?php echo PMA_escapeJsString($GLOBALS['collation_connection']); ?>';
var lang = '<?php echo PMA_escapeJsString($GLOBALS['lang']); ?>';
var server = '<?php echo PMA_escapeJsString($GLOBALS['server']); ?>';
var table = '<?php echo PMA_escapeJsString($GLOBALS['table']); ?>';
var db = '<?php echo PMA_escapeJsString($GLOBALS['db']); ?>';
var token = '<?php echo PMA_escapeJsString($_SESSION[' PMA_token ']); ?>';
var text_dir = '<?php echo PMA_escapeJsString($GLOBALS['text_dir']); ?>';
var pma_absolute_uri = '<?php echo PMA_escapeJsString($GLOBALS['cfg']['PmaAbsoluteUri']); ?>';
var pma_text_default_tab = '<?php echo PMA_escapeJsString(PMA_getTitleForTarget($GLOBALS['cfg']['DefaultTabTable'])); ?>';
var pma_text_left_default_tab = '<?php echo PMA_escapeJsString(PMA_getTitleForTarget($GLOBALS['cfg']['LeftDefaultTabTable'])); ?>';
// for content and navigation frames
var frame_content = 0;
var frame_navigation = 0;
function getFrames() {
<?php if ($GLOBALS['text_dir'] === 'ltr') { ?>
frame_content = window.frames[1];
frame_navigation = window.frames[0];
<?php } else { ?>
frame_content = window.frames[0];
frame_navigation = window.frames[1];
<?php } ?>
}
var onloadCnt = 0;
var onLoadHandler = window.onload;
window.onload = function() {
if (onloadCnt == 0) {
if (typeof(onLoadHandler) == "function") {
onLoadHandler();
}
if (typeof(getFrames) != 'undefined' && typeof(getFrames) == 'function') {
getFrames();
}
onloadCnt++;
}
};
// ]]>
</script>
<script src="./js/common.js" type="text/javascript"></script>
</head>
<frameset cols="<?php
if ($GLOBALS['text_dir'] === 'rtl') {
echo '*,';
}
echo $GLOBALS['cfg']['NaviWidth'];
if ($GLOBALS['text_dir'] === 'ltr') {
echo ',*';
}
?>" rows="*" id="mainFrameset">
<?php if ($GLOBALS['text_dir'] === 'ltr') { ?>
<frame frameborder="0" id="frame_navigation"
src="navigation.php<?php echo $url_query; ?>"
name="frame_navigation" />
<?php } ?>
<frame frameborder="0" id="frame_content"
src="<?php echo $main_target; ?>"
name="frame_content" />
<?php if ($GLOBALS['text_dir'] === 'rtl') { ?>
<frame frameborder="0" id="frame_navigation"
src="navigation.php<?php echo $url_query; ?>"
name="frame_navigation" />
<?php } ?>
<noframes>
<body>
<p><?php echo $GLOBALS['strNoFrames']; ?></p>
</body>
</noframes>
</frameset>
</html>

View File

@@ -1,453 +0,0 @@
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
* common functions used for communicating between main, navigation and querywindow
*
* @version $Id$
*/
/**
* holds the browser query window
*/
var querywindow = '';
/**
* holds the query to be load from a new query window
*/
var query_to_load = '';
/**
* attach a function to object event
*
* <code>
* addEvent(window, 'load', PMA_initPage);
* </code>
* @param object or id
* @param string event type (load, mouseover, focus, ...)
* @param function to be attached
*/
function addEvent(obj, type, fn)
{
if (obj.attachEvent) {
obj['e' + type + fn] = fn;
obj[type + fn] = function() {obj['e' + type + fn](window.event);}
obj.attachEvent('on' + type, obj[type + fn]);
} else {
obj.addEventListener(type, fn, false);
}
}
/**
* detach/remove a function from an object event
*
* @param object or id
* @param event type (load, mouseover, focus, ...)
* @param function naem of function to be attached
*/
function removeEvent(obj, type, fn)
{
if (obj.detachEvent) {
obj.detachEvent('on' + type, obj[type + fn]);
obj[type + fn] = null;
} else {
obj.removeEventListener(type, fn, false);
}
}
/**
* get DOM elements by html class
*
* @param string class_name - name of class
* @param node node - search only sub nodes of this node (optional)
* @param string tag - search only these tags (optional)
*/
function getElementsByClassName(class_name, node, tag)
{
var classElements = new Array();
if (node == null) {
node = document;
}
if (tag == null) {
tag = '*';
}
var j = 0, teststr;
var els = node.getElementsByTagName(tag);
var elsLen = els.length;
for (i = 0; i < elsLen; i++) {
if (els[i].className.indexOf(class_name) != -1) {
teststr = "," + els[i].className.split(" ").join(",") + ",";
if (teststr.indexOf("," + class_name + ",") != -1) {
classElements[j] = els[i];
j++;
}
}
}
return classElements;
}
/**
* sets current selected db
*
* @param string db name
*/
function setDb(new_db) {
//alert('setDb(' + new_db + ')');
if (new_db != db) {
// db has changed
//alert( new_db + '(' + new_db.length + ') : ' + db );
var old_db = db;
db = new_db;
if (window.frame_navigation.document.getElementById(db) == null) {
// db is unknown, reload complete left frame
refreshNavigation();
} else {
unmarkDbTable(old_db);
markDbTable(db);
}
// TODO: add code to expand db in lightview mode
// refresh querywindow
refreshQuerywindow();
}
}
/**
* sets current selected table (called from navigation.php)
*
* @param string table name
*/
function setTable(new_table) {
//alert('setTable(' + new_table + ')');
if (new_table != table) {
// table has changed
//alert( new_table + '(' + new_table.length + ') : ' + table );
table = new_table;
if (window.frame_navigation.document.getElementById(db + '.' + table) == null
&& table != '') {
// table is unknown, reload complete left frame
refreshNavigation();
}
// TODO: add code to expand table in lightview mode
// refresh querywindow
refreshQuerywindow();
}
}
/**
* reloads main frame
*
* @uses goTo()
* @uses opendb_url
* @uses token
* @uses db
* @uses server
* @uses table
* @uses lang
* @uses collation_connection
* @uses encodeURIComponent()
* @param string url name of page to be loaded
*/
function refreshMain(url) {
if (! url) {
if (db) {
url = opendb_url;
} else {
url = 'main.php';
}
}
//alert(db);
goTo(url + '?server=' + encodeURIComponent(server) +
'&token=' + encodeURIComponent(token) +
'&db=' + encodeURIComponent(db) +
'&table=' + encodeURIComponent(table) +
'&lang=' + encodeURIComponent(lang) +
'&collation_connection=' + encodeURIComponent(collation_connection),
'main');
}
/**
* reloads navigation frame
*
* @uses goTo()
* @uses token
* @uses db
* @uses server
* @uses table
* @uses lang
* @uses collation_connection
* @uses encodeURIComponent()
*/
function refreshNavigation() {
goTo('navigation.php?server=' + encodeURIComponent(server) +
'&token=' + encodeURIComponent(token) +
'&db=' + encodeURIComponent(db) +
'&table=' + encodeURIComponent(table) +
'&lang=' + encodeURIComponent(lang) +
'&collation_connection=' + encodeURIComponent(collation_connection)
);
}
/**
* adds class to element
*/
function addClass(element, classname)
{
if (element != null) {
element.className += ' ' + classname;
//alert('set class: ' + classname + ', now: ' + element.className);
}
}
/**
* removes class from element
*/
function removeClass(element, classname)
{
if (element != null) {
element.className = element.className.replace(' ' + classname, '');
// if there is no other class anem there is no leading space
element.className = element.className.replace(classname, '');
//alert('removed class: ' + classname + ', now: ' + element.className);
}
}
function unmarkDbTable(db, table)
{
var element_reference = window.frame_navigation.document.getElementById(db);
if (element_reference != null) {
//alert('remove from: ' + db);
removeClass(element_reference.parentNode, 'marked');
}
element_reference = window.frame_navigation.document.getElementById(db + '.' + table);
if (element_reference != null) {
//alert('remove from: ' + db + '.' + table);
removeClass(element_reference.parentNode, 'marked');
}
}
function markDbTable(db, table)
{
var element_reference = window.frame_navigation.document.getElementById(db);
if (element_reference != null) {
addClass(element_reference.parentNode, 'marked');
// scrolldown
element_reference.focus();
// opera marks the text, we dont want this ...
element_reference.blur();
}
element_reference = window.frame_navigation.document.getElementById(db + '.' + table);
if (element_reference != null) {
addClass(element_reference.parentNode, 'marked');
// scrolldown
element_reference.focus();
// opera marks the text, we dont want this ...
element_reference.blur();
}
// return to main frame ...
window.frame_content.focus();
}
/**
* sets current selected server, table and db (called from libraries/footer.inc.php)
*/
function setAll( new_lang, new_collation_connection, new_server, new_db, new_table, new_token ) {
//alert('setAll( ' + new_lang + ', ' + new_collation_connection + ', ' + new_server + ', ' + new_db + ', ' + new_table + ', ' + new_token + ' )');
if (new_server != server || new_lang != lang
|| new_collation_connection != collation_connection) {
// something important has changed
server = new_server;
db = new_db;
table = new_table;
collation_connection = new_collation_connection;
lang = new_lang;
token = new_token;
refreshNavigation();
} else if (new_db != db || new_table != table) {
// save new db and table
var old_db = db;
var old_table = table;
db = new_db;
table = new_table;
if (window.frame_navigation.document.getElementById(db) == null
&& window.frame_navigation.document.getElementById(db + '.' + table) == null ) {
// table or db is unknown, reload complete left frame
refreshNavigation();
} else {
unmarkDbTable(old_db, old_table);
markDbTable(db, table);
}
// TODO: add code to expand db in lightview mode
// refresh querywindow
refreshQuerywindow();
}
}
function reload_querywindow(db, table, sql_query)
{
if ( ! querywindow.closed && querywindow.location ) {
if ( ! querywindow.document.sqlform.LockFromUpdate
|| ! querywindow.document.sqlform.LockFromUpdate.checked ) {
querywindow.document.getElementById('hiddenqueryform').db.value = db;
querywindow.document.getElementById('hiddenqueryform').table.value = table;
if (sql_query) {
querywindow.document.getElementById('hiddenqueryform').sql_query.value = sql_query;
}
querywindow.document.getElementById('hiddenqueryform').submit();
}
}
}
/**
* brings query window to front and inserts query to be edited
*/
function focus_querywindow(sql_query)
{
/* if ( querywindow && !querywindow.closed && querywindow.location) { */
if ( !querywindow || querywindow.closed || !querywindow.location) {
// we need first to open the window and cannot pass the query with it
// as we dont know if the query exceeds max url length
/* url = 'querywindow.php?' + common_query + '&db=' + db + '&table=' + table + '&sql_query=SELECT * FROM'; */
query_to_load = sql_query;
open_querywindow();
insertQuery(0);
} else {
//var querywindow = querywindow;
if ( querywindow.document.getElementById('hiddenqueryform').querydisplay_tab != 'sql' ) {
querywindow.document.getElementById('hiddenqueryform').querydisplay_tab.value = "sql";
querywindow.document.getElementById('hiddenqueryform').sql_query.value = sql_query;
querywindow.document.getElementById('hiddenqueryform').submit();
querywindow.focus();
} else {
querywindow.focus();
}
}
return true;
}
/**
* inserts query string into query window textarea
* called from script tag in querywindow
*/
function insertQuery() {
if (query_to_load != '' && querywindow.document && querywindow.document.getElementById && querywindow.document.getElementById('sqlquery')) {
querywindow.document.getElementById('sqlquery').value = query_to_load;
query_to_load = '';
return true;
}
return false;
}
function open_querywindow( url ) {
if ( ! url ) {
url = 'querywindow.php?' + common_query + '&db=' + encodeURIComponent(db) + '&table=' + encodeURIComponent(table);
}
if (!querywindow.closed && querywindow.location) {
goTo( url, 'query' );
querywindow.focus();
} else {
querywindow = window.open( url + '&init=1', '',
'toolbar=0,location=0,directories=0,status=1,menubar=0,' +
'scrollbars=yes,resizable=yes,' +
'width=' + querywindow_width + ',' +
'height=' + querywindow_height );
}
if ( ! querywindow.opener ) {
querywindow.opener = window.window;
}
if ( window.focus ) {
querywindow.focus();
}
return true;
}
function refreshQuerywindow( url ) {
if ( ! querywindow.closed && querywindow.location ) {
if ( ! querywindow.document.sqlform.LockFromUpdate
|| ! querywindow.document.sqlform.LockFromUpdate.checked ) {
open_querywindow( url )
}
}
}
/**
* opens new url in target frame, with default being left frame
* valid is 'main' and 'querywindow' all others leads to 'left'
*
* @param string targeturl new url to load
* @param string target frame where to load the new url
*/
function goTo(targeturl, target) {
//alert(targeturl);
if ( target == 'main' ) {
target = window.frame_content;
} else if ( target == 'query' ) {
target = querywindow;
//return open_querywindow( targeturl );
} else if ( ! target ) {
target = window.frame_navigation;
}
if ( target ) {
if ( target.location.href == targeturl ) {
return true;
} else if ( target.location.href == pma_absolute_uri + targeturl ) {
return true;
}
if ( safari_browser ) {
target.location.href = targeturl;
} else {
target.location.replace(targeturl);
}
}
return true;
}
// opens selected db in main frame
function openDb(new_db) {
//alert('opendb(' + new_db + ')');
setDb(new_db);
setTable('');
refreshMain(opendb_url);
return true;
}
function updateTableTitle( table_link_id, new_title ) {
//alert('updateTableTitle');
if ( window.parent.frame_navigation.document.getElementById(table_link_id) ) {
var left = window.parent.frame_navigation.document;
var link = left.getElementById(table_link_id);
link.title = window.parent.pma_text_default_tab + ': ' + new_title;
var link = left.getElementById('quick_' + table_link_id);
link.title = window.parent.pma_text_left_default_tab + ': ' + new_title;
return true;
}
return false;
}

View File

@@ -1,124 +0,0 @@
/**************************************************
* dom-drag.js
* 09.25.2001
* www.youngpup.net
**************************************************
* Copyright 2001, Aaron Boodman
* This code is public domain. Please use it for good, not evil.
**************************************************
* 10.28.2001 - fixed minor bug where events
* sometimes fired off the handle, not the root.
**************************************************/
var Drag = {
obj : null,
init : function(o, oRoot, minX, maxX, minY, maxY, bSwapHorzRef, bSwapVertRef, fXMapper, fYMapper)
{
o.onmousedown = Drag.start;
o.hmode = bSwapHorzRef ? false : true ;
o.vmode = bSwapVertRef ? false : true ;
o.root = oRoot && oRoot != null ? oRoot : o ;
if (o.hmode && isNaN(parseInt(o.root.style.left ))) o.root.style.left = "0px";
if (o.vmode && isNaN(parseInt(o.root.style.top ))) o.root.style.top = "0px";
if (!o.hmode && isNaN(parseInt(o.root.style.right ))) o.root.style.right = "0px";
if (!o.vmode && isNaN(parseInt(o.root.style.bottom))) o.root.style.bottom = "0px";
o.minX = typeof minX != 'undefined' ? minX : null;
o.minY = typeof minY != 'undefined' ? minY : null;
o.maxX = typeof maxX != 'undefined' ? maxX : null;
o.maxY = typeof maxY != 'undefined' ? maxY : null;
o.xMapper = fXMapper ? fXMapper : null;
o.yMapper = fYMapper ? fYMapper : null;
o.root.onDragStart = new Function();
o.root.onDragEnd = new Function();
o.root.onDrag = new Function();
},
start : function(e)
{
var o = Drag.obj = this;
e = Drag.fixE(e);
var y = parseInt(o.vmode ? o.root.style.top : o.root.style.bottom);
var x = parseInt(o.hmode ? o.root.style.left : o.root.style.right );
o.root.onDragStart(x, y);
o.lastMouseX = e.clientX;
o.lastMouseY = e.clientY;
if (o.hmode) {
if (o.minX != null) o.minMouseX = e.clientX - x + o.minX;
if (o.maxX != null) o.maxMouseX = o.minMouseX + o.maxX - o.minX;
} else {
if (o.minX != null) o.maxMouseX = -o.minX + e.clientX + x;
if (o.maxX != null) o.minMouseX = -o.maxX + e.clientX + x;
}
if (o.vmode) {
if (o.minY != null) o.minMouseY = e.clientY - y + o.minY;
if (o.maxY != null) o.maxMouseY = o.minMouseY + o.maxY - o.minY;
} else {
if (o.minY != null) o.maxMouseY = -o.minY + e.clientY + y;
if (o.maxY != null) o.minMouseY = -o.maxY + e.clientY + y;
}
document.onmousemove = Drag.drag;
document.onmouseup = Drag.end;
return false;
},
drag : function(e)
{
e = Drag.fixE(e);
var o = Drag.obj;
var ey = e.clientY;
var ex = e.clientX;
var y = parseInt(o.vmode ? o.root.style.top : o.root.style.bottom);
var x = parseInt(o.hmode ? o.root.style.left : o.root.style.right );
var nx, ny;
if (o.minX != null) ex = o.hmode ? Math.max(ex, o.minMouseX) : Math.min(ex, o.maxMouseX);
if (o.maxX != null) ex = o.hmode ? Math.min(ex, o.maxMouseX) : Math.max(ex, o.minMouseX);
if (o.minY != null) ey = o.vmode ? Math.max(ey, o.minMouseY) : Math.min(ey, o.maxMouseY);
if (o.maxY != null) ey = o.vmode ? Math.min(ey, o.maxMouseY) : Math.max(ey, o.minMouseY);
nx = x + ((ex - o.lastMouseX) * (o.hmode ? 1 : -1));
ny = y + ((ey - o.lastMouseY) * (o.vmode ? 1 : -1));
if (o.xMapper) nx = o.xMapper(y)
else if (o.yMapper) ny = o.yMapper(x)
Drag.obj.root.style[o.hmode ? "left" : "right"] = nx + "px";
Drag.obj.root.style[o.vmode ? "top" : "bottom"] = ny + "px";
Drag.obj.lastMouseX = ex;
Drag.obj.lastMouseY = ey;
Drag.obj.root.onDrag(nx, ny);
return false;
},
end : function()
{
document.onmousemove = null;
document.onmouseup = null;
Drag.obj.root.onDragEnd( parseInt(Drag.obj.root.style[Drag.obj.hmode ? "left" : "right"]),
parseInt(Drag.obj.root.style[Drag.obj.vmode ? "top" : "bottom"]));
Drag.obj = null;
},
fixE : function(e)
{
if (typeof e == 'undefined') e = window.event;
if (typeof e.layerX == 'undefined') e.layerX = e.offsetX;
if (typeof e.layerY == 'undefined') e.layerY = e.offsetY;
return e;
}
};

File diff suppressed because it is too large Load Diff

View File

@@ -1,91 +0,0 @@
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
* function used for index manipulation pages
*
* @version $Id$
*/
/**
* Ensures a value submitted in a form is numeric and is in a range
*
* @param object the form
* @param string the name of the form field to check
* @param integer the minimum authorized value
* @param integer the maximum authorized value
*
* @return boolean whether a valid number has been submitted or not
*/
function checkFormElementInRange(theForm, theFieldName, message, min, max)
{
var theField = theForm.elements[theFieldName];
var val = parseInt(theField.value);
if (typeof(min) == 'undefined') {
min = 0;
}
if (typeof(max) == 'undefined') {
max = Number.MAX_VALUE;
}
// It's not a number
if (isNaN(val)) {
theField.select();
alert(PMA_messages['strNotNumber']);
theField.focus();
return false;
}
// It's a number but it is not between min and max
else if (val < min || val > max) {
theField.select();
alert(message.replace('%d', val));
theField.focus();
return false;
}
// It's a valid number
else {
theField.value = val;
}
return true;
} // end of the 'checkFormElementInRange()' function
/**
* Ensures indexes names are valid according to their type and, for a primary
* key, lock index name to 'PRIMARY'
*
* @return boolean false if there is no index form, true else
*/
function checkIndexName()
{
if (typeof(document.forms['index_frm']) == 'undefined') {
return false;
}
// Gets the elements pointers
var the_idx_name = document.forms['index_frm'].elements['index'];
var the_idx_type = document.forms['index_frm'].elements['index_type'];
// Index is a primary key
if (the_idx_type.options[0].value == 'PRIMARY' && the_idx_type.options[0].selected) {
document.forms['index_frm'].elements['index'].value = 'PRIMARY';
if (typeof(the_idx_name.disabled) != 'undefined') {
document.forms['index_frm'].elements['index'].disabled = true;
}
}
// Other cases
else {
if (the_idx_name.value == 'PRIMARY') {
document.forms['index_frm'].elements['index'].value = '';
}
if (typeof(the_idx_name.disabled) != 'undefined') {
document.forms['index_frm'].elements['index'].disabled = false;
}
}
return true;
} // end of the 'checkIndexName()' function
onload = checkIndexName;

View File

@@ -1,59 +0,0 @@
/**
* Allows moving around inputs/select by Ctrl+arrows
*
* @param object event data
*/
function onKeyDownArrowsHandler(e) {
e = e||window.event;
var o = (e.srcElement||e.target);
if (!o) return;
if (o.tagName != "TEXTAREA" && o.tagName != "INPUT" && o.tagName != "SELECT") return;
if (navigator.userAgent.toLowerCase().indexOf('applewebkit/') != -1) {
if (e.ctrlKey || e.shiftKey || !e.altKey) return;
} else {
if (!e.ctrlKey || e.shiftKey || e.altKey) return;
}
if (!o.id) return;
var pos = o.id.split("_");
if (pos[0] != "field" || typeof pos[2] == "undefined") return;
var x = pos[2], y=pos[1];
// skip non existent fields
for (i=0; i<10; i++)
{
if (switch_movement) {
switch(e.keyCode) {
case 38: x--; break; // up
case 40: x++; break; // down
case 37: y--; break; // left
case 39: y++; break; // right
default: return;
}
} else {
switch(e.keyCode) {
case 38: y--; break; // up
case 40: y++; break; // down
case 37: x--; break; // left
case 39: x++; break; // right
default: return;
}
}
var id = "field_" + y + "_" + x;
var nO = document.getElementById(id);
if (!nO) {
var id = "field_" + y + "_" + x + "_0";
var nO = document.getElementById(id);
}
if (nO) break;
}
if (!nO) return;
nO.focus();
if (nO.tagName != 'SELECT') {
nO.select();
}
e.returnValue = false;
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 43 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 94 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 799 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 80 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 590 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 768 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 794 B

View File

@@ -1,114 +0,0 @@
/***
* - mooRainbow: defaultCSS
* author: w00fz <w00fzIT@gmail.com>
*/
#mooRainbow { font-size: 11px; color: #000; }
.moor-box {
width: 390px;
height: 310px;
border: 1px solid #636163;
background-color: #f9f9f9;
}
.moor-overlayBox {
width: 256px; /* Width and Height of the overlay must be setted here: default 256x256 */
height: 256px;
margin-top: 9px;
margin-left: 9px;
border: 1px solid #000;
}
.moor-slider {
border: 1px solid #000;
margin-top: 9px;
margin-left: 280px;
width: 19px; /* if you want a bigger or smaller slider... */
height: 256px;
}
.moor-colorBox {
border: 1px solid #000;
width: 59px;
height: 68px;
margin-top: 20px;
margin-left: 315px;
}
.moor-currentColor { /* Bottom Box Color, the backup one */
margin-top: 55px;
margin-left: 316px;
width: 59px;
height: 34px;
}
.moor-okButton {
font-family: Tahoma;
font-weight: bold;
font-size: 11px;
margin-top: 278px;
margin-left: 8px;
background: #e6e6e6;
height: 23px;
border: 1px solid #d6d6d6;
border-left-color: #f5f5f5;
border-top-color: #f5f5f5;
}
#mooRainbow label {
font-family: mono;
}
/* Following are just <label> */
.moor-rLabel {
margin-top: 100px;
margin-left: 315px;
}
.moor-gLabel {
margin-top: 125px;
margin-left: 315px;
}
.moor-bLabel {
margin-top: 150px;
margin-left: 315px;
}
.moor-HueLabel {
margin-top: 190px;
margin-left: 315px;
}
span.moor-ballino { /* Style hue <20> (degree) !! */
margin-top: 190px;
margin-left: 370px;
}
.moor-SatuLabel {
margin-top: 215px;
margin-left: 315px;
}
.moor-BrighLabel {
margin-top: 240px;
margin-left: 315px;
}
.moor-hexLabel {
margin-top: 275px;
margin-left: 280px;
}
/* <input> */
.moor-rInput, .moor-gInput, .moor-bInput, .moor-HueInput, .moor-SatuInput, .moor-BrighInput {
width: 30px;
}
.moor-hexInput {
width: 55px;
}
.moor-cursor {
background-image: url(images/moor_cursor.gif);
width: 12px;
height: 12px;
}
.moor-arrows {
background-image: url(images/moor_arrows.gif);
top: 9px;
left: 270px;
width: 41px;
height: 9px;
}
.moor-chooseColor { /* Top Box Color, the choosen one */
margin-top: 21px;
margin-left: 316px;
width: 59px;
height: 34px;
}

View File

@@ -1,563 +0,0 @@
/***
* MooRainbow
*
* @version 1.2b1
* @license MIT-style license
* @author Djamil Legato (w00fz) - < w00fzIT [at] gmail.com >
* @infos http://moorainbow.woolly-sheep.net
* @copyright Author
*
* includes a fix for mootools 1.2 by Piotr Przybylski
*/
var MooRainbow = new Class({
Implements: [Options, Events],
options: {
id: 'mooRainbow',
prefix: 'moor-',
imgPath: 'images/',
startColor: [255, 0, 0],
wheel: false,
onComplete: Class.empty,
onChange: Class.empty,
selectText: 'Select'
},
initialize: function(el, options) {
this.element = $(el); if (!this.element) return;
this.setOptions(options);
this.sliderPos = 0;
this.pickerPos = {x: 0, y: 0};
this.backupColor = this.options.startColor;
this.currentColor = this.options.startColor;
this.sets = {
rgb: [],
hsb: [],
hex: []
};
this.pickerClick = this.sliderClick = false;
if (!this.layout) this.doLayout();
this.OverlayEvents();
this.sliderEvents();
this.backupEvent();
if (this.options.wheel) this.wheelEvents();
this.element.addEvent('click', function(e) { this.toggle(e); }.bind(this));
this.layout.overlay.setStyle('background-color', this.options.startColor.rgbToHex());
this.layout.backup.setStyle('background-color', this.backupColor.rgbToHex());
this.pickerPos.x = this.snippet('curPos').l + this.snippet('curSize', 'int').w;
this.pickerPos.y = this.snippet('curPos').t + this.snippet('curSize', 'int').h;
this.manualSet(this.options.startColor);
this.pickerPos.x = this.snippet('curPos').l + this.snippet('curSize', 'int').w;
this.pickerPos.y = this.snippet('curPos').t + this.snippet('curSize', 'int').h;
this.sliderPos = this.snippet('arrPos') - this.snippet('arrSize', 'int');
if (Browser.Engine.webkit) this.hide();
},
toggle: function() {
this[this.visible ? 'hide' : 'show']()
},
show: function() {
this.rePosition();
this.layout.setStyle('display', 'block');
this.visible = true;
},
hide: function() {
this.layout.setStyles({'display': 'none'});
this.visible = false;
},
manualSet: function(color, type) {
if (!type || (type != 'hsb' && type != 'hex')) type = 'rgb';
var rgb, hsb, hex;
if (type == 'rgb') { rgb = color; hsb = color.rgbToHsb(); hex = color.rgbToHex(); }
else if (type == 'hsb') { hsb = color; rgb = color.hsbToRgb(); hex = rgb.rgbToHex(); }
else { hex = color; rgb = color.hexToRgb(true); hsb = rgb.rgbToHsb(); }
this.setMooRainbow(rgb);
this.autoSet(hsb);
},
autoSet: function(hsb) {
var curH = this.snippet('curSize', 'int').h;
var curW = this.snippet('curSize', 'int').w;
var oveH = this.layout.overlay.height;
var oveW = this.layout.overlay.width;
var sliH = this.layout.slider.height;
var arwH = this.snippet('arrSize', 'int');
var hue;
var posx = Math.round(((oveW * hsb[1]) / 100) - curW);
var posy = Math.round(- ((oveH * hsb[2]) / 100) + oveH - curH);
var c = Math.round(((sliH * hsb[0]) / 360)); c = (c == 360) ? 0 : c;
var position = sliH - c + this.snippet('slider') - arwH;
hue = [this.sets.hsb[0], 100, 100].hsbToRgb().rgbToHex();
this.layout.cursor.setStyles({'top': posy, 'left': posx});
this.layout.arrows.setStyle('top', position);
this.layout.overlay.setStyle('background-color', hue);
this.sliderPos = this.snippet('arrPos') - arwH;
this.pickerPos.x = this.snippet('curPos').l + curW;
this.pickerPos.y = this.snippet('curPos').t + curH;
},
setMooRainbow: function(color, type) {
if (!type || (type != 'hsb' && type != 'hex')) type = 'rgb';
var rgb, hsb, hex;
if (type == 'rgb') { rgb = color; hsb = color.rgbToHsb(); hex = color.rgbToHex(); }
else if (type == 'hsb') { hsb = color; rgb = color.hsbToRgb(); hex = rgb.rgbToHex(); }
else { hex = color; rgb = color.hexToRgb(); hsb = rgb.rgbToHsb(); }
this.sets = {
rgb: rgb,
hsb: hsb,
hex: hex
};
if (!$chk(this.pickerPos.x))
this.autoSet(hsb);
this.RedInput.value = rgb[0];
this.GreenInput.value = rgb[1];
this.BlueInput.value = rgb[2];
this.HueInput.value = hsb[0];
this.SatuInput.value = hsb[1];
this.BrighInput.value = hsb[2];
this.hexInput.value = hex;
this.currentColor = rgb;
this.chooseColor.setStyle('background-color', rgb.rgbToHex());
},
parseColors: function(x, y, z) {
var s = Math.round((x * 100) / this.layout.overlay.width);
var b = 100 - Math.round((y * 100) / this.layout.overlay.height);
var h = 360 - Math.round((z * 360) / this.layout.slider.height) + this.snippet('slider') - this.snippet('arrSize', 'int');
h -= this.snippet('arrSize', 'int');
h = (h >= 360) ? 0 : (h < 0) ? 0 : h;
s = (s > 100) ? 100 : (s < 0) ? 0 : s;
b = (b > 100) ? 100 : (b < 0) ? 0 : b;
return [h, s, b];
},
OverlayEvents: function() {
var lim, curH, curW, inputs;
curH = this.snippet('curSize', 'int').h;
curW = this.snippet('curSize', 'int').w;
inputs = $A(this.arrRGB).concat(this.arrHSB, this.hexInput);
document.addEvent('click', function() {
if(this.visible) this.hide(this.layout);
}.bind(this));
inputs.each(function(el) {
if(el) {
el.addEvent('keydown', this.eventKeydown.bindWithEvent(this, el));
el.addEvent('keyup', this.eventKeyup.bindWithEvent(this, el));
}
}, this);
[this.element, this.layout].each(function(el) {
el.addEvents({
'click': function(e) { new Event(e).stop();},
'keyup': function(e) {
e = new Event(e);
if(e.key == 'esc' && this.visible) this.hide(this.layout);
}.bind(this)
}, this);
}, this);
lim = {
x: [0 - curW, (this.layout.overlay.width - curW)],
y: [0 - curH, (this.layout.overlay.height - curH)]
};
this.layout.drag = new Drag(this.layout.cursor, {
limit: lim,
onStart: this.overlayDrag.bind(this),
onDrag: this.overlayDrag.bind(this),
snap: 0
});
this.layout.overlay2.addEvent('mousedown', function(e){
e = new Event(e);
this.layout.cursor.setStyles({
'top': e.page.y - this.layout.overlay.getPosition().y - curH,
'left': e.page.x - this.layout.overlay.getPosition().x - curW
});
this.overlayDrag();
this.layout.drag.start(e);
}.bind(this));
this.okButton.addEvent('click', function() {
if(this.currentColor == this.options.startColor) {
this.hide();
this.fireEvent('onComplete', [this.sets, this]);
}
else {
this.backupColor = this.currentColor;
this.layout.backup.setStyle('background-color', this.backupColor.rgbToHex());
this.hide();
this.fireEvent('onComplete', [this.sets, this]);
}
}.bind(this));
},
overlayDrag: function() {
var curH = this.snippet('curSize', 'int').h;
var curW = this.snippet('curSize', 'int').w;
this.pickerPos.x = this.snippet('curPos').l + curW;
this.pickerPos.y = this.snippet('curPos').t + curH;
this.setMooRainbow(this.parseColors(this.pickerPos.x, this.pickerPos.y, this.sliderPos), 'hsb');
this.fireEvent('onChange', [this.sets, this]);
},
sliderEvents: function() {
var arwH = this.snippet('arrSize', 'int'), lim;
lim = [0 + this.snippet('slider') - arwH, this.layout.slider.height - arwH + this.snippet('slider')];
this.layout.sliderDrag = new Drag(this.layout.arrows, {
limit: {y: lim},
modifiers: {x: false},
onStart: this.sliderDrag.bind(this),
onDrag: this.sliderDrag.bind(this),
snap: 0
});
this.layout.slider.addEvent('mousedown', function(e){
e = new Event(e);
this.layout.arrows.setStyle(
'top', e.page.y - this.layout.slider.getPosition().y + this.snippet('slider') - arwH
);
this.sliderDrag();
this.layout.sliderDrag.start(e);
}.bind(this));
},
sliderDrag: function() {
var arwH = this.snippet('arrSize', 'int'), hue;
this.sliderPos = this.snippet('arrPos') - arwH;
this.setMooRainbow(this.parseColors(this.pickerPos.x, this.pickerPos.y, this.sliderPos), 'hsb');
hue = [this.sets.hsb[0], 100, 100].hsbToRgb().rgbToHex();
this.layout.overlay.setStyle('background-color', hue);
this.fireEvent('onChange', [this.sets, this]);
},
backupEvent: function() {
this.layout.backup.addEvent('click', function() {
this.manualSet(this.backupColor);
this.fireEvent('onChange', [this.sets, this]);
}.bind(this));
},
wheelEvents: function() {
var arrColors = $A(this.arrRGB).extend(this.arrHSB);
arrColors.each(function(el) {
el.addEvents({
'mousewheel': this.eventKeys.bindWithEvent(this, el),
'keydown': this.eventKeys.bindWithEvent(this, el)
});
}, this);
[this.layout.arrows, this.layout.slider].each(function(el) {
el.addEvents({
'mousewheel': this.eventKeys.bindWithEvent(this, [this.arrHSB[0], 'slider']),
'keydown': this.eventKeys.bindWithEvent(this, [this.arrHSB[0], 'slider'])
});
}, this);
},
eventKeys: function(e, el, id) {
var wheel, type;
id = (!id) ? el.id : this.arrHSB[0];
if (e.type == 'keydown') {
if (e.key == 'up') wheel = 1;
else if (e.key == 'down') wheel = -1;
else return;
} else if (e.type == Element.Events.mousewheel.base) wheel = (e.wheel > 0) ? 1 : -1;
if (this.arrRGB.contains(el)) type = 'rgb';
else if (this.arrHSB.contains(el)) type = 'hsb';
else type = 'hsb';
if (type == 'rgb') {
var rgb = this.sets.rgb, hsb = this.sets.hsb, prefix = this.options.prefix, pass;
var value = (el.value.toInt() || 0) + wheel;
value = (value > 255) ? 255 : (value < 0) ? 0 : value;
switch(el.className) {
case prefix + 'rInput': pass = [value, rgb[1], rgb[2]]; break;
case prefix + 'gInput': pass = [rgb[0], value, rgb[2]]; break;
case prefix + 'bInput': pass = [rgb[0], rgb[1], value]; break;
default : pass = rgb;
}
this.manualSet(pass);
this.fireEvent('onChange', [this.sets, this]);
} else {
var rgb = this.sets.rgb, hsb = this.sets.hsb, prefix = this.options.prefix, pass;
var value = (el.value.toInt() || 0) + wheel;
if (el.className.test(/(HueInput)/)) value = (value > 359) ? 0 : (value < 0) ? 0 : value;
else value = (value > 100) ? 100 : (value < 0) ? 0 : value;
switch(el.className) {
case prefix + 'HueInput': pass = [value, hsb[1], hsb[2]]; break;
case prefix + 'SatuInput': pass = [hsb[0], value, hsb[2]]; break;
case prefix + 'BrighInput': pass = [hsb[0], hsb[1], value]; break;
default : pass = hsb;
}
this.manualSet(pass, 'hsb');
this.fireEvent('onChange', [this.sets, this]);
}
e.stop();
},
eventKeydown: function(e, el) {
var n = e.code, k = e.key;
if ((!el.className.test(/hexInput/) && !(n >= 48 && n <= 57)) &&
(k!='backspace' && k!='tab' && k !='delete' && k!='left' && k!='right'))
e.stop();
},
eventKeyup: function(e, el) {
var n = e.code, k = e.key, pass, prefix, chr = el.value.charAt(0);
if (!$chk(el.value)) return;
if (el.className.test(/hexInput/)) {
if (chr != "#" && el.value.length != 6) return;
if (chr == '#' && el.value.length != 7) return;
} else {
if (!(n >= 48 && n <= 57) && (!['backspace', 'tab', 'delete', 'left', 'right'].contains(k)) && el.value.length > 3) return;
}
prefix = this.options.prefix;
if (el.className.test(/(rInput|gInput|bInput)/)) {
if (el.value < 0 || el.value > 255) return;
switch(el.className){
case prefix + 'rInput': pass = [el.value, this.sets.rgb[1], this.sets.rgb[2]]; break;
case prefix + 'gInput': pass = [this.sets.rgb[0], el.value, this.sets.rgb[2]]; break;
case prefix + 'bInput': pass = [this.sets.rgb[0], this.sets.rgb[1], el.value]; break;
default : pass = this.sets.rgb;
}
this.manualSet(pass);
this.fireEvent('onChange', [this.sets, this]);
}
else if (!el.className.test(/hexInput/)) {
if (el.className.test(/HueInput/) && el.value < 0 || el.value > 360) return;
else if (el.className.test(/HueInput/) && el.value == 360) el.value = 0;
else if (el.className.test(/(SatuInput|BrighInput)/) && el.value < 0 || el.value > 100) return;
switch(el.className){
case prefix + 'HueInput': pass = [el.value, this.sets.hsb[1], this.sets.hsb[2]]; break;
case prefix + 'SatuInput': pass = [this.sets.hsb[0], el.value, this.sets.hsb[2]]; break;
case prefix + 'BrighInput': pass = [this.sets.hsb[0], this.sets.hsb[1], el.value]; break;
default : pass = this.sets.hsb;
}
this.manualSet(pass, 'hsb');
this.fireEvent('onChange', [this.sets, this]);
} else {
pass = el.value.hexToRgb(true);
if (isNaN(pass[0])||isNaN(pass[1])||isNaN(pass[2])) return;
if ($chk(pass)) {
this.manualSet(pass);
this.fireEvent('onChange', [this.sets, this]);
}
}
},
doLayout: function() {
var id = this.options.id, prefix = this.options.prefix;
var idPrefix = id + ' .' + prefix;
this.layout = new Element('div', {
'styles': {'display': 'block', 'position': 'absolute'},
'id': id
}).inject(document.body);
var box = new Element('div', {
'styles': {'position': 'relative'},
'class': prefix + 'box'
}).inject(this.layout);
var div = new Element('div', {
'styles': {'position': 'absolute', 'overflow': 'hidden'},
'class': prefix + 'overlayBox'
}).inject(box);
var ar = new Element('div', {
'styles': {'position': 'absolute', 'zIndex': 1},
'class': prefix + 'arrows'
}).inject(box);
ar.width = ar.getStyle('width').toInt();
ar.height = ar.getStyle('height').toInt();
var ov = new Element('img', {
'styles': {'background-color': '#fff', 'position': 'relative', 'zIndex': 2},
'src': this.options.imgPath + 'moor_woverlay.png',
'class': prefix + 'overlay'
}).inject(div);
var ov2 = new Element('img', {
'styles': {'position': 'absolute', 'top': 0, 'left': 0, 'zIndex': 2},
'src': this.options.imgPath + 'moor_boverlay.png',
'class': prefix + 'overlay'
}).inject(div);
if (Browser.Engine.trident4) {
div.setStyle('overflow', '');
var src = ov.src;
ov.src = this.options.imgPath + 'blank.gif';
ov.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + src + "', sizingMethod='scale')";
src = ov2.src;
ov2.src = this.options.imgPath + 'blank.gif';
ov2.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + src + "', sizingMethod='scale')";
}
ov.width = ov2.width = div.getStyle('width').toInt();
ov.height = ov2.height = div.getStyle('height').toInt();
var cr = new Element('div', {
'styles': {'overflow': 'hidden', 'position': 'absolute', 'zIndex': 2},
'class': prefix + 'cursor'
}).inject(div);
cr.width = cr.getStyle('width').toInt();
cr.height = cr.getStyle('height').toInt();
var sl = new Element('img', {
'styles': {'position': 'absolute', 'z-index': 2},
'src': this.options.imgPath + 'moor_slider.png',
'class': prefix + 'slider'
}).inject(box);
this.layout.slider = sl;
sl.width = sl.getStyle('width').toInt();
sl.height = sl.getStyle('height').toInt();
new Element('div', {
'styles': {'position': 'absolute'},
'class': prefix + 'colorBox'
}).inject(box);
new Element('div', {
'styles': {'zIndex': 2, 'position': 'absolute'},
'class': prefix + 'chooseColor'
}).inject(box);
this.layout.backup = new Element('div', {
'styles': {'zIndex': 2, 'position': 'absolute', 'cursor': 'pointer'},
'class': prefix + 'currentColor'
}).inject(box);
var R = new Element('label').inject(box).setStyle('position', 'absolute');
var G = R.clone().inject(box).addClass(prefix + 'gLabel').set('html', 'G: ');
var B = R.clone().inject(box).addClass(prefix + 'bLabel').set('html', 'B: ');
R.set('html', 'R: ').addClass(prefix + 'rLabel');
var inputR = new Element('input');
var inputG = inputR.clone().inject(G).addClass(prefix + 'gInput');
var inputB = inputR.clone().inject(B).addClass(prefix + 'bInput');
inputR.inject(R).addClass(prefix + 'rInput');
var HU = new Element('label').inject(box).setStyle('position', 'absolute');
var SA = HU.clone().inject(box).addClass(prefix + 'SatuLabel').set('html', 'S: ');
var BR = HU.clone().inject(box).addClass(prefix + 'BrighLabel').set('html', 'B: ');
HU.set('html', 'H: ').addClass(prefix + 'HueLabel');
var inputHU = new Element('input');
var inputSA = inputHU.clone().inject(SA).addClass(prefix + 'SatuInput');
var inputBR = inputHU.clone().inject(BR).addClass(prefix + 'BrighInput');
inputHU.inject(HU).addClass(prefix + 'HueInput');
SA.innerHTML += " %"; BR.innerHTML += " %";
SP = new Element('span', {'styles': {'position': 'absolute'}, 'class': prefix + 'ballino'})
SP.innerHTML = " &deg;"
SP.inject(HU,'after');
var hex = new Element('label').inject(box).setStyle('position', 'absolute').addClass(prefix + 'hexLabel').set('html', '#hex: ').adopt(new Element('input').addClass(prefix + 'hexInput'));
var ok = new Element('input', {
'styles': {'position': 'absolute'},
'type': 'button',
'value': this.options.selectText,
'class': prefix + 'okButton'
}).inject(box);
this.rePosition();
var overlays = $$('#' + id + ' .' + prefix + 'overlay');
this.layout.overlay = overlays[0];
this.layout.overlay2 = overlays[1];
this.layout.cursor = cr;
this.layout.arrows = ar;
this.chooseColor = this.layout.getElement('.' + prefix + 'chooseColor');
this.RedInput = inputR;
this.GreenInput = inputG;
this.BlueInput = inputB;
this.HueInput = inputHU;
this.SatuInput = this.layout.getElement('.' + prefix + 'SatuInput');
this.BrighInput = this.layout.getElement('.' + prefix + 'BrighInput');
this.hexInput = this.layout.getElement('.' + prefix + 'hexInput');;
this.arrRGB = [this.RedInput, this.GreenInput, this.BlueInput];
this.arrHSB = [this.HueInput, this.SatuInput, this.BrighInput];
this.okButton = ok;
if (!Browser.Engine.webkit419) this.hide();
},
rePosition: function() {
var coords = this.element.getCoordinates();
this.layout.setStyles({
'left': coords.left,
'top': coords.top + coords.height + 1
});
},
snippet: function(mode, type) {
var size; type = (type) ? type : 'none';
switch(mode) {
case 'arrPos':
var t = this.layout.arrows.getStyle('top').toInt();
size = t;
break;
case 'arrSize':
var h = this.layout.arrows.height;
h = (type == 'int') ? (h/2).toInt() : h;
size = h;
break;
case 'curPos':
var l = this.layout.cursor.getStyle('left').toInt();
var t = this.layout.cursor.getStyle('top').toInt();
size = {'l': l, 't': t};
break;
case 'slider':
var t = this.layout.slider.getStyle('marginTop').toInt();
size = t;
break;
default :
var h = this.layout.cursor.height;
var w = this.layout.cursor.width;
h = (type == 'int') ? (h/2).toInt() : h;
w = (type == 'int') ? (w/2).toInt() : w;
size = {w: w, h: h};
};
return size;
}
});

View File

@@ -1,16 +0,0 @@
window.addEvent('domready', function() {
var r = new MooRainbow('myRainbow', {
'startColor': [58, 142, 246],
'imgPath': 'js/mooRainbow/images/',
'onChange': function(color) {
top.frame_navigation.document.getElementById('body_leftFrame').style.backgroundColor = color.hex;
top.frame_navigation.document.getElementById('pmalogo').style.backgroundColor = color.hex;
top.frame_content.document.body.style.backgroundColor = color.hex;
},
'onComplete': function(color) {
top.frame_content.document.getElementById('rainbowform').custom_color.value = color.hex;
top.frame_content.document.getElementById('rainbowform').custom_color_rgb.value = color.rgb;
top.frame_content.document.getElementById('rainbowform').submit();
}
});
});

View File

@@ -1,496 +0,0 @@
//MooTools, <http://mootools.net>, My Object Oriented (JavaScript) Tools. Copyright (c) 2006-2008 Valerio Proietti, <http://mad4milk.net>, MIT Style License.
var MooTools={version:"1.2.0",build:""};var Native=function(J){J=J||{};var F=J.afterImplement||function(){};var G=J.generics;G=(G!==false);var H=J.legacy;
var E=J.initialize;var B=J.protect;var A=J.name;var C=E||H;C.constructor=Native;C.$family={name:"native"};if(H&&E){C.prototype=H.prototype;}C.prototype.constructor=C;
if(A){var D=A.toLowerCase();C.prototype.$family={name:D};Native.typize(C,D);}var I=function(M,K,N,L){if(!B||L||!M.prototype[K]){M.prototype[K]=N;}if(G){Native.genericize(M,K,B);
}F.call(M,K,N);return M;};C.implement=function(L,K,N){if(typeof L=="string"){return I(this,L,K,N);}for(var M in L){I(this,M,L[M],K);}return this;};C.alias=function(M,K,N){if(typeof M=="string"){M=this.prototype[M];
if(M){I(this,K,M,N);}}else{for(var L in M){this.alias(L,M[L],K);}}return this;};return C;};Native.implement=function(D,C){for(var B=0,A=D.length;B<A;B++){D[B].implement(C);
}};Native.genericize=function(B,C,A){if((!A||!B[C])&&typeof B.prototype[C]=="function"){B[C]=function(){var D=Array.prototype.slice.call(arguments);return B.prototype[C].apply(D.shift(),D);
};}};Native.typize=function(A,B){if(!A.type){A.type=function(C){return($type(C)===B);};}};Native.alias=function(E,B,A,F){for(var D=0,C=E.length;D<C;D++){E[D].alias(B,A,F);
}};(function(B){for(var A in B){Native.typize(B[A],A);}})({"boolean":Boolean,"native":Native,object:Object});(function(B){for(var A in B){new Native({name:A,initialize:B[A],protect:true});
}})({String:String,Function:Function,Number:Number,Array:Array,RegExp:RegExp,Date:Date});(function(B,A){for(var C=A.length;C--;C){Native.genericize(B,A[C],true);
}return arguments.callee;})(Array,["pop","push","reverse","shift","sort","splice","unshift","concat","join","slice","toString","valueOf","indexOf","lastIndexOf"])(String,["charAt","charCodeAt","concat","indexOf","lastIndexOf","match","replace","search","slice","split","substr","substring","toLowerCase","toUpperCase","valueOf"]);
function $chk(A){return !!(A||A===0);}function $clear(A){clearTimeout(A);clearInterval(A);return null;}function $defined(A){return(A!=undefined);}function $empty(){}function $arguments(A){return function(){return arguments[A];
};}function $lambda(A){return(typeof A=="function")?A:function(){return A;};}function $extend(C,A){for(var B in (A||{})){C[B]=A[B];}return C;}function $unlink(C){var B;
switch($type(C)){case"object":B={};for(var E in C){B[E]=$unlink(C[E]);}break;case"hash":B=$unlink(C.getClean());break;case"array":B=[];for(var D=0,A=C.length;
D<A;D++){B[D]=$unlink(C[D]);}break;default:return C;}return B;}function $merge(){var E={};for(var D=0,A=arguments.length;D<A;D++){var B=arguments[D];if($type(B)!="object"){continue;
}for(var C in B){var G=B[C],F=E[C];E[C]=(F&&$type(G)=="object"&&$type(F)=="object")?$merge(F,G):$unlink(G);}}return E;}function $pick(){for(var B=0,A=arguments.length;
B<A;B++){if(arguments[B]!=undefined){return arguments[B];}}return null;}function $random(B,A){return Math.floor(Math.random()*(A-B+1)+B);}function $splat(B){var A=$type(B);
return(A)?((A!="array"&&A!="arguments")?[B]:B):[];}var $time=Date.now||function(){return new Date().getTime();};function $try(){for(var B=0,A=arguments.length;
B<A;B++){try{return arguments[B]();}catch(C){}}return null;}function $type(A){if(A==undefined){return false;}if(A.$family){return(A.$family.name=="number"&&!isFinite(A))?false:A.$family.name;
}if(A.nodeName){switch(A.nodeType){case 1:return"element";case 3:return(/\S/).test(A.nodeValue)?"textnode":"whitespace";}}else{if(typeof A.length=="number"){if(A.callee){return"arguments";
}else{if(A.item){return"collection";}}}}return typeof A;}var Hash=new Native({name:"Hash",initialize:function(A){if($type(A)=="hash"){A=$unlink(A.getClean());
}for(var B in A){this[B]=A[B];}return this;}});Hash.implement({getLength:function(){var B=0;for(var A in this){if(this.hasOwnProperty(A)){B++;}}return B;
},forEach:function(B,C){for(var A in this){if(this.hasOwnProperty(A)){B.call(C,this[A],A,this);}}},getClean:function(){var B={};for(var A in this){if(this.hasOwnProperty(A)){B[A]=this[A];
}}return B;}});Hash.alias("forEach","each");function $H(A){return new Hash(A);}Array.implement({forEach:function(C,D){for(var B=0,A=this.length;B<A;B++){C.call(D,this[B],B,this);
}}});Array.alias("forEach","each");function $A(C){if(C.item){var D=[];for(var B=0,A=C.length;B<A;B++){D[B]=C[B];}return D;}return Array.prototype.slice.call(C);
}function $each(C,B,D){var A=$type(C);((A=="arguments"||A=="collection"||A=="array")?Array:Hash).each(C,B,D);}var Browser=new Hash({Engine:{name:"unknown",version:""},Platform:{name:(navigator.platform.match(/mac|win|linux/i)||["other"])[0].toLowerCase()},Features:{xpath:!!(document.evaluate),air:!!(window.runtime)},Plugins:{}});
if(window.opera){Browser.Engine={name:"presto",version:(document.getElementsByClassName)?950:925};}else{if(window.ActiveXObject){Browser.Engine={name:"trident",version:(window.XMLHttpRequest)?5:4};
}else{if(!navigator.taintEnabled){Browser.Engine={name:"webkit",version:(Browser.Features.xpath)?420:419};}else{if(document.getBoxObjectFor!=null){Browser.Engine={name:"gecko",version:(document.getElementsByClassName)?19:18};
}}}}Browser.Engine[Browser.Engine.name]=Browser.Engine[Browser.Engine.name+Browser.Engine.version]=true;if(window.orientation!=undefined){Browser.Platform.name="ipod";
}Browser.Platform[Browser.Platform.name]=true;Browser.Request=function(){return $try(function(){return new XMLHttpRequest();},function(){return new ActiveXObject("MSXML2.XMLHTTP");
});};Browser.Features.xhr=!!(Browser.Request());Browser.Plugins.Flash=(function(){var A=($try(function(){return navigator.plugins["Shockwave Flash"].description;
},function(){return new ActiveXObject("ShockwaveFlash.ShockwaveFlash").GetVariable("$version");})||"0 r0").match(/\d+/g);return{version:parseInt(A[0]||0+"."+A[1]||0),build:parseInt(A[2]||0)};
})();function $exec(B){if(!B){return B;}if(window.execScript){window.execScript(B);}else{var A=document.createElement("script");A.setAttribute("type","text/javascript");
A.text=B;document.head.appendChild(A);document.head.removeChild(A);}return B;}Native.UID=1;var $uid=(Browser.Engine.trident)?function(A){return(A.uid||(A.uid=[Native.UID++]))[0];
}:function(A){return A.uid||(A.uid=Native.UID++);};var Window=new Native({name:"Window",legacy:(Browser.Engine.trident)?null:window.Window,initialize:function(A){$uid(A);
if(!A.Element){A.Element=$empty;if(Browser.Engine.webkit){A.document.createElement("iframe");}A.Element.prototype=(Browser.Engine.webkit)?window["[[DOMElement.prototype]]"]:{};
}return $extend(A,Window.Prototype);},afterImplement:function(B,A){window[B]=Window.Prototype[B]=A;}});Window.Prototype={$family:{name:"window"}};new Window(window);
var Document=new Native({name:"Document",legacy:(Browser.Engine.trident)?null:window.Document,initialize:function(A){$uid(A);A.head=A.getElementsByTagName("head")[0];
A.html=A.getElementsByTagName("html")[0];A.window=A.defaultView||A.parentWindow;if(Browser.Engine.trident4){$try(function(){A.execCommand("BackgroundImageCache",false,true);
});}return $extend(A,Document.Prototype);},afterImplement:function(B,A){document[B]=Document.Prototype[B]=A;}});Document.Prototype={$family:{name:"document"}};
new Document(document);Array.implement({every:function(C,D){for(var B=0,A=this.length;B<A;B++){if(!C.call(D,this[B],B,this)){return false;}}return true;
},filter:function(D,E){var C=[];for(var B=0,A=this.length;B<A;B++){if(D.call(E,this[B],B,this)){C.push(this[B]);}}return C;},clean:function(){return this.filter($defined);
},indexOf:function(C,D){var A=this.length;for(var B=(D<0)?Math.max(0,A+D):D||0;B<A;B++){if(this[B]===C){return B;}}return -1;},map:function(D,E){var C=[];
for(var B=0,A=this.length;B<A;B++){C[B]=D.call(E,this[B],B,this);}return C;},some:function(C,D){for(var B=0,A=this.length;B<A;B++){if(C.call(D,this[B],B,this)){return true;
}}return false;},associate:function(C){var D={},B=Math.min(this.length,C.length);for(var A=0;A<B;A++){D[C[A]]=this[A];}return D;},link:function(C){var A={};
for(var E=0,B=this.length;E<B;E++){for(var D in C){if(C[D](this[E])){A[D]=this[E];delete C[D];break;}}}return A;},contains:function(A,B){return this.indexOf(A,B)!=-1;
},extend:function(C){for(var B=0,A=C.length;B<A;B++){this.push(C[B]);}return this;},getLast:function(){return(this.length)?this[this.length-1]:null;},getRandom:function(){return(this.length)?this[$random(0,this.length-1)]:null;
},include:function(A){if(!this.contains(A)){this.push(A);}return this;},combine:function(C){for(var B=0,A=C.length;B<A;B++){this.include(C[B]);}return this;
},erase:function(B){for(var A=this.length;A--;A){if(this[A]===B){this.splice(A,1);}}return this;},empty:function(){this.length=0;return this;},flatten:function(){var D=[];
for(var B=0,A=this.length;B<A;B++){var C=$type(this[B]);if(!C){continue;}D=D.concat((C=="array"||C=="collection"||C=="arguments")?Array.flatten(this[B]):this[B]);
}return D;},hexToRgb:function(B){if(this.length!=3){return null;}var A=this.map(function(C){if(C.length==1){C+=C;}return C.toInt(16);});return(B)?A:"rgb("+A+")";
},rgbToHex:function(D){if(this.length<3){return null;}if(this.length==4&&this[3]==0&&!D){return"transparent";}var B=[];for(var A=0;A<3;A++){var C=(this[A]-0).toString(16);
B.push((C.length==1)?"0"+C:C);}return(D)?B:"#"+B.join("");}});Function.implement({extend:function(A){for(var B in A){this[B]=A[B];}return this;},create:function(B){var A=this;
B=B||{};return function(D){var C=B.arguments;C=(C!=undefined)?$splat(C):Array.slice(arguments,(B.event)?1:0);if(B.event){C=[D||window.event].extend(C);
}var E=function(){return A.apply(B.bind||null,C);};if(B.delay){return setTimeout(E,B.delay);}if(B.periodical){return setInterval(E,B.periodical);}if(B.attempt){return $try(E);
}return E();};},pass:function(A,B){return this.create({arguments:A,bind:B});},attempt:function(A,B){return this.create({arguments:A,bind:B,attempt:true})();
},bind:function(B,A){return this.create({bind:B,arguments:A});},bindWithEvent:function(B,A){return this.create({bind:B,event:true,arguments:A});},delay:function(B,C,A){return this.create({delay:B,bind:C,arguments:A})();
},periodical:function(A,C,B){return this.create({periodical:A,bind:C,arguments:B})();},run:function(A,B){return this.apply(B,$splat(A));}});Number.implement({limit:function(B,A){return Math.min(A,Math.max(B,this));
},round:function(A){A=Math.pow(10,A||0);return Math.round(this*A)/A;},times:function(B,C){for(var A=0;A<this;A++){B.call(C,A,this);}},toFloat:function(){return parseFloat(this);
},toInt:function(A){return parseInt(this,A||10);}});Number.alias("times","each");(function(B){var A={};B.each(function(C){if(!Number[C]){A[C]=function(){return Math[C].apply(null,[this].concat($A(arguments)));
};}});Number.implement(A);})(["abs","acos","asin","atan","atan2","ceil","cos","exp","floor","log","max","min","pow","sin","sqrt","tan"]);String.implement({test:function(A,B){return((typeof A=="string")?new RegExp(A,B):A).test(this);
},contains:function(A,B){return(B)?(B+this+B).indexOf(B+A+B)>-1:this.indexOf(A)>-1;},trim:function(){return this.replace(/^\s+|\s+$/g,"");},clean:function(){return this.replace(/\s+/g," ").trim();
},camelCase:function(){return this.replace(/-\D/g,function(A){return A.charAt(1).toUpperCase();});},hyphenate:function(){return this.replace(/[A-Z]/g,function(A){return("-"+A.charAt(0).toLowerCase());
});},capitalize:function(){return this.replace(/\b[a-z]/g,function(A){return A.toUpperCase();});},escapeRegExp:function(){return this.replace(/([-.*+?^${}()|[\]\/\\])/g,"\\$1");
},toInt:function(A){return parseInt(this,A||10);},toFloat:function(){return parseFloat(this);},hexToRgb:function(B){var A=this.match(/^#?(\w{1,2})(\w{1,2})(\w{1,2})$/);
return(A)?A.slice(1).hexToRgb(B):null;},rgbToHex:function(B){var A=this.match(/\d{1,3}/g);return(A)?A.rgbToHex(B):null;},stripScripts:function(B){var A="";
var C=this.replace(/<script[^>]*>([\s\S]*?)<\/script>/gi,function(){A+=arguments[1]+"\n";return"";});if(B===true){$exec(A);}else{if($type(B)=="function"){B(A,C);
}}return C;},substitute:function(A,B){return this.replace(B||(/\\?\{([^}]+)\}/g),function(D,C){if(D.charAt(0)=="\\"){return D.slice(1);}return(A[C]!=undefined)?A[C]:"";
});}});Hash.implement({has:Object.prototype.hasOwnProperty,keyOf:function(B){for(var A in this){if(this.hasOwnProperty(A)&&this[A]===B){return A;}}return null;
},hasValue:function(A){return(Hash.keyOf(this,A)!==null);},extend:function(A){Hash.each(A,function(C,B){Hash.set(this,B,C);},this);return this;},combine:function(A){Hash.each(A,function(C,B){Hash.include(this,B,C);
},this);return this;},erase:function(A){if(this.hasOwnProperty(A)){delete this[A];}return this;},get:function(A){return(this.hasOwnProperty(A))?this[A]:null;
},set:function(A,B){if(!this[A]||this.hasOwnProperty(A)){this[A]=B;}return this;},empty:function(){Hash.each(this,function(B,A){delete this[A];},this);
return this;},include:function(B,C){var A=this[B];if(A==undefined){this[B]=C;}return this;},map:function(B,C){var A=new Hash;Hash.each(this,function(E,D){A.set(D,B.call(C,E,D,this));
},this);return A;},filter:function(B,C){var A=new Hash;Hash.each(this,function(E,D){if(B.call(C,E,D,this)){A.set(D,E);}},this);return A;},every:function(B,C){for(var A in this){if(this.hasOwnProperty(A)&&!B.call(C,this[A],A)){return false;
}}return true;},some:function(B,C){for(var A in this){if(this.hasOwnProperty(A)&&B.call(C,this[A],A)){return true;}}return false;},getKeys:function(){var A=[];
Hash.each(this,function(C,B){A.push(B);});return A;},getValues:function(){var A=[];Hash.each(this,function(B){A.push(B);});return A;},toQueryString:function(A){var B=[];
Hash.each(this,function(F,E){if(A){E=A+"["+E+"]";}var D;switch($type(F)){case"object":D=Hash.toQueryString(F,E);break;case"array":var C={};F.each(function(H,G){C[G]=H;
});D=Hash.toQueryString(C,E);break;default:D=E+"="+encodeURIComponent(F);}if(F!=undefined){B.push(D);}});return B.join("&");}});Hash.alias({keyOf:"indexOf",hasValue:"contains"});
var Event=new Native({name:"Event",initialize:function(A,F){F=F||window;var K=F.document;A=A||F.event;if(A.$extended){return A;}this.$extended=true;var J=A.type;
var G=A.target||A.srcElement;while(G&&G.nodeType==3){G=G.parentNode;}if(J.test(/key/)){var B=A.which||A.keyCode;var M=Event.Keys.keyOf(B);if(J=="keydown"){var D=B-111;
if(D>0&&D<13){M="f"+D;}}M=M||String.fromCharCode(B).toLowerCase();}else{if(J.match(/(click|mouse|menu)/i)){K=(!K.compatMode||K.compatMode=="CSS1Compat")?K.html:K.body;
var I={x:A.pageX||A.clientX+K.scrollLeft,y:A.pageY||A.clientY+K.scrollTop};var C={x:(A.pageX)?A.pageX-F.pageXOffset:A.clientX,y:(A.pageY)?A.pageY-F.pageYOffset:A.clientY};
if(J.match(/DOMMouseScroll|mousewheel/)){var H=(A.wheelDelta)?A.wheelDelta/120:-(A.detail||0)/3;}var E=(A.which==3)||(A.button==2);var L=null;if(J.match(/over|out/)){switch(J){case"mouseover":L=A.relatedTarget||A.fromElement;
break;case"mouseout":L=A.relatedTarget||A.toElement;}if(!(function(){while(L&&L.nodeType==3){L=L.parentNode;}return true;}).create({attempt:Browser.Engine.gecko})()){L=false;
}}}}return $extend(this,{event:A,type:J,page:I,client:C,rightClick:E,wheel:H,relatedTarget:L,target:G,code:B,key:M,shift:A.shiftKey,control:A.ctrlKey,alt:A.altKey,meta:A.metaKey});
}});Event.Keys=new Hash({enter:13,up:38,down:40,left:37,right:39,esc:27,space:32,backspace:8,tab:9,"delete":46});Event.implement({stop:function(){return this.stopPropagation().preventDefault();
},stopPropagation:function(){if(this.event.stopPropagation){this.event.stopPropagation();}else{this.event.cancelBubble=true;}return this;},preventDefault:function(){if(this.event.preventDefault){this.event.preventDefault();
}else{this.event.returnValue=false;}return this;}});var Class=new Native({name:"Class",initialize:function(B){B=B||{};var A=function(E){for(var D in this){this[D]=$unlink(this[D]);
}for(var F in Class.Mutators){if(!this[F]){continue;}Class.Mutators[F](this,this[F]);delete this[F];}this.constructor=A;if(E===$empty){return this;}var C=(this.initialize)?this.initialize.apply(this,arguments):this;
if(this.options&&this.options.initialize){this.options.initialize.call(this);}return C;};$extend(A,this);A.constructor=Class;A.prototype=B;return A;}});
Class.implement({implement:function(){Class.Mutators.Implements(this.prototype,Array.slice(arguments));return this;}});Class.Mutators={Implements:function(A,B){$splat(B).each(function(C){$extend(A,($type(C)=="class")?new C($empty):C);
});},Extends:function(self,klass){var instance=new klass($empty);delete instance.parent;delete instance.parentOf;for(var key in instance){var current=self[key],previous=instance[key];
if(current==undefined){self[key]=previous;continue;}var ctype=$type(current),ptype=$type(previous);if(ctype!=ptype){continue;}switch(ctype){case"function":if(!arguments.callee.caller){self[key]=eval("("+String(current).replace(/\bthis\.parent\(\s*(\))?/g,function(full,close){return"arguments.callee._parent_.call(this"+(close||", ");
})+")");}self[key]._parent_=previous;break;case"object":self[key]=$merge(previous,current);}}self.parent=function(){return arguments.callee.caller._parent_.apply(this,arguments);
};self.parentOf=function(descendant){return descendant._parent_.apply(this,Array.slice(arguments,1));};}};var Chain=new Class({chain:function(){this.$chain=(this.$chain||[]).extend(arguments);
return this;},callChain:function(){return(this.$chain&&this.$chain.length)?this.$chain.shift().apply(this,arguments):false;},clearChain:function(){if(this.$chain){this.$chain.empty();
}return this;}});var Events=new Class({addEvent:function(C,B,A){C=Events.removeOn(C);if(B!=$empty){this.$events=this.$events||{};this.$events[C]=this.$events[C]||[];
this.$events[C].include(B);if(A){B.internal=true;}}return this;},addEvents:function(A){for(var B in A){this.addEvent(B,A[B]);}return this;},fireEvent:function(C,B,A){C=Events.removeOn(C);
if(!this.$events||!this.$events[C]){return this;}this.$events[C].each(function(D){D.create({bind:this,delay:A,"arguments":B})();},this);return this;},removeEvent:function(B,A){B=Events.removeOn(B);
if(!this.$events||!this.$events[B]){return this;}if(!A.internal){this.$events[B].erase(A);}return this;},removeEvents:function(C){for(var D in this.$events){if(C&&C!=D){continue;
}var B=this.$events[D];for(var A=B.length;A--;A){this.removeEvent(D,B[A]);}}return this;}});Events.removeOn=function(A){return A.replace(/^on([A-Z])/,function(B,C){return C.toLowerCase();
});};var Options=new Class({setOptions:function(){this.options=$merge.run([this.options].extend(arguments));if(!this.addEvent){return this;}for(var A in this.options){if($type(this.options[A])!="function"||!(/^on[A-Z]/).test(A)){continue;
}this.addEvent(A,this.options[A]);delete this.options[A];}return this;}});Document.implement({newElement:function(A,B){if(Browser.Engine.trident&&B){["name","type","checked"].each(function(C){if(!B[C]){return ;
}A+=" "+C+'="'+B[C]+'"';if(C!="checked"){delete B[C];}});A="<"+A+">";}return $.element(this.createElement(A)).set(B);},newTextNode:function(A){return this.createTextNode(A);
},getDocument:function(){return this;},getWindow:function(){return this.defaultView||this.parentWindow;},purge:function(){var C=this.getElementsByTagName("*");
for(var B=0,A=C.length;B<A;B++){Browser.freeMem(C[B]);}}});var Element=new Native({name:"Element",legacy:window.Element,initialize:function(A,B){var C=Element.Constructors.get(A);
if(C){return C(B);}if(typeof A=="string"){return document.newElement(A,B);}return $(A).set(B);},afterImplement:function(A,B){if(!Array[A]){Elements.implement(A,Elements.multi(A));
}Element.Prototype[A]=B;}});Element.Prototype={$family:{name:"element"}};Element.Constructors=new Hash;var IFrame=new Native({name:"IFrame",generics:false,initialize:function(){var E=Array.link(arguments,{properties:Object.type,iframe:$defined});
var C=E.properties||{};var B=$(E.iframe)||false;var D=C.onload||$empty;delete C.onload;C.id=C.name=$pick(C.id,C.name,B.id,B.name,"IFrame_"+$time());B=new Element(B||"iframe",C);
var A=function(){var F=$try(function(){return B.contentWindow.location.host;});if(F&&F==window.location.host){var H=new Window(B.contentWindow);var G=new Document(B.contentWindow.document);
$extend(H.Element.prototype,Element.Prototype);}D.call(B.contentWindow,B.contentWindow.document);};(!window.frames[C.id])?B.addListener("load",A):A();return B;
}});var Elements=new Native({initialize:function(F,B){B=$extend({ddup:true,cash:true},B);F=F||[];if(B.ddup||B.cash){var G={},E=[];for(var C=0,A=F.length;
C<A;C++){var D=$.element(F[C],!B.cash);if(B.ddup){if(G[D.uid]){continue;}G[D.uid]=true;}E.push(D);}F=E;}return(B.cash)?$extend(F,this):F;}});Elements.implement({filter:function(A,B){if(!A){return this;
}return new Elements(Array.filter(this,(typeof A=="string")?function(C){return C.match(A);}:A,B));}});Elements.multi=function(A){return function(){var B=[];
var F=true;for(var D=0,C=this.length;D<C;D++){var E=this[D][A].apply(this[D],arguments);B.push(E);if(F){F=($type(E)=="element");}}return(F)?new Elements(B):B;
};};Window.implement({$:function(B,C){if(B&&B.$family&&B.uid){return B;}var A=$type(B);return($[A])?$[A](B,C,this.document):null;},$$:function(A){if(arguments.length==1&&typeof A=="string"){return this.document.getElements(A);
}var F=[];var C=Array.flatten(arguments);for(var D=0,B=C.length;D<B;D++){var E=C[D];switch($type(E)){case"element":E=[E];break;case"string":E=this.document.getElements(E,true);
break;default:E=false;}if(E){F.extend(E);}}return new Elements(F);},getDocument:function(){return this.document;},getWindow:function(){return this;}});
$.string=function(C,B,A){C=A.getElementById(C);return(C)?$.element(C,B):null;};$.element=function(A,D){$uid(A);if(!D&&!A.$family&&!(/^object|embed$/i).test(A.tagName)){var B=Element.Prototype;
for(var C in B){A[C]=B[C];}}return A;};$.object=function(B,C,A){if(B.toElement){return $.element(B.toElement(A),C);}return null;};$.textnode=$.whitespace=$.window=$.document=$arguments(0);
Native.implement([Element,Document],{getElement:function(A,B){return $(this.getElements(A,true)[0]||null,B);},getElements:function(A,D){A=A.split(",");
var C=[];var B=(A.length>1);A.each(function(E){var F=this.getElementsByTagName(E.trim());(B)?C.extend(F):C=F;},this);return new Elements(C,{ddup:B,cash:!D});
}});Element.Storage={get:function(A){return(this[A]||(this[A]={}));}};Element.Inserters=new Hash({before:function(B,A){if(A.parentNode){A.parentNode.insertBefore(B,A);
}},after:function(B,A){if(!A.parentNode){return ;}var C=A.nextSibling;(C)?A.parentNode.insertBefore(B,C):A.parentNode.appendChild(B);},bottom:function(B,A){A.appendChild(B);
},top:function(B,A){var C=A.firstChild;(C)?A.insertBefore(B,C):A.appendChild(B);}});Element.Inserters.inside=Element.Inserters.bottom;Element.Inserters.each(function(C,B){var A=B.capitalize();
Element.implement("inject"+A,function(D){C(this,$(D,true));return this;});Element.implement("grab"+A,function(D){C($(D,true),this);return this;});});Element.implement({getDocument:function(){return this.ownerDocument;
},getWindow:function(){return this.ownerDocument.getWindow();},getElementById:function(D,C){var B=this.ownerDocument.getElementById(D);if(!B){return null;
}for(var A=B.parentNode;A!=this;A=A.parentNode){if(!A){return null;}}return $.element(B,C);},set:function(D,B){switch($type(D)){case"object":for(var C in D){this.set(C,D[C]);
}break;case"string":var A=Element.Properties.get(D);(A&&A.set)?A.set.apply(this,Array.slice(arguments,1)):this.setProperty(D,B);}return this;},get:function(B){var A=Element.Properties.get(B);
return(A&&A.get)?A.get.apply(this,Array.slice(arguments,1)):this.getProperty(B);},erase:function(B){var A=Element.Properties.get(B);(A&&A.erase)?A.erase.apply(this,Array.slice(arguments,1)):this.removeProperty(B);
return this;},match:function(A){return(!A||Element.get(this,"tag")==A);},inject:function(B,A){Element.Inserters.get(A||"bottom")(this,$(B,true));return this;
},wraps:function(B,A){B=$(B,true);return this.replaces(B).grab(B,A);},grab:function(B,A){Element.Inserters.get(A||"bottom")($(B,true),this);return this;
},appendText:function(B,A){return this.grab(this.getDocument().newTextNode(B),A);},adopt:function(){Array.flatten(arguments).each(function(A){A=$(A,true);
if(A){this.appendChild(A);}},this);return this;},dispose:function(){return(this.parentNode)?this.parentNode.removeChild(this):this;},clone:function(D,C){switch($type(this)){case"element":var H={};
for(var G=0,E=this.attributes.length;G<E;G++){var B=this.attributes[G],L=B.nodeName.toLowerCase();if(Browser.Engine.trident&&(/input/i).test(this.tagName)&&(/width|height/).test(L)){continue;
}var K=(L=="style"&&this.style)?this.style.cssText:B.nodeValue;if(!$chk(K)||L=="uid"||(L=="id"&&!C)){continue;}if(K!="inherit"&&["string","number"].contains($type(K))){H[L]=K;
}}var J=new Element(this.nodeName.toLowerCase(),H);if(D!==false){for(var I=0,F=this.childNodes.length;I<F;I++){var A=Element.clone(this.childNodes[I],true,C);
if(A){J.grab(A);}}}return J;case"textnode":return document.newTextNode(this.nodeValue);}return null;},replaces:function(A){A=$(A,true);A.parentNode.replaceChild(this,A);
return this;},hasClass:function(A){return this.className.contains(A," ");},addClass:function(A){if(!this.hasClass(A)){this.className=(this.className+" "+A).clean();
}return this;},removeClass:function(A){this.className=this.className.replace(new RegExp("(^|\\s)"+A+"(?:\\s|$)"),"$1").clean();return this;},toggleClass:function(A){return this.hasClass(A)?this.removeClass(A):this.addClass(A);
},getComputedStyle:function(B){if(this.currentStyle){return this.currentStyle[B.camelCase()];}var A=this.getWindow().getComputedStyle(this,null);return(A)?A.getPropertyValue([B.hyphenate()]):null;
},empty:function(){$A(this.childNodes).each(function(A){Browser.freeMem(A);Element.empty(A);Element.dispose(A);},this);return this;},destroy:function(){Browser.freeMem(this.empty().dispose());
return null;},getSelected:function(){return new Elements($A(this.options).filter(function(A){return A.selected;}));},toQueryString:function(){var A=[];
this.getElements("input, select, textarea").each(function(B){if(!B.name||B.disabled){return ;}var C=(B.tagName.toLowerCase()=="select")?Element.getSelected(B).map(function(D){return D.value;
}):((B.type=="radio"||B.type=="checkbox")&&!B.checked)?null:B.value;$splat(C).each(function(D){if(D){A.push(B.name+"="+encodeURIComponent(D));}});});return A.join("&");
},getProperty:function(C){var B=Element.Attributes,A=B.Props[C];var D=(A)?this[A]:this.getAttribute(C,2);return(B.Bools[C])?!!D:(A)?D:D||null;},getProperties:function(){var A=$A(arguments);
return A.map(function(B){return this.getProperty(B);},this).associate(A);},setProperty:function(D,E){var C=Element.Attributes,B=C.Props[D],A=$defined(E);
if(B&&C.Bools[D]){E=(E||!A)?true:false;}else{if(!A){return this.removeProperty(D);}}(B)?this[B]=E:this.setAttribute(D,E);return this;},setProperties:function(A){for(var B in A){this.setProperty(B,A[B]);
}return this;},removeProperty:function(D){var C=Element.Attributes,B=C.Props[D],A=(B&&C.Bools[D]);(B)?this[B]=(A)?false:"":this.removeAttribute(D);return this;
},removeProperties:function(){Array.each(arguments,this.removeProperty,this);return this;}});(function(){var A=function(D,B,I,C,F,H){var E=D[I||B];var G=[];
while(E){if(E.nodeType==1&&(!C||Element.match(E,C))){G.push(E);if(!F){break;}}E=E[B];}return(F)?new Elements(G,{ddup:false,cash:!H}):$(G[0],H);};Element.implement({getPrevious:function(B,C){return A(this,"previousSibling",null,B,false,C);
},getAllPrevious:function(B,C){return A(this,"previousSibling",null,B,true,C);},getNext:function(B,C){return A(this,"nextSibling",null,B,false,C);},getAllNext:function(B,C){return A(this,"nextSibling",null,B,true,C);
},getFirst:function(B,C){return A(this,"nextSibling","firstChild",B,false,C);},getLast:function(B,C){return A(this,"previousSibling","lastChild",B,false,C);
},getParent:function(B,C){return A(this,"parentNode",null,B,false,C);},getParents:function(B,C){return A(this,"parentNode",null,B,true,C);},getChildren:function(B,C){return A(this,"nextSibling","firstChild",B,true,C);
},hasChild:function(B){B=$(B,true);return(!!B&&$A(this.getElementsByTagName(B.tagName)).contains(B));}});})();Element.Properties=new Hash;Element.Properties.style={set:function(A){this.style.cssText=A;
},get:function(){return this.style.cssText;},erase:function(){this.style.cssText="";}};Element.Properties.tag={get:function(){return this.tagName.toLowerCase();
}};Element.Properties.href={get:function(){return(!this.href)?null:this.href.replace(new RegExp("^"+document.location.protocol+"//"+document.location.host),"");
}};Element.Properties.html={set:function(){return this.innerHTML=Array.flatten(arguments).join("");}};Native.implement([Element,Window,Document],{addListener:function(B,A){if(this.addEventListener){this.addEventListener(B,A,false);
}else{this.attachEvent("on"+B,A);}return this;},removeListener:function(B,A){if(this.removeEventListener){this.removeEventListener(B,A,false);}else{this.detachEvent("on"+B,A);
}return this;},retrieve:function(B,A){var D=Element.Storage.get(this.uid);var C=D[B];if($defined(A)&&!$defined(C)){C=D[B]=A;}return $pick(C);},store:function(B,A){var C=Element.Storage.get(this.uid);
C[B]=A;return this;},eliminate:function(A){var B=Element.Storage.get(this.uid);delete B[A];return this;}});Element.Attributes=new Hash({Props:{html:"innerHTML","class":"className","for":"htmlFor",text:(Browser.Engine.trident)?"innerText":"textContent"},Bools:["compact","nowrap","ismap","declare","noshade","checked","disabled","readonly","multiple","selected","noresize","defer"],Camels:["value","accessKey","cellPadding","cellSpacing","colSpan","frameBorder","maxLength","readOnly","rowSpan","tabIndex","useMap"]});
Browser.freeMem=function(A){if(!A){return ;}if(Browser.Engine.trident&&(/object/i).test(A.tagName)){for(var B in A){if(typeof A[B]=="function"){A[B]=$empty;
}}Element.dispose(A);}if(A.uid&&A.removeEvents){A.removeEvents();}};(function(B){var C=B.Bools,A=B.Camels;B.Bools=C=C.associate(C);Hash.extend(Hash.combine(B.Props,C),A.associate(A.map(function(D){return D.toLowerCase();
})));B.erase("Camels");})(Element.Attributes);window.addListener("unload",function(){window.removeListener("unload",arguments.callee);document.purge();
if(Browser.Engine.trident){CollectGarbage();}});Element.Properties.events={set:function(A){this.addEvents(A);}};Native.implement([Element,Window,Document],{addEvent:function(E,G){var H=this.retrieve("events",{});
H[E]=H[E]||{keys:[],values:[]};if(H[E].keys.contains(G)){return this;}H[E].keys.push(G);var F=E,A=Element.Events.get(E),C=G,I=this;if(A){if(A.onAdd){A.onAdd.call(this,G);
}if(A.condition){C=function(J){if(A.condition.call(this,J)){return G.call(this,J);}return false;};}F=A.base||F;}var D=function(){return G.call(I);};var B=Element.NativeEvents[F]||0;
if(B){if(B==2){D=function(J){J=new Event(J,I.getWindow());if(C.call(I,J)===false){J.stop();}};}this.addListener(F,D);}H[E].values.push(D);return this;},removeEvent:function(D,C){var B=this.retrieve("events");
if(!B||!B[D]){return this;}var G=B[D].keys.indexOf(C);if(G==-1){return this;}var A=B[D].keys.splice(G,1)[0];var F=B[D].values.splice(G,1)[0];var E=Element.Events.get(D);
if(E){if(E.onRemove){E.onRemove.call(this,C);}D=E.base||D;}return(Element.NativeEvents[D])?this.removeListener(D,F):this;},addEvents:function(A){for(var B in A){this.addEvent(B,A[B]);
}return this;},removeEvents:function(B){var A=this.retrieve("events");if(!A){return this;}if(!B){for(var C in A){this.removeEvents(C);}A=null;}else{if(A[B]){while(A[B].keys[0]){this.removeEvent(B,A[B].keys[0]);
}A[B]=null;}}return this;},fireEvent:function(D,B,A){var C=this.retrieve("events");if(!C||!C[D]){return this;}C[D].keys.each(function(E){E.create({bind:this,delay:A,"arguments":B})();
},this);return this;},cloneEvents:function(D,A){D=$(D);var C=D.retrieve("events");if(!C){return this;}if(!A){for(var B in C){this.cloneEvents(D,B);}}else{if(C[A]){C[A].keys.each(function(E){this.addEvent(A,E);
},this);}}return this;}});Element.NativeEvents={click:2,dblclick:2,mouseup:2,mousedown:2,contextmenu:2,mousewheel:2,DOMMouseScroll:2,mouseover:2,mouseout:2,mousemove:2,selectstart:2,selectend:2,keydown:2,keypress:2,keyup:2,focus:2,blur:2,change:2,reset:2,select:2,submit:2,load:1,unload:1,beforeunload:2,resize:1,move:1,DOMContentLoaded:1,readystatechange:1,error:1,abort:1,scroll:1};
(function(){var A=function(B){var C=B.relatedTarget;if(C==undefined){return true;}if(C===false){return false;}return($type(this)!="document"&&C!=this&&C.prefix!="xul"&&!this.hasChild(C));
};Element.Events=new Hash({mouseenter:{base:"mouseover",condition:A},mouseleave:{base:"mouseout",condition:A},mousewheel:{base:(Browser.Engine.gecko)?"DOMMouseScroll":"mousewheel"}});
})();Element.Properties.styles={set:function(A){this.setStyles(A);}};Element.Properties.opacity={set:function(A,B){if(!B){if(A==0){if(this.style.visibility!="hidden"){this.style.visibility="hidden";
}}else{if(this.style.visibility!="visible"){this.style.visibility="visible";}}}if(!this.currentStyle||!this.currentStyle.hasLayout){this.style.zoom=1;}if(Browser.Engine.trident){this.style.filter=(A==1)?"":"alpha(opacity="+A*100+")";
}this.style.opacity=A;this.store("opacity",A);},get:function(){return this.retrieve("opacity",1);}};Element.implement({setOpacity:function(A){return this.set("opacity",A,true);
},getOpacity:function(){return this.get("opacity");},setStyle:function(B,A){switch(B){case"opacity":return this.set("opacity",parseFloat(A));case"float":B=(Browser.Engine.trident)?"styleFloat":"cssFloat";
}B=B.camelCase();if($type(A)!="string"){var C=(Element.Styles.get(B)||"@").split(" ");A=$splat(A).map(function(E,D){if(!C[D]){return"";}return($type(E)=="number")?C[D].replace("@",Math.round(E)):E;
}).join(" ");}else{if(A==String(Number(A))){A=Math.round(A);}}this.style[B]=A;return this;},getStyle:function(G){switch(G){case"opacity":return this.get("opacity");
case"float":G=(Browser.Engine.trident)?"styleFloat":"cssFloat";}G=G.camelCase();var A=this.style[G];if(!$chk(A)){A=[];for(var F in Element.ShortStyles){if(G!=F){continue;
}for(var E in Element.ShortStyles[F]){A.push(this.getStyle(E));}return A.join(" ");}A=this.getComputedStyle(G);}if(A){A=String(A);var C=A.match(/rgba?\([\d\s,]+\)/);
if(C){A=A.replace(C[0],C[0].rgbToHex());}}if(Browser.Engine.presto||(Browser.Engine.trident&&!$chk(parseInt(A)))){if(G.test(/^(height|width)$/)){var B=(G=="width")?["left","right"]:["top","bottom"],D=0;
B.each(function(H){D+=this.getStyle("border-"+H+"-width").toInt()+this.getStyle("padding-"+H).toInt();},this);return this["offset"+G.capitalize()]-D+"px";
}if(Browser.Engine.presto&&String(A).test("px")){return A;}if(G.test(/(border(.+)Width|margin|padding)/)){return"0px";}}return A;},setStyles:function(B){for(var A in B){this.setStyle(A,B[A]);
}return this;},getStyles:function(){var A={};Array.each(arguments,function(B){A[B]=this.getStyle(B);},this);return A;}});Element.Styles=new Hash({left:"@px",top:"@px",bottom:"@px",right:"@px",width:"@px",height:"@px",maxWidth:"@px",maxHeight:"@px",minWidth:"@px",minHeight:"@px",backgroundColor:"rgb(@, @, @)",backgroundPosition:"@px @px",color:"rgb(@, @, @)",fontSize:"@px",letterSpacing:"@px",lineHeight:"@px",clip:"rect(@px @px @px @px)",margin:"@px @px @px @px",padding:"@px @px @px @px",border:"@px @ rgb(@, @, @) @px @ rgb(@, @, @) @px @ rgb(@, @, @)",borderWidth:"@px @px @px @px",borderStyle:"@ @ @ @",borderColor:"rgb(@, @, @) rgb(@, @, @) rgb(@, @, @) rgb(@, @, @)",zIndex:"@",zoom:"@",fontWeight:"@",textIndent:"@px",opacity:"@"});
Element.ShortStyles={margin:{},padding:{},border:{},borderWidth:{},borderStyle:{},borderColor:{}};["Top","Right","Bottom","Left"].each(function(G){var F=Element.ShortStyles;
var B=Element.Styles;["margin","padding"].each(function(H){var I=H+G;F[H][I]=B[I]="@px";});var E="border"+G;F.border[E]=B[E]="@px @ rgb(@, @, @)";var D=E+"Width",A=E+"Style",C=E+"Color";
F[E]={};F.borderWidth[D]=F[E][D]=B[D]="@px";F.borderStyle[A]=F[E][A]=B[A]="@";F.borderColor[C]=F[E][C]=B[C]="rgb(@, @, @)";});(function(){Element.implement({scrollTo:function(H,I){if(B(this)){this.getWindow().scrollTo(H,I);
}else{this.scrollLeft=H;this.scrollTop=I;}return this;},getSize:function(){if(B(this)){return this.getWindow().getSize();}return{x:this.offsetWidth,y:this.offsetHeight};
},getScrollSize:function(){if(B(this)){return this.getWindow().getScrollSize();}return{x:this.scrollWidth,y:this.scrollHeight};},getScroll:function(){if(B(this)){return this.getWindow().getScroll();
}return{x:this.scrollLeft,y:this.scrollTop};},getScrolls:function(){var I=this,H={x:0,y:0};while(I&&!B(I)){H.x+=I.scrollLeft;H.y+=I.scrollTop;I=I.parentNode;
}return H;},getOffsetParent:function(){var H=this;if(B(H)){return null;}if(!Browser.Engine.trident){return H.offsetParent;}while((H=H.parentNode)&&!B(H)){if(D(H,"position")!="static"){return H;
}}return null;},getOffsets:function(){var I=this,H={x:0,y:0};if(B(this)){return H;}while(I&&!B(I)){H.x+=I.offsetLeft;H.y+=I.offsetTop;if(Browser.Engine.gecko){if(!F(I)){H.x+=C(I);
H.y+=G(I);}var J=I.parentNode;if(J&&D(J,"overflow")!="visible"){H.x+=C(J);H.y+=G(J);}}else{if(I!=this&&(Browser.Engine.trident||Browser.Engine.webkit)){H.x+=C(I);
H.y+=G(I);}}I=I.offsetParent;if(Browser.Engine.trident){while(I&&!I.currentStyle.hasLayout){I=I.offsetParent;}}}if(Browser.Engine.gecko&&!F(this)){H.x-=C(this);
H.y-=G(this);}return H;},getPosition:function(K){if(B(this)){return{x:0,y:0};}var L=this.getOffsets(),I=this.getScrolls();var H={x:L.x-I.x,y:L.y-I.y};var J=(K&&(K=$(K)))?K.getPosition():{x:0,y:0};
return{x:H.x-J.x,y:H.y-J.y};},getCoordinates:function(J){if(B(this)){return this.getWindow().getCoordinates();}var H=this.getPosition(J),I=this.getSize();
var K={left:H.x,top:H.y,width:I.x,height:I.y};K.right=K.left+K.width;K.bottom=K.top+K.height;return K;},computePosition:function(H){return{left:H.x-E(this,"margin-left"),top:H.y-E(this,"margin-top")};
},position:function(H){return this.setStyles(this.computePosition(H));}});Native.implement([Document,Window],{getSize:function(){var I=this.getWindow();
if(Browser.Engine.presto||Browser.Engine.webkit){return{x:I.innerWidth,y:I.innerHeight};}var H=A(this);return{x:H.clientWidth,y:H.clientHeight};},getScroll:function(){var I=this.getWindow();
var H=A(this);return{x:I.pageXOffset||H.scrollLeft,y:I.pageYOffset||H.scrollTop};},getScrollSize:function(){var I=A(this);var H=this.getSize();return{x:Math.max(I.scrollWidth,H.x),y:Math.max(I.scrollHeight,H.y)};
},getPosition:function(){return{x:0,y:0};},getCoordinates:function(){var H=this.getSize();return{top:0,left:0,bottom:H.y,right:H.x,height:H.y,width:H.x};
}});var D=Element.getComputedStyle;function E(H,I){return D(H,I).toInt()||0;}function F(H){return D(H,"-moz-box-sizing")=="border-box";}function G(H){return E(H,"border-top-width");
}function C(H){return E(H,"border-left-width");}function B(H){return(/^(?:body|html)$/i).test(H.tagName);}function A(H){var I=H.getDocument();return(!I.compatMode||I.compatMode=="CSS1Compat")?I.html:I.body;
}})();Native.implement([Window,Document,Element],{getHeight:function(){return this.getSize().y;},getWidth:function(){return this.getSize().x;},getScrollTop:function(){return this.getScroll().y;
},getScrollLeft:function(){return this.getScroll().x;},getScrollHeight:function(){return this.getScrollSize().y;},getScrollWidth:function(){return this.getScrollSize().x;
},getTop:function(){return this.getPosition().y;},getLeft:function(){return this.getPosition().x;}});Native.implement([Document,Element],{getElements:function(H,G){H=H.split(",");
var C,E={};for(var D=0,B=H.length;D<B;D++){var A=H[D],F=Selectors.Utils.search(this,A,E);if(D!=0&&F.item){F=$A(F);}C=(D==0)?F:(C.item)?$A(C).concat(F):C.concat(F);
}return new Elements(C,{ddup:(H.length>1),cash:!G});}});Element.implement({match:function(B){if(!B){return true;}var D=Selectors.Utils.parseTagAndID(B);
var A=D[0],E=D[1];if(!Selectors.Filters.byID(this,E)||!Selectors.Filters.byTag(this,A)){return false;}var C=Selectors.Utils.parseSelector(B);return(C)?Selectors.Utils.filter(this,C,{}):true;
}});var Selectors={Cache:{nth:{},parsed:{}}};Selectors.RegExps={id:(/#([\w-]+)/),tag:(/^(\w+|\*)/),quick:(/^(\w+|\*)$/),splitter:(/\s*([+>~\s])\s*([a-zA-Z#.*:\[])/g),combined:(/\.([\w-]+)|\[(\w+)(?:([!*^$~|]?=)["']?(.*?)["']?)?\]|:([\w-]+)(?:\(["']?(.*?)?["']?\)|$)/g)};
Selectors.Utils={chk:function(B,C){if(!C){return true;}var A=$uid(B);if(!C[A]){return C[A]=true;}return false;},parseNthArgument:function(F){if(Selectors.Cache.nth[F]){return Selectors.Cache.nth[F];
}var C=F.match(/^([+-]?\d*)?([a-z]+)?([+-]?\d*)?$/);if(!C){return false;}var E=parseInt(C[1]);var B=(E||E===0)?E:1;var D=C[2]||false;var A=parseInt(C[3])||0;
if(B!=0){A--;while(A<1){A+=B;}while(A>=B){A-=B;}}else{B=A;D="index";}switch(D){case"n":C={a:B,b:A,special:"n"};break;case"odd":C={a:2,b:0,special:"n"};
break;case"even":C={a:2,b:1,special:"n"};break;case"first":C={a:0,special:"index"};break;case"last":C={special:"last-child"};break;case"only":C={special:"only-child"};
break;default:C={a:(B-1),special:"index"};}return Selectors.Cache.nth[F]=C;},parseSelector:function(E){if(Selectors.Cache.parsed[E]){return Selectors.Cache.parsed[E];
}var D,H={classes:[],pseudos:[],attributes:[]};while((D=Selectors.RegExps.combined.exec(E))){var I=D[1],G=D[2],F=D[3],B=D[4],C=D[5],J=D[6];if(I){H.classes.push(I);
}else{if(C){var A=Selectors.Pseudo.get(C);if(A){H.pseudos.push({parser:A,argument:J});}else{H.attributes.push({name:C,operator:"=",value:J});}}else{if(G){H.attributes.push({name:G,operator:F,value:B});
}}}}if(!H.classes.length){delete H.classes;}if(!H.attributes.length){delete H.attributes;}if(!H.pseudos.length){delete H.pseudos;}if(!H.classes&&!H.attributes&&!H.pseudos){H=null;
}return Selectors.Cache.parsed[E]=H;},parseTagAndID:function(B){var A=B.match(Selectors.RegExps.tag);var C=B.match(Selectors.RegExps.id);return[(A)?A[1]:"*",(C)?C[1]:false];
},filter:function(F,C,E){var D;if(C.classes){for(D=C.classes.length;D--;D){var G=C.classes[D];if(!Selectors.Filters.byClass(F,G)){return false;}}}if(C.attributes){for(D=C.attributes.length;
D--;D){var B=C.attributes[D];if(!Selectors.Filters.byAttribute(F,B.name,B.operator,B.value)){return false;}}}if(C.pseudos){for(D=C.pseudos.length;D--;D){var A=C.pseudos[D];
if(!Selectors.Filters.byPseudo(F,A.parser,A.argument,E)){return false;}}}return true;},getByTagAndID:function(B,A,D){if(D){var C=(B.getElementById)?B.getElementById(D,true):Element.getElementById(B,D,true);
return(C&&Selectors.Filters.byTag(C,A))?[C]:[];}else{return B.getElementsByTagName(A);}},search:function(J,I,O){var B=[];var C=I.trim().replace(Selectors.RegExps.splitter,function(Z,Y,X){B.push(Y);
return":)"+X;}).split(":)");var K,F,E,V;for(var U=0,Q=C.length;U<Q;U++){var T=C[U];if(U==0&&Selectors.RegExps.quick.test(T)){K=J.getElementsByTagName(T);
continue;}var A=B[U-1];var L=Selectors.Utils.parseTagAndID(T);var W=L[0],M=L[1];if(U==0){K=Selectors.Utils.getByTagAndID(J,W,M);}else{var D={},H=[];for(var S=0,R=K.length;
S<R;S++){H=Selectors.Getters[A](H,K[S],W,M,D);}K=H;}var G=Selectors.Utils.parseSelector(T);if(G){E=[];for(var P=0,N=K.length;P<N;P++){V=K[P];if(Selectors.Utils.filter(V,G,O)){E.push(V);
}}K=E;}}return K;}};Selectors.Getters={" ":function(H,G,I,A,E){var D=Selectors.Utils.getByTagAndID(G,I,A);for(var C=0,B=D.length;C<B;C++){var F=D[C];if(Selectors.Utils.chk(F,E)){H.push(F);
}}return H;},">":function(H,G,I,A,F){var C=Selectors.Utils.getByTagAndID(G,I,A);for(var E=0,D=C.length;E<D;E++){var B=C[E];if(B.parentNode==G&&Selectors.Utils.chk(B,F)){H.push(B);
}}return H;},"+":function(C,B,A,E,D){while((B=B.nextSibling)){if(B.nodeType==1){if(Selectors.Utils.chk(B,D)&&Selectors.Filters.byTag(B,A)&&Selectors.Filters.byID(B,E)){C.push(B);
}break;}}return C;},"~":function(C,B,A,E,D){while((B=B.nextSibling)){if(B.nodeType==1){if(!Selectors.Utils.chk(B,D)){break;}if(Selectors.Filters.byTag(B,A)&&Selectors.Filters.byID(B,E)){C.push(B);
}}}return C;}};Selectors.Filters={byTag:function(B,A){return(A=="*"||(B.tagName&&B.tagName.toLowerCase()==A));},byID:function(A,B){return(!B||(A.id&&A.id==B));
},byClass:function(B,A){return(B.className&&B.className.contains(A," "));},byPseudo:function(A,D,C,B){return D.call(A,C,B);},byAttribute:function(C,D,B,E){var A=Element.prototype.getProperty.call(C,D);
if(!A){return false;}if(!B||E==undefined){return true;}switch(B){case"=":return(A==E);case"*=":return(A.contains(E));case"^=":return(A.substr(0,E.length)==E);
case"$=":return(A.substr(A.length-E.length)==E);case"!=":return(A!=E);case"~=":return A.contains(E," ");case"|=":return A.contains(E,"-");}return false;
}};Selectors.Pseudo=new Hash({empty:function(){return !(this.innerText||this.textContent||"").length;},not:function(A){return !Element.match(this,A);},contains:function(A){return(this.innerText||this.textContent||"").contains(A);
},"first-child":function(){return Selectors.Pseudo.index.call(this,0);},"last-child":function(){var A=this;while((A=A.nextSibling)){if(A.nodeType==1){return false;
}}return true;},"only-child":function(){var B=this;while((B=B.previousSibling)){if(B.nodeType==1){return false;}}var A=this;while((A=A.nextSibling)){if(A.nodeType==1){return false;
}}return true;},"nth-child":function(G,E){G=(G==undefined)?"n":G;var C=Selectors.Utils.parseNthArgument(G);if(C.special!="n"){return Selectors.Pseudo[C.special].call(this,C.a,E);
}var F=0;E.positions=E.positions||{};var D=$uid(this);if(!E.positions[D]){var B=this;while((B=B.previousSibling)){if(B.nodeType!=1){continue;}F++;var A=E.positions[$uid(B)];
if(A!=undefined){F=A+F;break;}}E.positions[D]=F;}return(E.positions[D]%C.a==C.b);},index:function(A){var B=this,C=0;while((B=B.previousSibling)){if(B.nodeType==1&&++C>A){return false;
}}return(C==A);},even:function(B,A){return Selectors.Pseudo["nth-child"].call(this,"2n+1",A);},odd:function(B,A){return Selectors.Pseudo["nth-child"].call(this,"2n",A);
}});Element.Events.domready={onAdd:function(A){if(Browser.loaded){A.call(this);}}};(function(){var B=function(){if(Browser.loaded){return ;}Browser.loaded=true;
window.fireEvent("domready");document.fireEvent("domready");};switch(Browser.Engine.name){case"webkit":(function(){(["loaded","complete"].contains(document.readyState))?B():arguments.callee.delay(50);
})();break;case"trident":var A=document.createElement("div");(function(){($try(function(){A.doScroll("left");return $(A).inject(document.body).set("html","temp").dispose();
}))?B():arguments.callee.delay(50);})();break;default:window.addEvent("load",B);document.addEvent("DOMContentLoaded",B);}})();var JSON=new Hash({encode:function(B){switch($type(B)){case"string":return'"'+B.replace(/[\x00-\x1f\\"]/g,JSON.$replaceChars)+'"';
case"array":return"["+String(B.map(JSON.encode).filter($defined))+"]";case"object":case"hash":var A=[];Hash.each(B,function(E,D){var C=JSON.encode(E);if(C){A.push(JSON.encode(D)+":"+C);
}});return"{"+A+"}";case"number":case"boolean":return String(B);case false:return"null";}return null;},$specialChars:{"\b":"\\b","\t":"\\t","\n":"\\n","\f":"\\f","\r":"\\r",'"':'\\"',"\\":"\\\\"},$replaceChars:function(A){return JSON.$specialChars[A]||"\\u00"+Math.floor(A.charCodeAt()/16).toString(16)+(A.charCodeAt()%16).toString(16);
},decode:function(string,secure){if($type(string)!="string"||!string.length){return null;}if(secure&&!(/^[,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t]*$/).test(string.replace(/\\./g,"@").replace(/"[^"\\\n\r]*"/g,""))){return null;
}return eval("("+string+")");}});Native.implement([Hash,Array,String,Number],{toJSON:function(){return JSON.encode(this);}});var Cookie=new Class({Implements:Options,options:{path:false,domain:false,duration:false,secure:false,document:document},initialize:function(B,A){this.key=B;
this.setOptions(A);},write:function(B){B=encodeURIComponent(B);if(this.options.domain){B+="; domain="+this.options.domain;}if(this.options.path){B+="; path="+this.options.path;
}if(this.options.duration){var A=new Date();A.setTime(A.getTime()+this.options.duration*24*60*60*1000);B+="; expires="+A.toGMTString();}if(this.options.secure){B+="; secure";
}this.options.document.cookie=this.key+"="+B;return this;},read:function(){var A=this.options.document.cookie.match("(?:^|;)\\s*"+this.key.escapeRegExp()+"=([^;]*)");
return(A)?decodeURIComponent(A[1]):null;},dispose:function(){new Cookie(this.key,$merge(this.options,{duration:-1})).write("");return this;}});Cookie.write=function(B,C,A){return new Cookie(B,A).write(C);
};Cookie.read=function(A){return new Cookie(A).read();};Cookie.dispose=function(B,A){return new Cookie(B,A).dispose();};var Swiff=new Class({Implements:[Options],options:{id:null,height:1,width:1,container:null,properties:{},params:{quality:"high",allowScriptAccess:"always",wMode:"transparent",swLiveConnect:true},callBacks:{},vars:{}},toElement:function(){return this.object;
},initialize:function(L,M){this.instance="Swiff_"+$time();this.setOptions(M);M=this.options;var B=this.id=M.id||this.instance;var A=$(M.container);Swiff.CallBacks[this.instance]={};
var E=M.params,G=M.vars,F=M.callBacks;var H=$extend({height:M.height,width:M.width},M.properties);var K=this;for(var D in F){Swiff.CallBacks[this.instance][D]=(function(N){return function(){return N.apply(K.object,arguments);
};})(F[D]);G[D]="Swiff.CallBacks."+this.instance+"."+D;}E.flashVars=Hash.toQueryString(G);if(Browser.Engine.trident){H.classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000";
E.movie=L;}else{H.type="application/x-shockwave-flash";H.data=L;}var J='<object id="'+B+'"';for(var I in H){J+=" "+I+'="'+H[I]+'"';}J+=">";for(var C in E){if(E[C]){J+='<param name="'+C+'" value="'+E[C]+'" />';
}}J+="</object>";this.object=((A)?A.empty():new Element("div")).set("html",J).firstChild;},replaces:function(A){A=$(A,true);A.parentNode.replaceChild(this.toElement(),A);
return this;},inject:function(A){$(A,true).appendChild(this.toElement());return this;},remote:function(){return Swiff.remote.apply(Swiff,[this.toElement()].extend(arguments));
}});Swiff.CallBacks={};Swiff.remote=function(obj,fn){var rs=obj.CallFunction('<invoke name="'+fn+'" returntype="javascript">'+__flash__argumentsToXML(arguments,2)+"</invoke>");
return eval(rs);};var Fx=new Class({Implements:[Chain,Events,Options],options:{fps:50,unit:false,duration:500,link:"ignore",transition:function(A){return -(Math.cos(Math.PI*A)-1)/2;
}},initialize:function(A){this.subject=this.subject||this;this.setOptions(A);this.options.duration=Fx.Durations[this.options.duration]||this.options.duration.toInt();
var B=this.options.wait;if(B===false){this.options.link="cancel";}},step:function(){var A=$time();if(A<this.time+this.options.duration){var B=this.options.transition((A-this.time)/this.options.duration);
this.set(this.compute(this.from,this.to,B));}else{this.set(this.compute(this.from,this.to,1));this.complete();}},set:function(A){return A;},compute:function(C,B,A){return Fx.compute(C,B,A);
},check:function(A){if(!this.timer){return true;}switch(this.options.link){case"cancel":this.cancel();return true;case"chain":this.chain(A.bind(this,Array.slice(arguments,1)));
return false;}return false;},start:function(B,A){if(!this.check(arguments.callee,B,A)){return this;}this.from=B;this.to=A;this.time=0;this.startTimer();
this.onStart();return this;},complete:function(){if(this.stopTimer()){this.onComplete();}return this;},cancel:function(){if(this.stopTimer()){this.onCancel();
}return this;},onStart:function(){this.fireEvent("start",this.subject);},onComplete:function(){this.fireEvent("complete",this.subject);if(!this.callChain()){this.fireEvent("chainComplete",this.subject);
}},onCancel:function(){this.fireEvent("cancel",this.subject).clearChain();},pause:function(){this.stopTimer();return this;},resume:function(){this.startTimer();
return this;},stopTimer:function(){if(!this.timer){return false;}this.time=$time()-this.time;this.timer=$clear(this.timer);return true;},startTimer:function(){if(this.timer){return false;
}this.time=$time()-this.time;this.timer=this.step.periodical(Math.round(1000/this.options.fps),this);return true;}});Fx.compute=function(C,B,A){return(B-C)*A+C;
};Fx.Durations={"short":250,normal:500,"long":1000};Fx.CSS=new Class({Extends:Fx,prepare:function(D,E,B){B=$splat(B);var C=B[1];if(!$chk(C)){B[1]=B[0];
B[0]=D.getStyle(E);}var A=B.map(this.parse);return{from:A[0],to:A[1]};},parse:function(A){A=$lambda(A)();A=(typeof A=="string")?A.split(" "):$splat(A);
return A.map(function(C){C=String(C);var B=false;Fx.CSS.Parsers.each(function(F,E){if(B){return ;}var D=F.parse(C);if($chk(D)){B={value:D,parser:F};}});
B=B||{value:C,parser:Fx.CSS.Parsers.String};return B;});},compute:function(D,C,B){var A=[];(Math.min(D.length,C.length)).times(function(E){A.push({value:D[E].parser.compute(D[E].value,C[E].value,B),parser:D[E].parser});
});A.$family={name:"fx:css:value"};return A;},serve:function(C,B){if($type(C)!="fx:css:value"){C=this.parse(C);}var A=[];C.each(function(D){A=A.concat(D.parser.serve(D.value,B));
});return A;},render:function(A,D,C,B){A.setStyle(D,this.serve(C,B));},search:function(A){if(Fx.CSS.Cache[A]){return Fx.CSS.Cache[A];}var B={};Array.each(document.styleSheets,function(E,D){var C=E.href;
if(C&&C.contains("://")&&!C.contains(document.domain)){return ;}var F=E.rules||E.cssRules;Array.each(F,function(I,G){if(!I.style){return ;}var H=(I.selectorText)?I.selectorText.replace(/^\w+/,function(J){return J.toLowerCase();
}):null;if(!H||!H.test("^"+A+"$")){return ;}Element.Styles.each(function(K,J){if(!I.style[J]||Element.ShortStyles[J]){return ;}K=String(I.style[J]);B[J]=(K.test(/^rgb/))?K.rgbToHex():K;
});});});return Fx.CSS.Cache[A]=B;}});Fx.CSS.Cache={};Fx.CSS.Parsers=new Hash({Color:{parse:function(A){if(A.match(/^#[0-9a-f]{3,6}$/i)){return A.hexToRgb(true);
}return((A=A.match(/(\d+),\s*(\d+),\s*(\d+)/)))?[A[1],A[2],A[3]]:false;},compute:function(C,B,A){return C.map(function(E,D){return Math.round(Fx.compute(C[D],B[D],A));
});},serve:function(A){return A.map(Number);}},Number:{parse:parseFloat,compute:Fx.compute,serve:function(B,A){return(A)?B+A:B;}},String:{parse:$lambda(false),compute:$arguments(1),serve:$arguments(0)}});
Fx.Tween=new Class({Extends:Fx.CSS,initialize:function(B,A){this.element=this.subject=$(B);this.parent(A);},set:function(B,A){if(arguments.length==1){A=B;
B=this.property||this.options.property;}this.render(this.element,B,A,this.options.unit);return this;},start:function(C,E,D){if(!this.check(arguments.callee,C,E,D)){return this;
}var B=Array.flatten(arguments);this.property=this.options.property||B.shift();var A=this.prepare(this.element,this.property,B);return this.parent(A.from,A.to);
}});Element.Properties.tween={set:function(A){var B=this.retrieve("tween");if(B){B.cancel();}return this.eliminate("tween").store("tween:options",$extend({link:"cancel"},A));
},get:function(A){if(A||!this.retrieve("tween")){if(A||!this.retrieve("tween:options")){this.set("tween",A);}this.store("tween",new Fx.Tween(this,this.retrieve("tween:options")));
}return this.retrieve("tween");}};Element.implement({tween:function(A,C,B){this.get("tween").start(arguments);return this;},fade:function(C){var E=this.get("tween"),D="opacity",A;
C=$pick(C,"toggle");switch(C){case"in":E.start(D,1);break;case"out":E.start(D,0);break;case"show":E.set(D,1);break;case"hide":E.set(D,0);break;case"toggle":var B=this.retrieve("fade:flag",this.get("opacity")==1);
E.start(D,(B)?0:1);this.store("fade:flag",!B);A=true;break;default:E.start(D,arguments);}if(!A){this.eliminate("fade:flag");}return this;},highlight:function(C,A){if(!A){A=this.retrieve("highlight:original",this.getStyle("background-color"));
A=(A=="transparent")?"#fff":A;}var B=this.get("tween");B.start("background-color",C||"#ffff88",A).chain(function(){this.setStyle("background-color",this.retrieve("highlight:original"));
B.callChain();}.bind(this));return this;}});Fx.Morph=new Class({Extends:Fx.CSS,initialize:function(B,A){this.element=this.subject=$(B);this.parent(A);},set:function(A){if(typeof A=="string"){A=this.search(A);
}for(var B in A){this.render(this.element,B,A[B],this.options.unit);}return this;},compute:function(E,D,C){var A={};for(var B in E){A[B]=this.parent(E[B],D[B],C);
}return A;},start:function(B){if(!this.check(arguments.callee,B)){return this;}if(typeof B=="string"){B=this.search(B);}var E={},D={};for(var C in B){var A=this.prepare(this.element,C,B[C]);
E[C]=A.from;D[C]=A.to;}return this.parent(E,D);}});Element.Properties.morph={set:function(A){var B=this.retrieve("morph");if(B){B.cancel();}return this.eliminate("morph").store("morph:options",$extend({link:"cancel"},A));
},get:function(A){if(A||!this.retrieve("morph")){if(A||!this.retrieve("morph:options")){this.set("morph",A);}this.store("morph",new Fx.Morph(this,this.retrieve("morph:options")));
}return this.retrieve("morph");}};Element.implement({morph:function(A){this.get("morph").start(A);return this;}});(function(){var A=Fx.prototype.initialize;
Fx.prototype.initialize=function(B){A.call(this,B);var C=this.options.transition;if(typeof C=="string"&&(C=C.split(":"))){var D=Fx.Transitions;D=D[C[0]]||D[C[0].capitalize()];
if(C[1]){D=D["ease"+C[1].capitalize()+(C[2]?C[2].capitalize():"")];}this.options.transition=D;}};})();Fx.Transition=function(B,A){A=$splat(A);return $extend(B,{easeIn:function(C){return B(C,A);
},easeOut:function(C){return 1-B(1-C,A);},easeInOut:function(C){return(C<=0.5)?B(2*C,A)/2:(2-B(2*(1-C),A))/2;}});};Fx.Transitions=new Hash({linear:$arguments(0)});
Fx.Transitions.extend=function(A){for(var B in A){Fx.Transitions[B]=new Fx.Transition(A[B]);}};Fx.Transitions.extend({Pow:function(B,A){return Math.pow(B,A[0]||6);
},Expo:function(A){return Math.pow(2,8*(A-1));},Circ:function(A){return 1-Math.sin(Math.acos(A));},Sine:function(A){return 1-Math.sin((1-A)*Math.PI/2);
},Back:function(B,A){A=A[0]||1.618;return Math.pow(B,2)*((A+1)*B-A);},Bounce:function(D){var C;for(var B=0,A=1;1;B+=A,A/=2){if(D>=(7-4*B)/11){C=-Math.pow((11-6*B-11*D)/4,2)+A*A;
break;}}return C;},Elastic:function(B,A){return Math.pow(2,10*--B)*Math.cos(20*B*Math.PI*(A[0]||1)/3);}});["Quad","Cubic","Quart","Quint"].each(function(B,A){Fx.Transitions[B]=new Fx.Transition(function(C){return Math.pow(C,[A+2]);
});});var Request=new Class({Implements:[Chain,Events,Options],options:{url:"",data:"",headers:{"X-Requested-With":"XMLHttpRequest",Accept:"text/javascript, text/html, application/xml, text/xml, */*"},async:true,format:false,method:"post",link:"ignore",isSuccess:null,emulation:true,urlEncoded:true,encoding:"utf-8",evalScripts:false,evalResponse:false},initialize:function(A){this.xhr=new Browser.Request();
this.setOptions(A);this.options.isSuccess=this.options.isSuccess||this.isSuccess;this.headers=new Hash(this.options.headers);},onStateChange:function(){if(this.xhr.readyState!=4||!this.running){return ;
}this.running=false;this.status=0;$try(function(){this.status=this.xhr.status;}.bind(this));if(this.options.isSuccess.call(this,this.status)){this.response={text:this.xhr.responseText,xml:this.xhr.responseXML};
this.success(this.response.text,this.response.xml);}else{this.response={text:null,xml:null};this.failure();}this.xhr.onreadystatechange=$empty;},isSuccess:function(){return((this.status>=200)&&(this.status<300));
},processScripts:function(A){if(this.options.evalResponse||(/(ecma|java)script/).test(this.getHeader("Content-type"))){return $exec(A);}return A.stripScripts(this.options.evalScripts);
},success:function(B,A){this.onSuccess(this.processScripts(B),A);},onSuccess:function(){this.fireEvent("complete",arguments).fireEvent("success",arguments).callChain();
},failure:function(){this.onFailure();},onFailure:function(){this.fireEvent("complete").fireEvent("failure",this.xhr);},setHeader:function(A,B){this.headers.set(A,B);
return this;},getHeader:function(A){return $try(function(){return this.xhr.getResponseHeader(A);}.bind(this));},check:function(A){if(!this.running){return true;
}switch(this.options.link){case"cancel":this.cancel();return true;case"chain":this.chain(A.bind(this,Array.slice(arguments,1)));return false;}return false;
},send:function(I){if(!this.check(arguments.callee,I)){return this;}this.running=true;var G=$type(I);if(G=="string"||G=="element"){I={data:I};}var D=this.options;
I=$extend({data:D.data,url:D.url,method:D.method},I);var E=I.data,B=I.url,A=I.method;switch($type(E)){case"element":E=$(E).toQueryString();break;case"object":case"hash":E=Hash.toQueryString(E);
}if(this.options.format){var H="format="+this.options.format;E=(E)?H+"&"+E:H;}if(this.options.emulation&&["put","delete"].contains(A)){var F="_method="+A;
E=(E)?F+"&"+E:F;A="post";}if(this.options.urlEncoded&&A=="post"){var C=(this.options.encoding)?"; charset="+this.options.encoding:"";this.headers.set("Content-type","application/x-www-form-urlencoded"+C);
}if(E&&A=="get"){B=B+(B.contains("?")?"&":"?")+E;E=null;}this.xhr.open(A.toUpperCase(),B,this.options.async);this.xhr.onreadystatechange=this.onStateChange.bind(this);
this.headers.each(function(K,J){if(!$try(function(){this.xhr.setRequestHeader(J,K);return true;}.bind(this))){this.fireEvent("exception",[J,K]);}},this);
this.fireEvent("request");this.xhr.send(E);if(!this.options.async){this.onStateChange();}return this;},cancel:function(){if(!this.running){return this;
}this.running=false;this.xhr.abort();this.xhr.onreadystatechange=$empty;this.xhr=new Browser.Request();this.fireEvent("cancel");return this;}});(function(){var A={};
["get","post","put","delete","GET","POST","PUT","DELETE"].each(function(B){A[B]=function(){var C=Array.link(arguments,{url:String.type,data:$defined});
return this.send($extend(C,{method:B.toLowerCase()}));};});Request.implement(A);})();Element.Properties.send={set:function(A){var B=this.retrieve("send");
if(B){B.cancel();}return this.eliminate("send").store("send:options",$extend({data:this,link:"cancel",method:this.get("method")||"post",url:this.get("action")},A));
},get:function(A){if(A||!this.retrieve("send")){if(A||!this.retrieve("send:options")){this.set("send",A);}this.store("send",new Request(this.retrieve("send:options")));
}return this.retrieve("send");}};Element.implement({send:function(A){var B=this.get("send");B.send({data:this,url:A||B.options.url});return this;}});Request.HTML=new Class({Extends:Request,options:{update:false,evalScripts:true,filter:false},processHTML:function(C){var B=C.match(/<body[^>]*>([\s\S]*?)<\/body>/i);
C=(B)?B[1]:C;var A=new Element("div");return $try(function(){var D="<root>"+C+"</root>",G;if(Browser.Engine.trident){G=new ActiveXObject("Microsoft.XMLDOM");
G.async=false;G.loadXML(D);}else{G=new DOMParser().parseFromString(D,"text/xml");}D=G.getElementsByTagName("root")[0];for(var F=0,E=D.childNodes.length;
F<E;F++){var H=Element.clone(D.childNodes[F],true,true);if(H){A.grab(H);}}return A;})||A.set("html",C);},success:function(D){var C=this.options,B=this.response;
B.html=D.stripScripts(function(E){B.javascript=E;});var A=this.processHTML(B.html);B.tree=A.childNodes;B.elements=A.getElements("*");if(C.filter){B.tree=B.elements.filter(C.filter);
}if(C.update){$(C.update).empty().adopt(B.tree);}if(C.evalScripts){$exec(B.javascript);}this.onSuccess(B.tree,B.elements,B.html,B.javascript);}});Element.Properties.load={set:function(A){var B=this.retrieve("load");
if(B){send.cancel();}return this.eliminate("load").store("load:options",$extend({data:this,link:"cancel",update:this,method:"get"},A));},get:function(A){if(A||!this.retrieve("load")){if(A||!this.retrieve("load:options")){this.set("load",A);
}this.store("load",new Request.HTML(this.retrieve("load:options")));}return this.retrieve("load");}};Element.implement({load:function(){this.get("load").send(Array.link(arguments,{data:Object.type,url:String.type}));
return this;}});Request.JSON=new Class({Extends:Request,options:{secure:true},initialize:function(A){this.parent(A);this.headers.extend({Accept:"application/json","X-Request":"JSON"});
},success:function(A){this.response.json=JSON.decode(A,this.options.secure);this.onSuccess(this.response.json,A);}});
//MooTools More, <http://mootools.net/more>. Copyright (c) 2006-2008 Valerio Proietti, <http://mad4milk.net>, MIT Style License.
Fx.Slide=new Class({Extends:Fx,options:{mode:"vertical"},initialize:function(B,A){this.addEvent("complete",function(){this.open=(this.wrapper["offset"+this.layout.capitalize()]!=0);
if(this.open&&Browser.Engine.webkit419){this.element.dispose().inject(this.wrapper);}},true);this.element=this.subject=$(B);this.parent(A);var C=this.element.retrieve("wrapper");
this.wrapper=C||new Element("div",{styles:$extend(this.element.getStyles("margin","position"),{overflow:"hidden"})}).wraps(this.element);this.element.store("wrapper",this.wrapper).setStyle("margin",0);
this.now=[];this.open=true;},vertical:function(){this.margin="margin-top";this.layout="height";this.offset=this.element.offsetHeight;},horizontal:function(){this.margin="margin-left";
this.layout="width";this.offset=this.element.offsetWidth;},set:function(A){this.element.setStyle(this.margin,A[0]);this.wrapper.setStyle(this.layout,A[1]);
return this;},compute:function(E,D,C){var B=[];var A=2;A.times(function(F){B[F]=Fx.compute(E[F],D[F],C);});return B;},start:function(B,E){if(!this.check(arguments.callee,B,E)){return this;
}this[E||this.options.mode]();var D=this.element.getStyle(this.margin).toInt();var C=this.wrapper.getStyle(this.layout).toInt();var A=[[D,C],[0,this.offset]];
var G=[[D,C],[-this.offset,0]];var F;switch(B){case"in":F=A;break;case"out":F=G;break;case"toggle":F=(this.wrapper["offset"+this.layout.capitalize()]==0)?A:G;
}return this.parent(F[0],F[1]);},slideIn:function(A){return this.start("in",A);},slideOut:function(A){return this.start("out",A);},hide:function(A){this[A||this.options.mode]();
this.open=false;return this.set([-this.offset,0]);},show:function(A){this[A||this.options.mode]();this.open=true;return this.set([0,this.offset]);},toggle:function(A){return this.start("toggle",A);
}});Element.Properties.slide={set:function(B){var A=this.retrieve("slide");if(A){A.cancel();}return this.eliminate("slide").store("slide:options",$extend({link:"cancel"},B));
},get:function(A){if(A||!this.retrieve("slide")){if(A||!this.retrieve("slide:options")){this.set("slide",A);}this.store("slide",new Fx.Slide(this,this.retrieve("slide:options")));
}return this.retrieve("slide");}};Element.implement({slide:function(D,E){D=D||"toggle";var B=this.get("slide"),A;switch(D){case"hide":B.hide(E);break;case"show":B.show(E);
break;case"toggle":var C=this.retrieve("slide:flag",B.open);B[(C)?"slideOut":"slideIn"](E);this.store("slide:flag",!C);A=true;break;default:B.start(D,E);
}if(!A){this.eliminate("slide:flag");}return this;}});Fx.Scroll=new Class({Extends:Fx,options:{offset:{x:0,y:0},wheelStops:true},initialize:function(B,A){this.element=this.subject=$(B);
this.parent(A);var D=this.cancel.bind(this,false);if($type(this.element)!="element"){this.element=$(this.element.getDocument().body);}var C=this.element;
if(this.options.wheelStops){this.addEvent("start",function(){C.addEvent("mousewheel",D);},true);this.addEvent("complete",function(){C.removeEvent("mousewheel",D);
},true);}},set:function(){var A=Array.flatten(arguments);this.element.scrollTo(A[0],A[1]);},compute:function(E,D,C){var B=[];var A=2;A.times(function(F){B.push(Fx.compute(E[F],D[F],C));
});return B;},start:function(C,H){if(!this.check(arguments.callee,C,H)){return this;}var E=this.element.getSize(),F=this.element.getScrollSize();var B=this.element.getScroll(),D={x:C,y:H};
for(var G in D){var A=F[G]-E[G];if($chk(D[G])){D[G]=($type(D[G])=="number")?D[G].limit(0,A):A;}else{D[G]=B[G];}D[G]+=this.options.offset[G];}return this.parent([B.x,B.y],[D.x,D.y]);
},toTop:function(){return this.start(false,0);},toLeft:function(){return this.start(0,false);},toRight:function(){return this.start("right",false);},toBottom:function(){return this.start(false,"bottom");
},toElement:function(B){var A=$(B).getPosition(this.element);return this.start(A.x,A.y);}});Fx.Elements=new Class({Extends:Fx.CSS,initialize:function(B,A){this.elements=this.subject=$$(B);
this.parent(A);},compute:function(G,H,I){var C={};for(var D in G){var A=G[D],E=H[D],F=C[D]={};for(var B in A){F[B]=this.parent(A[B],E[B],I);}}return C;
},set:function(B){for(var C in B){var A=B[C];for(var D in A){this.render(this.elements[C],D,A[D],this.options.unit);}}return this;},start:function(C){if(!this.check(arguments.callee,C)){return this;
}var H={},I={};for(var D in C){var F=C[D],A=H[D]={},G=I[D]={};for(var B in F){var E=this.prepare(this.elements[D],B,F[B]);A[B]=E.from;G[B]=E.to;}}return this.parent(H,I);
}});var Drag=new Class({Implements:[Events,Options],options:{snap:6,unit:"px",grid:false,style:true,limit:false,handle:false,invert:false,preventDefault:false,modifiers:{x:"left",y:"top"}},initialize:function(){var B=Array.link(arguments,{options:Object.type,element:$defined});
this.element=$(B.element);this.document=this.element.getDocument();this.setOptions(B.options||{});var A=$type(this.options.handle);this.handles=(A=="array"||A=="collection")?$$(this.options.handle):$(this.options.handle)||this.element;
this.mouse={now:{},pos:{}};this.value={start:{},now:{}};this.selection=(Browser.Engine.trident)?"selectstart":"mousedown";this.bound={start:this.start.bind(this),check:this.check.bind(this),drag:this.drag.bind(this),stop:this.stop.bind(this),cancel:this.cancel.bind(this),eventStop:$lambda(false)};
this.attach();},attach:function(){this.handles.addEvent("mousedown",this.bound.start);return this;},detach:function(){this.handles.removeEvent("mousedown",this.bound.start);
return this;},start:function(C){if(this.options.preventDefault){C.preventDefault();}this.fireEvent("beforeStart",this.element);this.mouse.start=C.page;
var A=this.options.limit;this.limit={x:[],y:[]};for(var D in this.options.modifiers){if(!this.options.modifiers[D]){continue;}if(this.options.style){this.value.now[D]=this.element.getStyle(this.options.modifiers[D]).toInt();
}else{this.value.now[D]=this.element[this.options.modifiers[D]];}if(this.options.invert){this.value.now[D]*=-1;}this.mouse.pos[D]=C.page[D]-this.value.now[D];
if(A&&A[D]){for(var B=2;B--;B){if($chk(A[D][B])){this.limit[D][B]=$lambda(A[D][B])();}}}}if($type(this.options.grid)=="number"){this.options.grid={x:this.options.grid,y:this.options.grid};
}this.document.addEvents({mousemove:this.bound.check,mouseup:this.bound.cancel});this.document.addEvent(this.selection,this.bound.eventStop);},check:function(A){if(this.options.preventDefault){A.preventDefault();
}var B=Math.round(Math.sqrt(Math.pow(A.page.x-this.mouse.start.x,2)+Math.pow(A.page.y-this.mouse.start.y,2)));if(B>this.options.snap){this.cancel();this.document.addEvents({mousemove:this.bound.drag,mouseup:this.bound.stop});
this.fireEvent("start",this.element).fireEvent("snap",this.element);}},drag:function(A){if(this.options.preventDefault){A.preventDefault();}this.mouse.now=A.page;
for(var B in this.options.modifiers){if(!this.options.modifiers[B]){continue;}this.value.now[B]=this.mouse.now[B]-this.mouse.pos[B];if(this.options.invert){this.value.now[B]*=-1;
}if(this.options.limit&&this.limit[B]){if($chk(this.limit[B][1])&&(this.value.now[B]>this.limit[B][1])){this.value.now[B]=this.limit[B][1];}else{if($chk(this.limit[B][0])&&(this.value.now[B]<this.limit[B][0])){this.value.now[B]=this.limit[B][0];
}}}if(this.options.grid[B]){this.value.now[B]-=(this.value.now[B]%this.options.grid[B]);}if(this.options.style){this.element.setStyle(this.options.modifiers[B],this.value.now[B]+this.options.unit);
}else{this.element[this.options.modifiers[B]]=this.value.now[B];}}this.fireEvent("drag",this.element);},cancel:function(A){this.document.removeEvent("mousemove",this.bound.check);
this.document.removeEvent("mouseup",this.bound.cancel);if(A){this.document.removeEvent(this.selection,this.bound.eventStop);this.fireEvent("cancel",this.element);
}},stop:function(A){this.document.removeEvent(this.selection,this.bound.eventStop);this.document.removeEvent("mousemove",this.bound.drag);this.document.removeEvent("mouseup",this.bound.stop);
if(A){this.fireEvent("complete",this.element);}}});Element.implement({makeResizable:function(A){return new Drag(this,$merge({modifiers:{x:"width",y:"height"}},A));
}});Drag.Move=new Class({Extends:Drag,options:{droppables:[],container:false},initialize:function(C,B){this.parent(C,B);this.droppables=$$(this.options.droppables);
this.container=$(this.options.container);if(this.container&&$type(this.container)!="element"){this.container=$(this.container.getDocument().body);}C=this.element;
var D=C.getStyle("position");var A=(D!="static")?D:"absolute";if(C.getStyle("left")=="auto"||C.getStyle("top")=="auto"){C.position(C.getPosition(C.offsetParent));
}C.setStyle("position",A);this.addEvent("start",function(){this.checkDroppables();},true);},start:function(B){if(this.container){var D=this.element,J=this.container,E=J.getCoordinates(D.offsetParent),F={},A={};
["top","right","bottom","left"].each(function(K){F[K]=J.getStyle("padding-"+K).toInt();A[K]=D.getStyle("margin-"+K).toInt();},this);var C=D.offsetWidth+A.left+A.right,I=D.offsetHeight+A.top+A.bottom;
var H=[E.left+F.left,E.right-F.right-C];var G=[E.top+F.top,E.bottom-F.bottom-I];this.options.limit={x:H,y:G};}this.parent(B);},checkAgainst:function(B){B=B.getCoordinates();
var A=this.mouse.now;return(A.x>B.left&&A.x<B.right&&A.y<B.bottom&&A.y>B.top);},checkDroppables:function(){var A=this.droppables.filter(this.checkAgainst,this).getLast();
if(this.overed!=A){if(this.overed){this.fireEvent("leave",[this.element,this.overed]);}if(A){this.overed=A;this.fireEvent("enter",[this.element,A]);}else{this.overed=null;
}}},drag:function(A){this.parent(A);if(this.droppables.length){this.checkDroppables();}},stop:function(A){this.checkDroppables();this.fireEvent("drop",[this.element,this.overed]);
this.overed=null;return this.parent(A);}});Element.implement({makeDraggable:function(A){return new Drag.Move(this,A);}});Hash.Cookie=new Class({Extends:Cookie,options:{autoSave:true},initialize:function(B,A){this.parent(B,A);
this.load();},save:function(){var A=JSON.encode(this.hash);if(!A||A.length>4096){return false;}if(A=="{}"){this.dispose();}else{this.write(A);}return true;
},load:function(){this.hash=new Hash(JSON.decode(this.read(),true));return this;}});Hash.Cookie.implement((function(){var A={};Hash.each(Hash.prototype,function(C,B){A[B]=function(){var D=C.apply(this.hash,arguments);
if(this.options.autoSave){this.save();}return D;};});return A;})());var Color=new Native({initialize:function(B,C){if(arguments.length>=3){C="rgb";B=Array.slice(arguments,0,3);
}else{if(typeof B=="string"){if(B.match(/rgb/)){B=B.rgbToHex().hexToRgb(true);}else{if(B.match(/hsb/)){B=B.hsbToRgb();}else{B=B.hexToRgb(true);}}}}C=C||"rgb";
switch(C){case"hsb":var A=B;B=B.hsbToRgb();B.hsb=A;break;case"hex":B=B.hexToRgb(true);break;}B.rgb=B.slice(0,3);B.hsb=B.hsb||B.rgbToHsb();B.hex=B.rgbToHex();
return $extend(B,this);}});Color.implement({mix:function(){var A=Array.slice(arguments);var C=($type(A.getLast())=="number")?A.pop():50;var B=this.slice();
A.each(function(D){D=new Color(D);for(var E=0;E<3;E++){B[E]=Math.round((B[E]/100*(100-C))+(D[E]/100*C));}});return new Color(B,"rgb");},invert:function(){return new Color(this.map(function(A){return 255-A;
}));},setHue:function(A){return new Color([A,this.hsb[1],this.hsb[2]],"hsb");},setSaturation:function(A){return new Color([this.hsb[0],A,this.hsb[2]],"hsb");
},setBrightness:function(A){return new Color([this.hsb[0],this.hsb[1],A],"hsb");}});function $RGB(C,B,A){return new Color([C,B,A],"rgb");}function $HSB(C,B,A){return new Color([C,B,A],"hsb");
}function $HEX(A){return new Color(A,"hex");}Array.implement({rgbToHsb:function(){var B=this[0],C=this[1],J=this[2];var G,F,H;var I=Math.max(B,C,J),E=Math.min(B,C,J);
var K=I-E;H=I/255;F=(I!=0)?K/I:0;if(F==0){G=0;}else{var D=(I-B)/K;var A=(I-C)/K;var L=(I-J)/K;if(B==I){G=L-A;}else{if(C==I){G=2+D-L;}else{G=4+A-D;}}G/=6;
if(G<0){G++;}}return[Math.round(G*360),Math.round(F*100),Math.round(H*100)];},hsbToRgb:function(){var C=Math.round(this[2]/100*255);if(this[1]==0){return[C,C,C];
}else{var A=this[0]%360;var E=A%60;var F=Math.round((this[2]*(100-this[1]))/10000*255);var D=Math.round((this[2]*(6000-this[1]*E))/600000*255);var B=Math.round((this[2]*(6000-this[1]*(60-E)))/600000*255);
switch(Math.floor(A/60)){case 0:return[C,B,F];case 1:return[D,C,F];case 2:return[F,C,B];case 3:return[F,D,C];case 4:return[B,F,C];case 5:return[C,F,D];
}}return false;}});String.implement({rgbToHsb:function(){var A=this.match(/\d{1,3}/g);return(A)?hsb.rgbToHsb():null;},hsbToRgb:function(){var A=this.match(/\d{1,3}/g);
return(A)?A.hsbToRgb():null;}});var Group=new Class({initialize:function(){this.instances=Array.flatten(arguments);this.events={};this.checker={};},addEvent:function(B,A){this.checker[B]=this.checker[B]||{};
this.events[B]=this.events[B]||[];if(this.events[B].contains(A)){return false;}else{this.events[B].push(A);}this.instances.each(function(C,D){C.addEvent(B,this.check.bind(this,[B,C,D]));
},this);return this;},check:function(C,A,B){this.checker[C][B]=true;var D=this.instances.every(function(F,E){return this.checker[C][E]||false;},this);if(!D){return ;
}this.checker[C]={};this.events[C].each(function(E){E.call(this,this.instances,A);},this);}});var Asset=new Hash({javascript:function(F,D){D=$extend({onload:$empty,document:document,check:$lambda(true)},D);
var B=new Element("script",{src:F,type:"text/javascript"});var E=D.onload.bind(B),A=D.check,G=D.document;delete D.onload;delete D.check;delete D.document;
B.addEvents({load:E,readystatechange:function(){if(["loaded","complete"].contains(this.readyState)){E();}}}).setProperties(D);if(Browser.Engine.webkit419){var C=(function(){if(!$try(A)){return ;
}$clear(C);E();}).periodical(50);}return B.inject(G.head);},css:function(B,A){return new Element("link",$merge({rel:"stylesheet",media:"screen",type:"text/css",href:B},A)).inject(document.head);
},image:function(C,B){B=$merge({onload:$empty,onabort:$empty,onerror:$empty},B);var D=new Image();var A=$(D)||new Element("img");["load","abort","error"].each(function(E){var F="on"+E;
var G=B[F];delete B[F];D[F]=function(){if(!D){return ;}if(!A.parentNode){A.width=D.width;A.height=D.height;}D=D.onload=D.onabort=D.onerror=null;G.delay(1,A,A);
A.fireEvent(E,A,1);};});D.src=A.src=C;if(D&&D.complete){D.onload.delay(1);}return A.setProperties(B);},images:function(D,C){C=$merge({onComplete:$empty,onProgress:$empty},C);
if(!D.push){D=[D];}var A=[];var B=0;D.each(function(F){var E=new Asset.image(F,{onload:function(){C.onProgress.call(this,B,D.indexOf(F));B++;if(B==D.length){C.onComplete();
}}});A.push(E);});return new Elements(A);}});var Sortables=new Class({Implements:[Events,Options],options:{snap:4,opacity:1,clone:false,revert:false,handle:false,constrain:false},initialize:function(A,B){this.setOptions(B);
this.elements=[];this.lists=[];this.idle=true;this.addLists($$($(A)||A));if(!this.options.clone){this.options.revert=false;}if(this.options.revert){this.effect=new Fx.Morph(null,$merge({duration:250,link:"cancel"},this.options.revert));
}},attach:function(){this.addLists(this.lists);return this;},detach:function(){this.lists=this.removeLists(this.lists);return this;},addItems:function(){Array.flatten(arguments).each(function(A){this.elements.push(A);
var B=A.retrieve("sortables:start",this.start.bindWithEvent(this,A));(this.options.handle?A.getElement(this.options.handle)||A:A).addEvent("mousedown",B);
},this);return this;},addLists:function(){Array.flatten(arguments).each(function(A){this.lists.push(A);this.addItems(A.getChildren());},this);return this;
},removeItems:function(){var A=[];Array.flatten(arguments).each(function(B){A.push(B);this.elements.erase(B);var C=B.retrieve("sortables:start");(this.options.handle?B.getElement(this.options.handle)||B:B).removeEvent("mousedown",C);
},this);return $$(A);},removeLists:function(){var A=[];Array.flatten(arguments).each(function(B){A.push(B);this.lists.erase(B);this.removeItems(B.getChildren());
},this);return $$(A);},getClone:function(B,A){if(!this.options.clone){return new Element("div").inject(document.body);}if($type(this.options.clone)=="function"){return this.options.clone.call(this,B,A,this.list);
}return A.clone(true).setStyles({margin:"0px",position:"absolute",visibility:"hidden",width:A.getStyle("width")}).inject(this.list).position(A.getPosition(A.getOffsetParent()));
},getDroppables:function(){var A=this.list.getChildren();if(!this.options.constrain){A=this.lists.concat(A).erase(this.list);}return A.erase(this.clone).erase(this.element);
},insert:function(C,B){var A="inside";if(this.lists.contains(B)){this.list=B;this.drag.droppables=this.getDroppables();}else{A=this.element.getAllPrevious().contains(B)?"before":"after";
}this.element.inject(B,A);this.fireEvent("sort",[this.element,this.clone]);},start:function(B,A){if(!this.idle){return ;}this.idle=false;this.element=A;
this.opacity=A.get("opacity");this.list=A.getParent();this.clone=this.getClone(B,A);this.drag=new Drag.Move(this.clone,{snap:this.options.snap,container:this.options.constrain&&this.element.getParent(),droppables:this.getDroppables(),onSnap:function(){B.stop();
this.clone.setStyle("visibility","visible");this.element.set("opacity",this.options.opacity||0);this.fireEvent("start",[this.element,this.clone]);}.bind(this),onEnter:this.insert.bind(this),onCancel:this.reset.bind(this),onComplete:this.end.bind(this)});
this.clone.inject(this.element,"before");this.drag.start(B);},end:function(){this.drag.detach();this.element.set("opacity",this.opacity);if(this.effect){var A=this.element.getStyles("width","height");
var B=this.clone.computePosition(this.element.getPosition(this.clone.offsetParent));this.effect.element=this.clone;this.effect.start({top:B.top,left:B.left,width:A.width,height:A.height,opacity:0.25}).chain(this.reset.bind(this));
}else{this.reset();}},reset:function(){this.idle=true;this.clone.destroy();this.fireEvent("complete",this.element);},serialize:function(){var C=Array.link(arguments,{modifier:Function.type,index:$defined});
var B=this.lists.map(function(D){return D.getChildren().map(C.modifier||function(E){return E.get("id");},this);},this);var A=C.index;if(this.lists.length==1){A=0;
}return $chk(A)&&A>=0&&A<this.lists.length?B[A]:B;}});var Tips=new Class({Implements:[Events,Options],options:{onShow:function(A){A.setStyle("visibility","visible");
},onHide:function(A){A.setStyle("visibility","hidden");},showDelay:100,hideDelay:100,className:null,offsets:{x:16,y:16},fixed:false},initialize:function(){var C=Array.link(arguments,{options:Object.type,elements:$defined});
this.setOptions(C.options||null);this.tip=new Element("div").inject(document.body);if(this.options.className){this.tip.addClass(this.options.className);
}var B=new Element("div",{"class":"tip-top"}).inject(this.tip);this.container=new Element("div",{"class":"tip"}).inject(this.tip);var A=new Element("div",{"class":"tip-bottom"}).inject(this.tip);
this.tip.setStyles({position:"absolute",top:0,left:0,visibility:"hidden"});if(C.elements){this.attach(C.elements);}},attach:function(A){$$(A).each(function(D){var G=D.retrieve("tip:title",D.get("title"));
var F=D.retrieve("tip:text",D.get("rel")||D.get("href"));var E=D.retrieve("tip:enter",this.elementEnter.bindWithEvent(this,D));var C=D.retrieve("tip:leave",this.elementLeave.bindWithEvent(this,D));
D.addEvents({mouseenter:E,mouseleave:C});if(!this.options.fixed){var B=D.retrieve("tip:move",this.elementMove.bindWithEvent(this,D));D.addEvent("mousemove",B);
}D.store("tip:native",D.get("title"));D.erase("title");},this);return this;},detach:function(A){$$(A).each(function(C){C.removeEvent("mouseenter",C.retrieve("tip:enter")||$empty);
C.removeEvent("mouseleave",C.retrieve("tip:leave")||$empty);C.removeEvent("mousemove",C.retrieve("tip:move")||$empty);C.eliminate("tip:enter").eliminate("tip:leave").eliminate("tip:move");
var B=C.retrieve("tip:native");if(B){C.set("title",B);}});return this;},elementEnter:function(B,A){$A(this.container.childNodes).each(Element.dispose);
var D=A.retrieve("tip:title");if(D){this.titleElement=new Element("div",{"class":"tip-title"}).inject(this.container);this.fill(this.titleElement,D);}var C=A.retrieve("tip:text");
if(C){this.textElement=new Element("div",{"class":"tip-text"}).inject(this.container);this.fill(this.textElement,C);}this.timer=$clear(this.timer);this.timer=this.show.delay(this.options.showDelay,this);
this.position((!this.options.fixed)?B:{page:A.getPosition()});},elementLeave:function(A){$clear(this.timer);this.timer=this.hide.delay(this.options.hideDelay,this);
},elementMove:function(A){this.position(A);},position:function(D){var B=window.getSize(),A=window.getScroll();var E={x:this.tip.offsetWidth,y:this.tip.offsetHeight};
var C={x:"left",y:"top"};for(var F in C){var G=D.page[F]+this.options.offsets[F];if((G+E[F]-A[F])>B[F]){G=D.page[F]-this.options.offsets[F]-E[F];}this.tip.setStyle(C[F],G);
}},fill:function(A,B){(typeof B=="string")?A.set("html",B):A.adopt(B);},show:function(){this.fireEvent("show",this.tip);},hide:function(){this.fireEvent("hide",this.tip);
}});var SmoothScroll=new Class({Extends:Fx.Scroll,initialize:function(B,C){C=C||document;var E=C.getDocument(),D=C.getWindow();this.parent(E,B);this.links=(this.options.links)?$$(this.options.links):$$(E.links);
var A=D.location.href.match(/^[^#]*/)[0]+"#";this.links.each(function(G){if(G.href.indexOf(A)!=0){return ;}var F=G.href.substr(A.length);if(F&&$(F)){this.useLink(G,F);
}},this);if(!Browser.Engine.webkit419){this.addEvent("complete",function(){D.location.hash=this.anchor;},true);}},useLink:function(B,A){B.addEvent("click",function(C){this.anchor=A;
this.toElement(A);C.stop();}.bind(this));}});var Slider=new Class({Implements:[Events,Options],options:{onTick:function(A){if(this.options.snap){A=this.toPosition(this.step);
}this.knob.setStyle(this.property,A);},snap:false,offset:0,range:false,wheel:false,steps:100,mode:"horizontal"},initialize:function(E,A,D){this.setOptions(D);
this.element=$(E);this.knob=$(A);this.previousChange=this.previousEnd=this.step=-1;this.element.addEvent("mousedown",this.clickedElement.bind(this));if(this.options.wheel){this.element.addEvent("mousewheel",this.scrolledElement.bindWithEvent(this));
}var F,B={},C={x:false,y:false};switch(this.options.mode){case"vertical":this.axis="y";this.property="top";F="offsetHeight";break;case"horizontal":this.axis="x";
this.property="left";F="offsetWidth";}this.half=this.knob[F]/2;this.full=this.element[F]-this.knob[F]+(this.options.offset*2);this.min=$chk(this.options.range[0])?this.options.range[0]:0;
this.max=$chk(this.options.range[1])?this.options.range[1]:this.options.steps;this.range=this.max-this.min;this.steps=this.options.steps||this.full;this.stepSize=Math.abs(this.range)/this.steps;
this.stepWidth=this.stepSize*this.full/Math.abs(this.range);this.knob.setStyle("position","relative").setStyle(this.property,-this.options.offset);C[this.axis]=this.property;
B[this.axis]=[-this.options.offset,this.full-this.options.offset];this.drag=new Drag(this.knob,{snap:0,limit:B,modifiers:C,onDrag:this.draggedKnob.bind(this),onStart:this.draggedKnob.bind(this),onComplete:function(){this.draggedKnob();
this.end();}.bind(this)});if(this.options.snap){this.drag.options.grid=Math.ceil(this.stepWidth);this.drag.options.limit[this.axis][1]=this.full;}},set:function(A){if(!((this.range>0)^(A<this.min))){A=this.min;
}if(!((this.range>0)^(A>this.max))){A=this.max;}this.step=Math.round(A);this.checkStep();this.end();this.fireEvent("tick",this.toPosition(this.step));return this;
},clickedElement:function(C){var B=this.range<0?-1:1;var A=C.page[this.axis]-this.element.getPosition()[this.axis]-this.half;A=A.limit(-this.options.offset,this.full-this.options.offset);
this.step=Math.round(this.min+B*this.toStep(A));this.checkStep();this.end();this.fireEvent("tick",A);},scrolledElement:function(A){var B=(this.options.mode=="horizontal")?(A.wheel<0):(A.wheel>0);
this.set(B?this.step-this.stepSize:this.step+this.stepSize);A.stop();},draggedKnob:function(){var B=this.range<0?-1:1;var A=this.drag.value.now[this.axis];
A=A.limit(-this.options.offset,this.full-this.options.offset);this.step=Math.round(this.min+B*this.toStep(A));this.checkStep();},checkStep:function(){if(this.previousChange!=this.step){this.previousChange=this.step;
this.fireEvent("change",this.step);}},end:function(){if(this.previousEnd!==this.step){this.previousEnd=this.step;this.fireEvent("complete",this.step+"");
}},toStep:function(A){var B=(A+this.options.offset)*this.stepSize/this.full*this.steps;return this.options.steps?Math.round(B-=B%this.stepSize):B;},toPosition:function(A){return(this.full*Math.abs(this.min-A))/(this.steps*this.stepSize)-this.options.offset;
}});var Scroller=new Class({Implements:[Events,Options],options:{area:20,velocity:1,onChange:function(A,B){this.element.scrollTo(A,B);}},initialize:function(B,A){this.setOptions(A);
this.element=$(B);this.listener=($type(this.element)!="element")?$(this.element.getDocument().body):this.element;this.timer=null;this.coord=this.getCoords.bind(this);
},start:function(){this.listener.addEvent("mousemove",this.coord);},stop:function(){this.listener.removeEvent("mousemove",this.coord);this.timer=$clear(this.timer);
},getCoords:function(A){this.page=(this.listener.get("tag")=="body")?A.client:A.page;if(!this.timer){this.timer=this.scroll.periodical(50,this);}},scroll:function(){var B=this.element.getSize(),A=this.element.getScroll(),E=this.element.getPosition(),D={x:0,y:0};
for(var C in this.page){if(this.page[C]<(this.options.area+E[C])&&A[C]!=0){D[C]=(this.page[C]-this.options.area-E[C])*this.options.velocity;}else{if(this.page[C]+this.options.area>(B[C]+E[C])&&B[C]+B[C]!=A[C]){D[C]=(this.page[C]-B[C]+this.options.area-E[C])*this.options.velocity;
}}}if(D.y||D.x){this.fireEvent("change",[A.x+D.x,A.y+D.y]);}}});var Accordion=new Class({Extends:Fx.Elements,options:{display:0,show:false,height:true,width:false,opacity:true,fixedHeight:false,fixedWidth:false,wait:false,alwaysHide:false},initialize:function(){var C=Array.link(arguments,{container:Element.type,options:Object.type,togglers:$defined,elements:$defined});
this.parent(C.elements,C.options);this.togglers=$$(C.togglers);this.container=$(C.container);this.previous=-1;if(this.options.alwaysHide){this.options.wait=true;
}if($chk(this.options.show)){this.options.display=false;this.previous=this.options.show;}if(this.options.start){this.options.display=false;this.options.show=false;
}this.effects={};if(this.options.opacity){this.effects.opacity="fullOpacity";}if(this.options.width){this.effects.width=this.options.fixedWidth?"fullWidth":"offsetWidth";
}if(this.options.height){this.effects.height=this.options.fixedHeight?"fullHeight":"scrollHeight";}for(var B=0,A=this.togglers.length;B<A;B++){this.addSection(this.togglers[B],this.elements[B]);
}this.elements.each(function(E,D){if(this.options.show===D){this.fireEvent("active",[this.togglers[D],E]);}else{for(var F in this.effects){E.setStyle(F,0);
}}},this);if($chk(this.options.display)){this.display(this.options.display);}},addSection:function(E,C,G){E=$(E);C=$(C);var F=this.togglers.contains(E);
var B=this.togglers.length;this.togglers.include(E);this.elements.include(C);if(B&&(!F||G)){G=$pick(G,B-1);E.inject(this.togglers[G],"before");C.inject(E,"after");
}else{if(this.container&&!F){E.inject(this.container);C.inject(this.container);}}var A=this.togglers.indexOf(E);E.addEvent("click",this.display.bind(this,A));
if(this.options.height){C.setStyles({"padding-top":0,"border-top":"none","padding-bottom":0,"border-bottom":"none"});}if(this.options.width){C.setStyles({"padding-left":0,"border-left":"none","padding-right":0,"border-right":"none"});
}C.fullOpacity=1;if(this.options.fixedWidth){C.fullWidth=this.options.fixedWidth;}if(this.options.fixedHeight){C.fullHeight=this.options.fixedHeight;}C.setStyle("overflow","hidden");
if(!F){for(var D in this.effects){C.setStyle(D,0);}}return this;},display:function(A){A=($type(A)=="element")?this.elements.indexOf(A):A;if((this.timer&&this.options.wait)||(A===this.previous&&!this.options.alwaysHide)){return this;
}this.previous=A;var B={};this.elements.each(function(E,D){B[D]={};var C=(D!=A)||(this.options.alwaysHide&&(E.offsetHeight>0));this.fireEvent(C?"background":"active",[this.togglers[D],E]);
for(var F in this.effects){B[D][F]=C?0:E[this.effects[F]];}},this);return this.start(B);}});

View File

@@ -1,15 +0,0 @@
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
* Used for replication support
*
* @version $Id$
*/
function divShowHideFunc(ahref, id) {
$(ahref).addEvent('click', function() {
if ($(id).getStyle('display')=="none")
$(id).tween('display', 'block');
else
$(id).tween('display', 'none');
});
}

View File

@@ -1,174 +0,0 @@
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
* function used in or for navigation frame
*/
/**
* init
*/
var today = new Date();
var expires = new Date(today.getTime() + (56 * 86400000));
var pma_navi_width;
var pma_saveframesize_timeout = null;
/**
* opens/closes (hides/shows) tree elements
*
* @param string id id of the element in the DOM
* @param boolean only_open do not close/hide element
*/
function toggle(id, only_open) {
var el = document.getElementById('subel' + id);
if (! el) {
return false;
}
var img = document.getElementById('el' + id + 'Img');
if (el.style.display == 'none' || only_open) {
el.style.display = '';
if (img) {
img.src = image_minus;
img.alt = '-';
}
} else {
el.style.display = 'none';
if (img) {
img.src = image_plus;
img.alt = '+';
}
}
return true;
}
function PMA_callFunctionDelayed(myfunction, delay)
{
if (typeof pma_saveframesize_timeout == "number") {
window.clearTimeout(pma_saveframesize_timeout);
pma_saveframesize_timeout = null;
}
}
/**
* saves current navigation frame width in a cookie
* usally called on resize of the navigation frame
*/
function PMA_saveFrameSizeReal()
{
if (parent.text_dir == 'ltr') {
pma_navi_width = parseInt(parent.document.getElementById('mainFrameset').cols)
} else {
pma_navi_width = parent.document.getElementById('mainFrameset').cols.match(/\d+$/)
}
if ((pma_navi_width > 0) && (pma_navi_width != PMA_getCookie('pma_navi_width'))) {
PMA_setCookie('pma_navi_width', pma_navi_width, expires);
}
}
/**
* calls PMA_saveFrameSizeReal with delay
*/
function PMA_saveFrameSize()
{
//alert(typeof(pma_saveframesize_timeout) + ' : ' + pma_saveframesize_timeout);
if (typeof pma_saveframesize_timeout == "number") {
window.clearTimeout(pma_saveframesize_timeout);
pma_saveframesize_timeout = null;
}
pma_saveframesize_timeout = window.setTimeout(PMA_saveFrameSizeReal, 2000);
}
/**
* sets navigation frame width to the value stored in the cookie
* usally called on document load
*/
function PMA_setFrameSize()
{
pma_navi_width = PMA_getCookie('pma_navi_width');
//alert('from cookie: ' + typeof(pma_navi_width) + ' : ' + pma_navi_width);
if (pma_navi_width != null) {
if (parent.text_dir == 'ltr') {
parent.document.getElementById('mainFrameset').cols = pma_navi_width + ',*';
} else {
parent.document.getElementById('mainFrameset').cols = '*,' + pma_navi_width;
}
//alert('framesize set');
}
}
/**
* retrieves a named value from cookie
*
* @param string name name of the value to retrieve
* @return string value value for the given name from cookie
*/
function PMA_getCookie(name) {
var start = document.cookie.indexOf(name + "=");
var len = start + name.length + 1;
if ((!start) && (name != document.cookie.substring(0, name.length))) {
return null;
}
if (start == -1) {
return null;
}
var end = document.cookie.indexOf(";", len);
if (end == -1) {
end = document.cookie.length;
}
return unescape(document.cookie.substring(len,end));
}
/**
* stores a named value into cookie
*
* @param string name name of value
* @param string value value to be stored
* @param Date expires expire time
* @param string path
* @param string domain
* @param boolean secure
*/
function PMA_setCookie(name, value, expires, path, domain, secure) {
document.cookie = name + "=" + escape(value) +
( (expires) ? ";expires=" + expires.toGMTString() : "") +
( (path) ? ";path=" + path : "") +
( (domain) ? ";domain=" + domain : "") +
( (secure) ? ";secure" : "");
}
/**
* hide all LI elements with second A tag which doesn`t contain requested value
*
* @param string value requested value
*
*/
function fast_filter(value){
var oTarget = document.getElementById("subel0");
if(!oTarget || !document.getElementById('fast_filter')) return false;
if(value!=document.getElementById('fast_filter').value) return false;
document.getElementById('fast_filter').disabled=true;
for(var iCh in oTarget.childNodes){
var oCh = oTarget.childNodes.item(iCh);
if(!oCh) continue;
if(oCh.nodeName=="LI"){
if(value=="") oCh.style.display="";
else{
var i=0;
for(var iA in oCh.childNodes){
var oA = oCh.childNodes.item(iA);
if(!oA) continue;
if(oA.nodeName=="A"){
if(i==0) i = 1;
else{
if(oA.innerHTML.indexOf(value)==-1) oCh.style.display="none";
else oCh.style.display="";
}
}
}
}
}
}
document.getElementById('fast_filter').disabled=false;
}

View File

@@ -1,42 +0,0 @@
function PMA_queryAutoCommit()
{
document.getElementById('sqlqueryform').target = window.opener.frame_content.name;
document.getElementById('sqlqueryform').submit();
return;
}
function PMA_querywindowCommit(tab)
{
document.getElementById('hiddenqueryform').querydisplay_tab.value = tab;
document.getElementById('hiddenqueryform').submit();
return false;
}
function PMA_querywindowSetFocus()
{
document.getElementById('sqlquery').focus();
}
function PMA_querywindowResize()
{
// for Gecko
if (typeof(self.sizeToContent) == 'function') {
self.sizeToContent();
//self.scrollbars.visible = false;
// give some more space ... to prevent 'fli(pp/ck)ing'
self.resizeBy(10, 50);
return;
}
// for IE, Opera
if (document.getElementById && typeof(document.getElementById('querywindowcontainer')) != 'undefined') {
// get content size
var newWidth = document.getElementById('querywindowcontainer').offsetWidth;
var newHeight = document.getElementById('querywindowcontainer').offsetHeight;
// set size to contentsize
// plus some offset for scrollbars, borders, statusbar, menus ...
self.resizeTo(newWidth + 45, newHeight + 75);
}
}

View File

@@ -1,95 +0,0 @@
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
* function used in server privilege pages
*
* @version $Id$
*/
/**
* Validates the password field in a form
*
* @uses PMA_messages['strPasswordEmpty']
* @uses PMA_messages['strPasswordNotSame']
* @param object the form
* @return boolean whether the field value is valid or not
*/
function checkPassword(the_form)
{
// Did the user select 'no password'?
if (typeof(the_form.elements['nopass']) != 'undefined'
&& the_form.elements['nopass'][0].checked) {
return true;
} else if (typeof(the_form.elements['pred_password']) != 'undefined'
&& (the_form.elements['pred_password'].value == 'none'
|| the_form.elements['pred_password'].value == 'keep')) {
return true;
}
var password = the_form.elements['pma_pw'];
var password_repeat = the_form.elements['pma_pw2'];
var alert_msg = false;
if (password.value == '') {
alert_msg = PMA_messages['strPasswordEmpty'];
} else if (password.value != password_repeat.value) {
alert_msg = PMA_messages['strPasswordNotSame'];
}
if (alert_msg) {
alert(alert_msg);
password.value = '';
password_repeat.value = '';
password.focus();
return false;
}
return true;
} // end of the 'checkPassword()' function
/**
* Validates the "add a user" form
*
* @return boolean whether the form is validated or not
*/
function checkAddUser(the_form)
{
if (the_form.elements['pred_hostname'].value == 'userdefined' && the_form.elements['hostname'].value == '') {
alert(PMA_messages['strHostEmpty']);
the_form.elements['hostname'].focus();
return false;
}
if (the_form.elements['pred_username'].value == 'userdefined' && the_form.elements['username'].value == '') {
alert(PMA_messages['strUserEmpty']);
the_form.elements['username'].focus();
return false;
}
return checkPassword(the_form);
} // end of the 'checkAddUser()' function
/**
* Generate a new password and copy it to the password input areas
*
* @param object the form that holds the password fields
*
* @return boolean always true
*/
function suggestPassword(passwd_form) {
// restrict the password to just letters and numbers to avoid problems:
// "editors and viewers regard the password as multiple words and
// things like double click no longer work"
var pwchars = "abcdefhjmnpqrstuvwxyz23456789ABCDEFGHJKLMNPQRSTUVWYXZ";
var passwordlength = 16; // do we want that to be dynamic? no, keep it simple :)
var passwd = passwd_form.generated_pw;
passwd.value = '';
for ( i = 0; i < passwordlength; i++ ) {
passwd.value += pwchars.charAt( Math.floor( Math.random() * pwchars.length ) )
}
passwd_form.text_pma_pw.value = passwd.value;
passwd_form.text_pma_pw2.value = passwd.value;
return true;
}

View File

@@ -1,358 +0,0 @@
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
* function used in table data manipulation pages
*
* @version $Id$
*/
/**
* Modify from controls when the "NULL" checkbox is selected
*
* @param string the MySQL field type
* @param string the urlencoded field name - OBSOLETE
* @param string the md5 hashed field name
* @param string the multi_edit row sequence number
*
* @return boolean always true
*/
function nullify(theType, urlField, md5Field, multi_edit)
{
var rowForm = document.forms['insertForm'];
if (typeof(rowForm.elements['funcs' + multi_edit + '[' + md5Field + ']']) != 'undefined') {
rowForm.elements['funcs' + multi_edit + '[' + md5Field + ']'].selectedIndex = -1;
}
// "SET" field , "ENUM" field with more than 20 characters
// or foreign key field (drop-down)
if (theType == 1 || theType == 3 || theType == 4) {
rowForm.elements['field_' + md5Field + multi_edit + '[]'].selectedIndex = -1;
}
// Other "ENUM" field
else if (theType == 2) {
var elts = rowForm.elements['field_' + md5Field + multi_edit + '[]'];
// when there is just one option in ENUM:
if (elts.checked) {
elts.checked = false;
} else {
var elts_cnt = elts.length;
for (var i = 0; i < elts_cnt; i++ ) {
elts[i].checked = false;
} // end for
} // end if
}
// foreign key field (with browsing icon for foreign values)
else if (theType == 6) {
rowForm.elements['field_' + md5Field + multi_edit + '[]'].value = '';
}
// Other field types
else /*if (theType == 5)*/ {
rowForm.elements['fields' + multi_edit + '[' + md5Field + ']'].value = '';
} // end if... else if... else
return true;
} // end of the 'nullify()' function
/**
* Unchecks the "NULL" control when a function has been selected or a value
* entered
*
* @param string the urlencoded field name
* @param string the multi_edit row sequence number
*
* @return boolean always true
*/
function unNullify(urlField, multi_edit)
{
var rowForm = document.forms['insertForm'];
if (typeof(rowForm.elements['fields_null[multi_edit][' + multi_edit + '][' + urlField + ']']) != 'undefined') {
rowForm.elements['fields_null[multi_edit][' + multi_edit + '][' + urlField + ']'].checked = false
} // end if
if (typeof(rowForm.elements['insert_ignore_' + multi_edit]) != 'undefined') {
rowForm.elements['insert_ignore_' + multi_edit].checked = false
} // end if
return true;
} // end of the 'unNullify()' function
var day;
var month;
var year;
var hour;
var minute;
var second;
var clock_set = 0;
/**
* Opens calendar window.
*
* @param string calendar.php parameters
* @param string form name
* @param string id of field name
* @param string edit type - date/timestamp
* @param string id of the corresponding checkbox for NULL
*/
function openCalendar(params, form, field, type, fieldNull) {
window.open("./calendar.php?" + params, "calendar", "width=400,height=200,status=yes");
dateField = eval("document." + form + "." + field);
dateType = type;
if (fieldNull != '') {
dateFieldNull = eval("document." + form + "." + fieldNull);
}
}
/**
* Formats number to two digits.
*
* @param int number to format.
* @param string type of number
*/
function formatNum2(i, valtype) {
f = (i < 10 ? '0' : '') + i;
if (valtype && valtype != '') {
switch(valtype) {
case 'month':
f = (f > 12 ? 12 : f);
break;
case 'day':
f = (f > 31 ? 31 : f);
break;
case 'hour':
f = (f > 24 ? 24 : f);
break;
default:
case 'second':
case 'minute':
f = (f > 59 ? 59 : f);
break;
}
}
return f;
}
/**
* Formats number to two digits.
*
* @param int number to format.
* @param int default value
* @param string type of number
*/
function formatNum2d(i, default_v, valtype) {
i = parseInt(i, 10);
if (isNaN(i)) return default_v;
return formatNum2(i, valtype)
}
/**
* Formats number to four digits.
*
* @param int number to format.
*/
function formatNum4(i) {
i = parseInt(i, 10)
return (i < 1000 ? i < 100 ? i < 10 ? '000' : '00' : '0' : '') + i;
}
/**
* Initializes calendar window.
*/
function initCalendar() {
if (!year && !month && !day) {
/* Called for first time */
if (window.opener.dateField.value) {
value = window.opener.dateField.value;
if (window.opener.dateType == 'datetime' || window.opener.dateType == 'date') {
if (window.opener.dateType == 'datetime') {
parts = value.split(' ');
value = parts[0];
if (parts[1]) {
time = parts[1].split(':');
hour = parseInt(time[0],10);
minute = parseInt(time[1],10);
second = parseInt(time[2],10);
}
}
date = value.split("-");
day = parseInt(date[2],10);
month = parseInt(date[1],10) - 1;
year = parseInt(date[0],10);
} else {
year = parseInt(value.substr(0,4),10);
month = parseInt(value.substr(4,2),10) - 1;
day = parseInt(value.substr(6,2),10);
hour = parseInt(value.substr(8,2),10);
minute = parseInt(value.substr(10,2),10);
second = parseInt(value.substr(12,2),10);
}
}
if (isNaN(year) || isNaN(month) || isNaN(day) || day == 0) {
dt = new Date();
year = dt.getFullYear();
month = dt.getMonth();
day = dt.getDate();
}
if (isNaN(hour) || isNaN(minute) || isNaN(second)) {
dt = new Date();
hour = dt.getHours();
minute = dt.getMinutes();
second = dt.getSeconds();
}
} else {
/* Moving in calendar */
if (month > 11) {
month = 0;
year++;
}
if (month < 0) {
month = 11;
year--;
}
}
if (document.getElementById) {
cnt = document.getElementById("calendar_data");
} else if (document.all) {
cnt = document.all["calendar_data"];
}
cnt.innerHTML = "";
str = ""
//heading table
str += '<table class="calendar"><tr><th width="50%">';
str += '<form method="NONE" onsubmit="return 0">';
str += '<a href="javascript:month--; initCalendar();">&laquo;</a> ';
str += '<select id="select_month" name="monthsel" onchange="month = parseInt(document.getElementById(\'select_month\').value); initCalendar();">';
for (i =0; i < 12; i++) {
if (i == month) selected = ' selected="selected"';
else selected = '';
str += '<option value="' + i + '" ' + selected + '>' + month_names[i] + '</option>';
}
str += '</select>';
str += ' <a href="javascript:month++; initCalendar();">&raquo;</a>';
str += '</form>';
str += '</th><th width="50%">';
str += '<form method="NONE" onsubmit="return 0">';
str += '<a href="javascript:year--; initCalendar();">&laquo;</a> ';
str += '<select id="select_year" name="yearsel" onchange="year = parseInt(document.getElementById(\'select_year\').value); initCalendar();">';
for (i = year - 25; i < year + 25; i++) {
if (i == year) selected = ' selected="selected"';
else selected = '';
str += '<option value="' + i + '" ' + selected + '>' + i + '</option>';
}
str += '</select>';
str += ' <a href="javascript:year++; initCalendar();">&raquo;</a>';
str += '</form>';
str += '</th></tr></table>';
str += '<table class="calendar"><tr>';
for (i = 0; i < 7; i++) {
str += "<th>" + day_names[i] + "</th>";
}
str += "</tr>";
var firstDay = new Date(year, month, 1).getDay();
var lastDay = new Date(year, month + 1, 0).getDate();
str += "<tr>";
dayInWeek = 0;
for (i = 0; i < firstDay; i++) {
str += "<td>&nbsp;</td>";
dayInWeek++;
}
for (i = 1; i <= lastDay; i++) {
if (dayInWeek == 7) {
str += "</tr><tr>";
dayInWeek = 0;
}
dispmonth = 1 + month;
if (window.opener.dateType == 'datetime' || window.opener.dateType == 'date') {
actVal = "" + formatNum4(year) + "-" + formatNum2(dispmonth, 'month') + "-" + formatNum2(i, 'day');
} else {
actVal = "" + formatNum4(year) + formatNum2(dispmonth, 'month') + formatNum2(i, 'day');
}
if (i == day) {
style = ' class="selected"';
current_date = actVal;
} else {
style = '';
}
str += "<td" + style + "><a href=\"javascript:returnDate('" + actVal + "');\">" + i + "</a></td>"
dayInWeek++;
}
for (i = dayInWeek; i < 7; i++) {
str += "<td>&nbsp;</td>";
}
str += "</tr></table>";
cnt.innerHTML = str;
// Should we handle time also?
if (window.opener.dateType != 'date' && !clock_set) {
if (document.getElementById) {
cnt = document.getElementById("clock_data");
} else if (document.all) {
cnt = document.all["clock_data"];
}
str = '';
init_hour = hour;
init_minute = minute;
init_second = second;
str += '<fieldset>';
str += '<form method="NONE" class="clock" onsubmit="returnDate(\'' + current_date + '\')">';
str += '<input id="hour" type="text" size="2" maxlength="2" onblur="this.value=formatNum2d(this.value, init_hour, \'hour\'); init_hour = this.value;" value="' + formatNum2(hour, 'hour') + '" />:';
str += '<input id="minute" type="text" size="2" maxlength="2" onblur="this.value=formatNum2d(this.value, init_minute, \'minute\'); init_minute = this.value;" value="' + formatNum2(minute, 'minute') + '" />:';
str += '<input id="second" type="text" size="2" maxlength="2" onblur="this.value=formatNum2d(this.value, init_second, \'second\'); init_second = this.value;" value="' + formatNum2(second, 'second') + '" />';
str += '&nbsp;&nbsp;';
str += '<input type="submit" value="' + submit_text + '"/>';
str += '</form>';
str += '</fieldset>';
cnt.innerHTML = str;
clock_set = 1;
}
}
/**
* Returns date from calendar.
*
* @param string date text
*/
function returnDate(d) {
txt = d;
if (window.opener.dateType != 'date') {
// need to get time
h = parseInt(document.getElementById('hour').value,10);
m = parseInt(document.getElementById('minute').value,10);
s = parseInt(document.getElementById('second').value,10);
if (window.opener.dateType == 'datetime') {
txt += ' ' + formatNum2(h, 'hour') + ':' + formatNum2(m, 'minute') + ':' + formatNum2(s, 'second');
} else {
// timestamp
txt += formatNum2(h, 'hour') + formatNum2(m, 'minute') + formatNum2(s, 'second');
}
}
window.opener.dateField.value = txt;
if (typeof(window.opener.dateFieldNull) != 'undefined') {
window.opener.dateFieldNull.checked = false;
}
window.close();
}

View File

@@ -1,212 +0,0 @@
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
* Displays the Tooltips (hints), if we have some
* 2005-01-20 added by Michael Keck (mkkeck)
*
* @version $Id$
*/
/**
*
*/
var ttXpos = 0, ttYpos = 0;
var ttXadd = 10, ttYadd = -10;
var ttDisplay = 0, ttHoldIt = 0;
// Check if browser does support dynamic content and dhtml
if (document.getElementById) {
// DOM-compatible browsers
var ttDOM = 1;
} else {
// the old Netscape 4
var ttNS4 = (document.layers) ? 1 : 0;
// browser wich uses document.all
var ttIE4 = (document.all) ? 1 : 0;
}
var myTooltipContainer = null;
/**
* initialize tooltip
*/
function PMA_TT_init()
{
// get all 'light bubbles' on page
var tooltip_icons = window.parent.getElementsByClassName('footnotemarker', document, 'sup');
var tooltip_count = tooltip_icons.length;
if (tooltip_count < 1) {
// no 'bubbles' found
return;
}
// insert tooltip container
myTooltipContainer = document.createElement("div");
myTooltipContainer.id = 'TooltipContainer';
window.parent.addEvent(myTooltipContainer, 'mouseover', holdTooltip);
window.parent.addEvent(myTooltipContainer, 'mouseout', swapTooltip);
document.body.appendChild(myTooltipContainer);
// capture mouse-events
for (i = 0; i < tooltip_count; i++) {
window.parent.addEvent(tooltip_icons[i], 'mousemove', mouseMove);
window.parent.addEvent(tooltip_icons[i], 'mouseover', pmaTooltip);
window.parent.addEvent(tooltip_icons[i], 'mouseout', swapTooltip);
}
}
/**
* init the tooltip and write the text into it
*
* @param string theText tooltip content
*/
function PMA_TT_setText(theText)
{
if (ttDOM || ttIE4) { // document.getEelementById || document.all
myTooltipContainer.innerHTML = ""; // we should empty it first
myTooltipContainer.innerHTML = theText;
} else if (ttNS4) { // document.layers
var layerNS4 = myTooltipContainer.document;
layerNS4.write(theText);
layerNS4.close();
}
}
/**
* @var integer
*/
var ttTimerID = 0;
/**
* swap the Tooltip // show and hide
*
* @param boolean stat view status
*/
function swapTooltip(stat)
{
if (ttHoldIt != 1) {
if (stat == 'true') {
showTooltip(true);
} else if (ttDisplay) {
ttTimerID = setTimeout("showTooltip(false);", 500);
} else {
showTooltip(true);
}
} else {
if (ttTimerID) {
clearTimeout(ttTimerID);
ttTimerID = 0;
}
showTooltip(true);
}
}
/**
* show / hide the Tooltip
*
* @param boolean stat view status
*/
function showTooltip(stat)
{
if (stat == false) {
if (ttNS4)
myTooltipContainer.visibility = "hide";
else
myTooltipContainer.style.visibility = "hidden";
ttDisplay = 0;
} else {
if (ttNS4)
myTooltipContainer.visibility = "show";
else
myTooltipContainer.style.visibility = "visible";
ttDisplay = 1;
}
}
/**
* hold it, if we create or move the mouse over the tooltip
*/
function holdTooltip()
{
ttHoldIt = 1;
swapTooltip('true');
ttHoldIt = 0;
}
/**
* move the tooltip to mouse position
*
* @param integer posX horiz. position
* @param integer posY vert. position
*/
function moveTooltip(posX, posY)
{
if (ttDOM || ttIE4) {
myTooltipContainer.style.left = posX + "px";
myTooltipContainer.style.top = posY + "px";
} else if (ttNS4) {
myTooltipContainer.left = posX;
myTooltipContainer.top = posY;
}
}
/**
* build the tooltip
* usally called from eventhandler
*
* @param string theText tooltip content
*/
function pmaTooltip(e)
{
var theText = document.getElementById('footnote_' + this.innerHTML).innerHTML;
var plusX = 0, plusY = 0, docX = 0, docY = 0;
var divHeight = myTooltipContainer.clientHeight;
var divWidth = myTooltipContainer.clientWidth;
if (navigator.appName.indexOf("Explorer") != -1) {
// IE ...
if (document.documentElement && document.documentElement.scrollTop) {
plusX = document.documentElement.scrollLeft;
plusY = document.documentElement.scrollTop;
docX = document.documentElement.offsetWidth + plusX;
docY = document.documentElement.offsetHeight + plusY;
} else {
plusX = document.body.scrollLeft;
plusY = document.body.scrollTop;
docX = document.body.offsetWidth + plusX;
docY = document.body.offsetHeight + plusY;
}
} else {
docX = document.body.clientWidth;
docY = document.body.clientHeight;
}
ttXpos = ttXpos + plusX;
ttYpos = ttYpos + plusY;
if ((ttXpos + divWidth) > docX)
ttXpos = ttXpos - (divWidth + (ttXadd * 2));
if ((ttYpos + divHeight) > docY)
ttYpos = ttYpos - (divHeight + (ttYadd * 2));
PMA_TT_setText(theText);
moveTooltip((ttXpos + ttXadd), (ttYpos + ttYadd));
holdTooltip();
}
/**
* register mouse moves
*
* @param event e
*/
function mouseMove(e) {
if ( typeof( event ) != 'undefined' ) {
ttXpos = event.x;
ttYpos = event.y;
} else {
ttXpos = e.pageX;
ttYpos = e.pageY;
}
moveTooltip((ttXpos + ttXadd), (ttYpos + ttYadd));
}

View File

@@ -1,32 +0,0 @@
#!/bin/bash
# $Id$
#
# Shell script that adds a message to all message files (Lem9)
#
# Example: add_message.sh '$strNewMessage' 'new message contents'
#
if [ $# -ne 2 ] ; then
echo "usage: add_message.sh '\$strNewMessage' 'new message contents'"
exit 1
fi
for file in *.inc.php
do
echo $file " "
grep -v '?>' ${file} > ${file}.new
case $file in
english*)
echo "$1 = '"$2"';" >> ${file}.new
;;
*)
echo "$1 = '"$2"'; //to translate" >> ${file}.new
;;
esac
echo "?>" >> ${file}.new
rm $file
mv ${file}.new $file
done
./sort_lang.sh english*
echo " "
echo "Message added to all message files (including english)"

View File

@@ -1,32 +0,0 @@
#!/bin/bash
# $Id$
#
# Shell script that adds a message file to all message files
# adding "//to translate" on each line
#
# Example: add_message_file.sh xxx
#
if [ $# -ne 1 ] ; then
echo "usage: add_message_file.sh filename"
exit 1
fi
for file in *.inc.php
do
echo $file " "
grep -v '?>' ${file} > ${file}.new
case $file in
english*)
sed -n 's/\(.*\);/\1;/p' $1 >> ${file}.new
;;
*)
sed -n 's/\(.*\);/\1; \/\/to translate/p' $1 >> ${file}.new
;;
esac
echo "?>" >> ${file}.new
rm $file
mv ${file}.new $file
done
./sort_lang.sh english*
echo " "
echo "Messages added to add message files (including english)"

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -1,62 +0,0 @@
#!/bin/sh
# $Id$
##
# Shell script to check that all language files are syncronized
# Catches duplicate/missing strings
#
# Robin Johnson <robbat2@users.sourceforge.net>
# August 9, 2002
##
MASTER="english-utf-8.inc.php"
TMPDIR="tmp-check"
FILEPAT="*.inc.php"
STRINGMATCH='^[[:space:]]*\$[[:alnum:]_]+[[:blank:]]+='
IGNOREMATCH='strEncto|strKanjiEncodConvert|strXkana|allow_recoding|doc_lang'
if [ "`which diffstat`" = "" ] ; then
echo 'You need diffstat to use this!'
exit 1
fi
rm -rf $TMPDIR
mkdir -p $TMPDIR
# Build the list of variables in each file
echo "Building data"
for f in $FILEPAT;
do
awk "/$STRINGMATCH/ && ! /$IGNOREMATCH/ { print \$1 }" $f | sort > $TMPDIR/$f
done
# Build the diff files used for checking
# And if there are no differences, delete the empty files
echo "Comparing data"
for f in $FILEPAT;
do
if [ ! $MASTER = $f ]; then
if diff -u $TMPDIR/$MASTER $TMPDIR/$f >$TMPDIR/$f.diff ; then
rm -f $TMPDIR/$f.diff $TMPDIR/$f
fi
fi
done
# Cleanup
rm -f $TMPDIR/$MASTER
# Build the nice difference table
echo "Differences"
diffstat -f 0 $TMPDIR/*.diff >$TMPDIR/diffstat 2>/dev/null
echo "Dupe Miss Filename"
head -n -1 $TMPDIR/diffstat | \
while read filename sep change add plus sub minus edits exclaim;
do
echo "$add $sub $filename";
done
echo
echo "Dupe = Duplicate Variables"
echo "Miss = Missing Variables"
echo "For exact problem listings, look in the $TMPDIR/ directory"
echo "Please remember to remove '$TMPDIR/' once you are done"

Some files were not shown because too many files have changed in this diff Show More